В локальной сети есть несколько компьютеров, поэтому я выбрал один и назначил его в качестве шлюзового сервера, запустив 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.