Излагаю свое решение сабжевого вопроса. Покритикуйте/похвалите.
Итак, на сервере 4 сетевых карты. Три обслуживают сетки 172.16.1.0 172.16.2.0 172.16.3.0, а четвертая с твердым IP смотрит в Интернет.
По ряду причин все сетевые сервисы я привязал либо к твердому IP-адресу, либо к 172.16.2.1 (squid). Собственно по этим двум адресам и считаю траффик (iptables).
Стандартное, классическое решение по прозрачному проксированию
iptables -t nat -A PREROUTING -s 172.16.0.0/16 -p tcp --dport 80 -j REDIRECT --to-ports 3128
не подходит для моей ситуации, ибо явно не прописаны IP-адреса. Squid пришлось настраивать так, что из сетей 172.16.1.0 и 172.16.3.0 идет неучтенный траффик. А если squid привязать к адресу 172.16.2.1, то, понятное дело, люди из сетей 172.16.1.0 и 172.16.3.0 не могут ходить в И-нет.
Короче, привязал я squid к адресу 172.16.2.1, а прозрачное проксирование сделал командой:
iptables -t nat -A PREROUTING -s 172.16.0.0/16 -p tcp --dport 80 -j DNAT --to-destination 172.16.2.1:3128
Прав я или нет? Вроде все работает :) Даже логи в access.log складываются без явной настройки клиентских эксплореров на пару 172.16.2.1:3128