Я хотел бы захватить вызов службы HTTP от HostA -> HostB, чтобы проверить клиент на HostA для замены ответа HTTP. Обе ОС Linux. Я попытался следовать, но потерпел неудачу. Какой рекомендуемый способ сделать это?
Я хотел бы использовать режим прозрачного прокси, потому что я не могу изменить клиента и не могу перенаправить весь трафик с HostA на hostB, поскольку другие службы также работают на HostA. Я хотел бы только перенаправить соединение клиента с хоста A на хост B. Клиент на хосте A вызывает службу на хосте B через определенный порт 10001 по HTTP.
Я попытался настроить HostC с mitmproxy (HostA и HostC находятся в одной подсети) HostA (ip_A) -> HostC (ip_C) с mitmproxy-> HostB (ip_B), я установил таблицу ip для создания прозрачного режима.
Вот что я настраиваю на HostA
sudo iptables -t mangle -I OUTPUT -p tcp --dport 10001 -j MARK --set-mark 1
sudo ip route add default via ip_C table 100
sudo ip rule add fwmark 0x1 table 100
На HostC
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -o eth0 -p tcp --dport 10001 -j REDIRECT --to-port 8080
mitmproxy -T --host
Это не работает таймаут подключения клиента к HostA. Если я попробую traceroute на HostA
traceroute ip_B -p 10001 -T
Это показывает, что ip_B недоступен по TCP от HostA
Я также попытался настроить mitmproxy на HostA, но когда я пытаюсь перенаправить трафик порта 10001 на HostA
sudo iptables -t nat -A OUTPUT -p tcp --dport 10001 -j REDIRECT --to-port 8080
mitmproxy -T --host
Сервисный вызов может быть перехвачен mitmproxy на HostA, но не может получить ответ.
Большое спасибо за вашу помощь.