OpenVPN站点到站点路由困境

我正在与一个openVPN设置连接两个网站。 这是场景的样子

办公室1(服务器):

  • 本地networking:192.168.178.0/24
  • openvpn server public ip:192.168.178.2在br0上
  • 在tun0上的openvpn server internal ip:192.168.0.1

办公室2(客户):

客户端和服务器都在NAT路由器的后面,并带有dynamic分配的IP地址。

基本上,任何一个办公室所涉及的机器都应该“彼此看”。 在两个站点上build立隧道并正确configuration路由表后,两个networking上的常规主机都可以ping通这两个networking上的所有内容。 目前很好。

但是,端点只能看到对方,而不能看到各自远端networking上的主机。 例如,如果做一个

ping 192.168.178.2 

从VPN端点192.168.177.2,它工作得很好,任何其他地址不会工作; 主机不会回复。

现在看看tcpdump的输出,当我ping另一个地址,例如192.168.178.3。

11:11:28.104640 IP 192.168.0.6> 192.168.178.3:ICMP回显请求,ID 2130,序列1,长度64

源IP似乎不太正确。 它属于OpenVPN的内部networking,我没有得到ICMP回复。

当我明确指示ping使用正确的源IP时,事情开始工作:

 ping 192.168.178.3 -I 192.168.177.2 

现在,tcpdump的输出也是可以的:

11:20:08.266271 IP 192.168.177.2> 192.168.178.3:ICMP echo request,id 7883,seq 17,length 64 11:20:08.316037 IP 192.168.178.3> 192.168.177.2:ICMP echo reply,id 7883,seq 17,长度64

查看客户端路由表中的关键条目,很明显源地址来自内部networking:

 default via 192.168.177.1 dev p2p1 192.168.0.1 via 192.168.0.5 dev tun0 192.168.0.5 dev tun0 proto kernel scope link src 192.168.0.6 192.168.177.0/24 dev p2p1 proto kernel scope link src 192.168.177.2 192.168.178.0/24 via 192.168.0.5 dev tun0 

有没有可能使OpenVPN创build一个适当的src条目?

这里是我的openVPNconfiguration文件。 我会跳过TLS部分,因为隧道本身按预期工作。

服务器在办公室1:

 local 192.168.178.2 server 192.168.0.0 255.255.255.0 proto tcp-server port 1194 dev tun mssfix user nobody group nogroup keepalive 20 120 ping-timer-rem persist-tun persist-key float comp-lzo push "comp-lzo" push "route 192.168.178.0 255.255.255.0" route 192.168.177.0 255.255.255.0 client-config-dir client-configs 

有一个客户端configuration,看起来像这样:

 iroute 192.168.177.0 255.255.255.0 push "route 192.168.178.0 255.255.255.0 vpn_gateway" 

客户在办公室2:

 client dev tun0 remote <server address> proto tcp-client port 1194 connect-retry 15 comp-lzo user nobody group nogroup persist-tun persist-key 

我真的很茫然,你的帮助非常感谢。

你看到的行为是通过devise。 networking上的主机将默认使用stream量正在退出的接口的IP地址作为源IP。

其中一个局域网上的客户机将使用例如192.168.178.10作为其源IP,因为它不是多宿主机。 然后,网关将数据包路由到您的OpenVPN框,它将通过隧道,没有问题。

但是,如果你从OpenVPN盒子本身去,它将使用OpenVPN接口的IP地址,因为这是数据包将退出的地方。

这很好。 它到达远程站点。 但是,然后远程站点想要将ping响应的数据包发送到192.168.0.6。 响应进入网关,但由于网关(我假设,因为您没有发布networking上的网关路由表)没有该networking的路由,它不知道如何继续。

解决这个问题最简单的方法就是简单地为192.168.0.0/24(你的OpenVPNnetworking)添加一条路由到两个networking的网关。

另一种select,如果你的操作系统支持它(你没有指定运行OpenVPN的操作系统),看看是否可以使用路由的“src”参数来覆盖selectIP地址的默认行为的出口接口。 请参阅标题为“ 如何在openvpn中设置自定义路由源”的问题以获取更多信息。