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 虛擬機的 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 顯示了這一點:
- 來自 aws(兩個虛擬機)的 Ping 通過 VPS-VPN.aws tun0 介面進入 vpn 隧道,到達 VPS-VPN.gg 上的 tun0 並回復正確
- 來自 gogrid 的 Ping 通過 VPS-VPN.gg tun0 介面進入 vpn 隧道,但未到達 VPS-VPN.aws 上的 tun0 介面
- 從 VPS-VPN.gg ping 到 tun0 (10.8.0.10) 的 VPS-VPN.aws IP 執行良好
兩個 VPS-VPN 都啟用了 ip_forward。
VPS-VPN.aws 上的 IPTables 看起來像這樣,AWS 安全組設置為允許來自任何地方的所有流量(當我可以在 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 實例。這是有效的,我可以從 AWS ping GoGrid。
你能指出我在哪裡犯了一些錯誤嗎?此設置 AFAIK 應該適用於兩個方向。非常感謝。
所以我找到了解決方案。我的客戶端到客戶端路由配置錯誤。為了使其正常工作,
client-to-client
伺服器配置文件中必須有指令,必須正確設置client-config-dir
指令,並且此目錄中必須有用於連接客戶端的 CCD 文件。CCD 文件的名稱必須與證書連接客戶端用於身份驗證的通用名稱相同,並且在此文件中必須添加客戶端網路的路由規則,在我的情況下
iroute 10.160.0.0 255.255.192.0
進行此更改後,雙向通信都可以正常工作。