Назад | Перейти на главную страницу

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?

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