Подобные вопросы задавались и раньше, но полученные ответы не были удовлетворительными или неприменимы к моей ситуации.
У меня есть прозрачный прокси-сервер 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-адрес, который должен быть освобожден от принудительного перенаправления. Обратите внимание, что, как и ваша текущая пара правил, это правило должно быть перед код принудительного перенаправления.