Verbindung mit RDS-Instanz von außerhalb der VPC nicht möglich (FEHLER 2003 (HY000) Verbindung mit MySQL Server nicht möglich)


12

Ich habe eine VPC erstellt und darin eine RDS-Instanz. Die RDS-Instanz ist öffentlich zugänglich und hat folgende Einstellungen:

RDS-Einstellungen

Die an die RDS-Instanz angehängte Sicherheitsgruppe akzeptiert den gesamten Datenverkehr:

Einstellungen für Sicherheitsgruppen

Alle meine Netzwerk-ACLs akzeptieren den gesamten Datenverkehr. Ich kann jedoch nicht von einem Computer außerhalb meiner VPC auf meine Instanz zugreifen. Ich erhalte folgenden Fehler:

    root@vps151014:~# mysql -h mysql1.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com -P 3306 -u skullberry -p
Enter password: 
ERROR 2003 (HY000): Can't connect to MySQL server on 'mysql1.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com' (110)

Wenn ich denselben Befehl von einem EC2 in meiner VPC aus ausführe, kann ich eine Verbindung herstellen. Ich habe versucht, von mehreren Computern aus eine Verbindung herzustellen, alle ohne Firewall (dh Port 3306 offen).

Mir fehlt offensichtlich etwas, aber alles scheint richtig konfiguriert zu sein. Woran könnte das liegen?


1
Die (110)Fehlermeldung bedeutet "Zeitüberschreitung der Verbindung". Dies ist also definitiv ein IP-Konnektivitätsproblem. Ihre RDS-Instanz scheint mit zwei Subnetzen verbunden zu sein. Wie lautet die Standardroute dieser beiden Subnetze in der VPC-Konsole? Ist es ein "igw-xxxxxxxx" oder ist es ein "i-xxxxxxxx"?
Michael - Sqlbot

Beide Subnetze sind implizit der Hauptroutentabelle der VPC zugeordnet.
Dazedviper

1
Die explizite Zuordnung beider Subnetze zu einer benutzerdefinierten Routentabelle, die den gesamten ausgehenden Datenverkehr zum Internet-Gateway der VPC weiterleitet, spielt keine Rolle.
Dazedviper

1
Nun, das ist ein Mist. Die Standardroute zum "igw" schien das wahrscheinlichste fehlende Stück zu sein ... und sollte auf jeden Fall notwendig sein, damit dies funktioniert. Angenommen, Sie haben der VPC genügend Zeit gelassen, um sich im Hintergrund neu zu konfigurieren, nachdem Sie die Subnetz-Konfigurationen entsprechend geändert haben.
Michael - sqlbot

2
Ah, der Block, den Sie für alle IP-Adressen benötigen, ist 0.0.0.0/0. Ich werde die Antwort posten.
Michael - Sqlbot

Antworten:


20

Damit eine RDS-Instanz in VPC auf "öffentlich" (Internet) zugreifbar ist, müssen alle Subnetze, mit denen sie verbunden ist, "öffentlich" sein - im Gegensatz zu "privaten" Subnetzen der VPC.

Ein öffentliches Subnetz ist im Wesentlichen als Subnetz definiert, in dem das Internet-Gateway-Objekt (igw-xxxxxxxx) als Route zum "Internet" oder zumindest zu Internetzielen verwendet wird, auf die Sie zugreifen müssen. In der Regel ist dies eine Zieladresse von 0.0.0.0/0. Öffentliche Subnetze müssen für Instanzen (einschließlich RDS) verwendet werden, denen eine öffentliche IP-Adresse zugeordnet ist, und sollten nicht für Instanzen verwendet werden, denen keine öffentlichen IP-Adressen zugeordnet sind, da private Adressen ohne Übersetzung nicht über das Internet funktionieren.

