Назад | Перейти на главную страницу

Обход прозрачного Squid с помощью IPTables

Подобные вопросы задавались и раньше, но полученные ответы не были удовлетворительными или неприменимы к моей ситуации.

У меня есть прозрачный прокси-сервер squid, который фильтрует весь http и, для некоторых машин, https трафик моей сети. Я добился этого с помощью следующих правил iptables:

  iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
    iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.100 -m tcp --dport 443 -j REDIRECT --to-ports 3127
    iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.101 -m tcp --dport 443 -j REDIRECT --to-ports 3127
    iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.102 -m tcp --dport 443 -j REDIRECT --to-ports 3127

Однако я хотел бы обойти squid для определенных доменов: когда клиент делает запрос к mydomain.com, он должен напрямую перейти к шлюзу сети.

Я пробовал вставить следующие правила ПЕРЕД другими, упомянутыми выше.

iptables -t nat -A PREROUTING -i eth0 -d $IP_OF_MYDOMAIN.COM -j DNAT --to-destination $IP_OF_ROUTER
iptables -t nat -A PREROUTING -i eth0 -s $IP_OF_ROUTER -j RETURN

Однако эта установка не работает. Что мне не хватает? Есть ли лучший способ сделать это?

редактировать

Порядок правил следующий:

        iptables -t nat -A PREROUTING -i eth0 -d $IP_OF_MYDOMAIN.COM -j DNAT --to-destination $IP_OF_ROUTER
        iptables -t nat -A PREROUTING -i eth0 -s $IP_OF_ROUTER -j RETURN
        iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
        iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.100 -m tcp --dport 443 -j REDIRECT --to-ports 3127
        iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.101 -m tcp --dport 443 -j REDIRECT --to-ports 3127
        iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.102 -m tcp --dport 443 -j REDIRECT --to-ports 3127

Если я правильно понял, вы хотите освободить трафик на определенный IP-адрес от принудительного перенаправления. Это так, ты ошибаешься.

Замените первые две строки в iptables config выше с

iptables -t nat -A PREROUTING -d a.b.c.d -j ACCEPT

где a.b.c.d IP-адрес, который должен быть освобожден от принудительного перенаправления. Обратите внимание, что, как и ваша текущая пара правил, это правило должно быть перед код принудительного перенаправления.