3

У меня есть маршрутизатор с 1 сетевым интерфейсом (eth0, публичный ip) и псевдоним для eth0:0, локальный ip 192.168.1.1.

Я хочу перенаправить весь входящий трафик https (443) на другой сервер. Я попробовал это с

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443 и все работает. Весь трафик, приходящий на ssl-порт моего публичного ip, перенаправляется на 192.168.1.2.

Но главная проблема заключается в следующем; теперь весь https-трафик с моей локальной сети в Интернет также перенаправляется на этот локальный ip, например. https://facebook.com и 192.168.1.2 ответы. Как мне исправить мою конфигурацию, чтобы она работала?

1 ответ1

1

Просто фильтр на основе адреса назначения:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -d $PUBLIC_IP -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443

Если общедоступный IP-адрес является динамическим, вам потребуется добавить хуки к клиентскому сценарию DHCP, чтобы обновить это правило при изменении вашего IP-адреса. Вы также можете использовать наборы IP-адресов для изменения IP-адреса для проверки без изменения вашего правила.

Другое менее совершенное решение - использовать модуль addrtype . Эти модули проверяют таблицу маршрутизации, чтобы определить, какой тип записи маршрутизации имеет адрес. тип LOCAL можно использовать для проверки того, является ли этот IP адресом хоста.

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -m addrtype --dst-type LOCAL  -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443

Обратите внимание, что это решение также перенаправляет соединения на 192.168.1.1 и 127.0.0.1 или на любой IP-адрес вашего хоста. Вы можете исключить адреса назначения, добавив простой ! -d 192.168.1.1 соответствует правилу.

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