Im Gegensatz dazu ist die Routing-Tabelle eines privaten Subnetzes so konfiguriert, dass sie Internetziele über eine andere EC2-Instanz, normalerweise eine NAT-Instanz, erreicht. Dies wird in der diesem Subnetz zugeordneten VPC-Routentabelle als i-xxxxxxxx und nicht als "igw" angezeigt. Dieser Computer (der sich selbst in einem anderen Subnetz befindet als das, für das er als Routenziel fungiert) dient als Übersetzer, sodass die Private-IP-only-Instanzen ausgehende Internetanforderungen mithilfe des öffentlichen NAT-Computers transparent ausführen können IP für ihre Internetbedürfnisse. Instanzen mit einer öffentlichen IP-Adresse können nicht ordnungsgemäß mit dem Internet interagieren, wenn sie an ein privates Subnetz angeschlossen sind.

In diesem speziellen Fall waren die mit der RDS-Instanz verknüpften Subnetze nicht wirklich so konfiguriert, dass sie einfach als privates oder öffentliches Subnetz klassifiziert werden konnten, da das Subnetz überhaupt keine Standardroute hatte. Das Hinzufügen einer Standardroute über das "igw" -Objekt oder, wie in OP, das Hinzufügen einer statischen Route zur Internet-IP-Adresse, wo Konnektivität erforderlich war, in die VPC-Routentabelle für die Subnetze behebt das Konnektivitätsproblem.

Allerdings ... Wenn ein ähnliches Problem auftritt, können Sie die Routentabelle nicht einfach ändern oder neue Routentabellen erstellen und die Subnetze mit diesen verknüpfen, es sei denn, in den Subnetzen funktioniert bereits nichts anderes ordnungsgemäß, da dies möglicherweise der Fall ist Es wird erwartet, dass die vorhandene Konnektivität unterbrochen wird. In diesem Fall besteht der richtige Weg darin, die Instanzen in verschiedenen Subnetzen mit den richtigen Routing-Tabelleneinträgen bereitzustellen.

Beim Einrichten einer VPC ist es ideal, die Subnetzrollen klar zu definieren und dann bei der ersten Inbetriebnahme der VPC die erforderlichen Routen vollständig bereitzustellen. Es ist auch wichtig, sich daran zu erinnern, dass das gesamte VPC- "LAN" ein softwaredefiniertes Netzwerk ist. Anders als in einem physischen Netzwerk, in dem der Router zu einem Engpass werden kann und es oft sinnvoll ist, Maschinen mit hohem Datenverkehr im selben Subnetz zu platzieren, hat das Überqueren von Subnetzen auf VPC keinen Leistungsnachteil. Computer sollten in Subnetzen platziert werden, die für die IP-Adressierungsanforderungen des Computers geeignet sind - öffentliche Adresse, öffentliches Subnetz; Keine öffentliche Adresse, privates Subnetz.

Weitere Informationen zur Logistik privater / öffentlicher Subnetze in VPC finden Sie unter Warum benötigen wir ein privates Subnetz in VPC (bei Stack Overflow).


2

Dies hat bereits eine gute Antwort, aber AWS erstellt ein öffentliches Subnetz für Sie, wenn Sie die Option "öffentlich zugänglich" auswählen. Für mich war das Problem eher die Standard-VPC-Sicherheitsgruppe. Ich habe mir die Netzwerk-ACL- Regeln angesehen - nicht die Sicherheitsgruppe . (Durch Auswahl der Option "Öffentlich zugänglich" in RDS wird die Sicherheitsgruppe hinzugefügt, die eingehenden Regeln werden jedoch nicht automatisch hinzugefügt.)

Klicken Sie auf RDS und identifizieren und klicken Sie auf die Sicherheitsgruppe. Fügen Sie dann unter "Eingehende Regeln" Port 3306 hinzu und fügen Sie Ihre IPV4-Verbindungsadresse hinzu, xxxx / 32 (oder 0.0.0.0/32 - wenn Sie möchten, dass das gesamte Internet eine Verbindung herstellt - aber seien Sie vorsichtig damit).


0

Stellen Sie außerdem sicher, dass das Netzwerk, mit dem Sie verbunden sind, keine Verbindungen zu einem anderen Server auf Port 3306 blockiert. Dies war bei mir der Fall, als ich mit meinem Unternehmensnetzwerk verbunden war.

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.