您现在的位置:主页 > 服务器 > 代理服务器 >

《Squid 中文权威指南》第9章 译者:彭勇华代理服务器

来源:新2备用网址hg622.com|首页吧 责任编辑:Jzq8 发表时间:2011-12-25 点击:次
译者序:
本人在工作中维护着数台Squid?服务器,多次参阅Duane?Wessels(他也是Squid?的创始人)的这本书,原书名是"Squid:?The?Definitive?Guide",由O'Reilly?出版。我在业余时间把它翻译成中文,希望对中文Squid?用户有所帮助。对普通的单位上网用户,Squid?可充当代理服务器;而对Sina,NetEase?这样的大型站点,Squid?又充当WEB?加速器。这两个角色它都扮演得异常优秀。窗外繁星点点,开源的世界亦如这星空般美丽,而Squid?是其中耀眼的一颗星。
对本译版有任何问题,请跟我联系,我的Email是:yonghua_peng@yahoo.com.cn??彭勇华[/color:00a6cd12d5][/b:00a6cd12d5]
--------------------------------------------------------------------------------------

第9章?Cache拦截


Cache拦截是让传输流向Squid的流行,它不用配置任何客户端。你可以配置路由器或交换机将HTTP连接转发到squid运行的主机。squid运行的操作系统被配置成接受外部数据包,并将其递交给squid进程。为了让HTTP拦截生效,你必须配置3个独立的因素:网络设备,squid运行的操作系统,和squid自身。


(译者注:Cache拦截实际上指的是Squid的透明代理)


9.1它如何工作?

Cache拦截包含了某些网络欺骗,它对理解在客户端和Squid之间的会话有用。我使用图9-1和如下的tcpdump示例输出,来解释当数据包通过网络时,如何被拦截。
?
1.用户代理(user-agent)想请求某个资源,它对原始服务器发起index.html请求,例如:www.oreilly.com。它需要原始服务器的IP地址,所以先发起一个DNS请求:

Packet?1
TIME:???19:54:41.317310
UDP:????206.168.0.3.2459?->?206.168.0.2.53
DATA:???.d...........www.oreilly.com.....
---------------------------------------------------------------------------

Packet?2
TIME:???19:54:41.317707?(0.000397)
UDP:????206.168.0.2.53?->?206.168.0.3.2459
DATA:???.d...........www.oreilly.com.............PR.....%........PR.
????????....$........PR...ns1.sonic.net.........PR...ns2.Q........PR
????????...ns...M...............h.............!.z.......b......

2.现在有了IP地址,用户代理初始化到原始服务器80端口的TCP连接:

Packet?3
TIME:???19:54:41.320652?(0.002945)
TCP:????206.168.0.3.3897?->?208.201.239.37.80?Syn
DATA:???

3.路由器或交换机注意到目的地址是80端口的TCP?SYN包。下一步会发生什么依赖于特定的拦截。在4层交换和路由策略上,网络设备简单的将TCP包转发到Squid的数据链路地址。当squid直接挂在网络设备上时,就这样工作。对WCCP来说,路由器封装TCP包为GRE包。因为GRE包有它自己的IP地址,它可能被通过多个子网进行路由。换句话说,WCCP不要求squid直接挂在路由器上。

4.Squid主机的操作系统接受到拦截包。对4层交换来说,TCP/IP包并没有改变。

假如包使用了GRE封装,主机会剥离外部的IP和GRE头部,并将原始的TCP/IP包放在输入队列里。

注意squid主机接受到的包是针对外部地址的(原始服务器的)。正常情况下,这个包不匹配任何本地地址,它会被丢弃。为了让主机接受外部数据包,你必须在大多数操作系统上激活IP转发。

5.客户端的TCP/IP包被包过滤代码处理。数据包必须匹配某个规则,该规则指示内核转交这个包给squid。如果没有这样的规则,内核简单的将包按照它自己的方式转发给原始服务器,这不是你想要的。

注意SYN包的目的端口是80,但squid可能侦听在不同的端口,例如3128。包过滤规则允许你改变端口号。你不必让squid侦听在80端口。通过tcpdump,你能见到这步,因为转发的包不会再次通过网络接口代码。

即使squid侦听在80端口,包过滤器的重定向规则仍是必要的。可以让squid不在这些端口上接受拦截包。重定向规则有点神奇,它转交外部数据包给squid。

6.Squid接受到新连接的通知,它接受这个连接。内核发送SYN/ACK包返回给客户端:

