[squid+netfilter] : полностью прозрачный прокси.

fuliganka

Есть машина с двумя интерфейсами, пусть будут eth0 и eth1.
Eth0 имеет адреса в сети 192.168.0.0/16.
Eth1 имеет реальный адрес A.B.C.D.
Эта машина nat-ит всю сеть 192.168.0.0/16 наружу, кроме этого, на ней стоит squid, и все клиентские запросы на порт 80 в iptables-цепочке nat prerouting редиректятся squid-у на порт 3128, и все запросы со squid-а наружу уходят с адреса A.B.C.D.
Но хочется, чтобы squid ходил наружу (вернее, до iptables-цепочки nat postrouting) от адреса клиента (т.е. squid, фактически, работает в режиме непроксирующего кэша).
Отказаться от squid-a и просто SNAT-ить всё на nat postrouting нельзя - squid кэширует ~40% http-трафика, который составляет порядка 70% общего трафика. Использовать tcp_outgoing_address в squid.conf тоже нельзя - сеть 192.168.0.0/16 большая, алиасов на интерфейс столько делать незачем.
Пересобрал squid с --enable-linux-netfilter, которая якобы "Enable Linux Netfilter (2.4) Transparent proxy" - ничего не изменилось.
Есть у кого какие соображения?
altlinux 2.4.28
squid 2.5.stable9
iptables 1.2.11

Marinavo_0507

> Но хочется, чтобы squid ходил наружу (вернее, до iptables-цепочки nat
> postrouting) от адреса клиента
Зачем, если заNATится в тот же адреc?

fuliganka

Для подсчёта трафика, который у меня осуществляется через ulog на mangle pre/postrouting, и подсчёт трафика происходит per user ip, т.е. чтобы всё было корректно - на mangle pre/postrouting пакет должен иметь dst (c инета в локалку) /src (с локалки в инет) адрес 192.168.X.Y.
Парсить squid-овый access.log очень, очень не хотелось бы.

Marinavo_0507

> Парсить squid-овый access.log очень, очень не хотелось бы.
Маза придётся, я так и сделал в своё время. Это просто, гораздо проще, чем дописывать squid и netfilter.

fuliganka

да, кстати: а кто-нибудь знает, что в действительности даёт опция ./cofigure --enable-linux-netfilter?

Marinavo_0507

я знаю
с этой опцией squid умеет определять, какое dst ip было у соединения до nat prerouting
это нужно, чтобы знать, куда ему коннектиться, если в запросе нет поля Host

fuliganka

а вот этот патчик не ставил случаем?
tproxy patch

Marinavo_0507

раньше не было такого
вроде всё грамотно сделано, за исключением того, что нужно от рута сквид пускать
правильнее было бы вынести в отдельный процесс установку опций
только походу не поможет тебе, так как подмена адреса идёт в том же nat postrouting, то есть после твоего ulog, и обратно трансляцию во внешний ip сервера уже не сделать
Оставить комментарий
Имя или ник:
Комментарий: