Linux下,android手机/平板使用USB反向共享(reverse tethering)PC的有线网络


以前的手机共享问题我都是用hack过、支持ad-hoc的wpa_supplicant解决,不过最近升级了android4.2,找了很久也找不到适用的wpa_supplicant。踏破铁鞋之后,在XDA上看到了这样一个用USB反向共享的方法(点击进入原文),总结如下:

首先建议要有adb,没有的话就得在手机的终端模拟器里码字,太累。

主机(PC)方面,以root执行:

iptables -A POSTROUTING -t nat -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

这两句是打开网络地址转换(NAT)和IP转发。

ifconfig [您的网络接口地址] 12.12.10.1

这句是为接口设置IP。网络接口地址不同的机器有所不同,可以用ifconfig命令看。有的发行版是usb0(如果使用usb共享的话),我所用的Arch为了避免插了新网卡出现地址名不固定的问题,用的是另一种命名,比如我的接口名是enp0s26f7u1。

IP地址并不一定非要是12.12.10.1,192.168.0.1之类的也是可以的,但要和下面手机设置的域保持一致。

手机方面,首先要打开移动网络,因为有些软件似乎必需在“形式上有网络连接”的状况下才能使用。
在adb shell或终端模拟器里,root环境下:

ifconfig rmnet0 0.0.0.0

此为关闭手机信号连接。

ifconfig usb0 12.12.10.2
route add default gw 12.12.10.1 dev usb0

为手机的usb0接口配置IP地址(12.12.10.2),并设置路由为主机(12.12.10.1)。注意IP这里的域要和主机的匹配。

setprop net.dns1 8.8.8.8

设置DNS服务器。8.8.8.8是一个著名的DNS服务器,归Google所有。

至此,手机就应该能够正常联网了。android4.0后官方加入了wifi-tether,我没有测试,但理论上应该也能如法炮制(甚至不需要分配IP这一步,因为PC连接上之后IP会被设置为192.168.x.x),只需把主机的接口地址换成无线网卡的,再把手机端的usb0换成wlan0即可。欢迎大家尝试。