Не вдається підключитися до екземпляра RDS із зовнішнього VPC (ERROR 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)про помилку означає "час з’єднання вичерпано", тому, безумовно, це проблема підключення до ІР. Ваш екземпляр RDS показує, що пов'язаний з двома підмережами. На консолі VPC який маршрут за замовчуванням для цих двох підмереж? Це "igw-xxxxxxxx" чи це "i-xxxxxxxx"?
Майкл - sqlbot

Обидві підмережі неявно пов'язані з основною таблицею маршрутів VPC.
dazedviper

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

1
Ну, це облом. Маршрут за замовчуванням до "igw" видався найбільш ймовірним відсутнім фрагментом ... і в будь-якому випадку повинен бути необхідним для цього. Якщо припустити, що ви дали VPC достатньо часу для перенастроювання себе у фоновому режимі після відповідної зміни конфігурації підмережі, я не маю ідеї.
Майкл - sqlbot

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

Відповіді:


21

Для екземпляра RDS у VPC для "публічного" (Інтернет) доступного всі підмережі, до яких він додається, повинні бути "загальнодоступними" - на відміну від "приватних" - підмереж VPC.

Загальнодоступна підмережа по суті визначається як підмережа, яка має об'єкт Internet Gateway (igw-xxxxxxxx) як свій маршрут до "Інтернету" або принаймні до будь-якого пункту призначення Інтернету, до якого потрібно отримати доступ. Як правило, це адреса призначення 0.0.0.0/0. Загальнодоступні підмережі повинні використовуватися для примірників (включаючи RDS), у яких буде пов’язана загальнодоступна IP-адреса, і не слід використовувати для примірників, які не матимуть публічних IP-адрес, оскільки приватні адреси не працюють через Інтернет без перекладу.

Приватна підмережа, навпаки, має свою таблицю маршрутизації, налаштовану для доступу до Інтернет-адресатів через інший екземпляр EC2, зазвичай екземпляр NAT. Це відображається в таблиці маршрутів VPC, пов'язаній з цією підмережею, як i-xxxxxxxx, а не "igw". Ця машина (яка сама по собі буде фактично в іншій підмережі, ніж ті, для яких вона виконує функції маршруту), виконує функції перекладача, дозволяючи приватним ІР-примірникам прозоро робити вихідні запити в Інтернеті, використовуючи загальнодоступну машину NAT ІС для їх потреб в Інтернеті. Примірники із загальнодоступною IP-адресою не можуть належним чином взаємодіяти з Інтернетом, якщо вони приєднані до приватної підмережі.

У конкретному випадку тут підмережі, пов’язані з екземпляром RDS, насправді не були налаштовані як щось, що можна було просто класифікувати як приватну або публічну підмережу, оскільки підмережа взагалі не мала маршруту за замовчуванням. Додавання маршруту за замовчуванням через об’єкт "igw" або, як це робив ОП, додавання статичного маршруту до 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.