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

IPTables: преобразование нескольких IP-адресов в один общедоступный IP-адрес

Я ищу способ привязать 2 или более внутренних IP-адресов (в моем случае xen doms) к одному внешнему IP-адресу.
Я пытался использовать

iptables -t nat -A PREROUTING -d 123.123.123.123 -j DNAT --to 1.2.3.4 --to 1.2.3.7
iptables -t nat -A POSTROUTING -s 1.2.3.4 -j SNAT --to 123.123.123.123
iptables -t nat -A POSTROUTING -s 1.2.3.7 -j SNAT --to 123.123.123.123

И получил ошибку:

iptables v1.4.14: DNAT: несколько --to-destination не поддерживается
Для получения дополнительной информации попробуйте iptables -h или iptables --help.

Я нашел это на странице руководства:

Более поздние ядра (> = 2.6.11-rc1) больше не имеют возможности NAT для нескольких диапазонов.

Итак, мой вопрос: почему это больше невозможно и есть ли обходной путь? Может мне стоит использовать другой метод, которого я еще не знаю?

РЕДАКТИРОВАТЬ:
Идея состоит в том, чтобы использовать систему как маршрутизатор, поэтому у меня есть один адрес, но за ней несколько пользователей. Проблема в том, что я не знаю, какое соединение относится к пользователю (например, 1.2.3.4). Но я знаю, что все они имеют разные порты, открытые для входящего трафика.
Итак, мое решение (для DNAT) заключалось бы в том, чтобы объединить все входящие подключения для всех пользователей и отфильтровать все неиспользуемые порты, чтобы подключение было к одному пользователю. Для исходящего трафика я бы использовал

iptables -A FORWARD -i eth0 -d 1.2.3.4 -m state --state ESTABLISHED, RELATED -j ACCEPT

Вы не можете использовать NAT 1-к-1 только с 1 внешним IP-адресом, когда работаете с 2 внутренними хостами. Причина в том, что брандмауэр никогда не будет иметь истинного пункта назначения для внешних исходных соединений, если только один из внутренних хостов не будет отключен. В этом случае вам потребуются 2 правила iptables для обеспечения циклической функции:

$ipt -t nat -A PREROUTING -s $srcip -d $wanip -j DNAT --to 192.168.1.2
$ipt -t nat -A PREROUTING -s $srcip -d $wanip -j DNAT --to 192.168.1.3

Кроме того, ваша ошибка «DNAT: несколько пунктов назначения не поддерживается» возникает из-за возможности указать более одного пункта назначения DNAT, удаляемого из версии, которую вы используете (v1.4.14). Эта функция была удалена в пользу циклической функции.

Если вы хотите разрешить нескольким хостам подключение к Интернету, вы должны использовать цепочку POSTROUTING таблицы NAT следующим образом:

$ipt -t nat -A POSTROUTING -o $wanif -s $lan_network -j MASQUERADE

MASQUERADE используется с динамическими конфигурациями IP. Для статического IP используйте SNAT вместо MASQUERADE:

$ipt -t nat -A POSTROUTING -o $wanif -s $lan_network -j SNAT --to $wanip

Однако это не сделает открытые порты на ваших внутренних хостах доступными для внешнего мира. DNAT используется для внешнего -> внутреннего, а SNAT - для внутреннего -> внешнего для базовых сценариев, подобных вашему.

Вы можете попробовать поиграть с целью TEE, доступной через xtables-addons - http://xtables-addons.sourceforge.net/modules.php

Для копирования (дублирования) всего трафика от и к локальному серверу ECHO во второй ящик (нефинальная цель)

# iptables -A PREROUTING -t mangle -p tcp --dport 7 -j TEE --gateway 1.2.3.4 --tee
# iptables -A POSTROUTING -t mangle -p tcp --sport 7 -j TEE --gateway 1.2.3.4 --tee

Также вы можете попробовать http://code.google.com/p/port-mirroring/