實(shí)驗(yàn)環(huán)境搭建,滿足pppoe鏈接的基礎(chǔ)服務(wù),就是保證ppp協(xié)議能夠封裝在以太網(wǎng)框架中的一種網(wǎng)絡(luò)隧道協(xié)議,因?yàn)榧闪藀pp協(xié)議,所以實(shí)現(xiàn)了創(chuàng)痛以太網(wǎng)不能提供身份驗(yàn)證,加密和壓縮的功能。本質(zhì)上,它是一個(gè)允許在以太網(wǎng)廣播域中的兩個(gè)以太網(wǎng)接口間創(chuàng)建ppp協(xié)議隧道。它使用傳統(tǒng)的基于PPP的軟件來管理一個(gè)不是使用串行線路而是使用類似于以太網(wǎng)的有向分組網(wǎng)絡(luò)的連接。這種有登陸和口令的標(biāo)準(zhǔn)連接,方便了接入供應(yīng)商的記費(fèi)。并且,連接的另一端僅當(dāng)PPPoE連接接通時(shí)才分配IP地址,所以允許IP地址的動(dòng)態(tài)復(fù)用。
---wiki : http://zh.wikipedia.org/zh-cn/PPPoE
(PPPoE及TCP/IP協(xié)議棧)
(一)pppoe-server
也就是PC機(jī)器,我這邊只說linux系統(tǒng)下面的情況,我的是Ubuntu系統(tǒng),下載rp-pppoe: http://www.roaringpenguin.com/products/pppoe
按照里面的README來要求來安裝rp-pppoe。最簡單的就是default直接運(yùn)行g(shù)o腳本。然后PC機(jī)器就可以運(yùn)行pppoe-server命令了。不要急,還要對server進(jìn)行配置,配置文件在/etc/pppoe-server-options,打開進(jìn)行改寫。我的配置如下:
auth require-chap
lcp-echo-interval 10
lcp-echo-failure 2
保存退出,這樣配置完成,這樣在建立ppp鏈接的Discovery階段就會(huì)進(jìn)行驗(yàn)證,server保存的驗(yàn)證用戶名,密碼就在/etc/ppp/chap-secrets里面:
# Secrets for authentication using CHAP
# client server secret IP addresses"user_xiaokeweng" * "my_password" *
其中各個(gè)字段的含義,顧名思義,*指代all。
最后在PC端啟動(dòng)pppoe-server,輸入命令:
sudo pppoe-server -I eth0
(二)pppoe-client
在android上面移植pppoe模塊,同樣使用rp-pppoe,我們可以build成模塊移植到android終端上面,需要自己寫make file,我這邊是用Android.mk:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=\
src/pppoe.c \
src/if.c \
src/debug.c \
src/common.c \
src/ppp.c \
src/discovery.c
LOCAL_MODULE_PATH := $(LOCAL_PATH)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := pppoe
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src
include $(BUILD_EXECUTABLE)
于是build出來pppoe可執(zhí)行模塊,push到/system/bin下面,當(dāng)然可以直接改寫rp-pppoe的makefile。于是在終端就可以發(fā)起pppoe鏈接請求了。
(三)運(yùn)行測試
(1)首先要保證Client,Server都在一個(gè)廣播域中,按照前文中的思路,手持終端是通過wifi,鏈接到接入LAN中的無線路由器中,而PC是直接接入到LAN中的。
(2)adb進(jìn)入設(shè)備終端后,輸入
/system/bin/pppoe -d
就會(huì)發(fā)起Discorvery,在廣播域內(nèi)廣播PADI報(bào)文,成功的話會(huì)返回發(fā)現(xiàn)的pppoe-server的MAC地址,并且在PC端抓包eth0的話,使用ppp||pppoed進(jìn)行過濾,能夠收到終端的廣播報(bào)文。這樣就能說明已經(jīng)實(shí)現(xiàn)pppoe通路。接著:
/system/bin/pppd pty "/system/bin/pppoe -I wlan0" user user_xiaokeweng password my_password
這樣就會(huì)發(fā)起pppoe鏈接,經(jīng)過Discovery,認(rèn)證,LCP,最終建立其ppp鏈接。在PC端會(huì)看到新建立起來的ppp0,Client端也會(huì)看到。
(四)后續(xù)配置
(1)PC端配置iptable使終端的數(shù)據(jù)包能夠請求訪問internets
echo 1 > /proc/sys/net/ipv4/ip_forward //打開iptable,該命令切換到root運(yùn)行
iptables -t nat -F //清空表項(xiàng)
iptables -t nat -L //現(xiàn)實(shí)表項(xiàng)
iptables -t nat -A POSTROUTING -s 192.168.1.1 -j SNAT --to 192.168.163.254
//-s 為終端獲得的ip,--to 為ethx 的ip
(2)在終端增加路由表項(xiàng)目
ip -d route
ip route del default
ip route adddefault dev ppp0
ip -d route
(3)配置dns
這樣操作的話是不需要設(shè)置dns的,因?yàn)殒溄觲lan的時(shí)候,使用的dns-server與現(xiàn)在的是完全一樣的,如果經(jīng)過上述操作,能夠ping通internet但是不能夠正常上網(wǎng)的話,一定就是dns的問題了。
getprop
net
.dns1
getprop
net
.dns2
setprop
net
.dns1
110
.112
.120
.115
setprop
net
.dns2
110
.112
.120
.114