Моя цель - прозрачно проксировать все HTTP-запросы от одного IP (мой ноутбук, 192.168.1.134
) в моей локальной сети к внешнему IP (интернет-VPS, скажем, X.X.X.X
), на котором работает прокси-сервер (в частности, mitmproxy
работающий в прозрачном режиме), прослушивая на порт 80.
Моя домашняя локальная сеть работает на маршрутизаторе ASUS RT-N66U с прошивкой Asuswrt-Merlin. Маршрутизатор имеет IP 192.168.1.1
и является шлюзом по умолчанию для каждого устройства в моей сети. Для пересылки трафика я подключил ssh'd к маршрутизатору и выполнил следующие команды iptables
:
iptables -t nat -A PREROUTING -s 192.168.1.134 -p tcp --dport 80 -j DNAT --to X.X.X.X:80
iptables -t nat -A POSTROUTING -j MASQUERADE
Кроме того, на моем маршрутизаторе включена переадресация IP:
admin@RT-N66U:/tmp/home/root# cat /proc/sys/net/ipv4/ip_forward
1
Это приводит к чему-то, но это не то, что я ожидаю. Начиная с 192.168.1.134
(мой ноутбук), когда я делаю простой http-запрос (например, curl http://example.com
), в журнале событий моего прокси я вижу, что mitmproxy
сообщает, что клиент подключился (используя общедоступный NAT). IP моего роутера, выданный моим провайдером), однако это примерно так же далеко, как он получает. Это никогда не идет дальше, и моя команда curl просто ждет. В конце концов я вижу "Сброс соединения по одноранговой сети" в журнале моего прокси, и соединение закрывается.
Любая помощь будет предложена. Должен признать, я не очень хорошо iptables
.