Исключить устройство из прозрачного прокси — TPROXY

Мне нужно мое устройство с IPv4-адресом 10.10.10.214, чтобы обойти прозрачный прокси-сервер, который использует мой маршрутизатор.

Моя текущая таблица mangle на роутере:

      # iptables -t mangle -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N DIVERT
-N PROXY
-A PREROUTING -p tcp -m socket -j DIVERT
-A PREROUTING -j PROXY
-A DIVERT -j MARK --set-xmark 0x1/0xffffffff
-A DIVERT -j ACCEPT
-A PROXY -s 10.10.10.214/32 -j RETURN
-A PROXY -d 0.0.0.0/8 -j RETURN
-A PROXY -d 10.0.0.0/8 -j RETURN
-A PROXY -d 127.0.0.0/8 -j RETURN
-A PROXY -d 169.254.0.0/16 -j RETURN
-A PROXY -d 172.16.0.0/12 -j RETURN
-A PROXY -d 192.168.0.0/16 -j RETURN
-A PROXY -d 224.0.0.0/4 -j RETURN
-A PROXY -d 240.0.0.0/4 -j RETURN
-A PROXY -p tcp -j TPROXY --on-port 12345 --on-ip 127.0.0.1 --tproxy-mark 0x1/0xffffffff

MASQUERADE включен на интерфейсе WAN.

я вставил-A PROXY -s 10.10.10.214/32 -j RETURNобойти прокси для 10.10.10.214. Перехват пакетов Wireshark в LAN и WAN показывает, что исходный IP-адрес преобразуется в IP-адрес WAN, однако он не преобразует и не отправляет ответ обратно на устройство.

Скриншот захвата пакета

Что мне не хватает?

1 ответ

Я провел мозговой штурм по этой проблеме и понял, что происходит не так.

Пакет сначала проходит через таблицу mangle, затем попадает в таблицу nat, чтобы применить к пакету правила nat (для этого я использую MASQUERADE).

Мы можем легко дифференцировать трафик, поступающий с адреса 10.10.10.214, и заставить его обходить прозрачный прокси:

      iptables -t mangle -I PREROUTING -s 10.10.10.214/32 -j RETURN

Однако когда трафик возвращается из Интернета с назначением IPv4-адреса нашего маршрутизатора, невозможно определить, предназначен ли он для нашего устройства или нет. Это дифференцирование производится в таблице nat (в моем случае с помощью правила MASQUERADE), но перед обработкой пакетов в таблице nat они будут соответствовать правилу TPROXY в таблице mangle, что и вызывает эту проблему.

Итак, вместо того, чтобы дифференцировать трафик для 10.10.10.214, просто позвольте всему трафику на WAN-интерфейсе обходить правило TPROXY (кроме прокси-трафика, который помечен и поэтому исключен):

      iptables -t mangle -I PREROUTING -i pppoe-wan -j RETURN

С помощью этих двух команд можно успешно исключить устройство из прозрачного прокси.

Другие вопросы по тегам