Я пробовал несколько разных комбинаций правил, но ничего не работает. Я знаю, что вы не можете использовать таблицу предварительной маршрутизации для запроса, поступающего с локального хоста, поэтому я использовал таблицу вывода, и она просто возвращает ошибки при использовании wget.
У меня wget настроен на использование прокси 127.0.0.1:8118. Когда я использую команду ниже, я получаю свой публичный IP-адрес. Если я изменю команду для удаления --no-proxy, я получу IP от своего прокси.
Я хочу использовать iptables для принудительного выполнения любого запроса для этого сайта через прокси независимо от того, какая программа его запрашивает. По сути, я пытаюсь создать прозрачный прокси, но только для запроса одного сайта.
Система = сжатие Debian
команда wget:
wget --no-proxy -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
Я включил net.ipv4.ip_forwarding = 1 в /etc/sysctl.conf.
Попытка применения правил:
iptables -t nat -I OUTPUT --source 0/0 --destination checkip.dyndns.org -p tcp -j REDIRECT --to-ports 8118
iptables -t nat -I OUTPUT -p tcp -d checkip.dyndns.org -j REDIRECT --to-ports 8118
iptables -t nat -I PREROUTING -p tcp -s localhost -j DNAT --to 127.0.0.1:8118
iptables -t nat -I OUTPUT --source localhost --destination checkip.dyndns.org -p tcp -j REDIRECT --to-ports 8118
И различные другие, которые все похожи.
Вы действительно упомянули правильный термин для этого (прозрачный прокси). Во-первых, вам нужен прокси-сервер, поддерживающий прозрачное проксирование. Во-вторых, вам нужно перенаправить на него HTTP-запросы с помощью iptables следующим образом:
iptables -A OUTPUT -d checkip.dyndns.org -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8118
Использование такого правила указывает вашему компьютеру перенаправлять все исходящие HTTP-запросы на порт 80 на ваш локальный прокси-сервер на порт 8118. Кроме того, запись правил, зависящих от имен DNS, не является хорошей идеей, особенно при изменении сопоставления имен DNS и IP. . iptables просто переведет имя в IP и будет использовать этот IP вместо имени.