
У меня есть сервер Ubuntu с виртуальными машинами KVM.
Я разрешил SSH в брандмауэре, чтобы иметь доступ к хосту. Также я разрешил входящий трафик, который имеет состояние, установленное.
Вот полная настройка iptables хоста:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- [MYIP] anywhere tcp dpt:ssh
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT all -- [MYIP] [VSERVER IP] to:192.168.122.122
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24
Виртуальный сервер работает под управлением Windows и имеет локальный IP-адрес. 192.168.122.122
Как вы можете видеть на рисунке PREROUTING
, он настроен таким образом, что только я могу получить к нему доступ по всем портам.
Удаленный рабочий стол работает нормально, и мне удалось подключиться к серверу, используя внешний IP ([VSERVER IP]). Когда я подключен к серверу, я попробовал открыть Internet Explorer и набрал stackoverflow.com. Это работает, страница отображается.
Однако, когда я запускаю простую программу Mysql (используя .NET MySql.Data.dll
), которая должна выполнять запросы к другому серверу, она завершается с ошибкой
MySql.Data.MySqlClient.MySqlException (0x800004005):
Unable to connect to any of the specified MySQL hosts.
Почему? Запросы Http к любому веб-серверу не были проблемой, так почему же запрос Mysql?
Для справки, внешний сервер Mysql не сбрасывает запросы (брандмауэр временно отключен). Должно быть, что-то в iptables, но я не знаю, что именно.
Как можно решить эту проблему?
решение1
К сожалению, в брандмауэре моего (внешнего) MySQL-хоста произошла ошибка, о которой я не знал. Порт MySQL был заблокирован для IP моего vServer, поэтому запросы не возвращались, а HTTP-запросы работали.
Проблема решена.
Всегда дважды проверяйте все брандмауэры! Урок усвоен.