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

iptables диапазон переадресации NAT

У меня есть два сетевых интерфейса, eth0 и eth1. У eth0 публичный ip, у eth1 - 172.16.0.254/24.

Я хотел бы сделать следующее сопоставление:

172.16.0.1:22 -> eth0's public ip:2001
172.16.0.2:22 -> eth0's public ip:2002
172.16.0.3:22 -> eth0's public ip:2003 
...
172.16.0.100:22 -> eth0's public ip:2100

Я читал, что iptables поддерживает диапазоны, но у меня это не работает.

Как я могу этого добиться?

Спасибо.

Я почти уверен, что вы не можете сделать это изначально с iptables. У вас есть диапазоны IP, многопортовый, но AFAIK вы не можете сопоставить диапазон IP с диапазоном портов.

Однако это можно довольно легко решить с помощью небольшого сценария bash:

for i in $(seq 1 100); do iptables -t nat -A PREROUTING -i eth0 -p tcp -d 172.16.0.$i --dport 22 -j REDIRECT --to-port 2`printf "%03d" $i`; done

... предполагая, что ваш сервер (ы), открывающий 2001-2100, прослушивает (привязан) ко всем интерфейсам (0.0.0.0), и вы используете TCP.

Возможно, вы захотите использовать DNAT цель и -p udp соответственно, если это не так.

Если имеется 100 правил в PREROUTING цепочка - это проблема (читаемость или обслуживание), вы можете вместо этого создать свою собственную цепочку и перейти к ней из PREROUTING.