準備工作:
1)檢查下手機是否root了,由於在手機上需要執行su命令來修改手機的網關,所以必須root,如果沒有root參考(Nexus s 4.1.1)這個地址:http://www.teamandroid.com/2012/07/20/root-nexus-s-on-android-411-jelly-bean-jro03e-official-software-update/
2)通過market 給手機安裝終端和busybox。
Step1: system setting->wireless & networks -> more-> Tethering & portables hotspot ->USB tethering 勾選
Step2: 在電腦上,通過ifconfig命令,可以看到pc上多了一個usb0網卡,這個是通過USB線虛擬出來的一個網路介面, 以我的電腦為例,ip 地址為192.168.42.89;在手機終端上,輸入su命令後,通過busybox ifconfig命令也可以看到和pc端相應的ip 地址:192.168.42.129,這兩個是在同一網段上,通過ping或者buybox ping可以相互ping通,但目前還不能上網。
Step3: 修改電腦上的ip地址192.168.42.89 為=>192.168.42.1
sudo ifconfig usb0 192.168.42.1 netmask 255.255.255.0
Step4: 修改手機上的網關為192.168.42.1
subusybox route add default gw 192.168.42.1setprop net.dns1 8.8.8.8
到這步後,手機可以ping通電腦上的真實網卡的IP地址172.16.2.181,但還是不能上網。
要經過Ubuntu
Step5:設定iptables
1)檢查下iptables 的轉寄是否開啟
sysctl net.ipv4.ip_forward
會列印 “net.ipv4.ip_forward = 0” 0=>表示未開啟。
或者查看/proc/sys/net/ipv4/ip_forward 檔案的內容為0還是1,0=>未開啟,1=>開啟
2)如果沒有開啟,則設定其開啟
sysctl -w net.ipv4.ip_forward=1
確認下sysctl net.ipv4.ip_forward 的值是否為1.
上面的修改只是暫時性的,重啟後會失效,為了永久儲存,可以修改/etc/sysctl.conf檔案,取消對net.ipv4.ip_forward=1行就ok了。
3) 設定路由轉寄,把通過USB線連結的手機和PC(Ubuntu)的網路位址區段(192.168.42.1/24),映射到自己網卡上的ip地址如172.16.2.181
sudo iptables -t nat -A POSTROUTING -s 192.168.42.1/24 -j SNAT --to-source 172.16.2.181
解釋:把來源192.168.42.1/24這個C類網路地址傳輸過來的資料包請求全部轉寄至IP 為172.16.2.181上。
通過查看iptables 的nat表資訊,看上一步的命令有沒有添加成功
sudo iptables -t nat -vnL POSTROUTING --line-num
這時,通過瀏覽器就可以上網了。
4)儲存對iptables 所做的修改,不然重啟手機,剛才對iptables 所做的修改就沒了。
sudo iptables-save
參考:
http://www.ducea.com/2006/08/01/how-to-enable-ip-forwarding-in-linux/
http://hi.baidu.com/b1uecream/item/73d0df2110f47f112a0f1cdc