Packet?4
TIME:???19:54:41.320735?(0.000083)
TCP:????208.201.239.37.80?->?206.168.0.3.3897?SynAck
DATA:???

就象你见到的一样,源地址是原始服务器,尽管这个包不会抵达原始服务器。操作系统只是简单的将源地址和目的地址交换一下,并将它放进响应数据包里。

7.用户代理接受到SYN/ACK包,建立起完整的TCP连接。用户代理现在相信它是连接到原始服务器,所以它发送HTTP请求:

Packet?5
TIME:???19:54:41.323080?(0.002345)
TCP:????206.168.0.3.3897?->?208.201.239.37.80?Ack
DATA:???
---------------------------------------------------------------------------
Packet?6
TIME:???19:54:41.323482?(0.000402)
TCP:????206.168.0.3.3897?->?208.201.239.37.80?AckPsh
DATA:???GET?/?HTTP/1.0
????????User-Agent:?Wget/1.8.2
????????Host:?www.oreilly.com
????????Accept:?*/*
????????Connection:?Keep-Alive

8.Squid接受HTTP请求。它使用HTTP?Host头部来转换局部URL为完整的URL。在这种情形下,可在access.log文件里见到。

9.从这点开始,squid正常的处理请求。一般cache命中会立刻返回。cache丢失会转发到原始服务器。

10.最后,是squid从原始服务器接受到的响应:

Packet?8
TIME:???19:54:41.448391?(0.030030)
TCP:????208.201.239.37.80?->?206.168.0.3.3897?AckPsh
DATA:???HTTP/1.0?200?OK
????????Date:?Mon,?29?Sep?2003?01:54:41?GMT
????????Server:?Apache/1.3.26?(Unix)?PHP/4.2.1?mod_gzip/1.3.19.1a?mo
????????d_perl/1.27
????????P3P:?policyref="http://www.oreillynet.com/w3c/p3p.xml",CP="C
????????AO?DSP?COR?CURa?ADMa?DEVa?TAIa?PSAa?PSDa?IVAa?IVDa?CONo?OUR
????????DELa?PUBi?OTRa?IND?PHY?ONL?UNI?PUR?COM?NAV?INT?DEM?CNT?STA?P
????????RE"
????????Last-Modified:?Sun,?28?Sep?2003?23:54:44?GMT
????????ETag:?"1b76bf-b910-3ede86c4"
????????Accept-Ranges:?bytes
????????Content-Length:?47376
????????Content-Type:?text/html
????????X-Cache:?MISS?from?www.oreilly.com
????????X-Cache:?MISS?from?10.0.0.1
????????Connection:?keep-alive

不应该让交换机或路由器来拦截squid到原始服务器的连接。假如这种情况发生,squid结束与自己的会话,并且不能满足任何cache丢失。防止这类转发死循环的最好方法是,确认用户和squid连接到交换机或路由器的独立接口。无论何时,应该在指定接口上应用拦截规则。最明显的,不该在squid使用的接口上激活拦截。


9.2为何要(或不要)拦截?

许多单位发现,cache拦截很有用,因为他们不能,或不愿意配置所有用户的web浏览器。相对于配置成百上千台工作站来说,在单个交换机或路由器上做一点网络欺骗更容易。从我们面临的许多选择来看,cache拦截确实有好也有坏。它可能让你的生活更容易,但也许会更难。
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    评价:
    表情:
    验证码:点击我更换图片 匿名?

    今日头条

    更多>>

    推荐图文

    • 安全基础之代理服务器知识菜鸟普及篇
    • 代理服务器WinGate教程
    • 什么是SOCK5代理,什么是HTTP代理
    • 代理服务器CCProxy 软件教程
    • 利用squid反向代理提高网站性能
    • 不知道大家遇到过这个问题没?代理服务器教程
    • 使用Squid实现反向代理
    • FreeBSD内核级透明代理(IPFILTER)代理服务器教程
    • squid的安装代理服务器教程
    Alexa - 客户服务 - 联系方法 - 招聘信息 - 友情链接 - 网站地图 - TAG标签 - RSS订阅
    Copyright ? 2010-2012 JZQ8.COM. 新2备用网址hg622.com|首页吧|新2备用网址hg622.com|首页去吧 版权所有
    冀ICP备09002514号
    冀ICP备09002514号 网络报警 企业法人营业执照 中国互联网协会 支付宝付款 网银在线付款