Я построил частную сеть с двумя машинами, у обоих есть два сетевых интерфейса, это информация о сети:
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?
Первая ошибка, которую вы делаете, - это использование цепочки 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 для других машин в сети кампуса.