我有在 AWS VPC 中运行的 OpenVPN 服务器,并且能够使用 OpenVPN 客户端将本地服务器连接到 AWS。
能够 ping 在 AWS VPC 中运行的实例。但无法从 EC2 ping 本地服务器。以下是图表。
(办公网络)10.24.11.1/24(AWS VPC)10.2.0.0/16 +--------------------------------------------+ +----------------------------------+ | | | | | OpenVPN 客户端(Pi) | | OpenVPN 服务器(Ubuntu) | | | | | | +-----------------------------+ | | +-----------------------------+ | | | | | | | | | | eth0 | | |tun0 | | | | | <--+-->| 10.8.0.2|<--|--+----|->|10.8.0.1 10.2.2.101 |ens5| | | | | | | | | |br0|10.24.11.15||||||| | | | | | | | | | | WLAN0 | | | | | | | +-----------------------------+ | | +-----------------------------+ | | ^ | | | | | | | | | WiFi客户端 | | | | | +------------------+ | | | +----------+ | | |wlan0:10.24.11.201| | | | | 主机1 | | | | |--+ | | | | | | +------------------+ | | |10.2.1.145| | +--------------------------------------------+ | +----------+ | +---------------------------------+
OpenVPN Server
路线 :
ubuntu@openvpn:~$ ip route
default via 10.2.2.1 dev ens5 proto dhcp src 10.2.2.101 metric 100
10.2.2.0/24 dev ens5 proto kernel scope link src 10.2.2.101
10.2.2.1 dev ens5 proto dhcp scope link src 10.2.2.101 metric 100
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.1
10.24.11.0/24 via 10.8.0.2 dev tun0 proto static src 10.8.0.1
OpenVPN Client
路线 :
pi@accesspoint:~ $ ip route
default via 10.24.11.1 dev br0 src 10.24.11.15 metric 203
10.2.0.0/16 via 10.8.0.1 dev tun0 proto static src 10.8.0.2
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2
10.24.11.0/24 dev br0 proto kernel scope link src 10.24.11.15 metric 203
35.176.225.61 via 10.24.11.1 dev br0
WiFi Client
路线 :
pi@client:~ $ ip route
default via 10.24.11.1 dev wlan0 src 10.24.11.201 metric 303
10.2.0.0/16 via 10.24.11.15 dev wlan0 proto static
10.24.11.0/24 dev wlan0 proto kernel scope link src 10.24.11.201 metric 303
在 VPC 路由表中添加了10.24.11.0/24
& 的路由10.8.0.1/16
以指向私有 IP。OpenVPN Server
也有net.ipv4.ip_forward=1
OpenVPN/etc/sysctl.conf
服务器和 OpenVPN 客户端。
我能够10.2.0.0/16
从OpenVPN Client
& ping 通子网的任何 IP WiFi Client
,但无法10.24.11.0/24
从ping 通子网的任何 IP 10.2.0.0/16
。
防火墙规则OpenVPN server
:
ubuntu@openvpn:~$ sudo iptables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
如果我 ping 的 IPOpenVPN 服务器 10.2.2.101
&VPN 隧道 IP10.8.0.1
来自主持人 1我看到带有sudo tcpdump -i ens5 -nn icmp
10.24.11.0/24
因此,在 VPC 路由表中添加的指向私有 IP10.8.0.1/16
的路由OpenVPN Server
不起作用。
在 上禁用源/目标检查后,OpenVPN Server
我能从 ping 通 的 IP 10.8.0.0/24
。10.2.0.0/16
但不能10.24.11.0/24
。
当我从主机 1 ping IP 时10.24.11.0/24
,我确实看到数据包进入OpenVPN 服务器 sudo tcpdump -i tun0 -nn icmp
但无法从 OpenVPN 客户端的隧道中出来sudo tcpdump -i tun0 -nn icmp
更新
我运行sudo iptables -I INPUT -s {OpenVPN-Server-Public-IP} -j ACCEPT
,然后OpenVPN Client
尝试ping 10.24.11.15
从Host 1
。能够在 OpenVPN 服务器上看到进入隧道的数据包
ubuntu@openvpn:~$ sudo tcpdump -i tun0 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
09:38:42.344238 IP 10.2.2.46 > 10.24.11.15: ICMP echo request, id 12967, seq 203, length 64
09:38:43.344222 IP 10.2.2.46 > 10.24.11.15: ICMP echo request, id 12967, seq 204, length 64
09:38:44.344280 IP 10.2.2.46 > 10.24.11.15: ICMP echo request, id 12967, seq 205, length 64
但在 OpenVPN 客户端服务器上,没有包从隧道中传出
pi@accesspoint:~ $ sudo tcpdump -i tun0 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
当我Host 1
从 OpenVPN 客户端 ping 时,它起作用了:
pi@accesspoint:~ $ ping 10.2.2.46
PING 10.2.2.46 (10.2.2.46) 56(84) bytes of data.
64 bytes from 10.2.2.46: icmp_seq=1 ttl=63 time=72.5 ms
64 bytes from 10.2.2.46: icmp_seq=2 ttl=63 time=72.4 ms
64 bytes from 10.2.2.46: icmp_seq=3 ttl=63 time=72.4 ms
以下是 tcpdump:
ubuntu@openvpn:~$ sudo tcpdump -i tun0 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
16:47:06.002682 IP 10.8.0.2 > 10.2.2.46: ICMP echo request, id 2807, seq 1, length 64
16:47:06.003034 IP 10.2.2.46 > 10.8.0.2: ICMP echo reply, id 2807, seq 1, length 64
16:47:07.003467 IP 10.8.0.2 > 10.2.2.46: ICMP echo request, id 2807, seq 2, length 64
16:47:07.003799 IP 10.2.2.46 > 10.8.0.2: ICMP echo reply, id 2807, seq 2, length 64
16:47:08.004003 IP 10.8.0.2 > 10.2.2.46: ICMP echo request, id 2807, seq 3, length 64
16:47:08.004353 IP 10.2.2.46 > 10.8.0.2: ICMP echo reply, id 2807, seq 3, length 64
来自Host 1
:
ubuntu@host-1:~$ sudo tcpdump -i eth0 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:47:06.001635 IP 10.2.2.101 > 10.2.2.46: ICMP echo request, id 2807, seq 1, length 64
20:47:06.001694 IP 10.2.2.46 > 10.2.2.101: ICMP echo reply, id 2807, seq 1, length 64
20:47:07.002398 IP 10.2.2.101 > 10.2.2.46: ICMP echo request, id 2807, seq 2, length 64
20:47:07.002445 IP 10.2.2.46 > 10.2.2.101: ICMP echo reply, id 2807, seq 2, length 64
20:47:08.002915 IP 10.2.2.101 > 10.2.2.46: ICMP echo request, id 2807, seq 3, length 64
20:47:08.002961 IP 10.2.2.46 > 10.2.2.101: ICMP echo reply, id 2807, seq 3, length 64
iptables-save
从OpenVPN Server
:
ubuntu@openvpn:~$ sudo iptables-save
# Generated by iptables-save v1.6.1 on Tue Aug 13 17:01:18 2019
*filter
:INPUT ACCEPT [83032:54462790]
:FORWARD ACCEPT [3756:403911]
:OUTPUT ACCEPT [84053:7826032]
-A FORWARD -i ens5 -o tun0 -j ACCEPT
-A FORWARD -i ens5 -o tun0 -j ACCEPT
COMMIT
# Completed on Tue Aug 13 17:01:18 2019
# Generated by iptables-save v1.6.1 on Tue Aug 13 17:01:18 2019
*nat
:PREROUTING ACCEPT [2350:165593]
:INPUT ACCEPT [276:21608]
:OUTPUT ACCEPT [12682:1773625]
:POSTROUTING ACCEPT [12672:1773673]
-A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source 10.2.2.101
COMMIT
# Completed on Tue Aug 13 17:01:18 2019
答案1
我能够从 OpenVPN 客户端和 WiFi 客户端 ping 通子网 10.2.0.0/16 的任何 IP,但无法从 10.2.0.0/16 ping 通子网 10.24.11.0/24 的任何 IP。
这表明您的路由是正确的,但很可能是防火墙出了问题。请确保:
防火墙Ubuntu允许从 VPC 到 Office 的新连接。开始时应该执行如下操作:
iptables -I FORWARD -i ens5 -o tun0 -j ACCEPT
防火墙切入点允许从隧道到 Wifi 的新连接。
iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
如果仍然不起作用,请从AWS 主机 1到Wifi 客户端tcpdump
并在两者上使用Ubuntu和切入点验证数据包去往何处。
验证 ping 数据包是否来自主机 1。如果不是,请检查安全组和 EC2源/目标检查
[aws ubuntu] # tcpdump -i ens5 -nn icmp
验证数据包是否进入 OpenVPN 隧道。如果没有,请检查Ubuntu的 iptables 防火墙。
[aws ubuntu] # tcpdump -i tun0 -nn icmp
验证数据包是否到达接入点的隧道。
[office accesspoint] # tcpdump -i tun0 -nn icmp
验证它们是否从隧道转发到 Wifi。如果没有,请检查接入点上的防火墙。
[office accesspoint] # tcpdump -i br0 -nn icmp
更新根据附加信息...
当我从主机 1 ping IP 时
10.24.11.0/24
,我确实看到数据包进入 OpenVPN 服务器上的隧道sudo tcpdump -i tun0 -nn icmp
,但没有从 OpenVPN 客户端上的隧道出来sudo tcpdump -i tun0 -nn icmp
这很奇怪。这听起来像是切入点防火墙可能阻止来自Ubuntu。
您可以尝试将这条规则添加到接入点的防火墙吗:
iptables -I INPUT -s {aws-ubuntu-public-ip} -j ACCEPT
希望有帮助:)