web-dev-qa-db-ja.com

EC2 VPCをOpenVPNに接続すると、ルーティングされたすべてのトラフィックが失われる

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

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

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

EC2の2番目のサーバーから:

[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を実行すると、必要に応じてすべてのトラフィックフローが表示されます。

[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の2番目のサーバーのTcpdumpは、エコー要求のみを表示し、応答は表示しません。

  • IPtablesファイアウォールは、すべてのEC2インスタンスで無効になっています。
  • OpenVPNサーバーでIP転送が有効になっています。
  • OpenVPNサーバーとセカンドサーバーの両方が10.0.0.0/8からのすべてのトラフィックを許可するように設定されているEC2セキュリティグループと、ネットワークACLはワイドオープンです。

セキュリティグループの設定に関係なく、このトラフィックはVPCの外部から発信されるAmazonによってドロップされているようです。

このトラフィックがドロップされる原因となる欠けているものはありますか?

7
lschweiss

EC2がOpenVPNサーバーから転送されたパケットをブロックしていたことがわかりました。

EC2ダッシュボードの[Network&Security]-> [Network Interfaces]-> [Actions]-> [Change Source/Dest]に設定があります。小切手。

すべてのインスタンスでこれを無効にすると、VPN経由のトラフィックは意図したとおりに流れます。

うまくいけば、これは他の誰かを助けるでしょう。

12
lschweiss

あなたは私をあなた自身の答えに打ち負かしたので、それを少し広げます...

これをインスタンスに組み込む必要がある場合bootstrapスクリプト、以下をユーザーデータブロックに追加できます(インスタンスの起動時に、ステップ3の[インスタンスの詳細を構成...]で展開しますページの下部にある[詳細]セクション)インスタンスの場合...正しいリージョンの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インスタンスの場合は、次の行を追加してルートテーブルを変更できます(VPCで使用されるルートテーブルIDのroute-table-idを更新します):

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

これを機能させるには、インスタンスに属性を更新してルートを置き換える権限が必要です...次のポリシーステートメントを使用してEC2ロールでそれを実現し、[IAMロール]ボックスでポリシー名を指定することもできます( EC2ウィザードのステップ3、インスタンスの詳細の構成):

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