目标: 使 192.168.2.* 可从 192.168.0.* 访问
情况: 我有一个远程站点(网络 B),路由器内置有 OpenVPN 服务器。在我的网络(网络 A)上,有一个 VPN 客户端连接到远程站点(网络 B)。装有 VPN 客户端的主机可以 ping 两个网络中的所有系统。
问题: 我怎样才能让网络 A 上的主机与网络 B 上的主机进行通信,即首先通过具有 VPN 客户端的主机进行路由? 注意:我不希望他们每个人都有自己的 VPN 客户端。
为了使其更加清晰,我创建了以下图表: https://networkengineering.stackexchange.com/questions/59630/using-vpn-make-192-168-2-accessible-from-192-168-0
我尝试了以下操作:
在 192.168.0.*(网络 A)中的每台机器上都会添加一个默认网关,如下所示。
$ route add default gw 192.168.0.3
在 GATEWAY(这里有我的 VPN 客户端)中,添加以下路由条目。
$ route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.2.47
此时我希望网络 A 中的机器可以 ping 网络 B,但是却无法做到。
答案1
您可以使用站点到站点的 openVPN 路由来自站点 B 的除互联网之外的所有流量,站点到站点 VPN 将添加 192.168.0.0/24 网络的默认路由,并且默认路由将添加到您的网关路由表中,以便每个主机都通过正确的网关有效地路由。
我们在具有两个 pfSense vm(版本 2.4.4)的网络上进行了尝试,并且运行良好。站点 A 是服务器,站点 B 是站点到站点连接的客户端!站点 B 通过 VPN 路由所有流量,但我们将其切换回将所有 http/https 流量路由到两个站点的每个 wan。
答案2
我找到了答案。我必须将 VPN 客户端上的 iptables 配置为具有 MASQUERADE 选项的 NAT,然后我需要在相应接口上添加 VPN 客户端的 IP 地址作为该网络内每个系统的默认网关。
允许内部网络(网络 A)上的机器与外部网络(网络 B)进行通信
您需要配置 iptables 以将数据包从 eth1(后端)上的内部网络转发到 tun0(远程)上的外部网络。
- 在运行 VPN 客户端的计算机上
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o tun0 -j ACCEPT
- 在内部网络内的每台机器上
route add default gw 192.168.0.3
- 现在网络 A 上的机器可以与网络 B ping/通信。
允许外部网络上的计算机与内部网络通信
您需要配置 iptables 以将数据包从 tun0(远程)上的外部网络(网络 B)转发到 eth1(后端)上的内部网络(网络 A)。
- 在运行 VPN 客户端的计算机上
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A FORWARD -i eth1 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i tun0 -o eth1 -j ACCEPT
- 在每台远程计算机上
route add default gw 192.168.2.47
- 现在网络 B 上的机器可以与网络 A ping/通信。