Невозможно соединиться с экземпляром RDS извне VPC (ОШИБКА 2003 (HY000) Невозможно соединиться с MySQL Server)


12

Я создал VPC, а внутри него экземпляр RDS. Экземпляр RDS общедоступен и имеет следующие настройки:

Настройки RDS

Группа безопасности, прикрепленная к экземпляру RDS, принимает весь трафик:

Настройки группы безопасности

Все списки ACL моей сети принимают все трафик. Однако я не могу получить доступ к своему экземпляру с компьютера за пределами моего VPC. Я получаю следующую ошибку:

    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)

Если я выполняю ту же команду из EC2 внутри моего VPC, я могу подключиться. Я пытался подключиться с нескольких машин, все без брандмауэра (т.е. открыт порт 3306).

Я явно что-то упускаю, но все, кажется, настроено правильно. В чем может быть проблема?


1
Сообщение (110)об ошибке означает «тайм-аут соединения», так что это определенно проблема IP-соединения. Ваш экземпляр RDS показывает, что он связан с двумя подсетями. Каков маршрут по умолчанию для этих двух подсетей в консоли VPC? Это igw-xxxxxxxx или i-xxxxxxxx?
Майкл - sqlbot

Обе подсети неявно связаны с основной таблицей маршрутов VPC.
dazedviper

1
Явное сопоставление обеих подсетей с пользовательской таблицей маршрутизации, которая направляет весь исходящий трафик на интернет-шлюз VPC, не имеет никакого значения.
dazedviper

1
Ну, это облом. Маршрут по умолчанию к «igw» казался наиболее вероятным отсутствующим фрагментом ... и в любом случае должен быть необходим, чтобы это работало. Предполагая, что вы дали VPC достаточно времени для перенастройки в фоновом режиме после соответствующего изменения настроек подсети, у меня нет идей.
Майкл - sqlbot

2
Ах, блок, который вам нужен для всех IP-адресов 0.0.0.0/0. Я выложу ответ.
Майкл - sqlbot

Ответы:


20

Чтобы экземпляр RDS в VPC был «общедоступным» (Интернет) доступным, все подсети, к которым он подключен, должны быть «общедоступными», а не «частными» подсетями VPC.

Публичная подсеть по существу определяется как подсеть, в которой объект Интернет-шлюза (igw-xxxxxxxx) используется в качестве маршрута к «Интернету» или, по крайней мере, к любым адресатам Интернета, к которым вам необходимо получить доступ. Как правило, это адрес назначения 0.0.0.0/0. Общедоступные подсети должны использоваться для экземпляров (включая RDS), которые будут иметь связанный общедоступный IP-адрес, и не должны использоваться для экземпляров, которые не будут иметь общедоступных IP-адресов, поскольку частные адреса не работают через Интернет без перевода.

В отличие от этого, в частной подсети таблица маршрутизации сконфигурирована так, чтобы достигать мест назначения в Интернете через другой экземпляр EC2, обычно экземпляр NAT. Это показано в таблице маршрутизации VPC, связанной с этой подсетью как i-xxxxxxxx, а не «igw». Этот компьютер (который на самом деле будет находиться в другой подсети, чем тот, для которого он выступает в качестве пункта назначения маршрута) служит транслятором, позволяя экземплярам только для частного IP прозрачно делать исходящие интернет-запросы с использованием общедоступного компьютера NAT IP для своих интернет-потребностей. Экземпляры с публичным IP-адресом не могут должным образом взаимодействовать с Интернетом, если они подключены к частной подсети.

В данном конкретном случае подсети, связанные с экземпляром RDS, на самом деле не были настроены как нечто, что можно было бы просто классифицировать как частную или общедоступную подсеть, поскольку у подсети вообще не было маршрута по умолчанию. Добавление маршрута по умолчанию через объект «igw» или, как это сделал OP, добавление статического маршрута к IP-адресу в Интернете, где было необходимо подключение, в таблицу маршрутов VPC для подсетей устраняет проблему подключения.

Однако ... Если у вас возникла похожая проблема, вы не можете просто изменить таблицу маршрутов или построить новые таблицы маршрутов и связать с ними подсети, если у вас больше ничего не работает правильно в подсетях, потому что изменение может быть разумным ожидается сломать существующую связь. В этом случае правильный путь - обеспечить экземпляры в разных подсетях правильными записями таблицы маршрутов.

При настройке VPC идеальным является четкое определение ролей подсети и полное предоставление необходимых маршрутов при первом запуске VPC. Также важно помнить, что вся VPC "LAN" является программно-определяемой сетью. В отличие от физической сети, где маршрутизатор может стать узким местом, и зачастую целесообразно размещать машины с большим трафиком среди них в одной подсети ... подсети, пересекающие трафик, не имеют недостатка в производительности для VPC. Машины должны быть размещены в подсетях, которые соответствуют требованиям IP-адресации машины - публичный адрес, публичная подсеть; нет публичного адреса, частная подсеть.

Дополнительную информацию о логистике частных / общедоступных подсетей в VPC можно найти в разделе « Зачем нам нужна частная подсеть в VPC» (в разделе «Переполнение стека»).


2

Это уже дает хороший ответ, но AWS создает общедоступную подсеть для вас, когда вы выбираете «общедоступный» вариант. Скорее для меня проблемой была группа безопасности VPC по умолчанию. Я смотрел на правила ACL сети, а не на группу безопасности . (Выбор «общедоступной» опции в RDS добавляет группу безопасности, но не добавляет автоматически входящие правила.)

Нажмите RDS и определите и нажмите на группу безопасности. Затем в разделе «Правила для входящих подключений» добавьте порт 3306 и добавьте свой IPV4-адрес подключения, xxxx / 32 (или 0.0.0.0/32 - если вы хотите, чтобы весь Интернет подключался, но будьте осторожны с этим).


0

Также убедитесь, что сеть, к которой вы подключены, не блокирует подключения к другому серверу через порт 3306. Это было так для меня при подключении к моей корпоративной сети.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.