Openvpn:客户端可以 ping 服务器,服务器无法 ping 客户端

Openvpn:客户端可以 ping 服务器,服务器无法 ping 客户端

我在 AWS 和 GoGrid 数据中心之间设置 openvpn 时遇到了奇怪的问题。我的网络如下所示

/----------------\               /----------------\               /------------------\               /----------------\
|  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 而没有问题(两个 aws VM 上的 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 服务器配置(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 客户端配置(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. 从 gogrid 执行 ping 操作,通过 VPS-VPN.gg tun0 接口进入 vpn 隧道,但未到达 VPS-VPN.aws 上的 tun0 接口
  3. 从 VPS-VPN.gg 到 VPS-VPN.aws 的 tun0 (10.8.0.10) IP 的 ping 操作正常

两个VPS-VPN都启用了ip_forward。

VPS-VPN.aws 上的 IPTables 如下所示,AWS 安全组设置为允许来自任何地方的所有流量(当我可以在虚拟机上使用 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 实例。这很有效,我可以从 AWS ping GoGrid。

您能指出我哪里犯了错误吗?据我所知,此设置应该适用于两个方向。非常感谢。

答案1

所以我找到了一个解决方案。我的客户端到客户端路由配置得很糟糕。为了使它正常工作,client-to-client服务器配置文件中必须有指令,必须正确设置client-config-dir指令,并且此目录中必须有一个用于连接客户端的 CCD 文件。

CCD 文件的名称必须与证书连接客户端用于进行身份验证的通用名称相同,并且必须在此文件中添加客户端网络的路由规则(就我的情况而言)

iroute 10.160.0.0 255.255.192.0

经过这些改变之后,双向沟通就能完美进行。

相关内容