注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

关于wccp与ats整合的开发思路整理(长期......)  

2013-12-28 12:26:34|  分类: squid系统应用 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

  资料收集之一说明,本部分分来源于《squid中文权威手册》9章第6节的内容,关于squid应用中的一些问题集累。通过分析可以从旁整理一些关于wccp开发的一些思路。wccp的开发需要关注两人个方面的内容:
        1)服务端(这样可以开发出支持wccp功能的跻路由、交换等网关型网络设备,比如csico交换机对wccp的支持):支持wccp的协调管理功能;
        2)接入端(比如squid-box):支持主动与wccp服务器进行握手并加入wccp的服务池形成集群。
  
9.6 调试问题
HTTP 拦截比较复杂,因为许多不同设备必须组合正确工作。为了帮助你跟踪问题,如下是一个问题解答检查列表:
::客户端数据包正在通过路由器/交换机吗?
在简单网络里,这点显而易见。你可以 trace 线缆并观察指示灯的活动闪烁。然而在大而复杂的网络,数据包可能走不同的路线。假如你的组织够大,并有网络 sniffer 设备,就可以观察线路中 web 客户端的请求数据包。低技术的方法是,断开有问题的线路,并观察是否影响客户端的 web 浏览。
::路由器/交换机配置是否正确?
        你也许要再次检查路由器/交换机配置。
::假如你已配置了某个接口,那能否确保它正确呢?
::是否新的配置真正在设备上运行?
       也许在你保存配置之前,路由器/交换机已重启了。在改变生效前,你或许需要 reboot 设备。
::交换机/路由器能与 squid 主机会话吗?
       能从路由器/交换机上 ping 通 squid 吗?
       大部分 4 层拦截配置要求网络设备和 squid 在同一子网里。登陆路由器/交换机,确认能 ping 通 squid 的 IP 地址。
::交换机/路由器相信 squid 在运行吗?
        许多传输拦截设备不会发送会话到 squid,除非它们知道 squid 是健壮的。使用调试命令来预览 squid 的健壮性状态。也许会发现三层健壮性检测(例如 ICMP ping)比四层检测(例如 HTTP)更容易,它使网络设备更容易将 squid 标记为存活状态。
::Squid 实际在运行吗?
        请再次确认 squid 真正在运行,特别是在系统近期重启过的情况下。
::数据包正在抵达 squid 主机吗?
        使用 tcpdump 能见到拦截的 TCP 连接。如下是示例:
        # tcpdump -n -i eth0 port 80

       假如使用 WCCP,请检查来自路由器的 GRE 包:
       # tcpdump -n -i eth0 ip proto gre
假如没有看到 tcpdump 的任何输出,则路由器/交换机可能没有发送任何数据。在这种情况下,返回到以前的建议。
注意,假如设备正使用四层健壮性检测,你可以在 tcpdump 的输出里见到这些。健壮性检测来自路由器/交换机的 IP 地址,所以它们容易被认出。假如你见到健壮性检测,但没有其他数据,那可能意味着路由器/交换机正把 squid 的响应理解为不健壮。例如,设备可能想见到200(OK)响应,但 squid 返回一个错误,例如 401(未授权)或 404(未发现)。请对 access.log运行 tail -f 命令。
::激活了 IP 转发吗?
       请再次确认 squid 运行的操作系统配置了 IP 包转发。假如没有,主机可能会丢弃拦截数据包,因为目的 IP 地址并非本地。
::配置包过滤了吗?
       请确认包过滤器(例如 ipfw,iptables,pf 等)配置正确。当每件事都运行良好时,你能定期运行命令来显示过滤规则,并观察计数器增长。例如:
# ipfw show 300 ; sleep 3; ipfw show 300
00300 86216 8480458 fwd 127.0.0.1,3128 tcp from any to any 80 in
00300 86241 8482240 fwd 127.0.0.1,3128 tcp from any to any 80 in
注意该示例在 FreeBSD 上,包和字节计数器(第二和第三列)正在增长。
::环路接口起来和配置了吗?
假如有一条规则转发/重定向包到 127.0.0.1,请确认环路接口(例如 lo0,lo 等)起来了,并
配置过它。假如没有,内核简单的跳过这条转发/重定向规则。
::WCCP/GRE 包被正确解开了吗?
假如使用 WCCP,请确认 GRE 包被正确解开。假如因为某些理由,系统不知道该如何处理
GRE 包,那就在 netstat -s 的输出里会见到"unknown/unsupported protocol"计数器在增长。
# netstat -s | grep unknown
46 packets for unknown/unsupported protocol
假如 OS 有 GRE 接口,请频繁运行 netstat -i 命令,观察不断增长的包数量:
# netstat -in | grep ^gre0
Name
Mtu Network

