Моя цель - иметь внешнюю установку DansGuardian + Squid, которая будет использоваться только определенными машинами (особенно детьми) в моем доме. Мне удалось установить оба на дешевом VPS, и я получил некоторые из результатов, которые я ищу.
На моем домашнем маршрутизаторе работает DD-WRT, так что iptables там. Изначально я использовал эту команду:
iptables -A PREROUTING -p tcp -m tcp --dport 80 -m mac --mac-source 00:19:B9:3E:BA:DF -j DNAT --to-destination <vps-address>:3182
По сути, эта команда принимает исходящий трафик порта 80, исходящий с указанного MAC-адреса, и отправляет его на vps-адрес: 3182. При открытии браузера на связанной машине это сработало, но я получил веб-страницу Squid с указанием «доступ запрещен». По-видимому, используя порт 3182, я направил его напрямую на Squid, который настроен так, чтобы разрешать трафик только с localhost.
Поэтому я заменил его на это (порт 8080 вместо 3182)
iptables -A PREROUTING -p tcp -m tcp --dport 80 -m mac --mac-source 00:19:B9:3E:BA:DF -j DNAT --to-destination <vps-address>:8080
Когда я использую второй подход, он вообще не работает. Но самое безумное, что я могу изменить настройки прокси в браузере и указать на vps-адрес: 8080, и он работает нормально.
Итак, squid прозрачно работает на сетевом уровне - но как мне заставить dansguardian сделать то же самое? Я бы предпочел прозрачное решение - я не хочу полагаться на явно типизированные настройки прокси в браузере.
Также возможен другой подход - использовать сервер ICAP, работающий на том же VPS-сервере, что и Squid, и прослушивать только локальный адрес 127.0.0.1, на который Squid будет направлять весь трафик. Примером такого ICAP-сервера является qlproxy. Итак, если вам удалось заставить ваш Squid работать прозрачно, значит, у вас уже есть необходимая настройка. Просто добавьте в суп qlproxy.