Moto Linux应用开发(六):USB连接共享PC上网

来源:互联网 发布:淘宝图片轮播大小制作 编辑:程序博客网 时间:2024/05/22 03:26

由于在开发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.com
        PING newswh.sina.com.cn (59.175.132.68) from 192.168.1.2 : 56(84) bytes of data.
                  虽然还是没能ping通,但是可以看到域名解析是正确的。
        至此,配置过程完成。