由於在開發A1200上的流媒體播放器,免不了長期播放視頻,進行穩定性測試。開始是通過GPRS撥號上網,但播放視頻太費流量了,充個50元,都頂不住一天的測試。看到window mobile的手機都可以通過PC上網,因此想到moto linux手機也可以共享PC上網,節省流量費用。從理論上將是可行的,因爲moto手機可以開啓USB LAN,通過USB連接線與PC組成一個局域網。PC相當於具有兩個網卡,只要開啓路由功能即可。在網上查找了一些資料後,終於配置成功,現將配置過程分享一下。
環境:
PC操作系統: Ubuntu 9.10. 網卡eth0 IP 10.8.8.175 netmask 255.255.255.0 gateway 10.8.8.1
手機: Moto A1200,已開啓USB LAN,已啓動telnet服務
步驟:
- 手機通過USB連接到PC後,會連接一個網卡設備usb0, 配置其IP爲192.168.1.1,手機自行分配的IP地址爲192.168.1.2。可以在PC上telnet 192.168.1.2,確定USB LAN工作正常;
- 開啓PC的IP轉發功能,網上都說如下命令即可完成
echo "1">/proc/sys/net/ipv4/ip_forward
但在我的系統上運行卻總是報錯:
martianchem@martianchem-laptop:~$ echo "1">/proc/sys/net/ipv4/ip_forward
bash: /proc/sys/net/ipv4/ip_forward: Permission denied
martianchem@martianchem-laptop:~$ sudo echo "1">/proc/sys/net/ipv4/ip_forward
bash: /proc/sys/net/ipv4/ip_forward: Permission denied
所以採用另外一個方法,打開/etc/sysctl.conf文件,找到net.ipv4.ip_forward = 1這一行,去掉前面的註釋符, 然後運行如下命令即時生效
sudo sysctl -p
- 輸入如下命令,開啓NAT
sudo iptables -F
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
爲了避免每次重啓都需要輸入命令,將上面的四條命令加入/etc/rc.local文件
- 爲手機添加路由。這是一個比較麻煩的工作,因爲在moto linux下並沒有route命令。上網下載busybox的源碼,使用工具鏈交叉編譯,下載到手機,telnet到手機,運行如下命令:
./busybox route add default gw 192.168.1.1
添加路由後,如果可以ping通PC機的網關10.8.8.1,證明PC的NAT和手機的缺省路由添加成功。
# ping 10.8.8.1
PING 10.8.8.1 (10.8.8.1) from 192.168.1.2 : 56(84) bytes of data.
64 bytes from 10.8.8.1: icmp_seq=1 ttl=63 time=3.03 ms
64 bytes from 10.8.8.1: icmp_seq=2 ttl=63 time=3.75 ms
- 修改手機DNS。如果要能正常訪問www.csdn.net這樣的網址,還需要DNS解析。我們知道,linux下的DNS配置位於/etc/resolv.conf文件,但非常不幸的是,這個文件指定的nameserver爲127.0.0.1,而且/etc/下的文件還不能修改。從網上找到的答案是複製/etc/下的文件到/ezxlocal/etc/, 然後通過mount --bind /ezxlocal/etc /etc命令,這樣再訪問/etc/下的文件實際上就是訪問的/ezxlocal/etc/下的文件,而/ezxlocal/etc/下的文件是可以修改的。將/etc/resolv.conf中的內容改成nameserver 192.168.1.1。這時再ping www.sina.com,提示爲
# ping www.sina.comPING newswh.sina.com.cn (59.175.132.68) from 192.168.1.2 : 56(84) bytes of data.