Отображение iptables dnat на определенный ip

Я построил частную сеть с двумя машинами, у них обоих есть два сетевых интерфейса, это информация о сети:

machine1:

eth0 10.0.0.11 (private net)
eth1 10.82.80.208 (Campus Network ip)

machine2:

eth0 10.0.0.21 (private net)
eth2 10.82.80.207 (Campus Network ip)

Я хочу получить доступ к 10.0.0.11 на своем компьютере (10.82.80.206) в сети кампуса, а не использовать сетевой IP-адрес кампуса с помощью iptables dnat. Например, я хочу изменить место назначения пакета с 10.0.0.11 на 10.82.80.208.

Я пытаюсь использовать команду iptables, такую ​​как:

iptables -t nat -A PREROUTING -i eth0 -p tcp  -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208
iptables -t nat -A PREROUTING -i eth0 -p icmp -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208
iptables -t nat -A PREROUTING -i eth0 -p udp  -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208

Но это кажется бесполезным, когда я пытаюсь пропинговать 10.0.0.11, хост все еще недоступен, как я могу изменить назначение карманов на моей машине с 10.0.0.11 на 10.82.80.208?

1 ответ

Первая ошибка, которую вы делаете, это использование цепочки PREROUTING для манипулирования локально сгенерированными пакетами. Пакеты, сгенерированные на вашей собственной машине, никогда не пересекают PREROUTING, а только пересекают цепочки OUTPUT и POSTROUTING. Вы должны сделать NAT для локально сгенерированных пакетов в цепочке OUTPUT, чтобы ваши правила выглядели так:

iptables -t nat -A OUTPUT -i eth0 -p tcp  -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208
iptables -t nat -A OUTPUT -i eth0 -p icmp -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208
iptables -t nat -A OUTPUT -i eth0 -p udp  -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208

Вы должны использовать PREROUTING, только если ваша машина (10.82.80.206) выступает в качестве шлюза к 10.0.0.11/21 для других машин в сети кампуса.

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