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

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

这是一个networking的修剪版本:

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 | \ +-------------+ \ 

从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 

从局域网防火墙:

 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 

从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 

然而,这是踢球。 在EC2 OpenVPN服务器上执行tcpdump会显示所有stream量,因为它应该:

 [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 

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

  • 在所有EC2实例上禁用IPtables防火墙。
  • IP转发已经在OpenVPN服务器上启用。
  • OpenVPN服务器和第二台服务器的EC2安全组设置为允许所有来自10.0.0.0/8的stream量和networkingACL都是开放的。

无论安全组设置如何,此stream量都将由Amazon在VPC外部丢弃。

任何我想念会导致这个stream量被丢弃?

原来,EC2阻止了来自OpenVPN服务器的转发数据包。

networking和安全 – >networking接口 – >操作 – >更改源/目标下的EC2控制板上有一个设置。 检查。

当我禁用这个在我的所有情况下通过VPNstream量按预期stream动。

希望这会帮助别人。

你打我自己的答案,所以我会扩大一点…

如果需要将其构build到实例引导脚本中,可以将以下内容添加到用户数据块中(启动实例时,在步骤3,configuration实例详细信息…展开页面底部的高级详细信息部分)为实例…更新行3为正确的区域:

 #!/bin/bash export my_instance=`curl http://169.254.169.254/latest/meta-data/instance-id` export AWS_DEFAULT_REGION=us-east-1 aws ec2 modify-instance-attribute --instance-id $my_instance --no-source-dest-check 

…如果是NAT实例,则可以通过添加以下行来修改路由表(更新route-table-id用于VPC使用的路由表ID):

 aws ec2 replace-route --route-table-id rtb-01234567 --destination-cidr-block 0.0.0.0/0 --instance-id $my_instance 

为此,您的实例需要权限来更新属性并replace路由…您可以使用以下策略语句使EC2angular色发生这种情况,然后在“IAMangular色”框中指定策略名称(也位于EC2向导的步骤3,configuration实例详情):

 { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1413415456000", "Effect": "Allow", "Action": [ "ec2:ModifyInstanceAttribute", "ec2:ReplaceRoute" ], "Resource": "*" } ] }