局域网上有几台电脑,因此我选择了一台并将其设置为网关服务器,通过在端口 3128(Ubuntu 操作系统)上运行 Squid,然后在其上运行以下 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
(并且其他 PC 的网关 dhcp ip 都设置为该 Squid PC IP)
但是,当其他电脑浏览 HTTP 网站时,网站不会显示,而是显示 Squid 错误页面,提示“无法检索请求的 URL”,URL 为:“/”
鱿鱼日志:
0 192.168.0.130 NONE/400 3522 GET / - HIER_NONE/- text/html
所以我猜测 Squid 无法读取请求中的主机名。
即使没有上述 iptables 命令,其他所有 PC 都可以正常读取网站,并且都正常运行。
因此,这不是网关设置问题,而是 iptables 或 Squid 本身不理解 iptables 路由的请求。
以前有人遇到过类似的情况吗?如果能告诉我哪里出了问题,我将不胜感激!!!我花了一天时间摆弄,却毫无头绪!!!
多谢!
答案1
解决方案
放截距在 Squid 代理端口配置中:
http_proxy 3129 intercept
说明
我们必须区分透明代理和显式代理。
显式代理将要求浏览器向代理发送正确的标头(即http://代理:端口/http://realwebsite.com/test)。这就解释了为什么当我将浏览器指向代理时,它可以工作;但如果我使用上面的 iptables 命令,它却不行!
透明代理另一方面,不是在浏览器/用户级别配置,而是在路由级别完成(即上面的 iptables 命令)。因此,当代理收到请求时,它实际上是http://realwebsite.com/test。如果代理未配置为这种模式,它所做的就是检索自身http://代理:端口/测试
而且因为我的代理处于显式模式,而不是透明模式,所以它无法与 iptables 命令一起工作。