<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    hello world

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

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

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

    在綜合課程設(shè)計(jì)的搭建 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è)置成一個(gè)可以使用的DNS服務(wù)器的IP地址,比如 114.114.114.114 這是Windows主機(jī)撥號(hào)連接時(shí)會(huì)分配的DNS地址。
    2. 注釋掉+pap,取消-pap的注釋,這表示不使用pap認(rèn)證方式。同時(shí),取消+chap的注釋,表示使用chap認(rèn)證方式。

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

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

    testing * password *

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

    下來,編輯 pppoe-server-options 文件(如果沒有,則新建一個(gè)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ā)功能

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

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

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

    設(shè)置iptables的IP策略

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

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

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

    運(yùn)行PPPoE Server

    輸入:

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

    注:

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

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

    PPPoE 協(xié)議過程分析

    過程圖解

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

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

    解釋

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

    問題分析

    連接時(shí)錯(cuò)誤

    Windows撥號(hào)連接顯示錯(cuò)誤651

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

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

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

    同時(shí),該問題也可能是因?yàn)樵赪indows撥號(hào)連接時(shí)在屬性中指定了一個(gè)服務(wù)器,和linux下開啟的PPPoE Server名稱不同造成的。

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

    Windows撥號(hào)連接顯示錯(cuò)誤734

    錯(cuò)誤內(nèi)容為

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

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

    Windows撥號(hào)連接顯示錯(cuò)誤628

    錯(cuò)誤內(nèi)容為

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

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

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

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

    無法識(shí)別用戶名和密碼

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

    上網(wǎng)錯(cuò)誤

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

    使用命令:

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

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

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

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

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

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

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


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

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

    主站蜘蛛池模板: 亚洲国产韩国一区二区| 1000部国产成人免费视频| 亚洲欧洲日韩极速播放| 亚洲VA中文字幕无码毛片| 一区国严二区亚洲三区| 国产成人A在线观看视频免费 | 国产精品久久久久免费a∨| a级毛片免费全部播放| 成人a毛片免费视频观看| 亚洲精品123区在线观看| 亚洲欧洲精品一区二区三区| 亚洲精品制服丝袜四区| 亚洲国产黄在线观看| 国产网站在线免费观看| 成人看的午夜免费毛片| 人与禽交免费网站视频| 18级成人毛片免费观看| 国产成人久久AV免费| 在线观看人成视频免费无遮挡 | 在线免费观看a级片| 日本一区二区三区免费高清| 91香蕉国产线在线观看免费| 久久这里只精品热免费99| 精品乱子伦一区二区三区高清免费播放 | 亚洲第一中文字幕| 亚洲成AV人片在线观看无码| 精品国产亚洲一区二区在线观看| 亚洲高清无码专区视频| 午夜亚洲av永久无码精品| 免费国产a国产片高清网站| 国产在线ts人妖免费视频| 国产色婷婷精品免费视频| 日本免费电影一区| 国产大片51精品免费观看| 免费大香伊蕉在人线国产 | 亚洲精品一卡2卡3卡四卡乱码| 99久久婷婷国产综合亚洲| 伊人久久亚洲综合影院首页| 亚洲乱色熟女一区二区三区蜜臀| 亚洲日韩一区二区三区| 亚洲精品无码mⅴ在线观看|