Конфигурация 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-адрес.

Другие вопросы по тегам