透明代理 squid 所有页面均出现 TCP_MISS/503 错误

透明代理 squid 所有页面均出现 TCP_MISS/503 错误

我正在尝试制作一个 squid 代理服务器,以便将其用作透明代理服务器,但我遇到了一些问题,无法找出原因。我使用的设置是几个具有特定“角色”的 VLAN(例如:1 个 VLAN 用于平板电脑和智能手机等外部/来宾设备,其他 VLAN 用于平板电脑和智能手机等内部设备,最后一个用于“普通”桌面和网络打印机)。

这些 VLAN 中的访问由 Checkpoint 防火墙控制,包括互联网访问,其中我有 VLAN,我想使用透明代理,使用端口映射选项将所有端口 80 流量从该 VLAN 重定向到 squid 服务器,以便我可以使用 squid 管理 Web 访问。我画了一个小图,以防我解释得不好(抱歉,我的母语不是英语……)https://i.stack.imgur.com/V3Zmu.png

我正在使用具有 1 个 NIC 的虚拟机,其中安装了 Debian 7.6,并使用以下交换机从源代码编译了 squid 3.4.6:

#!/bin/sh
'./configure' \
'--build=x86_64-linux-gnu' \
'--srcdir=.' \
'--prefix=/usr' \
'--includedir=/usr/include' \
'--localstatedir=/var' \
'--mandir=/usr/share/man' \
'--infodir=/usr/share/info' \
'--libexecdir=/usr/lib/squid' \
'--datadir=/usr/share/squid' \
'--sysconfdir=/etc/squid' \
'--localstatedir=/var' \
'--bindir=/usr/sbin' \
'--enable-inline' \
'--enable-ssl' \
'--enable-ssl-crtd' \
'--enable-icap-client' \
'--enable-follow-x-forwarded-for' \
'--enable-removal-policies=heap,lru' \
'--enable-delay-pools' \
'--enable-cache-digests' \
'--enable-storeio=ufs,aufs,diskd,rock' \
'--enable-disk-io' \
'--enable-linux-netfilter' \
'--enable-ipf-transparent' \
'--disable-eui' \
'--disable-snmp' \
'--disable-wccp' \
'--disable-wccpv2' \
'--disable-http-violations' \
'--disable-translation' \
'--disable-auto-locale' \
'--disable-htcp' \
'--disable-internal-dns' \
'--with-default-user=proxy' \
'--with-logdir=/var/log/squid/' \
'--with-pidfile=/var/run/squid.pid' \
'--with-filedescriptors=65536' \
'--with-cppunit-basedir=/usr' \
'--with-large-files' \
"$@"

我制作了一个小型的 Squid 配置用于测试,其中包含以下内容

http_port 10.5.0.86:3128
http_port 10.5.0.86:8080 intercept
visible_hostname proxyd.domain.com
dns_nameservers 8.8.8.8 8.8.4.4

always_direct allow all

access_log stdio:/var/log/squid/access.log
cache_log /var/log/squid/cache.log
coredump_dir /var/cache/squid
shutdown_lifetime 1 second

acl lan src 10.1.0.3/24
acl pc src 10.2.0.3

http_access allow lan
http_access allow pc
http_access deny all

我通过执行以下操作在 Linux 中启用了 IP Foward 选项:

echo "1" > /proc/sys/net/ipv4/ip_forward

最后我使用来自 squid wiki 的 IPTABLES 规则来重定向源:http://wiki.squid-cache.org/ConfigExamples/Intercept/LinuxRedirect

# Generated by iptables-save v1.4.14 on Fri Aug 29 16:43:22 2014
*mangle
:PREROUTING ACCEPT [2979:777594]
:INPUT ACCEPT [2979:777594]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2715:858098]
:POSTROUTING ACCEPT [2715:858098]
-A PREROUTING -p tcp -m tcp --dport 8080 -j DROP
COMMIT
# Completed on Fri Aug 29 16:43:22 2014
# Generated by iptables-save v1.4.14 on Fri Aug 29 16:43:22 2014
*nat
:PREROUTING ACCEPT [205:16651]
:INPUT ACCEPT [211:17011]
:OUTPUT ACCEPT [161:9775]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -s 10.5.0.86/32 -p tcp -m tcp --dport 80 -j ACCEPT
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
-A POSTROUTING -j MASQUERADE
COMMIT
# Completed on Fri Aug 29 16:43:22 2014

我遇到的问题是,当尝试从端口 8080 上的任何浏览器进行连接(所有 80 流量都从该特定 VLAN 重定向到 squid 服务器)时,使用浏览器中的拦截模式,我收到来自 squid 的错误提示“连接到 10.5.0.86 失败,系统返回(111)连接被拒绝”,并且在 squid access.log 中我得到:

32 10.1.0.2 TCP_MISS/503 3942 GET http://www.serverfault.com/ - ORIGINAL_DST/10.5.0.86 text/html
166 10.1.0.2 TCP_MISS/503 3976 GET http://www.squid-cache.org/Artwork/SN.png - ORIGINAL_DST/10.5.0.86 text/html
0 10.1.0.2 TCP_MISS/503 3888 GET http://www.serverfault.com/favicon.ico - ORIGINAL_DST/10.5.0.86 text/html

我尝试了几种不同的配置,但无法使拦截/透明模式正常工作。请注意,使用浏览器时,我使用端口 3128 配置代理工作正常。

相关内容