我正在与一个openVPN设置连接两个网站。 这是场景的样子
办公室1(服务器):
办公室2(客户):
在tun0上的openvpn客户端内部IP:192.168.0.6
openvpn内部networking:192.168.0.0/24
客户端和服务器都在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中设置自定义路由源”的问题以获取更多信息。