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

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

Настройки RDS

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

Security group settings

Вся моя сеть ACLs принимает весь трафик. Однако я не могу получить доступ к своему экземпляру от машины за пределами моего 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, я могу соединиться. Я попытался соединиться от нескольких машин, всех их без брандмауэра (т.е. порт 3 306 открытых).

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

12
задан 19 July 2015 в 00:52
3 ответа

Чтобы экземпляр 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. Также важно помнить, что вся «LAN» VPC является программно определяемой сетью. В отличие от физической сети, где маршрутизатор может стать узким местом, и часто имеет смысл размещать машины с интенсивным трафиком среди них в одной подсети ... трафик, пересекающий подсети, не имеет недостатка в производительности в VPC. Машины должны быть размещены в подсетях, соответствующих потребностям IP-адресации машины - общедоступный адрес, общедоступная подсеть; нет публичного адреса, частная подсеть.

Дополнительное обсуждение логистики частных / общедоступных подсетей в VPC можно найти в Зачем нам нужна частная подсеть в VPC (на Stack Overflow).

20
ответ дан 2 December 2019 в 21:33

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

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

2
ответ дан 2 December 2019 в 21:33

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

0
ответ дан 2 December 2019 в 21:33

Теги

Похожие вопросы