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

Запретить тегирование неперехватываемого трафика Squid с помощью политики маршрутизации

Я повторно отредактировал исходный вопрос, потому что я изменил настройку с момента исходного ответа, который был для настройки на основе NAT. NAT больше не используется и был заменен на TPROXY для совместимости с IPv6.

Я запускаю squid в небольшой сети. Я настроил пару портов прослушивания Squid для разных сценариев.

Выдержка из squid.conf

Для настройки TPROXY я использую следующие правила iptables / ip6tables на моем маршрутизаторе DD-WRT с iproute2 для маркировки и перенаправления трафика на прокси. Проблема в том, что в этой настройке тегируется весь трафик, включая трафик IPv4 и IPv6, который идет на прокси-сервер Squid через настройку порта 3128.

Мне нужен способ исключить этот трафик, потому что он увеличивает накладные расходы и нарушает подключение (особенно IPv6) на клиентах LAN, к которым прокси-сервер применяется напрямую.

Я знаю, что могу добавить конкретных клиентов в PREROUTING стол с ACCEPT Правило, но сделать это как для IPv4, так и для IPv6 будет сложно быстро. Мне нужно найти общий способ исключить всех клиентов LAN, которые проходят через прокси-сервер Squid на порт 3128 на уровне маршрутизатора, но я не знаю, как это сделать лучше всего.

Текущая политика маршрутизации DD-WRT Squid:

# 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 в ACCEPT трафик на порт 80 с сервера squid. После этого правила вы можете DNAT правила.

Как только правило соответствует правилу, цепочка больше не соблюдается, поэтому ACCEPT закоротит DNAT для траффика от squid.

РЕДАКТИРОВАТЬ: DNAT правило уже исключает $PROXY_IP поэтому добавлять дополнительное правило не нужно. Лично я предпочитаю добавить явное правило к ACCEPT трафик от прокси, чтобы никакие дальнейшие правила не влияли на этот трафик.

Для тех клиентов, которые подчиняются правилам прокси для явного использования прокси на порту 3128, этот трафик не будет проходить через маршрутизатор, поскольку клиенты могут получить доступ к прокси напрямую; по крайней мере, я надеюсь, что прокси и клиенты находятся в одной подсети? Если по какой-то причине прокси-сервер и клиенты находятся в разных подсетях, но в одной и той же физической сети LAN, тогда маршрутизатор должен отправлять перенаправления ICMP клиенту, когда трафик, предназначенный для прокси-сервера, от клиента достигает маршрутизатора.