我有两个相距很远的地方,每个地方都有一个公共 IP,我想让这两个地方的 LAN 网络看起来像一个网络。也就是说,A 地的机器可以与 B 地的机器通信,B 地的机器可以与 A 地的机器通信。
在地点 A (10.0.2.1),我有一台 ASUS AC 1200g+ 和一台装有 OpenVPN 服务器的 Raspberry pi (10.0.2.60)。新客户端停留在接口 tun0 (10.8.0.1) 中。此时,客户端 (地点 B) 可以与地点 A 的 LAN 通信,只有目的地为 10.0.1.0/24 的流量被重定向到服务器端。
现在我希望地点 A(服务器)中的机器可以与地点 B 的 LAN 通信。我在路由器中放置了一条路由,所有带有 10.0.1.0/24 的目标请求都重定向到 Raspberry Pi VPN 服务器,但服务器不知道如何处理该流量。
在位置 B(10.0.1.1),我有一台带有 ASUS Merlin 固件的 ASUS AC86U,并且我使用“入站防火墙”启用选项激活了 OpenVPN 客户端。
答案1
我有一个类似的设置,其中 raspberry pi 是客户端,但这应该不会有太大影响。免责声明:这不是最容易设置的东西。
我使用此/etc/iptables/iptables.rules
文件将来自 OpenVPN 连接的流量(通常tun0
,但tun+
涵盖全部)NAT到本地网络:
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i eth+ -o tun+ -j ACCEPT
-A FORWARD -i tun+ -o eth+ -j ACCEPT
COMMIT
OpenVPN 配置需要所谓的客户端到客户端配置. 服务器 OpenVPN-config 中的这两行启用该功能:
# use ccd-folder (per host configs)
client-to-client
# routing to office lan:
client-config-dir ccd
必须在配置所在的路径client-config-dir
下手动创建。然后,您可以在该文件夹中创建每个主机的文本文件。文件命名很重要:仔细检查 OpenVPN 在系统日志中如何调用您的客户端(例如,使用或在文件中)。文件的内容很简单:/etc/openvpn/...
journalctl -xef --unit openvpn-server@somehost
openvpn-status.txt
ifconfig-push 10.10.99.18 255.255.255.255
iroute 192.168.0.0 255.255.0.0
会将其配置为每次连接时都获取相同的 IP(10.10.99.18
),并配置 VPN 服务器以192.168.0.0/16
使用此文件的名称和 IP 地址在内部将流量路由到客户端。这让我们可以理解为什么我们还没有有效的网络连接:也就是说,因为 VPN 服务器的主机系统不知道 VPN 隧道可用于路由该网络的流量(netstat -rn4
)。因此,我们必须再次配置 VPN 服务器并附加:
route 192.168.0.0 255.255.0.0
push "route 192.168.0.0 255.255.0.0"
告诉服务器,它应该路由流量到192.168.0.0/16
,并且所有连接到服务器的客户端也应该被告知该路由 - 该路由被推送到客户端。
对于我的设置,我使用了上面的链接,但是在写这个答案时,我发现了有关该主题的两个有趣的链接:
- https://community.openvpn.net/openvpn/wiki/RoutedLans
- https://forums.openvpn.net/viewtopic.php?t=26839
祝你好运 :)