这两天调试了一下squid 2.6的wccp透明代理,颇走了些弯路,先把调试的几个关键点纪录下来,至于详细的笔记,希望最近我不会再那么懒了,争取这两个礼拜能写出来吧。
推荐的软硬件环境:
- cisco 6509交换机的IOS版本高于12.2(18)SXD4
- 采用2.6.10以上的linux kernel+squid 2.6的最新STABLE发行
以下是对这个推荐软硬环境的详细解释:
- 首先,cisco 6509交换机上的super 720引擎是支持wccp的。
Release 12.2(17d)SXB1 and later releases support WCCP on Supervisor Engine 2.Release 12.2(18)SXD1 and later releases support WCCP on Supervisor Engine 720.
不过还需要注意的是这段文字:
Configuring WCCPv2 on a Supervisor Engine 720 causes high CPU utilization. This problem is resolved in Release 12.2(18)SXD4.
所以,只要确认你的6509上的 super 720引擎用的IOS版本高于12.2(18)SXD4,你就可以放心大胆的使用6509上的wccp的功能。之所以在IOS支持的这个问题上唠唠叨叨了这么多,是因为之前给我们公司作系统集成的SI拿了本《Catalyst 6500 Series Switch Cisco IOS Software Configuration Guide:Release 12.2(17d)SXB1》跟我信誓旦旦的说没法在super 720上开启wccp......... - linux 2.6.9-rc3 之后的kernel的ip_gre模块就已经加入对wccp的支持了,而且squid 2.6在kernel 2.6上开启epoll不需再对kernel打patch了。
所以,如果要使用linux作为squid运作的系统平台的话,建议采用2.6.10以上的kernel+squid 2.6的最新STABLE发行(当前是STABLE 14)----这样,比较不麻烦。
调试过程中的注意点:
- squid 2.6的透明代理配置与squid 2.5有很大的简化,请大家注意一下。以下这么一句就搞定了透明代理:
- http_port 3128 transparent
- 其实单就squid而言,与wccp的配合除了透明代理的设置之外,就是wccp开头几个相关选项了。就如今的硬件环境,大部分用的都是wccp v2了,所以有可能用到的就是wccp2开头的这几个选项了:
- wccp2_router
- wccp2_rebuild_wait
- wccp2_forwarding_method
- wccp2_return_method
- wccp2_assignment_method
- wccp2_service
- wccp2_service_info
- wccp2_weight
- wccp2_address
简单的说,真正需要配置的就这么两个:- wccp2_router
- wccp2_service
而最棘手的配置就是wccp2_router需要配置的是三层交换上的哪个router地址了:很不幸的,大部分的三层交换机上都配置N多的网关地址......
在这个问题上我耗了不少的时间,有很多参考资料都是告诉我们在交换机上用 show ip wccp看到的Router Identifier:显示的那个地址,就我的实践来看,是不一定的。最方便的方法还是使用tcpdump在cache服务器上监听2048端口的通讯状况,在启动了配置了wccp2的squid之后,使用tcpdump监听:- tcpdump -i eth0 port 2048
看到的往cache服务器的udp 2048端口发送信息的网关地址就是我们要配置的wccp2_router地址了 - 在IOS上监视wccp2的 Cache Engines注册状态不要太心急,需要小等个半分钟左右,当然了,如果你实在是心急的话,开wccp的events debug直接看log输出信息吧:
在IOS的特权模式输入- debug ip wccp events
- term mon
看到如下的信息就说明squid在交换机上注册成功了:- Aug 9 04:39:54: WCCP-EVNT:wccp_update_assignment_status: enter
- Aug 9 04:39:54: WCCP-EVNT:wccp_update_assignment_status: exit
- Aug 9 04:39:54: WCCP-EVNT:wccp_validate_wc_assignments: enter
- Aug 9 04:39:54: WCCP-EVNT:wccp_validate_wc_assignments: not mask assignment, exit
- Aug 9 04:39:54: WCCP-EVNT: GRE adjacency added for 你的squid服务器地址
- Aug 9 04:39:54: %WCCP-5-SERVICEFOUND: Service web-cache acquired on Web Cache 10.18.150.104
- Aug 9 04:39:54: WCCP-EVNT:wccp_change_router_view: S00
- Aug 9 04:39:54: WCCP-EVNT:wccp_change_router_view: deallocate rtr_view (24 bytes)
- Aug 9 04:39:54: WCCP-EVNT:wccp_change_router_view: allocate hash rtr_view (1560 bytes)
- Aug 9 04:39:54: WCCP-EVNT:wccp_change_router_view: rtr_view_size set to 72 bytes
- Aug 9 04:39:54: WCCP-EVNT:S00: Built new router view: 1 routers, 1 usable web caches, change # 00000008
- 记得在cache服务器上关闭rp_filter
- 记得在cache服务器上把到你建立的到wccp2_router的gre通道上的80端口的数据用iptables转发到squid端口上。
- iptables -t nat -A PREROUTING -i 到wccp2_router的gre通道 -p tcp --dport 80 -j REDIRECT --to-port 3128
如此而已,我之前把这东西看得太神秘了。
转载于:https://blog.51cto.com/ipwireless/121588