5

Моя цель состоит в том, чтобы NAT (преобразовать) все IP-адреса, которые достигают eth0 на всех портах и протоколах, следующим образом:192.168.55.x -> 192.168.42.x (у меня включена переадресация ip и подсеть 192.168.42.0/24 находится на eth1). Я могу сделать это для одного хоста на пару строк, например, с x = 20:

iptables -t nat -A PREROUTING -i eth0 -d 192.168.55.20 -j DNAT --to 192.168.42.20
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.42.20 -j SNAT --to 192.168.55.20

Но я не могу найти способ перевести все 253 возможных хоста. Я попробовал это:

iptables -t nat -A PREROUTING -i eth0 -d 192.168.55.0/24 -j DNAT --to 192.168.42.0-192.168.42.255
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.42.20/24 -j SNAT --to 192.168.55.0-192-168.55.255

Это приводит к случайному переводу хоста. Полезно для балансировки нагрузки. Но как получить простой перевод один на один?

Спасибо.

1 ответ1

5

От man iptables-extensions:

NetMap
Эта цель позволяет вам статически отобразить всю сеть адресов на другую сеть адресов. Его можно использовать только из правил таблицы nat.

Так что нужно только одно правило:

iptables -t nat -A PREROUTING -d 192.168.55.0/24 -i eth0 -j NETMAP --to 192.168.42.0/24

Если вы также хотите, чтобы соединения, изначально запущенные из сети "42", были видны правильно, дополните это второе правило:

iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eth0 -j NETMAP --to 192.168.55.0/24

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