我在用着https://github.com/kylemanna/docker-openvpn在我的 LAN 服务器 ( ) 上设置 OpenVPN 服务器,192.168.2.10
该服务器位于路由器 ( 192.168.2.1
) 后面,并有其他几台机器 ( 192.168.2.11
、192.168.2.12
等)。此 OpenVPN 容器直接使用主机网络 ( --network host
) 以简化路由配置。
问题:我希望 VPN 客户端能够访问这些192.168.2.0/24
机器,反之亦然。
OpenVPN 服务器位于192.168.255.0/24
子网上。它通过 OpenVPN 配置将此路由推送到 VPN 客户端:
push "route 192.168.2.0 255.255.255.0"
但从 VPN 客户端 ( 192.168.255.20
) 我只能:
ping 192.168.2.10
192.168.2.0/24
这是子网上的 OpenVPN 服务器 IPping 192.168.255.1
192.168.255.0/24
这是子网上的 OpenVPN 服务器 IP
并且无法 ping 通192.168.2.1
,192.168.2.11
或者192.168.2.12
。但是从 OpenVPN 服务器容器,我可以。
我不是网络专家,所以我肯定我误解了一些东西,但是是什么呢?
答案1
您的其他机器需要对面的通过 OpenVPN 服务器到达 VPN 客户端的路由。(普通数据包路由是无状态的,因此仅仅因为你有正确的路由,发送ping 并不意味着接收者始终能够回复返回给您 – 它不能“搭载”原始请求。)
添加一条到您的 LAN 路由器 (.2.1) 的192.168.255.0/24
网络路由。192.168.2.10
或者,您也可以向每个单独的 LAN 设备添加相同的路由,甚至通过 DHCP 分发该路由(使用“无类静态路由”DHCP 选项)。
如果 LAN 路由器绝对不支持静态路由配置,一个常见的替代方法是在 OpenVPN 服务器的防火墙上启用 SNAT - 让它伪装来自 VPN 客户端的所有数据包,就好像它们实际上来自 192.168.2.10(VPN 服务器本身)。
这将允许 LAN 主机回复(因为它们认为它们正在回复另一个本地 LAN 设备),但不允许它们发起新的连接到VPN 客户端。(除非您添加“端口转发” DNAT 规则……)