将 EC2 VPC 与 OpenVPN 连接起来,所有路由流量都将丢失

lsc*_*iss 7 openvpn amazon-ec2 amazon-vpc

我正在尝试在 Amazon Linux 上使用 OpenVPN 将本地 LAN 连接到 EC2 上的 VPC。我有流量从 OpenVPN 实例流向 LAN 上的任何机器,但 VPC 上的其他机器没有看到来自 LAN 的流量。

这是网络的修剪版本:

       Local network          /        EC2 VPC, 10.2.0.*/255.255.255.0
  10.1.0.*/               ,'
     255.255.255.0     ,'
                      .'
                      |
 +---------------+   |             
 | OpenVPN on    |   |             
 |   firewall    XXX |   +---------------+
 | 10.1.0.1      |  XXXX | OpenVPN server|
 +------`.-------+   \  XX  10.2.0.10  `-.    +-------------+
          \          '.  +---------------+  `-. Second server
  +--------`.---+     |                       | 10.2.0.12   |
  |Local server |      \                      +-------------+
  | 10.1.0.3    |       \
  +-------------+        \
Run Code Online (Sandbox Code Playgroud)

从 EC2 OpenVPN 服务器:

[root@ip-10-2-0-10 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.2.0.1        0.0.0.0         UG    0      0        0 eth0
10.1.0.0        10.1.2.5        255.255.255.0   UG    0      0        0 tun0
10.1.2.0        10.1.2.5        255.255.255.0   UG    0      0        0 tun0
10.1.2.5        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.2.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0

[root@ip-10-2-0-10 ~]# ping -c 2 10.1.0.3
PING 10.1.0.3 (10.1.0.3) 56(84) bytes of data.
64 bytes from 10.1.0.3: icmp_seq=1 ttl=127 time=488 ms
64 bytes from 10.1.0.3: icmp_seq=2 ttl=127 time=54.9 ms

--- 10.1.0.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1056ms
rtt min/avg/max/mdev = 54.925/271.767/488.609/216.842 ms
Run Code Online (Sandbox Code Playgroud)

从 LAN 防火墙:

root@firewall:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         xxx.xxx.xxx.xxx 0.0.0.0         UG    0      0        0 eth0.2
10.1.0.0        0.0.0.0         255.255.255.0   U     0      0        0 br-lan
10.1.2.0        10.1.2.2        255.255.255.0   UG    0      0        0 tun0
10.1.2.2        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.2.0.0        10.1.2.2        255.255.255.0   UG    0      0        0 tun0
Run Code Online (Sandbox Code Playgroud)

从 EC2 上的第二台服务器:

[root@ip-10-2-0-12 ~]# ping -c 3 10.1.0.3
PING 10.1.0.3 (10.1.0.3) 56(84) bytes of data.

--- 10.1.0.3 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 12014ms
Run Code Online (Sandbox Code Playgroud)

然而,这是踢球者。在 EC2 OpenVPN 服务器上执行 tcpdump 会显示所有流量应有的流动:

[root@ip-10-2-0-10 ~]# tcpdump -i eth0 -n host 10.1.0.3
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
13:46:58.779826 IP 10.2.0.12 > 10.1.0.3: ICMP echo request, id 21846, seq 1, length 64
13:46:58.852756 IP 10.1.0.3 > 10.2.0.12: ICMP echo reply, id 21846, seq 1, length 64
13:46:59.787467 IP 10.2.0.12 > 10.1.0.3: ICMP echo request, id 21846, seq 2, length 64
13:46:59.847424 IP 10.1.0.3 > 10.2.0.12: ICMP echo reply, id 21846, seq 2, length 64
Run Code Online (Sandbox Code Playgroud)

EC2 上第二台服务器上的 Tcpdump 仅显示回显请求而没有回复。

  • 所有 EC2 实例上都禁用了 IPtables 防火墙。
  • OpenVPN 服务器上已启用 IP 转发。
  • OpenVPN 服务器和第二服务器都设置为允许来自 10.0.0.0/8 的所有流量的 EC2 安全组,并且网络 ACL 是完全开放的。

无论安全组设置如何,Amazon 似乎都丢弃了源自 VPC 外部的流量。

我缺少什么会导致此流量被丢弃的东西?

lsc*_*iss 11

结果证明 EC2 阻止了来自 OpenVPN 服务器的转发数据包。

EC2 仪表板上的网络和安全 -> 网络接口 -> 操作 -> 更改源/目标下有一个设置。查看。

当我在所有实例上禁用此功能时,通过 VPN 的流量按预期流动。

希望这会帮助别人。

  • 我不建议禁用对所有实例的检查,仅 OpenVPN 服务器就足够了。作为对这里发生的事情的解释,请参阅 http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck -“每个 EC2 实例默认执行源/目标检查。这意味着实例必须是它发送或接收的任何流量的来源或目的地”。 (2认同)