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

Нужна помощь по Squid server as gateway + iptables

В локальной сети есть несколько компьютеров, поэтому я выбрал один и назначил его в качестве шлюзового сервера, запустив Squid на порту 3128 (ОС Ubuntu), а затем выполнил на нем следующие 2 команды:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

(IP-адрес шлюза dhcp и других компьютеров установлен на этот IP-адрес компьютера Squid)

Однако, когда другие ПК просматривают веб-сайты HTTP, веб-сайты не отображаются, но отображается страница ошибки Squid с сообщением «Запрошенный URL-адрес не может быть получен» с URL-адресом: «/»

Журнал кальмаров:

0 192.168.0.130 NONE/400 3522 GET / - HIER_NONE/- text/html

Полагаю, Squid не смог прочитать имя хоста в запросе.

Без указанной выше команды iptables все остальные ПК могут нормально читать веб-сайты, и все они работают.

Так что это не проблема настройки шлюза, а что-то среднее между iptables или самим Squid, которые не понимают запрос, направленный iptables.

Был ли кто-нибудь в подобной ситуации раньше? Любые советы о том, где что-то пошло не так, были бы очень признательны !!! Мне потребовался день, пока я возился и понятия не имею !!!

Большое спасибо!

Решение

ставить перехватить в конфигурации порта прокси Squid:

http_proxy 3129 intercept

Объяснение

Мы должны различать прозрачный прокси и явный прокси.

Явный прокси потребует, чтобы браузер отправил правильный заголовок прокси (т.е. http: // прокси: порт / http: //realwebsite.com/test). Это объясняло, почему, когда я указал браузеру на прокси, он работал; но если бы я использовал команду iptables выше, этого не произошло!

Прозрачный прокси, с другой стороны, не настраивается на уровне браузера / пользователя, а выполняется на уровне маршрутизации (т.е. команда iptables выше). Таким образом, когда прокси получает запрос, на самом деле это http://realwebsite.com/test. И если прокси не настроен в этом режиме, он извлекает себя http: // прокси: порт / тест

И поскольку мой прокси был в явном режиме, а не в прозрачном, он не работал с командой iptables.