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

Chr*_*n.D 5 linux usb android adb tethering

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

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

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

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

  1. 主机上的端口转发已激活

    echo 1 > /proc/sys/net/ipv4/ip_forward
    
    Run Code Online (Sandbox Code Playgroud)
  2. Iptables规定主机路由流量:

    iptables -t nat -A POSTROUTING -s 169.254.255.2/24 -j MASQUERADE
    
    Run Code Online (Sandbox Code Playgroud)
  3. 插件第一个设备:

    ifconfig shows the device on usb0 @ ip 169.254.255.2/30
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  5. 插件第二个设备

    ifconfig shows this device on usb1 @ ip 169.254.255.2/30 
    
    Run Code Online (Sandbox Code Playgroud)
  6. 在第二台设备上

    Add gw, set DNS like above
    
    Run Code Online (Sandbox Code Playgroud)

现在第二个设备可以ping google.com,但第一个没有.

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

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

Chr*_*n.D 5

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

我最终所做的,以及我在第一次尝试中错过的,是将每个连接的 USB 设备放入一个单独的子网中(请参阅serverfault 上的此答案)。

说得清楚一点,现在的设置如下:

  1. iptables 包含以下规则

    iptables -t nat -A POSTROUTING -j MASQUERADE
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 连接到主机 USB0 的 Android 设备的内部 USB0 iface:

    - usb0 169.254.0.2/20
    - default gw 169.254.0.1 (so the host's usb0 iface)
    
    Run Code Online (Sandbox Code Playgroud)
  4. 连接到主机 USB1 上的 Android 设备的内部 USB0 iface:

    - usb0 169.254.16.2/20
    - default gw 169.254.16.1 (so the host's usb1 iface)
    
    Run Code Online (Sandbox Code Playgroud)

这样我现在就可以从连接到主机上 USB 接口的每个 Android 设备访问互联网(在 adb shell setprop net.dns1 8.8.8.8 之后)。