1. 程式人生 > >SuSELinux上部署pppoe-server服務,rp-pppoe

SuSELinux上部署pppoe-server服務,rp-pppoe

前言:

實驗室的寬頻是公網靜態IP,上外網不需要撥號也不能撥號。 為了測試某款終端產品的撥號上網功能,除錯時只能自己弄個pppoe-server了。

網上搜索了一下,解決方案有很多:RouterOS,Windows Server 2003上部署撥號服務軟體,Linux pppoe-server等。有其他專案的同事以前搞過,給我發了一個模擬BAS,軟體叫RASPPPOE啥的。

時間不等人,沒有多的電腦裝置,也傾向於使用linux,最後選來選去決定使用rp-pppoe來搭建一個PPPOE-Server

網上資料不是很多,國內的資料也總是抄來抄去或者不夠詳細,於是就有了這篇部落格,希望能夠幫助到後來人

-----------------------------------------------------

軟體準備:

作業系統用的SuSELinux11
軟體用的rp-pppoe,這個軟體支援adsl撥號和pppoe-server,開源免費。

參考文件:

(1)Rehat上安裝rp-pppoe:

(2)rp-pppoe自帶的簡單文件

再就是rp-pppoe doc目錄下自帶的簡單的說明文件,至於配置項什麼的在配置檔案有些說明

(3)還有這個文件,網上貼的比較多

Linux 系統伺服器配置文件—《PPPoE 篇》

具體操作:

檢查系統是否已安裝PPPOE伺服器: 網上介紹用rpm -q rp-pppoe,但下載下來的並不是一個rpm,用which pppoe-server直接看就可以了

檢查linux核心版本:uname -r ,自帶doc上介紹安裝rp-pppoe需要核心2.2.9以上

rp-pppoe-3.11.tar.gz 下載後解壓,解壓後有README檔案指導安裝,可以快速安裝或手動安裝

我用的手動編譯和安裝

1) Unpack:

        $ tar xzvf rp-pppoe-xxx.tar.gz

2) Change to source directory:

        $ cd src

3) Configure:

        $ ./configure

4) Compile:

        $ make

4) Install (this step must be done as root)

        # make install
----------------------------------------------------------


二、配置

/etc/ppp/目錄下有很多配置檔案,改這3個就可以了

(1)vi /etc/ppp/pppoe-server-options   #可以先參考 pppoe-server-options-example

require-chap       #使用chap驗證協議,如果使用pap驗證協議,則此行為 require-pap

login              #使用系統的賬號進行認證。 要求pppd的登入賬號在系統和chap-secrets檔案中均存在。

lcp-echo-interval 10

lcp-echo-failure 2

ms-dns 8.8.8.8      #分配給客戶端的DNS

(2)新增身份驗證賬戶
vi /etc/ppp/chap-secrets     #如果使用pap驗證,則修改/etc/ppp/pap-secrets

# client        server        secret                  IP addresses
username         *            password                 *
其中username和password分別是使用者名稱和密碼
如果pppoe-server-options中使用了login項,需要在linux上用useradd命令建立同名帳戶

(3)vi /etc/ppp/options   --- 是否要修改不確定,但改了下面這一項
local     #這個是pppoe撥號協議的一個開關,options檔案內有說明


三、啟動pppoe伺服器

用eth0提供撥號服務,eth0沒有配置地址。eth1已經配置好地址,可以上公網

(1)檢查網絡卡

ifconfig eth0    #如果網絡卡沒有起來,可以用ifconfig eth0 up

確保這個網口正常,最好接上一個裝置,用ethtool eth0命令檢視是否連線
linux:~ # ethtool eth0
        Link detected: yes

(2)提供pppoe-server的網絡卡上不能配IP地址
用ifconfig eth0 檢視

(3)在網絡卡上啟用pppoe-server服務
pppoe-server -I eth0 -L 192.168.1.1 -R 192.168.1.2 -N 10

-I eth0       指定pppoe伺服器在那個網絡卡介面監聽連線請求

-L 192.168.1.1       指定pppoe伺服器的ip地址。(注意:此IP地址不是網絡卡的IP地址,而是PPPOE伺服器的虛擬IP)

-R 192.168.1.2       pppoe伺服器分配給客戶端的IP地址,從192.168.1.2開始,遞增

-N 10       指定最多可以連線pppoe伺服器的客戶端數量

-k: 使用核心模組
-L: 設定服務端IP地址
-R: 設定客戶端啟示IP地址
-x: 每個MAC地址能發起的session(這個似乎在新版本中才有)
-C:設定連結主機名字,預設是主機名
-S: 設定服務名
-I:設定需要監聽的埠
-N: 設定最大客戶端連結數,預設是64


啟動pppoe-server後檢查程序是否存在:ps -ef | grep -i pppoe

關閉pppoe所有服務(包括server服務): killall pppoe-server

pppoe-server的日誌輸出在/var/log/messages,這個日誌是SuSELinux作業系統的日誌

終端裝置撥號成功後,用ifconfig命令可以在SuSELinux看到這樣一個連線
其中inet addr:192.168.1.1是pppoe-server的ip, P-t-P:192.168.1.2是終端撥號成功獲取到的ip
ppp0      Link encap:Point-to-Point Protocol 
          inet addr:192.168.1.1  P-t-P:192.168.1.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:34888 errors:0 dropped:0 overruns:0 frame:0
          TX packets:69929 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:2013508 (1.9 Mb)  TX bytes:90514273 (86.3 Mb)


四、使撥號的終端也能夠上公網
撥號伺服器有2塊網絡卡:eth0用於PPPOE Server,eth1能上外網
為了使撥號的終端能上外網,還需要如下配置:
(1)開啟IP轉發,這樣eth0的包才會被允許轉發到eth1
# echo "1" > /proc/sys/net/ipv4/ip_forward

(2)將eth1出向包的源地址進行修改
如果eth1是靜態地址:
# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.20.7.251

將輸出到eth1的出向包的源地址修改為172.20.7.251,172.20.7.251是eth1的靜態地址。

命令解釋: -A POSTROUTING -o eth1是匹配(match)到網路包, -j 是指定nat時的具體動作。就是對match到的包做指定動作。


如果eth1是動態獲取的地址:
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
將源地址修改為eth1實際獲取到的地址,又稱ip欺騙

配置後,檢視iptables配置
linux:~ # iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination        

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination        
SNAT       all  --  anywhere             anywhere            to:172.20.7.251

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

如果要全清除iptables規則,使用iptables -t nat -F


五、補充問題

1.pppoe認證失敗
PAP的使用者名稱稱(pap驗證的ID、密碼),不是任意的,必須與server系統的一個使用者名稱、密碼一致。
CHAP的使用者名稱稱是任意的,沒有限制的。


在原始碼裡面有個doc目錄:

F) Internal hosts can't see the Internet

Do you have masquerading set up?  I can't help you in great detail, but
see the IPCHAINS-HOWTO and the IP-Masquerade mini-HOWTO.

如果撥號成功的終端還是不能上網,需要同時對eth0和eth1抓包進行分析。比如抓到的網路包分別是cur_eth0.cap和cur_eth1.cap

第一步,檢視傳送給eth0的訊息,有沒有轉發到eth1上。正常情況,同一個訊息應該在cur_eth0.cap和cur_eth1.cap都存在。

第二步,檢視終端發出來的訊息有沒有被SNAT,需要重點分析下cur_eth1.cap了