如何通过 VPN 路由局域网流量

如何通过 VPN 路由局域网流量

我有两台计算机连接到同一个 VPN(hamachi)网络。它们位于不同的地方。假设我有以下地址:

机器 A:(rpi zero - 使用 wifi)

wlan0:
    inet 192.168.2.160  netmask 255.255.255.0

ham0:
    inet 25.61.150.71  netmask 255.0.0.0 

机器B(笔记本电脑 - 使用wifi):

wlan0:
    inet 192.168.0.103  netmask 255.255.255.0

ham0:
    inet 25.72.151.72  netmask 255.0.0.0

每台机器都可以互相 ping 通。但是,如果我想从机器 B 访问机器 A 网络上的其他机器,该怎么办?

例如在机器B上:

ping 192.168.2.123

192.168.2.123 位于机器 A LAN 上。

我尝试过这个:

机器 A(作为 root):

LAN=wlan0
HAM=ham0

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $LAN -j MASQUERADE  
iptables -A FORWARD -i $LAN -o $HAM -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $HAM -o $LAN -j ACCEPT

机器B:

sudo ip route add 192.168.2.0/24 via 25.61.150.71

但没有成功。

我无法从机器 B ping 通 192.168.2.123。

我怎样才能正确地做到这一点?

编辑:上面写的命令似乎是正确的。我已经用 freelan vpn 而不是 hamachi 测试了类似的设置,并且成功了。

答案1

解决方案实际上更加直接一些。

暂时忽略iptables命令,因为这是关于将您的子网隐藏在 NAT 后面。machine A192.168.2.0/24

而应该关注执行 ping 命令时实际发生的情况。

当您向远程 IP 发送 ping 时,您实际上需要告知两者machine A以及machine B如何获取相应的网络192.168.0.0/24192.168.2.0/24

您说的第一部分是正确的machine B,即为了 ping 任何东西都192.168.2.0/24必须经过25.61.150.71

这就是您在命令中所做的:

machineB> sudo ip route add 192.168.2.0/24 via 25.61.150.71

这是可能的,因为machine Amachine B位于 Hamachi 提供的同一子网上。

但是任何 ping 命令也需要发送回复,那么它如何machine A知道网络192.168.0.0/24位于何处?

您可以知道machine A子网192.168.0.0/24位于后面25.72.151.72

这将导致以下命令:

machineA> sudo ip route add 192.168.0.0/24 via 25.72.151.72

然而,我们还没有完全脱离困境,因为即使machine A我们machine B知道将流量发送到属于任一网络的任何主机,我们仍然面临着如何任何其他主机属于知道192.168.0.0/24如何联系192.168.2.0/24吗?

如果machine Amachine B不是其网络的默认网关,那么我们需要向任一网络的默认网关添加静态路由。

对于machine A的默认路由器,我们需要告知192.168.0.0/24可以通过 到达192.168.2.160

类似地,我们需要告诉可以通过的machine B默认路由器。192.168.2.0/24192.168.0.103

完成所有上述操作后,您应该能够从属于任一网络的任何主机 ping 通属于另一个网络的任何主机。

相关内容