Ich habe eine VPC erstellt und darin eine RDS-Instanz. Die RDS-Instanz ist öffentlich zugänglich und hat folgende Einstellungen:
Die an die RDS-Instanz angehängte Sicherheitsgruppe akzeptiert den gesamten Datenverkehr:
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?
mysql
amazon-web-services
amazon-vpc
amazon-rds
benommen
quelle
quelle
(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"?0.0.0.0/0
. Ich werde die Antwort posten.Antworten:
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).
quelle
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).
quelle
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.
quelle