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

iptables DNAT routing: ссылка на хост назначения со многими IP-адресами

Я хочу, чтобы все пакеты TCP и UDP, предназначенные для хоста на порту 3389, направлялись на другой адрес в сети. Хост - это компьютер, на котором размещены эти iptables.

Начиная с этого, все выглядит не так уж плохо, хотя было бы неплохо объединить TCP и UDP в одно правило:

*nat
-A PREROUTING -i ens1 -d 10.58.0.1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i ens1 -d 10.58.0.1 -p udp -m udp --dport 3389 -j DNAT --to-destination 172.20.0.201
COMMIT

Но есть около 5 интерфейсов, которым нужно разрешить делать это, и несколько других, которым этого не нужно. Итак, приступим к работе:

*nat
-A PREROUTING -i ens1 -d 10.58.0.1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i ens1 -d 10.58.0.1 -p udp -m udp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun0 -d 10.58.0.1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun0 -d 10.58.0.1 -p udp -m udp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun1 -d 10.58.0.1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun1 -d 10.58.0.1 -p udp -m udp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun2 -d 10.58.0.1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun2 -d 10.58.0.1 -p udp -m udp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun3 -d 10.58.0.1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -i tun3 -d 10.58.0.1 -p udp -m udp --dport 3389 -j DNAT --to-destination 172.20.0.201
COMMIT

О, но подождите, у хоста есть 6 различных возможных IP-адресов, поэтому теперь я должен повторить этот блок правил 6 раз с разными адресатами, которые на самом деле относятся к одному и тому же хосту. Всего потребуется 60 хрупких записей. Должен быть способ получше.

Вопрос: Как я могу ссылаться на хост универсально? вместо того, чтобы сказать:

-d <ip address>

... и, повторяя эту строку бесчисленное количество раз, я бы лучше сказал:

-d <catch-all for anything destined to this computer>

На мой взгляд, имеет смысл применить это правило DNAT к цепочке INPUT, но по причинам, которые выходят за рамки моего понимания, цепочка INPUT, похоже, принимает только правила SNAT. Итак, если кто-то не знает лучше, я застрял в NAT PREROUTING.

Спасибо и привет

Похоже, есть способ сослаться на все местные вещи, о которых я не знал, пока случайно не наткнулся на это где-то еще.

-A PREROUTING -m addrtype --dst-type LOCAL -j DEST-LOCAL

Приведенное выше правило перенаправит все, что явно предназначено для цепочки INPUT, что я и искал. Эти пакеты теперь могут быть перенаправлены в другое место в зависимости от новой цепочки, в которую они отправляются. По сути, в этой цепочке DEST-LOCAL будут приниматься только пакеты, поступающие с разрешенных интерфейсов.

Если вам не нужно ограничивать трафик по имени входящего интерфейса, вы можете использовать

-A PREROUTING -d 10.58.0.1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 172.20.0.201
-A PREROUTING -d 10.58.0.1 -p udp -m udp --dport 3389 -j DNAT --to-destination 172.20.0.201

Затем объединив это с ipset функция, у вас есть только две линии. iptables несколько исходных IP-адресов есть информация о ipset характерная черта.