hello world

          隨筆 - 2, 文章 - 63, 評論 - 0, 引用 - 0
          數(shù)據(jù)加載中……

          Linux下搭建 PPPoE Server 問題總結(jié)

          注:本記錄適用于Debian系列Linux操作系統(tǒng)。在Ubuntu 14.10 以及 Linux Mint 17下驗證成功。

          在綜合課程設(shè)計的搭建 PPPoE Server 環(huán)節(jié)中,本人以及組員碰到各種問題。在此總結(jié),以備日后需要。

          搭建過程

          安裝和配置PPPoE程序

          PPPoE程序在Debian操作系統(tǒng)中應(yīng)該是自帶的。可以使用 pppoe-server -h 命令查看版本。可以使用 sudo apt-cache search pppoe 查找相關(guān)軟件。

          配置文件存放在 /etc/ppp 文件夾中。先設(shè)置 options 文件:

          1. 設(shè)置 ms-dns的值。要設(shè)置成一個可以使用的DNS服務(wù)器的IP地址,比如 114.114.114.114 這是Windows主機撥號連接時會分配的DNS地址。
          2. 注釋掉+pap,取消-pap的注釋,這表示不使用pap認(rèn)證方式。同時,取消+chap的注釋,表示使用chap認(rèn)證方式。

          接下來設(shè)置 chap-secrets 文件:

          按照文件注釋的內(nèi)容,分別填入:用戶名 服務(wù)器名 密碼 IP地址,例如,在最后插入一行:

          testing * password *

          表示用戶名為testing,服務(wù)器名為任意,密碼為password,IP為任意的IP。

          下來,編輯 pppoe-server-options 文件(如果沒有,則新建一個1) 
          在pppoe-server-options里加入:

          				auth
          require-chap
          logfile /var/log/pppd.log
          				
          • 1
          • 2
          • 3
          • 1
          • 2
          • 3

          這樣就配置完畢了。

          設(shè)置系統(tǒng)的ip策略

          開啟ip轉(zhuǎn)發(fā)功能

          使用超級用戶的身份,注意,必需是超級用戶身份,sudo都沒有這個權(quán)限,執(zhí)行:

          cat 1 > /proc/sys/net/ipv4/ip_forward

          如果單單是執(zhí)行這個命令,只會暫時開啟IP轉(zhuǎn)發(fā)功能。重啟后會自動關(guān)閉。如果想一直打開,則應(yīng)該編輯 /etc/sysctl.conf 文件,取消net.ipv4.ip_forward=1 的注釋,再執(zhí)行 sudo sysctl -p 就可以永久打開IP轉(zhuǎn)發(fā)功能了。

          設(shè)置iptables的IP策略

          以超級用戶身份執(zhí)行:

          iptables -A POSTROUTING -t nat -s 10.10.10.0/24 -j MASQUERADE

          注:-s 參數(shù)后面的網(wǎng)絡(luò)地址是一會兒將要開啟的pppoe-server設(shè)置的網(wǎng)絡(luò)地址,這個地址可以根據(jù)需要自己設(shè)定,只要iptables和pppoe-server匹配就好。

          運行PPPoE Server

          輸入:

          sudo pppoe-server -I wlan0 -L 10.10.10.1 -R 10.10.10.100 -N 100

          注:

          1. -I 參數(shù)用于指定監(jiān)聽哪個網(wǎng)絡(luò)端口。可以使用ifconfig命令查看當(dāng)前工作的端口名稱。由于本人的筆記本電腦使用無線網(wǎng)絡(luò),所以是wlan0端口。
          2. -L 參數(shù)用于指定在一個PPP連接中,PPPoE服務(wù)器的IP地址。由于本人假設(shè)的以太網(wǎng)網(wǎng)絡(luò)地址為10.10.10.0/24,所以就使用網(wǎng)絡(luò)地址的第一個IP地址作為服務(wù)器的地址了。
          3. -R 參數(shù)用于指定當(dāng)有客戶連接到服務(wù)器上時,從哪個IP地址開始分配給客戶。
          4. -N 參數(shù)用于指定至多可以有多少個客戶同時連接到本服務(wù)器上。

          如果一切順利,在Windows上建立撥號連接,用戶名和密碼分別為testing和password,應(yīng)該就可以連接到linux下的PPPoE Server上并且正常上網(wǎng)了。

          PPPoE 協(xié)議過程分析

          過程圖解

          PPPoE協(xié)議主要有以下幾個過程:

          客戶 客戶 服務(wù)器 服務(wù)器 PADI PADO PADR PADS

          解釋

          1. 主機廣播發(fā)起分組(PADI),分組的目的地址為以太網(wǎng)的廣播地址0×ffffffffffff,CODE(代碼)字段值為0×09,SESSION-ID(會話ID)字段值為0×0000。PADI分組必須至少包含一個服務(wù)名稱類型的標(biāo)簽(標(biāo)簽類型字段值為0×0101),向接入集中器提出所要求提供的服務(wù)。
          2. 接入集中器收到在服務(wù)范圍內(nèi)的PADI分組,發(fā)送PPPoE有效發(fā)現(xiàn)提供包(PADO)分組,以響應(yīng)請求。其中CODE字段值為0×07,SESSION-ID字段值仍為0×0000。PADO分組必須包含一個接入集中器名稱類型的標(biāo)簽(標(biāo)簽類型字段值為0×0102),以及一個或多個服務(wù)名稱類型標(biāo)簽,表明可向主機提供的服務(wù)種類。
          3. 主機在可能收到的多個PADO分組中選擇一個合適的PADO分組,然后向所選擇的接入集中器發(fā)送PPPoE有效發(fā)現(xiàn)請求分組(PADR)。其中CODE字段為0×19,SESSION_ID字段值仍為0×0000。PADR分組必須包含一個服務(wù)名稱類型標(biāo)簽,確定向接入集線器(或交換機)請求的服務(wù)種類。當(dāng)主機在指定的時間內(nèi)沒有接收到PADO,它應(yīng)該重新發(fā)送它的PADI分組,并且加倍等待時間,這個過程會被重復(fù)期望的次數(shù)。
          4. 接入集中器收到PADR分組后準(zhǔn)備開始PPP會話,它發(fā)送一個PPPoE有效發(fā)現(xiàn)會話確認(rèn)PADS分組。其中CODE字段值為0×65,SESSION-ID字段值為接入集中器所產(chǎn)生的一個唯一的PPPoE會話標(biāo)識號碼。PADS分組也必須包含一個接入集中器名稱類型的標(biāo)簽以確認(rèn)向主機提供的服務(wù)。當(dāng)主機收到PADS分組確認(rèn)后,雙方就進(jìn)入PPP會話階段。
          5. PPPoE還有一個PADT分組,它可以在會話建立后的任何時候發(fā)送,來終止PPPoE會話,也就是會話釋放。它可以由主機或者接入集中器發(fā)送。當(dāng)對方接收到一個PADT分組,就不再允許使用這個會話來發(fā)送PPP業(yè)務(wù)。PADT分組不需要任何標(biāo)簽,其CODE字段值為0×a7,SESSION-ID字段值為需要終止的PPP會話的會話標(biāo)識號碼。在發(fā)送或接收PADT后,即使正常的PPP終止分組也不必發(fā)送。PPP對端應(yīng)該使用PPP協(xié)議自身來終止PPPoE會話,但是當(dāng)PPP不能使用時,可以使用PADT。

          問題分析

          連接時錯誤

          Windows撥號連接顯示錯誤651

          可能的原因是沒有正確打開服務(wù)器。通過WireShark抓包可以看到,Windows在發(fā)送了4次PADI報文而沒有得到PADO回復(fù)后,會報告引錯誤。

          因此,可能是在 pppoe-server 打開時沒有指定到正確的網(wǎng)卡。也可能是使用虛擬機上網(wǎng)時沒有設(shè)置好上網(wǎng)模式,如果沒有使用橋接模式上網(wǎng)而是使用了NAT模式,則也可能遇到此問題。

          同時,如果沒有pppoe-server-options 文件或者該文件沒有 auth  require-chap 選項設(shè)置的話,也會出現(xiàn)這個問題。

          同時,該問題也可能是因為在Windows撥號連接時在屬性中指定了一個服務(wù)器,和linux下開啟的PPPoE Server名稱不同造成的。

          pppoe-server中,-S參數(shù)用于指定服務(wù)器名稱。

          Windows撥號連接顯示錯誤734

          錯誤內(nèi)容為

          PPP鏈接控制協(xié)議終止

          這個原因可能是在 pppoe-server-options 文件中加入了 login 選項。如果設(shè)置了該選項,則登陸的用戶名必需和linux系統(tǒng)下的一個用戶名相同,否則會出現(xiàn)這個錯誤。

          Windows撥號連接顯示錯誤628

          錯誤內(nèi)容為

          在連接完成前,連接被遠(yuǎn)程計算機終止

          通過WireShark抓包分析,可以看到在原理分析的四個階段完成后,立刻收到一個PADT報文。PADT報文的內(nèi)容描述為:

          Generic-Error: RP-PPPOE: child pppd process terminated

          這個描述十分有誤導(dǎo)性,網(wǎng)上甚至有人說這個需要將pppoe編譯進(jìn)內(nèi)核,以便可以使用pppoe-server命令的-k參數(shù)。后來我發(fā)現(xiàn)終究是配置問題,出現(xiàn)了配置錯誤,一般是出現(xiàn)了程序無法識別的配置。這個錯誤很麻煩,應(yīng)當(dāng)結(jié)合剛剛配置的logfile以及自己注釋掉一些不確定的命令來排查錯誤。

          無法識別用戶名和密碼

          很可能是用戶名和密碼輸入錯誤,也可能是設(shè)置錯誤。注意,設(shè)置用戶名和密碼時,兩個星號是不能省略的。

          上網(wǎng)錯誤

          此類錯誤是Windows可以撥號連接成功,但是無法上網(wǎng)。主要是在linux下使用 tcpdump 或者 wireshark 程序進(jìn)行排查。

          使用命令:

          tcpdump -i wlan0 host 10.10.10.100 2  
          可以看到,只有從主機10.10.10.100發(fā)出的報文,但是沒有發(fā)送給10.10.10.100的報文。

          出現(xiàn)這個錯誤的原因,可能是沒有打開IP轉(zhuǎn)發(fā)功能。所以當(dāng)網(wǎng)絡(luò)上的報文發(fā)送給linux主機時,linux主機不會把報文轉(zhuǎn)發(fā)給Windows主機,而是由于目的地址不是自己而直接丟棄。

          同時也可能是沒有設(shè)置iptables 的POSTROUTING的nat規(guī)則。

          網(wǎng)絡(luò)拓?fù)湎嚓P(guān)問題

          一般是在虛擬機上安裝一個linux操作系統(tǒng),搭好PPPoE Server。然后在宿主機上進(jìn)行連接測試。則有以下幾個問題:

          1. 如果虛擬機采用NAT模式,則宿主機無法登陸。因為NAT模式下,宿主機是無法與虛擬機通信的。各種模式下的通信功能見下圖:這里寫圖片描述
          2. 如果采用的是有線網(wǎng)絡(luò),則無法使用橋接模式。因為有線網(wǎng)絡(luò)為固定IP,無法為橋接再分配一個IP地址。因此,最好的方法是使用無線網(wǎng)絡(luò)。
          3. 如果宿主機是linux操作系統(tǒng),則可以虛擬Windows XP,同時使用Host-Only模式,設(shè)置好相應(yīng)的網(wǎng)絡(luò)地址,不啟用DHCP服務(wù)器,在Windows XP中設(shè)置好自己的IP、子網(wǎng)掩碼,這樣就可以和宿主機進(jìn)行通信了。在這樣的情況下,沒有撥號連接時無法上網(wǎng),撥號連接好可以上網(wǎng),是對實驗環(huán)境的最近似的模擬。

          目前碰到的問題就是這樣了,以后碰到問題再添加吧。最重要的是理解各個步驟和協(xié)議的原理,這樣才能快速排查錯誤的原因。


          1. 這個問題困擾了我很久。網(wǎng)上說是編輯這個文件,但是在操作系統(tǒng)中沒有這個文件,我一直以為是版本的問題,后來才發(fā)現(xiàn)需要自己新建。這個和.vimrc以及.bashrc等文件是一樣的。 
          2. -i用于指定端口,host指定的ip應(yīng)該在windows用ipconfig查看得到,可能不一樣。 

          posted on 2017-06-02 15:29 聽風(fēng) 閱讀(508) 評論(0)  編輯  收藏 所屬分類: 嵌入式

          主站蜘蛛池模板: 汝州市| 广安市| 门源| 梅州市| 博爱县| 万载县| 郸城县| 麦盖提县| 青川县| 巧家县| 高碑店市| 郯城县| 绵阳市| 富民县| 云阳县| 娱乐| 尖扎县| 民乐县| 山阳县| 龙里县| 安宁市| 衡东县| 建平县| 张家口市| 黄龙县| 湘乡市| 招远市| 山西省| 五指山市| 蚌埠市| 永善县| 兰坪| 新野县| 白河县| 漠河县| 浠水县| 固原市| 富平县| 康定县| 安宁市| 上林县|