Stworzyłem VPC, a wewnątrz niego instancję RDS. Instancja RDS jest publicznie dostępna, a jej ustawienia są następujące:
Grupa zabezpieczeń dołączona do instancji RDS akceptuje cały ruch:
Wszystkie sieciowe listy ACL akceptują cały ruch. Jednak nie mogę uzyskać dostępu do mojej instancji z komputera spoza mojego VPC. Otrzymuję następujący błąd:
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)
Jeśli uruchomię to samo polecenie z EC2 w moim VPC, mogę się połączyć. Próbowałem połączyć się z kilku komputerów, wszystkie bez firewalla (tzn. Otwarty port 3306).
Oczywiście czegoś mi brakuje, ale wszystko wydaje się być poprawnie skonfigurowane. Co może być problemem?
mysql
amazon-web-services
amazon-vpc
amazon-rds
dazedviper
źródło
źródło
(110)
o błędzie oznacza „upłynął limit czasu połączenia”, więc zdecydowanie jest to problem z łącznością IP. Wystąpienie RDS pokazuje, że jest powiązane z dwiema podsieciami. W konsoli VPC jaka jest domyślna trasa tych dwóch podsieci? Czy jest to „igw-xxxxxxxx” czy też „i-xxxxxxxx”?0.0.0.0/0
. Wyślę odpowiedź.Odpowiedzi:
Aby instancja RDS w VPC była dostępna publicznie (Internet), wszystkie podsieci, do których jest ona podłączona, muszą być „publiczne” - w przeciwieństwie do „prywatnych” - podsieci VPC.
Podsieć publiczna jest zasadniczo zdefiniowana jako podsieć, w której obiekt bramy internetowej (igw-xxxxxxxx) jest drogą do „Internetu” lub przynajmniej do miejsc docelowych, do których należy uzyskać dostęp. Zazwyczaj jest to adres docelowy
0.0.0.0/0
. Publicznych podsieci należy używać w przypadku instancji (w tym RDS), które będą miały powiązany publiczny adres IP i nie należy ich używać w instancjach, które nie będą miały publicznych adresów IP, ponieważ prywatne adresy nie działają w Internecie bez tłumaczenia.Natomiast podsieć prywatna ma swoją tablicę routingu skonfigurowaną do osiągania miejsc docelowych w Internecie za pośrednictwem innego wystąpienia EC2, zwykle wystąpienia NAT. To pokazuje w tabeli tras VPC powiązanej z tą podsiecią jako i-xxxxxxxx, a nie „igw”. Ta maszyna (która sama w rzeczywistości będzie w innej podsieci niż ta, dla której działa jako miejsce docelowe trasy) służy jako tłumacz, umożliwiając instancjom dostępnym wyłącznie w adresie IP przezroczyste wysyłanie wychodzących żądań internetowych za pomocą publicznego komputera NAT IP dla potrzeb Internetu. Instancje z publicznym adresem IP nie mogą poprawnie współpracować z Internetem, jeśli są podłączone do prywatnej podsieci.
W tym konkretnym przypadku podsieci powiązane z instancją RDS nie zostały tak naprawdę skonfigurowane jako coś, co można by po prostu sklasyfikować jako prywatną lub publiczną podsieć, ponieważ podsieć w ogóle nie miała domyślnej trasy. Dodanie domyślnej trasy przez obiekt „igw” lub, podobnie jak OP, dodanie trasy statycznej do internetowego adresu IP, w którym potrzebna była łączność, do tabeli tras VPC dla podsieci rozwiązuje problem z łącznością.
Jednak ... Jeśli wystąpi podobny problem, nie możesz po prostu zmienić tabeli tras lub zbudować nowych tabel tras i powiązać z nimi podsieci, chyba że nic już nie działa poprawnie w podsieciach, ponieważ zmiana może być uzasadniona oczekuje się, że zerwie istniejącą łączność. W takim przypadku poprawnym przebiegiem byłoby zapewnienie wystąpień w różnych podsieciach poprawnych wpisów tablicy tras.
Podczas konfigurowania VPC idealnie jest jasno zdefiniować role podsieci i w pełni zapewnić niezbędne trasy przy pierwszym uruchomieniu VPC. Ważne jest również, aby pamiętać, że cała sieć LAN VPC VPC jest siecią definiowaną programowo. W przeciwieństwie do sieci fizycznej, w której router może stać się wąskim gardłem i często rozsądne jest umieszczanie maszyn o dużym natężeniu ruchu między nimi w tej samej podsieci ... przecinanie ruchu w podsieciach nie ma ujemnego wpływu na wydajność VPC. Maszyny powinny być umieszczane w podsieciach odpowiednich do potrzeb adresowania IP maszyny - adres publiczny, podsieć publiczna; brak adresu publicznego, prywatna podsieć.
Więcej dyskusji na temat logistyki prywatnych / publicznych podsieci w VPC można znaleźć w Dlaczego potrzebujemy prywatnej podsieci w VPC (w przepełnieniu stosu).
źródło
To już świetna odpowiedź, ale AWS tworzy dla ciebie publiczną podsieć, kiedy wybierzesz opcję „publicznie dostępną”. Dla mnie problemem była raczej domyślna grupa zabezpieczeń VPC. Szukałem w sieci ACL zasad - nie Security Group . (Wybranie opcji „publicznie dostępne” w RDS dodaje grupę zabezpieczeń, ale nie dodaje automatycznie reguł ruchu przychodzącego).
Kliknij RDS, a następnie zidentyfikuj i kliknij grupę zabezpieczeń. Następnie w „regułach ruchu przychodzącego” dodaj port 3306 i dodaj łączący się adres IPV4, xxxx / 32 (lub 0.0.0.0/32 - jeśli chcesz połączyć cały Internet - ale bądź ostrożny).
źródło
Sprawdź także, czy sieć, z którą jesteś połączony, nie blokuje połączeń z innym serwerem na porcie 3306. Tak było w przypadku mojego połączenia z moją siecią korporacyjną.
źródło