Отображение 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 для других машин в сети кампуса.