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

Выдать частный интерфейс сервера NATing для обратной связи (для MySQL)

Я пытаюсь использовать 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