Squid Web Cache Wiki

Squid Web Cache 文档

🔗 使用 Squid-2、TPROXYv2 和 WCCP 实现完全透明拦截

🔗 目录

这是一项进行中的工作(意思:Adrian 在撰写权威文档时记录 TPROXY 文档笔记的地方。)

:information_source: 以下文档适用于运行在 Linux 机器上的 Squid-2 WCCPv2 支持和 TPROXYv2 支持。如果您使用的是较新版本,具体的配置选项可能会有所不同。

:warning: Balabit 现在仅支持 TPROXY v4.1,它已集成到 3.1 squid 代码中(请参阅 Features/Tproxy4

:information_source: Squid-3.1 的配置与以下文档差异很大。

🔗 用法

(来自 Steve Wilton 的电子邮件内容)

内核和 iptables 需要使用 tproxy 补丁进行修补(并且 tproxy 头文件需要放置在 /usr/include/linux/netfilter_ipv4/ip_tproxy.h 或 squid 源树中的 include/netfilter_ipv4/ip_tproxy.h)。

iptables 规则需要使用 TPROXY 目标(而不是 REDIRECT 目标)将端口 80 的流量重定向到代理。即:

iptables -t tproxy -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j TPROXY --on-port 80

内核必须从传入的数据包中剥离 GRE 头(可以使用 ip_wccp 模块,或者在 Linux 中设置一个指向路由器的 GRE 隧道(路由器上不需要 GRE 设置)。)

wccp2_service dynamic 80
wccp2_service_info 80 protocol=tcp flags=src_ip_hash priority=240 ports=80
wccp2_service dynamic 90
wccp2_service_info 90 protocol=tcp flags=dst_ip_hash,ports_source priority=240 ports=80

强烈建议使用上述定义来配置两个 wccp 服务,否则如果您有多个缓存(特别是当一个 Web 服务器的名称解析为多个 IP 地址时),将会出现问题。

您重定向到的 http_port 必须启用 transparent 和 tproxy 选项,如下所示(根据需要修改端口):

http_port 80 transparent tproxy

必须定义一个 tcp_outgoing_address。这将需要有效,以满足任何非 tproxied 连接。

在路由器上,您需要确保所有进出客户的流量都将由*两个* wccp 规则处理。我们的实现方式是,将 wccp 服务 80 应用于从面向客户的接口传入的所有流量,并将 wccp 服务 90 应用于从面向客户的接口传出的所有流量。我们还将 wccp“exclude-in”规则应用于从面向代理的接口传入的所有流量。即:

interface GigabitEthernet0/3.100
 description ADSL customers
 encapsulation dot1Q 502
 ip address x.x.x.x y.y.y.y
 ip wccp 80 redirect in
 ip wccp 90 redirect out

interface GigabitEthernet0/3.101
 description Dialup customers
 encapsulation dot1Q 502
 ip address x.x.x.x y.y.y.y
 ip wccp 80 redirect in
 ip wccp 90 redirect out

interface GigabitEthernet0/3.102
 description proxy servers
 encapsulation dot1Q 506
 ip address x.x.x.x y.y.y.y
 ip wccp redirect exclude in

强烈建议在 squid conf 中启用 httpd_accel_no_pmtu_disc

如果您有一些客户端设置了代理,建议为透明/tproxy 请求使用与已设置代理的客户端不同的 squid 端口。

(下一封电子邮件)

Squid-2.6 中的 tproxy 支持不需要以 root 身份运行。它始终为网络请求维护 root 权限(允许 tproxy 补丁工作),而无需维护所有 root 权限。

(下一封电子邮件)

我想在之前列出的 tproxy + wccpv2 的要求列表中添加以下内容:

请检查您是否已在内核中启用了 ip_forwarding。如果不行,我不知道 squid 配置中的 http_port 行是否需要“vhost vport=80”(我们的代理未启用这些选项)。

我使用 ip_wccp 模块来让内核正确处理 GRE 数据包(其工作方式与 ip_gre 模块略有不同)。您是否在 Linux 中设置了 GRE 隧道?如果是,您正在运行什么命令来设置它?我这里没有示例,但我相信其他人正在使用 ip_gre 模块配合 wccp 来处理 GRE 数据包,应该能够提供帮助。

(用户的回复)

嗨,Steve

终于成功了……

我的步骤如下:

现在,我明天将尝试优化我的盒子和 squid.conf。

🔗 另一个示例

🔗 参考资料


⚠️ Disclaimer: Any example presented here is provided "as-is" with no support
or guarantee of suitability. If you have any further questions about
these examples please email the squid-users mailing list.

类别: ConfigExample

导航:网站搜索网站页面分类🔼 向上