不确定这是否是发布此问题的正确地方。
我的问题其实很简单,我的 Android 设备使用数据连接,并且在此设备上设置了热点。
我将 Linux 机器连接到这个热点,没有问题。
我的电脑在 wlan0 上获取地址 192.168.1.234
我的 Android 设备在 wlan0 上是 192.168.1.1
=> wlan0 UP 192.168.1.1/24
我能从以下位置 ping 本地 wifi 地址两个都但是,我无法从我的电脑 ping 通互联网上的服务器。
我知道将流量从一侧转发到另一侧有某种方法,但我不知道该如何做。
我到目前为止所做的:在 Android 设备上
$ echo 1 > /proc/sys/net/ipv4/ip_forward
$ iptables -t nat -F
$ iptables -t nat -A POSTROUTING -j MASQUERADE
除了为特殊服务器添加路由外,电脑上没有什么特别的,我希望流量通过 wlan0。
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.162.105.1 0.0.0.0 UG 0 0 0 eth0
10.162.105.0 * 255.255.255.0 U 0 0 0 eth0
158.x.x.x 192.168.1.1 255.255.255.255 UGH 0 0 0 wlan0
192.168.1.0 * 255.255.255.0 U 0 0 0 wlan0
192.168.25.0 * 255.255.255.0 U 0 0 0 vmnet1
192.168.29.0 * 255.255.255.0 U 0 0 0 vmnet8
在android端,我可以看到来自我的电脑的流量。
03:50:17.426155 IP 192.168.1.234 > 158.x.x.x: ICMP echo request, id 5782, seq 634, length 64
03:50:18.427529 IP 192.168.1.234 > 158.x.x.x: ICMP echo request, id 5782, seq 635, length 64
03:50:19.428445 IP 192.168.1.234 > 158.x.x.x: ICMP echo request, id 5782, seq 636, length 64
03:50:20.425667 IP 192.168.1.234 > 158.x.x.x: ICMP echo request, id 5782, seq 637, length 64
03:50:21.426491 IP 192.168.1.234 > 158.x.x.x: ICMP echo request, id 5782, seq 638, length 64
03:50:22.425759 IP 192.168.1.234 > 158.x.x.x: ICMP echo request, id 5782, seq 639, length 64
03:50:23.425759 IP 192.168.1.234 > 158.x.x.x: ICMP echo request, id 5782, seq 640, length 64
但从未看到回复,就像数据包永远不会离开 Android 设备一样。
我究竟做错了什么?
谢谢您的帮助。
答案1
我自己找到了答案。
问题出在 iptables 命令上。需要指定输出设备并设置转发策略。
iptables -t nat -A POSTROUTING -o rmnet_usb0 -j MASQUERADE
iptables -P FORWARD ACCEPT
此后,Linux 机器端就可以访问互联网了。希望这对处于同样境况的人有所帮助。