
Я запускаю Debian 8
. Я пытаюсь перехватить все пакеты, и в настоящее время использую iptables
для этого:
iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-port 5000
Кажется, это работает, но это исключает возможность получения исходного порта назначения в пакете.
Я читал, TPROXY
что это должно быть правильным решением, поскольку он не использует NAT
.
Я попробовал заменить REDIRECT
на это:
iptables -t mangle -A PREROUTING -p tcp -j TPROXY --tproxy-mark 0x1/0x1 --on-port 5000
Но при этом я не перехватываю никаких пакетов на своем сервисе...
решение1
В Documentation/networking/tproxy.txt в дереве ядра упоминается следующее:
Цель 'TPROXY' обеспечивает аналогичную функциональность, не полагаясь на NAT. Просто добавьте такие правила в набор правил iptables выше:
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY \ --tproxy-mark 0x1/0x1 --on-port 50080
Обратите внимание, что для того, чтобы это работало, вам придется изменить прокси-сервер, включив (SOL_IP, IP_TRANSPARENT) для прослушивающего сокета.
Настроили ли вы вышеупомянутые параметры прослушивающего сокета в вашем приложении?
Также обратите внимание, что в документе выше упоминается необходимость добавления соответствующего правила и таблицы маршрутизации IP для локальной доставки пакетов.