Address
Ipkts Ierrs
26
Opkts Oerrs
Coll
gre0
1476 <Link#4>
304452
0
0
4
0
另外,在 GRE 接口上运行 tcpdump:
# tcpdump -n -i gre0
::Squid 能响应客户端吗?
有可能路由器/交换机能发送包到 squid,但 squid 不能将包发送回客户端。这种情况可能发
生在:防火墙过滤规则拒绝外出数据包,或 squid 没有到客户端 IP 地址的路由。为了检查
这种情况,请运行 netstat -n 并观察 SYN_RCVD 状态的 sockets:
% netstat -n
Active Internet connections
Proto Recv-Q Send-Q
tcp4
tcp4
tcp4
tcp4
tcp4
tcp4
tcp4
tcp4
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Local Address
Foreign Address 10.102.0.1.36260
                10.102.0.1.36259
                10.102.0.1.36258
                10.102.0.2.36257
                10.102.0.2.36255
                10.102.0.1.36254
                10.102.0.1.36253
                10.102.0.1.36252
10.102.129.246.80
10.102.129.226.80
10.102.128.147.80
10.102.129.26.80
10.102.129.29.80
10.102.129.226.80
10.102.128.117.80
10.102.128.149.80
(state)
SYN_RCVD
SYN_RCVD
SYN_RCVD
SYN_RCVD
SYN_RCVD
SYN_RCVD
SYN_RCVD
SYN_RCVD
假如你看到这些,请使用 ping 和 traceroute 来确认 squid 能与客户端双向通信。
::Squid 能与原始服务器会话吗?
假如 squid 不能连接到原始服务器,拦截 HTTP 连接会无法进行。如果这点发生,netstat 会
显示许多连接在 SYN_SENT 状态:
% netstat -n
Active Internet connections
Proto Recv-Q Send-Q
tcp4
tcp4
tcp4
tcp4
tcp4
tcp4
0
0
0
0
0
0

0
0
0
0
0
0
Local Address
Foreign Address 10.102.129.145.80
                10.102.129.224.80
                10.102.128.71.80
                10.102.129.209.80
                10.102.129.62.80
                10.102.129.160.80
172.16.102.66.5217
172.16.102.66.5216
172.16.102.66.5215
172.16.102.66.5214
172.16.102.66.5213
172.16.102.66.5212
27
(state)
SYN_SENT
SYN_SENT
SYN_SENT
SYN_SENT
SYN_SENT
SYN_SENT
tcp4
tcp4
tcp4
tcp4
0
0
0
0
0
0
0
0
172.16.102.66.5211
172.16.102.66.5210
172.16.102.66.5209
172.16.102.66.5208
10.102.128.129.80
10.102.129.44.80
10.102.128.73.80
10.102.128.43.80
SYN_SENT
SYN_SENT
SYN_SENT
SYN_SENT
再次用 ping 和 traceroute 来确认 squid 能与原始服务器会话。
::外出连接正被拦截吗?
假如 squid 能 ping 通原始服务器,并且仍然见到大量的连接在 SYN_SENT 状态,那么路由
器/交换机可能正在拦截 squid 的外出 TCP 连接。在某些情况下,squid 能检测到这种转发循
环,并写警告日志到 cache.log。如此的转发死循环能迅速耗光 squid 的所有文件描述符,这
样也会在 cache.log 里产生警告。
假如你怀疑这个问题,请使用 squidclient 程序来发起一些简单的 HTTP 请求。例如,该命令
发起一条直接到原始服务器的 HTTP 请求:
% /usr/local/squid/bin/squidclient -p 80 -h slashdot.org /
假如该命令成功,你可以在屏幕上见到来自 Slashdot 站点的许多难看的 HTML。然后通过
squid 来试试同样的请求:
% /usr/local/squid/bin/squidclient -r -p 3128 -h 127.0.0.1 http://slashdot.org/
假如没有在 cache.log 里看到错误消息,就可以再次在屏幕上看到一些 HTML。假如看到转发循环错误,就必须重新配置交换机/路由器,以便它允许 squid 的外出连接正常通过,而不被拦截。
  评论这张
 
阅读(168)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017