我有一个运行 OpenVPN 的服务器 A、一个 OpenVPN 客户端 B(碰巧是一部已 root 的 Android 手机)和一个连接到 B 的第三方 C(笔记本电脑、平板电脑等)。
B 可以使用 VPN 通过 A 访问互联网;C 可以使用不带 VPN 的网络共享连接通过 B 访问互联网。
但是,由于 B 上的 VPN 处于活动状态,我无法在 C 上加载来自互联网的信息。
例如,当 B 或 C 尝试加载网页时,A 似乎记录了类似的入站和出站流量,但当连接源自 C 时,设备 B 上的 VPN 没有报告入站流量。
我应该在哪里查找被丢弃的数据包,以及我应该使用什么 IP 规则来确保它们通过 VPN 传回本地网络 B <-> C?
(我显然会发布任何需要的进一步信息。)
更多信息
不使用VPN:
root@android:/ # ip route
default via [B's External Gateway] dev rmnet0
[B's External Subnet] dev rmnet0 proto kernel scope link src [B's External IP]
[B's External Gateway] dev rmnet0 scope link
192.168.43.0/24 dev wlan0 proto kernel scope link src 192.168.43.1
使用 VPN:
root@android:/ # ip route
0.0.0.0/1 dev tun0 scope link
default via [B's External Gateway] dev rmnet0
[B's External Subnet] dev rmnet0 proto kernel scope link src [B's External IP]
[B's External Gateway] dev rmnet0 scope link
[External address of A] dev tun0 scope link
128.0.0.0/1 dev tun0 scope link
172.16.0.0/24 dev tun0 scope link
172.16.0.8/30 dev tun0 proto kernel scope link src 172.16.0.10
192.168.43.0/24 dev wlan0 proto kernel scope link src 192.168.43.1
192.168.168.0/24 dev tun0 scope link
答案1
啊,通过在 B(手机)上运行以下命令解决了这个问题:
iptables -t nat -A POSTROUTING -s 192.168.43.0/255.255.255.0 -o tun0 -j MASQUERADE
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 192.168.43.0/255.255.255.0 -j ACCEPT
iptables -A FORWARD -j REJECT --reject-with icmp-port-unreachable
这几乎对应于 VPN 服务器的通常基本设置;我遇到了问题,因为我搞不清楚哪个网络是哪个,哪个接口是哪个,当我把这些都弄对之后,我意识到我在 C 上设置了错误的网关。