Захотелось мне сделать дома так, чтобы все домашние хосты, пытающиеся выйти в интернет по http, ходили туда через прокси (squid). Потратив немного времени, нашёл решение, но для начала опишу ситуацию.
Имеем squid_host – компьютер под управлением kubunut 8.04, который выступает в роли шлюза. На нём два интерфейса: eth0 смотрит в сеть провайдера, а eth1 смотрит во внутреннюю сеть. На этом хосте поднят и работает прокси-сервер Squid 2.6.STABLE18.
В данной ситуации настройка прозрачного прокси (transparent proxy) свелась к трём шагам:
sudo iptables -t nat -I PREROUTING 1 -i eth1 -s ! squid_host -p tcp --dport 80 -j DNAT --to-destination squid_host:3128
http_port 3128 transparent
sudo /etc/init.d/squid restart
Естественно, правило из п.1 должно каким-то образом добавляться при старте компьютера. У меня имеется стартовый скрипт, который добавляет все правила iptables, включая указанное в п.1.