Openvpn:客户端可以ping服务器,服务器不能ping客户端

AWS和GoGrid数据中心之间的openvpn设置有奇怪的问题。 我的networking看起来像这样

/----------------\ /----------------\ /------------------\ /----------------\ | VPS-DEVEL.gg | | VPS-VPN.gg | | VPS-VPN.aws | | VPS-PROVIS.aws | | 10.160.64.7/24 | eth1 --- eth1 | 10.160.64.9/24 | tun0 --- tun0 | 10.160.48.219/24 | eth0 --- eth0 | 10.160.52.8/24 | \----------------/ \----------------/ \------------------/ \----------------/ 

我可以从aws ping gogrid没有问题(两个虚拟机都是VPS-DEVEL.gg和VPS-VPN.gg),但是我不能从gogrid ping到AWS。

我在VPS-VPN.gg上的路由表看起来是这样的:

 [root@VPSVPN ~]# route -n Směrovací tabulka v jádru pro IP Adresát Brána Maska Přízn Metrik Odkaz Užt Rozhraní 169.254.4.1 164.40.132.83 255.255.255.255 UGH 0 0 0 eth0 169.254.4.2 10.160.64.9 255.255.255.255 UGH 0 0 0 eth1 10.8.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 164.40.132.80 0.0.0.0 255.255.255.240 U 0 0 0 eth0 10.8.0.0 10.8.0.2 255.255.255.240 UG 0 0 0 tun0 10.159.254.0 10.160.64.1 255.255.255.0 UG 0 0 0 eth1 10.160.64.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.160.0.0 10.8.0.2 255.255.192.0 UG 0 0 0 tun0 0.0.0.0 164.40.132.81 0.0.0.0 UG 0 0 0 eth0 

我在VPS-VPN.aws上的路由表:

 admin@ip-10-160-48-219:~$ sudo route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.160.48.1 0.0.0.0 UG 0 0 0 eth0 10.8.0.0 10.8.0.9 255.255.255.240 UG 0 0 0 tun0 10.8.0.9 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 10.160.48.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 10.160.64.0 10.8.0.9 255.255.255.0 UG 0 0 0 tun0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 

我的openvpn服务器configuration(gogrid方面):

 [root@VPSVPN ~]# cat /etc/openvpn/server.conf port 1194 proto udp dev tun ca ca.crt cert vpsvpn.crt key vpsvpn.key # This file should be kept secret dh dh1024.pem server 10.8.0.0 255.255.255.240 ifconfig-pool-persist ipp.txt client-config-dir /etc/openvpn/ccd # ghor client-to-client # ghor keepalive 10 120 comp-lzo user nobody group nobody persist-key persist-tun max-clients 100 status /var/log/openvpn-status.log log-append /var/log/openvpn.log verb 11 route 10.160.0.0 255.255.192.0 push "route 10.160.64.0 255.255.255.0" 

我的openvpn客户端configuration(aws方):

 admin@ip-10-160-48-219:~$ cat /etc/openvpn/gogrid/gogrid.ovpn client dev tun proto udp remote 164.40.132.83 1194 resolv-retry infinite nobind persist-key persist-tun comp-lzo verb 3 ca /etc/openvpn/gogrid/ca.crt cert /etc/openvpn/gogrid/test-eu-west-1-aws.crt key /etc/openvpn/gogrid/test-eu-west-1-aws.key askpass /etc/openvpn/gogrid/test-eu-west-1-aws.pass 

TCPDump显示这个:

  1. 来自aws(两个虚拟机)的Ping将VPS-VPN.aws tun0接口转换为vpn隧道,在VPS-VPN.gg上转到tun0并回复
  2. Ping从Gogrid进入VPS-VPN.gg tun0接口进入VPN隧道,但没有到达VPS-VPN.aws上的tun0接口
  3. Ping从VPS-VPN.gg到VPS-VPN.aws tun0(10.8.0.10)的IP工作正常

两个VPS-VPN都启用了ip_forward。

VPS-VPN.aws上的IPTables看起来这样,AWS安全组被设置为允许来自任何地方的所有stream量(当我可以在VM上使用iptables时,我不喜欢使用SecGroups):

 admin@ip-10-160-48-219:~$ sudo iptables -nvL Chain INPUT (policy ACCEPT 867 packets, 68073 bytes) pkts bytes target prot opt in out source destination 1426 117K fail2ban-ssh tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 1360 105K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 743 packets, 72322 bytes) pkts bytes target prot opt in out source destination Chain fail2ban-ssh (1 references) pkts bytes target prot opt in out source destination 1400 115K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 admin@ip-10-160-48-219:~$ sudo iptables -t nat -nvL Chain PREROUTING (policy ACCEPT 1743 packets, 105K bytes) pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 1359 packets, 69760 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 390 packets, 40130 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 748 67734 MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0 17 1428 MASQUERADE all -- * tun0 0.0.0.0/0 0.0.0.0/0 

我在路由中使用10.160.0.0/18,因为我将有更多的VPC在这个范围内有子网。 每个AWS VPC具有子网/ 21。 所有东西都在GoGrid端的子网10.160.64.0/24中,并且aws路由表被设置为将这个子网的所有东西都路由到VPS-VPN.aws实例。 这是工作,我可以ping从AWS的GoGrid。

你能指出我犯了什么错误吗? 这个设置AFAIK应该适用于两个方向。 非常感谢。

所以我find了一个解决scheme 我已经严重configuration客户端到客户端路由。 为了得到这个工作,在服务器configuration文件中必须有client-to-client指令,必须正确设置client-config-dir指令,并且在这个目录中必须有一个用于连接客户端的CCD文件。

CCD文件的名称必须与客户端用于authentication的证书连接中的Common name相同,并且在该文件中必须添加客户端networking的路由规则,在我的情况下

 iroute 10.160.0.0 255.255.192.0 

在做出这些改变之后,沟通在两个方面都是完美的。