Durch Verbinden einer EC2-VPC mit OpenVPN geht der gesamte geroutete Datenverkehr verloren


7

Ich versuche, OpenVPN unter Amazon Linux zu verwenden, um das lokale LAN mit einer VPC unter EC2 zu verbinden. Ich habe Datenverkehr von der OpenVPN-Instanz zu einem Computer im LAN, aber andere Computer in der VPC sehen keinen Datenverkehr vom LAN.

Hier ist eine gekürzte Version des Netzwerks:

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

Vom EC2 OpenVPN-Server:

[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

Von der LAN-Firewall:

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

Vom zweiten Server auf 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

Hier ist jedoch der Kicker. Wenn Sie einen tcpdump auf dem EC2 OpenVPN-Server ausführen, wird der gesamte Datenverkehr wie folgt angezeigt:

[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

Tcpdump auf dem zweiten Server in EC2 zeigt nur die Echoanforderung und keine Antworten an.

  • IPtables-Firewalls sind auf allen EC2-Instanzen deaktiviert.
  • Die IP-Weiterleitung wurde auf dem OpenVPN-Server aktiviert.
  • Die EC2-Sicherheitsgruppe, für die sowohl der OpenVPN-Server als auch der zweite Server so eingestellt sind, dass der gesamte Datenverkehr von 10.0.0.0/8 und die Netzwerk-ACLs weit geöffnet sind.

Es scheint, dass dieser Datenverkehr von Amazon gelöscht wird, der außerhalb der VPC stammt, unabhängig von den Einstellungen der Sicherheitsgruppe.

Fehlt mir etwas, das dazu führen würde, dass dieser Verkehr unterbrochen wird?


1
ausgezeichneter Beitrag. Können Sie bitte Ihre routing-Einstellungen für server.conf freigeben, damit andere davon profitieren können?
CMag

Musstest du irgendwelche VPC-Routen ändern?
CMag

Antworten:


12

Es stellte sich heraus, dass EC2 die weitergeleiteten Pakete vom OpenVPN-Server blockierte.

Im EC2-Dashboard gibt es eine Einstellung unter Netzwerk & Sicherheit -> Netzwerkschnittstellen -> Aktionen -> Quelle / Ziel ändern. Prüfen.

Wenn ich dies auf allen meinen Instanzen deaktiviert habe, fließt der Datenverkehr über das VPN wie beabsichtigt.

Hoffentlich hilft das jemand anderem.


2
Ich würde nicht empfehlen, die Prüfung für alle Instanzen zu deaktivieren, nur der OpenVPN-Server reicht aus. Eine Erklärung für die Vorgänge finden Sie unter docs.aws.amazon.com/AmazonVPC/latest/UserGuide/… - "Jede EC2-Instanz führt standardmäßig Quell- / Zielprüfungen durch. Dies bedeutet, dass die Instanz die Quelle oder das Ziel sein muss von jeglichem Verkehr, den es sendet oder empfängt ".
Robert Johnson

1
Sie müssen nur die Quell- / Zielprüfung für die VPN-Instanzen deaktivieren, nicht für alle ec2-Instanzen
CMag

2

Du hast mich auf deine eigene Antwort geschlagen, also werde ich es ein wenig erweitern ...

Wenn Sie dies in Ihr Instanz-Bootstrap-Skript einbauen müssen, können Sie dem Benutzerdatenblock Folgendes hinzufügen (beim Starten der Instanz finden Sie unter Schritt 3, Konfigurieren von Instanzdetails ... den Abschnitt Erweiterte Details am Ende der Seite ) für die Instanz ... Aktualisieren Sie Zeile 3 für die richtige Region:

#!/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

... und wenn es sich um eine NAT-Instanz handelt, können Sie Ihre Routentabelle ändern, indem Sie diese Zeile hinzufügen (aktualisieren Sie die Routentabellen-ID für die von Ihrer VPC verwendete Routentabellen-ID):

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

Damit dies funktioniert, benötigt Ihre Instanz Rechte, um das Attribut zu aktualisieren und die Route zu ersetzen. Sie können dies mit einer EC2-Rolle mit der folgenden Richtlinienanweisung erreichen und dann den Richtliniennamen im Feld IAM-Rolle (ebenfalls im Feld) angeben Schritt 3 des EC2-Assistenten (Konfigurieren von Instanzdetails):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1413415456000",
      "Effect": "Allow",
      "Action": [
        "ec2:ModifyInstanceAttribute",
        "ec2:ReplaceRoute"
      ],
      "Resource": "*"
    }
  ]
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.