Конфигурация iptables NAT
Здравствуйте, у меня возникли некоторые проблемы с моими iptables. Вот что я хочу сделать:
А (eth0)--------(eth0) В (eth2)---------------(eth2) С
Скобки - это имена интерфейсов, а A, B и C - хосты. Теперь я хотел бы переадресовать номер порта 80 хоста C, чтобы он был доступен через хост A.
хост A 192.168.1.254
хост C 192.168.3.2
Я намеренно принял все параметры цепочки FILTER в качестве политики по умолчанию, потому что я хотел убедиться, что NAT работает должным образом в первую очередь. Я включил ip_forward.
Итак, вот что я сделал:
sudo iptables -A PREROUTING -t nat -p tcp - d 192.168.1.254 -j DNAT --to 192.168.3.2
Однако это не работает. Что мне здесь не хватает?
2 ответа
Ну вот как я это сделал:
iptables -A PREROUTING -t nat –p tcp -d 192.168.1.1 –dport 80 -j DNAT –to-destination 192.168.3.2:80
iptables -A POSTROUTING -t nat –p tcp –d 192.168.3.2 –-dport 80 -j SNAT --to-source 192.168.3.1
Я не думаю, что вам вообще нужен NAT в этом случае. Вы не используете NAT в его наиболее частом случае проверки сетевого доступа к большой сети с одного общедоступного IP-адреса. Вы должны просто направить пакеты с пересылкой IP.
Не должно быть никаких причин, по которым NAT потребовался бы для доступа к C из A, если a) включена пересылка IPv4 и b) ваша цепочка IPTables FORWARD настроена на прием перенаправленных пакетов.
Но если вы настаиваете, я бы предложил использовать SNAT:
iptables -A POSTROUTING -o eth2 -j SNAT --to-source (IP of Host B eth2)
Примечание для будущих читателей: ссылка eth2 предназначена для исходящего интерфейса на (центральном) компьютере NAT, когда инициируются соединения, и относится к имени того же интерфейса, для которого устанавливается исходный IP-адрес.