【问题标题】:Reverse tethering of several Android devices via USB通过 USB 反向绑定多个 Android 设备
【发布时间】:2015-03-04 14:47:34
【问题描述】:

我正在尝试为我的 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
    

现在第二个设备可以 ping google.com,但第一个不能。

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

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

【问题讨论】:

  • 在投反对票之前,请重新阅读第一句话,该句子的目的是测试开发中的软件 - 开发工具问题是明确的主题。
  • 你怎么能做反向网络共享。我做不到。我有带有archlinux和非root android手机的笔记本电脑。我还想通过反向网络共享在我的移动连接上测试我的应用

标签: android linux usb adb tethering


【解决方案1】:

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

我最终所做的,也是我在第一次尝试中错过的,是将每个连接的 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. Android 设备的内部 usb0 iface 连接到主机的 usb1:

    - usb0 169.254.16.2/20
    - default gw 169.254.16.1 (so the host's usb1 iface)
    

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

【讨论】:

    【解决方案2】:

    您需要一个具有 root 访问权限的 linux 系统、root 的 android 手机和 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. 现在我们必须在安卓手机中输入一些命令。我们可以使用 adb 或通过安装在手机中的终端模拟器直接在 android 手机中输入命令。我用的是adb方式。

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

      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,那么您的手机中的互联网正在工作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多