個人郵箱:xiaokeweng@gmail.com
實驗環境搭建,滿足pppoe連結的基礎服務,就是保證ppp協議能夠封裝在乙太網路架構中的一種網路隧道協議,因為整合了ppp協議,所以實現了創痛乙太網路不能提供身分識別驗證,加密和壓縮的功能。本質上,它是一個允許在乙太網路廣播域中的兩個乙太網路介面間建立ppp協議隧道。它使用傳統的基於PPP的軟體來管理一個不是使用串列線路而是使用類似於乙太網路的有向分組網路的串連。這種有登陸和口令的標準串連,方便了接入供應商的記費。並且,串連的另一端僅當PPPoE串連接通時才分配IP地址,所以允許IP地址的動態複用。
---wiki :
http://zh.wikipedia.org/zh-cn/PPPoE
(PPPoE及TCP/IP協議棧)
(一)pppoe-server
也就是PC機器,我這邊只說linux系統下面的情況,我的是Ubuntu系統,下載rp-pppoe:
http://www.roaringpenguin.com/products/pppoe
按照裡面的README來要求來安裝rp-pppoe。最簡單的就是default直接運行go指令碼。然後PC機器就可以運行pppoe-server命令了。不要急,還要對server進行配置,設定檔在/etc/pppoe-server-options,開啟進行改寫。我的配置如下:
# PPP options for the PPPoE server# LIC: GPLauth #連結時候驗證require-chap #CHAP認證# login #連結後驗證lcp-echo-interval 10 #每10秒發送心跳信令requestlcp-echo-failure 2 #連續兩條心跳信令reply沒有回複取消連結
儲存退出,這樣配置完成,這樣在建立ppp連結的Discovery階段就會進行驗證,server儲存的驗證使用者名稱,密碼就在/etc/ppp/chap-secrets裡面:
# Secrets for authentication using CHAP# client server secret IP addresses "user_xiaokeweng" * "my_password" *
其中各個欄位的含義,顧名思義,*指代all。
最後在PC端啟動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.cLOCAL_MODULE_PATH := $(LOCAL_PATH)LOCAL_MODULE_TAGS := optionalLOCAL_MODULE := pppoeLOCAL_C_INCLUDES += $(LOCAL_PATH)/srcinclude $(BUILD_EXECUTABLE)include $(call all-makefiles-under,$(LOCAL_PATH))
於是build出來pppoe可執行模組,push到/system/bin下面,當然可以直接改寫rp-pppoe的makefile。於是在終端就可以發起pppoe連結請求了。
(三)運行測試
(1)首先要保證Client,Server都在一個廣播域中,按照前文中的思路,手持終端是通過wifi,連結到接入LAN中的無線路由器中,而PC是直接接入到LAN中的。
(2)adb進入裝置終端後,輸入
/system/bin/pppoe -d
就會發起Discorvery,在廣播域內廣播PADI報文,成功的話會返回傳現的pppoe-server的MAC地址,並且在PC端抓包eth0的話,使用ppp||pppoed進行過濾,能夠收到終端的廣播報文。這樣就能說明已經實現pppoe通路。接著:
/system/bin/pppd pty "/system/bin/pppoe -I wlan0" user user_xiaokeweng password my_password
這樣就會發起pppoe連結,經過Discovery,認證,LCP,最終建立其ppp連結。在PC端會看到建立立起來的ppp0,Client端也會看到。
(四)後續配置
(1)PC端配置iptable使終端的資料包能夠請求訪問internets
echo 1 > /proc/sys/net/ipv4/ip_forward //開啟iptable,該命令切換到root運行iptables -t nat -F //清空表項iptables -t nat -L //現實表項iptables -t nat -A POSTROUTING -s 192.168.1.1 -j SNAT --to 192.168.163.254//-s 為終端獲得的ip,--to 為ethx 的ip
(2)在終端增加路由表項目
ip -d route //查看路由表項ip route del default //刪除掉全部default,需要操作多遍 ip route add default dev ppp0 //將預設路由設為ppp0ip -d route //再次查看
(3)配置dns
這樣操作的話是不需要設定dns的,因為連結wlan的時候,使用的dns-server與現在的是完全一樣的,如果經過上述操作,能夠ping通internet但是不能夠正常上網的話,一定就是dns的問題了。
getprop net.dns1 //查看預設路由1getprop net.dns2 //查看預設路由2setprop net.dns1 110.112.120.115 //設定預設路由1 setprop net.dns2 110.112.120.114 //設定預設路由2