Я настраиваю сервер 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, но эта проблема начинает заставлять меня чувствовать себя как один.