通过USB反向绑定多个Android设备

时间:2015-03-04 14:47:34

标签: android linux usb adb tethering

我正在尝试为我的Android应用设置测试环境,其中单独的设备需要Internet连接,但没有无线功能。

所以我决定使用usb反向网络共享。我的主机正在运行Ubuntu。我已设法为一台设备设置反向网络共享,连接正常,我可以通过此设备的adb shell ping google.com。

当我连接第二个设备时,第一个绑定停止工作。 两个设备在其内部usb0接口上配置了相同的IP地址。

这是我到目前为止所拥有的:

  1. 主机端口转发已激活

    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  2. Iptables规定主机路由流量:

    iptables -t nat -A POSTROUTING -s 169.254.255.2/24 -j MASQUERADE
    
  3. 插件第一个设备:

    ifconfig shows the device on usb0 @ ip 169.254.255.2/30
    
  4. 在第一台设备上(使用adb shell)

    > route add default gw 169.254.255.2 dev usb0
    > setprop net.dns1 8.8.8.8
    > ping google.com --> is giving results
    
  5. 插件第二个设备

    ifconfig shows this device on usb1 @ ip 169.254.255.2/30 
    
  6. 在第二台设备上

    Add gw, set DNS like above
    
  7. 现在第二个设备可以ping google.com,但第一个设备不能ping。

    当我更改内部IP或分配给主机usb0的IP时,usb1接口我无法通过adb连接到设备。

    我怀疑这是一个网络问题,而不是亚行的问题?有任何想法吗?

2 个答案:

答案 0 :(得分:4)

经过大量的谷歌搜索和反复试验后,我终于找到了适合我特定设置的解决方案。

我最终做了什么,以及我在第一次尝试时错过的是将每个连接的USB设备放入一个单独的子网中(参见this answer on serverfault)。

为清楚起见,设置如下:

  1. iptables包含以下规则

    iptables -t nat -A POSTROUTING -j MASQUERADE
    
  2. 主机的usb0和usb1接口,现在位于不同的子网

    usb0: inet addr:169.254.0.1  Bcast:169.254.15.255  Mask:255.255.240.0
    usb1: inet addr:169.254.16.1  Bcast:169.254.31.255  Mask:255.255.240.0
    
  3. Android设备的内部usb0 iface连接在主机的usb0上:

    - usb0 169.254.0.2/20
    - default gw 169.254.0.1 (so the host's usb0 iface)
    
  4. 在主机的usb1上连接Android设备的内部usb0 iface:

    - usb0 169.254.16.2/20
    - default gw 169.254.16.1 (so the host's usb1 iface)
    
  5. 这样我现在可以从连接到主机上的usb接口的每个android设备上访问Internet(在adb shell setprop net.dns1 8.8.8.8之后)。

答案 1 :(得分:3)

你需要一个具有root访问权限的linux系统,root用户安卓手机和USB线缆。

<强>步骤

  1. 在linux系统中安装adb和fastboot。

    sudo apt-get install android-tools-adb android-tools-fastboot

  2. 通过USB将Android手机连接到PC,并通过手机设置启用USB网络共享。
  3. 在PC中打开终端并输入以下命令。
  4. 找出在您的PC上创建的新网络接口。

    ifconfig

    通常,新的网络接口将是usb0或usb1。让我们考虑 usb0

  5. 现在为这个新接口usb0创建一些静态IP地址。

    sudo ifconfig usb0 10.42.0.1 netmask 255.255.255.0

  6. 现在将这个新接口usb0作为共享连接。

    echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

  7. 现在对iptables防火墙进行一些更改。

    sudo iptables -t nat -F sudo iptables -t nat -A POSTROUTING -j MASQUERADE

  8. 现在我们必须在Android手机中输入一些命令。我们可以使用adb或通过手机中安装的终端模拟器直接在android手机中键入命令。我正在使用adb方式。

  9. 在Android手机中找到网络接口。

    adb shell busybox ifconfig

    我的 rndis0

  10. 设置静态IP,网络掩码和网关。

    adb shell ifconfig rndis0 10.42.0.2 netmask 255.255.255.0 adb shell route add default gw 10.42.0.1 dev rndis0

  11. 验证手机上的互联网连接。

    adb shell ping 8.8.8.8

    如果正在ping,那么移动设备中的互联网正在运行。

  12. 此互联网连接不适用于Opera mini和paytm等应用,但适用于whatsapp。