通过 VPN 路由来自本地网络的出站连接

通过 VPN 路由来自本地网络的出站连接

我有一个运行 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 上设置了错误的网关。

相关内容