Я переиздал исходный вопрос, потому что я изменил установку начиная с исходного ответа, который был для основанной на NAT установки. NAT больше не используется и был заменен TPROXY для совместимости IPv6.
Я выполняю сквид в небольшой сети. Я имею, устанавливают несколько портов прослушивания сквида для различных сценариев.
Выборка squid.conf
Поскольку TPROXY устанавливают, я использую следующие правила iptables/ip6tables о своем маршрутизаторе DD-WRT с iproute2
отметить и перенаправить трафик к прокси. Проблема находится в этой установке, весь трафик отмечен, включая IPv4 и трафик IPv6, который идет в прокси Сквида через 3 128 установок порта.
Мне нужен способ исключить этот трафик, потому что это, добавляет наверху и повреждает возможность соединения (особенно IPv6) на клиентах локальной сети, которые имеют прокси, примененный непосредственно.
Я знаю, что мог добавить определенные клиенты к PREROUTING
таблица с ACCEPT
правило, но выполнение этого и для IPv4 и для IPv6 станет твердым справиться быстро. Я должен найти универсальный способ исключить всех клиентов локальной сети, которые проходят Прокси Сквида на порте 3128 на уровне маршрутизатора, но я не знаю лучший способ сделать это.
Текущая маршрутизация политики Сквида DD-WRT:
# Squid transparent proxy
PROXY_IPV4=192.168.x.x
PROXY_IPV6=2001:470:xxxx:xx::x
CLIENTIFACE=br0
FWMARK=3
iptables -t mangle -A PREROUTING -i $CLIENTIFACE -s $PROXY_IPV4 -p tcp --dport 80 -j ACCEPT
ip6tables -t mangle -A PREROUTING -i $CLIENTIFACE -s $PROXY_IPV6 -p tcp --dport 80 -j ACCEPT
iptables -t mangle -A PREROUTING -i $CLIENTIFACE -p tcp --dport 80 -j MARK --set-mark $FWMARK
iptables -t mangle -A PREROUTING -m mark --mark $FWMARK -j ACCEPT
ip6tables -t mangle -A PREROUTING -i $CLIENTIFACE -p tcp --dport 80 -j MARK --set-mark $FWMARK
ip6tables -t mangle -A PREROUTING -m mark --mark $FWMARK -j ACCEPT
iptables -t filter -A FORWARD -i $CLIENTIFACE -o $CLIENTIFACE -p tcp --dport 80 -j ACCEPT
ip6tables -t filter -A FORWARD -i $CLIENTIFACE -o $CLIENTIFACE -p tcp --dport 80 -j ACCEPT
ip rule add fwmark $FWMARK table 2
ip -6 rule add fwmark $FWMARK table 2
ip route add default via $PROXY_IPV4 table 2
ip -6 route add default via $PROXY_IPV6 table 2
# End Squid intercept proxy config
Добавить iptables правило ПРИНЯТЬ
трафик на порт 80 с сервера squid. После этого правила у вас могут быть правила DNAT
.
Как только правило соответствует правилу, цепочка больше не соблюдается, поэтому ACCEPT
закоротит DNAT
для трафика от squid.
РЕДАКТИРОВАТЬ:
Правило DNAT
уже исключает $ PROXY_IP
, поэтому добавлять дополнительное правило не нужно. Лично я предпочитаю добавить явное правило к трафику ACCEPT
от прокси, чтобы любые дальнейшие правила не влияли на этот трафик.
Для тех клиентов, которые подчиняются правилам прокси, использовать прокси явно на порту 3128, этот трафик не будет проходить через маршрутизатор, поскольку клиенты могут напрямую обращаться к прокси; по крайней мере, я надеюсь, что прокси и клиенты находятся в одной подсети? Если по какой-то причине прокси-сервер и клиенты находятся в разных подсетях, но в одной и той же физической сети LAN, то маршрутизатор должен отправлять перенаправления ICMP клиенту, когда трафик, предназначенный для прокси-сервера от клиента, достигает маршрутизатора.