Я пытаюсь использовать NAT-трафик, отправляемый на частный интерфейс сервера с помощью обратной связи (поскольку MySQL bind-address
на 127.0.0.1
и не может быть изменен, но мне все еще нужно получить доступ к нему через частный интерфейс).
Конфигурация
-mysql bind-address
знак равно 127.0.0.1
-включена переадресация IP с sysctl -w net.ipv4.ip_forward=1
-setup iptables следующим образом (eth0
это частный интерфейс)
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eth0 -p tcp --dport 3306 -j ACCEPT
-A INPUT -i lo --jump ACCEPT
-A INPUT --match state --state ESTABLISHED,RELATED --jump ACCEPT
-t nat -A PREROUTING -i eth0 -p tcp --port 3306 -j DNAT --to-destination 127.0.0.1
-t nat -A POSTROUTING -o lo -j SNAT --to-source 127.0.0.1
Проверки
-связка mysql в порядке (telnet 127.0.0.1 3306
работает отлично)
-ip переадресация включена правильно (sysctl net.ipv4.ip_forward
дает 1)
-подключение к eth0
на 3306
это нормально, потому что когда я устанавливаю bind-address
на IP, принадлежащий eth0
Я могу подключиться.
Проблема
С bind-address
на localhost и приведенных выше правилах iptables я не могу подключиться к IP, принадлежащему eth0
на 3306
: если я бегу tcpdump -ni any port 3306
Я вижу SYN
за которым следует RST
но теперь я знаю, где это RST
исходит из, так как я ожидал SYN
быть направленным lo
с ip 127.0.0.1
как источник и место назначения.
В: Что мне не хватает для NAT eth0
к lo
в порту 3306
?
дополнительная информация: работает ubuntu server 10.04
с участием iptables v1.4.4
Требования:
-У нас есть несколько коробок с многие службы (причал, tomcat, ldap, mysql) работают на локальном хосте
-Эти услуги необходимо работать только на локальном хосте и не требует доступа через публичный интерфейс.
-Однако нам бы хотелось, чтобы наш внешний Сервер Nagios, чтобы проверить их через приватный интерфейс
-Мы не хочу настроить те Сервисы к слушать в публичном интерфейсе для причины безопасности (хотя мы могли бы заблокировать их в общедоступном интерфейсе, мы считаем, что это лучше (т.е. Defense in depth
) чтобы эти службы не прослушивали общедоступный IP-адрес, если с брандмауэром что-то пойдет не так)
-Настройка этих сервисов для прослушивания по шлейфу И на частном интерфейсе либо невозможна, либо труднее реализовать.
Преимущества
Использование NAT между частным интерфейсом и внутренним интерфейсом дает следующие преимущества:
-более простая реализация: нам не нужно перенастраивать существующие службы
-меньше обслуживания: если новые службы добавляются для прослушивания петли, нам нужно только добавить правила iptable и не нужно перенастраивать эти службы
-более безопасный: В худшем случае, если наш FW выйдет из строя, мы потеряем мониторинг этих сервисов, но они не будут доступны общедоступному интерфейсу.
вы не можете nat 127.0.0.1 это супер-специальная зарезервированная сеть. Вероятно, вам будет лучше установить адрес привязки на 0.0.0.0, а затем использовать iptables для фильтрации IP-адресов / интерфейсов, с которых вы не хотите разрешать трафик.
Попробуйте удалить это правило:
-t nat -A POSTROUTING -o lo -j SNAT --to-source 127.0.0.1
Я должен полностью отказаться от своего ответа; пакеты из-за пределов ящика Linux не могут попасть на 127.0.0.1. См. Следующее письмо (и предыдущие):
http://lists.netfilter.org/pipermail/netfilter/2004-August/055117.html