1

Я настраиваю сервер Ubuntu 11.10 в качестве брандмауэра для сети, в которой работает несколько разных SSL-сайтов. Идея довольно распространена: иметь все общедоступные IP-адреса для каждого сайта, привязанные к общедоступному интерфейсу на брандмауэре, и использовать iptables/NAT для переадресации соединений на веб-серверы. Хотя у меня дьявольское время получается заставить эту довольно простую вещь работать.

Скажем, у меня есть открытый интерфейс на брандмауэре:

eth0 25.25.25.25

И я хочу присвоить новый IP-адрес этому общедоступному интерфейсу:

ifconfig eth0:0 25.25.25.26

Затем я вижу, что интерфейс создан, и я могу пропинговать его с других хостов. Все идет нормально. Теперь мой веб-сервер находится на стороне DMZ сети, доступной через брандмауэр, но не доступной для общественности. Допустим, внутренний веб-сервер 172.16.2.1. Поэтому я создаю правило NAT следующим образом:

iptables -t nat -A PREROUTING -i eth0 -d 25.25.25.26 -j DNAT - к месту назначения 172.16.2.1

Просто не хочет работать. Если я запускаю tcpdump на общедоступном интерфейсе, он увидит входящий трафик, но iptables просто не будет преобразовывать его в NAT.

Это будет работать нормально, если я использую не псевдоним IP, например, 25.25.25.25. Я читал, что iptables не любит работать с виртуальными интерфейсами и игнорирует их. Это нормально, но он все равно должен работать с "eth0" вместо «eth0:0». В моем случае iptables не жалуется, если я пытаюсь использовать «eth0:0», но это не имеет никакого значения.

Я давно пользуюсь OpenBSD, поэтому мне удобно настраивать то же самое с помощью pf. Но много лет назад я делал это с коробкой RedHat, и она работала просто отлично. Что-то изменилось? Должен быть способ сделать это. Я видел несколько примеров от других людей, говорящих, что вам просто нужно убедиться, что вы указали основное устройство (eth0) вместо использования eth0:0. Но у меня ничего нет.

Да, и чтобы исключить, что это просто проблема фильтрации, я полностью отключил все правила фильтрации:

iptables -F
iptables -X
iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT

Есть идеи? Я, конечно, не новичок, когда дело доходит до iptables, но эта проблема начинает заставлять меня чувствовать себя как один.

2 ответа2

2

Когда вы используете виртуальные интерфейсы, просто используйте опцию -d (назначение), игнорируя опцию -i (интерфейс)

Вместо:
iptables -t nat -A PREROUTING -i eth0 -d 25.25.25.26 -j DNAT --to-destination 172.16.2.1

использовать:
iptables -t nat -A PREROUTING -d 25.25.25.26 -j DNAT --to-destination

Работа с iptables v1.4.14 в Debian

-1

Скорее всего, вам нужно будет использовать прямую цепочку и не предоставлять входной интерфейс для этого:

iptables -t nat -A PREROUTING -i eth0 -d 25.25.25.26 -j DNAT --to-destination 172.16.2.1

Попробуйте это так:

iptables -t nat -A FORWARD -d 25.25.25.26 -j DNAT --to-destination      172.16.2.1

Это работает для меня как на Debian/Ubuntu, так и на маршрутизаторах на основе iptables, таких как MikroTik. Вы также можете посмотреть здесь о переадресации портов, это также может быть полезно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .