iptables: как «переопределить» перенаправление портов?

iptables: как «переопределить» перенаправление портов?

Моя настройка следующая:

У меня есть сервер 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

Вам просто нужно выйти из 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.

Связанный контент