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

У меня есть сервер MySQL, работающий на моем компьютере с Windows 7 в качестве службы Windows. Когда я пытаюсь подключиться к нему, используя external.ip = мой IP-адрес с http://www.whatismyip.com/ в командной строке:

mysql -h external.ip -u root -p

он возвращает:

ERROR 2003 (HY000): Can't connect to MySQL server on external.ip (10060)

Однако я могу подключить его к нему, когда я изменяю external.ip на IP-адрес, указанный с помощью команды ipconfig:

mysql -h ipconfig.ip -u root -p

Я уже изменил разрешения для root, чтобы принимать любой хост (используя такие команды, как из Доступ к базе данных mysql с внешнего хоста/IP? (например, mysql workbench)). В базе данных:

SELECT host, user FROM user;

возвращает (подводя итог):

| host   | user |
-----------------
| %      | root |

Кроме того, в моем файле my.ini нет строки с надписью skip-networking.

Это сработало, когда я попробовал это на днях в другой сети, где external.ip был таким же, как ipconfig.ip. Может ли это быть источником проблемы или есть что-то еще?


person xgord    schedule 17.06.2013    source источник
comment
Я просто предполагаю, что вы знаете, что доступ root для всего мира — плохая идея. Проверьте свой брандмауэр. Если whatsmyip сообщает IP-адрес, отличный от вашего внутреннего адреса, например, если вы находитесь за маршрутизатором, вам необходимо открыть/перенаправить порт на вашем брандмауэре/маршрутизаторе.   -  person Russell Uhl    schedule 18.06.2013
comment
Согласитесь с @RussellUhl: вы почти наверняка находитесь за маршрутизатором NAT, который не перенаправляет соответствующий порт (обычно 3306).   -  person eggyal    schedule 18.06.2013
comment
Две вещи, которые нужно проверить: 1) Вы находитесь в домашней сети за устройством NAT? Если это так, вам, вероятно, нужно настроить его для направления входящего трафика через порт MySQL на правильный сервер в вашей домашней сети. 2) Настроен ли брандмауэр на вашем сервере на разрешение подключений к порту MySQL с внешних компьютеров?   -  person Jim Lewis    schedule 18.06.2013
comment
@RussellUhl Я знаю, что предоставление корневого глобального доступа, вероятно, плохая идея, но я использую разные общедоступные сети, поэтому мой IP-адрес постоянно меняется, и я не могу предсказать, каким он будет.   -  person xgord    schedule 18.06.2013
comment
что касается брандмауэра, я в общедоступной сети и у меня нет доступа к физическому маршрутизатору.   -  person xgord    schedule 18.06.2013
comment
@xgord это не по теме, но подумайте о динамическом DNS. Это позволит вам иметь неизменное имя хоста при изменении вашего IP-адреса. Если вы настроите все правильно, ваш сервер mysql разрешит ваше ИМЯ (вместо вашего ip), и вы будете настроены. (Я фанат www.dyndns.org — это бесплатно!)   -  person Russell Uhl    schedule 18.06.2013
comment
Что касается маршрутизатора, запускать сервер за маршрутизаторами, которыми вы не можете управлять, практически бессмысленно. Если вы не можете переадресовать порт, у вас не может быть внешнего доступа к серверу.   -  person Russell Uhl    schedule 18.06.2013
comment
@RussellUhl Значит, я ничего не могу сделать, чтобы сервер работал в этой сети? Другая сеть, в которой работал сервер, также была сетью общего пользования, где я не мог контролировать маршрутизаторы. Почему эта сеть работала, а эта нет? Это потому, что эта сеть не дала другой внутренний IP-адрес?   -  person xgord    schedule 18.06.2013
comment
не то, что я могу думать. Маршрутизаторы MOST обеспечивают базовый доступ в Интернет, который динамически открывает и закрывает порты на основе запросов, запущенных ЗА маршрутизатором. Однако в случае серверов запрос начинается ВНЕ маршрутизатора, поэтому порт не открывается. Тот, где это сработало, возможно, открывал ваш IP-адрес напрямую в Интернет, а не проходил через процесс NAT.   -  person Russell Uhl    schedule 18.06.2013
comment
в порядке. спасибо за всю вашу помощь/объяснения. я просто попробую запутаться без использования сервера в этой сети.   -  person xgord    schedule 18.06.2013


Ответы (1)


Если http://www.whatismyip.com/ и адрес, который вы получаете от ipconfig, отличаются, это означает, что вы Вы используете локальный маршрутизатор (вероятно, тот, который вы используете для подключения к Интернету), который выполняет преобразование сетевых адресов. Другими словами, у вас есть локальная сеть (у вас дома или в любимом интернет-кафе) с адресами частной сети, например 192.168.0.1 или 10.0.0.1.

MySQL обычно использует прослушивание порта 3306 для входящих запросов на подключение. Но когда вы пытаетесь подключиться через свой общедоступный IP-адрес (что такое мой IP-адрес), ваш сетевой провайдер отправляет запрос на ваш маршрутизатор. Маршрутизатор замечает порт 3306, но, вероятно, не знает, что с ним делать. Поэтому он молча игнорирует запрос. Время ожидания программного обеспечения, которое вы используете для установления соединения, истекает. Это хорошо. Взломщики пытаются подключиться к таким портам, чтобы узнать, смогут ли они проникнуть на вашу машину.

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

Если вы не уверены, что означает «порт» или почему вы получаете разные IP-адреса от ipconfig и от http://www.whatismyip.com/, с уважением, вам, вероятно, нужно немного больше узнать об интернет-технологиях, прежде чем пытаться делать такие вещи.

person O. Jones    schedule 17.06.2013
comment
Спасибо за ответ. Да, я знаю, что такое порты, но, как сказано в комментариях к вопросу, я использую сеть, которой не владею. У меня нет доступа к роутеру. Похоже, мне нужно выяснить, кто является администратором сети, и заставить его правильно настроить маршрутизатор. - person xgord; 18.06.2013