Назад | Перейти на главную страницу

MySQL - не может подключиться из локальной сети, но может подключиться с любого другого IP-адреса

Столкнулся с действительно странной проблемой.

Первоначальным требованием было наличие сервера разработки, к которому можно было бы получить доступ из нашего офиса в Швеции и из Индии.

На нашем сервере в Стокгольме я создал новую виртуальную машину Ubuntu (Ubuntu 15.04, 64 бит) и присвоил ей IP-адрес 192.168.3.127. Я установил в него MySQL (5.6.24) и изменил bind-address в /etc/mysql/mysql.conf.d/mysqld.cnf к 0.0.0.0

Я настраиваю переадресацию портов в маршрутизаторе для пересылки 3306 на 192.168.3.127, а затем создал новую базу данных, используя

CREATE DATABASE mydatabase;

Я предоставил права пользователю

GRANT ALL PERMISSIONS ON mydatabase.* to 'someuser'@'%' IDENTIFIED BY 'supersecretpassword!';

Теперь разработчики могут подключаться из Индии, используя публичный IP-адрес шведского офиса, но разработчики внутри шведского офиса не могут подключиться к серверу. Они могут подключиться к нему, используя локальный IP-адрес (192.168.3.127), но не используя общедоступный IP-адрес.

Интересно, что не так. Любые идеи?

Вивек

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

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

Другое возможное решение - использовать DNS-имена и определять DNS-представления. Создайте внутреннее представление, которое сопоставляет имя с частным IP, и создайте внешнее представление, которое сопоставляет имя с общедоступным IP. Таким образом, вы в конечном итоге будете использовать одно и то же имя внутри и снаружи.