1

Моя установка выглядит следующим образом:

У меня есть сервер Linux с двумя интерфейсами, eth0 и eth1 . eth1 есть интернет-соединение через мою обычную локальную сеть. eth0 обслуживает DHCP, а сам интерфейс имеет IP-адрес 10.0.0.1 .

Я хочу сделать следующее:

Я хочу, чтобы пакеты на порту 80, исходящие от компьютеров, подключенных к eth0 были перенаправлены на порт 80 на самой машине маршрутизации, и ответные пакеты, конечно, были перенаправлены обратно. Это само по себе достаточно просто, но у меня есть еще одно требование. Я хотел бы, чтобы клиенты на eth0 с определенными IP-адресами могли быть освобождены от этого, и чтобы пакеты порта 80 маршрутизировались, как обычно. Как я могу это сделать? До сих пор я сделал следующее, чтобы перенаправить все пакеты порта 80 из eth0 на локальную машину. Это работает, но я не знаю, как выполнить мое второе требование.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80 -i eth0

iptables -t nat -A POSTROUTING -p tcp -d 127.0.0.1 --dport 80 -j SNAT --to-source 10.0.0.1

1 ответ1

0

Вам нужно просто выйти из таблицы PREROUTING прежде чем она попадет в строку DNAT :

iptables -t nat -I PREROUTING -p tcp -s <exempt ip> -j RETURN

Это должно вставить (-I) новое правило для выхода (-j RETURN) таблицы маршрутизации для любого пакета с освобожденного IP- адреса (-s <exempt ip>) в качестве первого правила, поэтому оно попадает перед тем, как попасть в DNAT править.

(Вы также можете сделать что-то похожее на POSTROUTING , не уверен.)


Другой вариант - создать набор IP (man ipset) для IP-адресов, которые вы хотите исключить , а затем добавить инвертированное совпадение в ваши правила DNAT и SNAT :

ipset create exempt hash:ip
ipset add exempt <exempt ip 1>
ipset add exempt <exempt ip 2>
ipset add exempt <exempt ip 3>
iptables -t nat -A PREROUTING -p tcp --dport 80 -m set ! --match-set exempt src -j DNAT --to-destination 10.0.0.1:80 -i eth0

Это проще в управлении, потому что вы можете легко добавлять или удалять освобожденные IP-адреса из ipset без изменения iptables.

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