2

У нас есть 3 компьютера, два из которых подключены к Интернету (оба имеют 2 NIC)

PC1:

eth0 - 1.0.0.1 (external IP)
eth1 - 172.16.0.1 (internal IP)

PC2:

eth0 - 1.0.0.2 (external IP)
eth1 - 172.16.0.2 (internal IP)

PC3:

eth0 - 172.16.0.3 (internal IP)

Теперь мы хотим перенаправить порт 80 с ПК1 и ПК2 на ПК3.

Но есть проблема: переадресация портов iptables работает хорошо с ПК1 или ПК2, но только в том случае, если ПК3 имеет ПК1 или ПК2 в качестве шлюза.

Правила IPtables (для ПК1):

iptables -t nat -A PREROUTING  -p tcp -d 1.0.0.1 --dport 80 -j DNAT --to-destination 172.16.0.3:80
iptables -A FORWARD -p tcp -d 172.16.0.3 --dport 80 -j ACCEPT

Итак, вопрос: можем ли мы иметь сопоставление портов как с ПК1, так и с ПК2 независимо от настроек шлюза на ПК3?

Заранее спасибо.

2 ответа2

2

Вы только переписали место назначения.

Вам нужно изменить адрес источника, чтобы он был с ПК1 или ПК2, чтобы ответные пакеты также можно было преобразовывать в NAT. И вам нужно изменить адрес назначения, чтобы пакет отправлялся на ПК3. Перезапись источника и получателя называется "двойной NAT".

Вам нужно выполнить DNAT в цепочке PREROUTING и SNAT в цепочке POSTROUTING. Вот так (для ПК1):

iptables -t nat -A PREROUTING -p tcp -m tcp -d 1.0.0.1 --dport 80 -j DNAT \
  --to-destination 172.16.0.3:80
iptables -t nat -A POSTROUTING -p tcp -m tcp -d 172.16.0.3 --dport 80 \
   -j SNAT --to-source 172.16.0.1
1

Присвойте ПК3 другой IP-адрес и используйте правила DNAT на ПК1 и ПК2 для разных IP-адресов ПК3.

На ПК3 используйте «IP-правило» для маршрутизации по исходному IP-адресу, как показано на: http://lartc.org/howto/lartc.rpdb.multiple-links.html.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .