![服務器squid中文權威指南_第1頁](http://file4.renrendoc.com/view/2fc41ed9a1cf78e11bc68742b3a97d51/2fc41ed9a1cf78e11bc68742b3a97d511.gif)
![服務器squid中文權威指南_第2頁](http://file4.renrendoc.com/view/2fc41ed9a1cf78e11bc68742b3a97d51/2fc41ed9a1cf78e11bc68742b3a97d512.gif)
![服務器squid中文權威指南_第3頁](http://file4.renrendoc.com/view/2fc41ed9a1cf78e11bc68742b3a97d51/2fc41ed9a1cf78e11bc68742b3a97d513.gif)
![服務器squid中文權威指南_第4頁](http://file4.renrendoc.com/view/2fc41ed9a1cf78e11bc68742b3a97d51/2fc41ed9a1cf78e11bc68742b3a97d514.gif)
![服務器squid中文權威指南_第5頁](http://file4.renrendoc.com/view/2fc41ed9a1cf78e11bc68742b3a97d51/2fc41ed9a1cf78e11bc68742b3a97d515.gif)
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、(第 9 章)譯者序:本人在工作中著數(shù)臺 Squid 服務器,多次參閱 Duane We人)的這本書,原書名是Squid: The Definitive Guide,由 OReillys(他也是 Squid 的創(chuàng)始。我在業(yè)余時間把它翻譯成中文,希望對中文 Squid 用戶有所幫助。對普通的上網(wǎng)用戶,Squid 可充當代理服務器;而對 Sina,NetEase 這樣的大型站點,Squid 又充當 WEB。這兩個角色它都扮演得異常優(yōu)秀。窗外繁星點點,開源的世界亦如這星空般美麗,而 Squid 是其中耀眼的一顆星。對本譯版有任何問題,請跟我的是:目 錄.2第 9 章 Cache9.1 它如何工作?2
2、9.2 為何要(或不要)?.59.3網(wǎng)絡設備7內(nèi)置Squid7四層交換7Cisco策略路由14Web Cache Coordination協(xié)議16操作系統(tǒng)配置18Linux18FreeBSD21OpenBSD22在NetBSD和其他系統(tǒng)上的IPFilter23配置Squid.1 配置Wv1249.6調(diào)試問題251第 9 章 CacheCache是讓傳輸流向 Squid 的流行技術,它不用配置任何客戶端。你可以配置路由器或交換機將 HTTP 連接轉(zhuǎn)發(fā)到 squid 運行的主機。squid 運行的操作系統(tǒng)被配置成接受外將其遞交給 squid 進程。為了讓 HTTP生效,你必須
3、配置 3 個獨立的部數(shù)據(jù):網(wǎng)絡設備,squid 運行的操作系統(tǒng),和 squid 自身。(譯者注:Cache實際上指的是 Squid 的)9.1 它如何工作?Cache,它對理解在客戶端和 Squid 之間的會話有用。我使用包含了某些網(wǎng)絡圖 9-1 和如下的 tcpdump 示例輸出,來解釋當數(shù)據(jù)包通過網(wǎng)絡時,如何被。1.用戶(user-agent)想請求某個資源,它對原始服務器發(fā)起 index.html 請求,例如:。它需要原始服務器的地址,所以先發(fā)起一個 DNS 請求:Packet 1 TIME: UDP:DATA:19:54:41.317310.2459 - .53.d.Packet 2T
4、IME:19:54:41.317707 (0.000397)2UDP:DATA:.53 - .2459.d.PR.%.PR.$.PR.PR.ns2.Q.PR.ns.M.h.!.z.b.2.現(xiàn)在有了 IP 地址,用戶初始化到原始服務器 80 端口的 TCP 連接:Packet 3 TIME: TCP:DATA:19:54:41.320652 (0.002945).3897 - 7.80 Syn3.路由器或交換機注意到目的地址是 80 端口的 TCP SYN 包。下一步會發(fā)生什么依賴于特定的技術。在 4 層交換和路由策略上,網(wǎng)絡設備簡單的將 TCP 包轉(zhuǎn)發(fā)到 Squid 的數(shù)據(jù)鏈路地址。當 squ
5、id 直接掛在網(wǎng)絡設備上時,就這樣工作。對 W來說,路由器封裝TCP 包為 GRE 包。因為 GRE 包有它自己的 IP 地址,它可能被通過多個子網(wǎng)進行路由。換句話說,W不要求 squid 直接掛在路由器上。4.Squid 主機的操作系統(tǒng)接受到包。對 4 層交換來說,TCP/IP沒有改變。假如包使用了 GRE 封裝,主機會剝離外部的 IP 和 GRE 頭部,并將原始的 TCP/IP 包放在輸入隊列里。注意 squid 主機接受到的包是針對外部地址的(原始服務器的)。正常情況下,這個包不匹配任何本地地址,它會被丟棄。為了讓主機接受外部數(shù)據(jù)包,你必須在大多數(shù)操作系統(tǒng)上激活 IP 轉(zhuǎn)發(fā)。5.客戶端的
6、 TCP/IP濾代碼處理。數(shù)據(jù)包必須匹配某個規(guī)則,該規(guī)則指示內(nèi)核轉(zhuǎn)交這個包給 squid。如果沒有這樣的規(guī)則,內(nèi)核簡單的將包按照它自己的方式轉(zhuǎn)發(fā)給原始服務器,這不是你想要的。注意 SYN 包的目的端口是 80,但 squid 可能偵聽在不同的端口,例如 3128。濾規(guī)則允許你改變端。你不必讓 squid 偵聽在 80 端口。通過 tcpdump,你能見到這步,因為轉(zhuǎn)發(fā)的包不會再次通過網(wǎng)絡接口代碼。即使 squid 偵聽在 80 端口,濾器的重定向規(guī)則仍是必要的??梢宰?squid 不在這些端口上接受包。重定向規(guī)則有點神奇,它轉(zhuǎn)交外部數(shù)據(jù)包給 squid。6.Squid 接受到新連接,它接受這個
7、連接。內(nèi)核發(fā)送 SYN/ACK 包返回給客戶端:Packet 4 TIME: TCP:DATA:19:54:41.320735 (0.000083)7.80 - .3897 SynAck就象你見到的一樣,源地址是原始服務器,盡管這個包不會抵達原始服務器。操作系統(tǒng)只是簡單的將源地址和目的地址交換一下,并將它放進響應數(shù)據(jù)包里。37.用戶接受到 SYN/ACK 包,建立起完整的 TCP 連接。用戶現(xiàn)在相信它是連接到原始服務器,所以它發(fā)送 HTTP 請求:Packet 5 TIME: TCP:DATA:19:54:41.323080 (0.002345).3897 - 7.80 AckPacket 6
8、 TIME: TCP:DATA:19:54:41.323482 (0.000402).3897 - 7.80 AckPsh GET / HTTP/1.0User-Agent: Wget/1.8.2 Host:Accept: */*Connection: Keep-Alive8.Squid 接受 HTTP 請求。它使用 HTTP Host 頭部來轉(zhuǎn)換局部 URL 為完整的 URL。在這種情形下,可在 acs.log 文件里見到 http。9.從這點開始,squid 正常的處理請求。一般 cache 命中會立刻返回。cache 丟失會轉(zhuǎn)發(fā)到原始服務器。10.最后,是 squid 從原始服務器接受到
9、的響應:Packet 8 TIME: TCP:DATA:19:54:41.448391 (0.030030)7.80 - .3897 AckPshHTTP/1.0 200 OKDate:, 29 Sep 2003 01:54:41 GMTServer: Apache/1.3.26 (Unix) d_perl/1.27P3P: policyref= HYPERLINK http:/w/ http:/w/4.2.1 mod_gzip/a mo/w3c/p3p.xml,CP=CAO DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONo OURDEL
10、a PUBi OTRa IND PHY ONREI PUR COM NAVDEM CNT STA PLast-Modified: Sun, 28 Sep 2003 23:54:44 GMT ETag: 1b76bf-b910-3ede86c4Accept-Ranges: bytes Content-Length: 47376 Content-Type: text/html X-Cache: MISS fromX-Cache: MISS from 4Connection: keep-alive不應該讓交換機或路由器來squid 到原始服務器的連接。假如這種情況發(fā)生,squid結(jié)束與自己的會話,并
11、且不能滿足任何 cache 丟失。防止這類轉(zhuǎn)發(fā)死循環(huán)的最好方法是,確認用戶和 squid 連接到交換機或路由器的獨立接口。無論何時,應該在指定接口上應用規(guī)則。最明顯的,不該在 squid 使用的接口上激活。9.2 為何要(或不要)?許多發(fā)現(xiàn),cache很有用,因為他們不能,或不愿意配置所有用戶的 web 瀏覽器。相對于配置成百上千臺工作站來說,在單個交換機或路由器上做一點網(wǎng)絡更容易。從我們的許多選擇來看,cache確實有好也有壞。它可能讓你的生活更容易,但也許會更難。Cache的最明顯的貢獻是,所有 HTTP 請求通過 squid 自動離開你的網(wǎng)絡。你不必擔心配置任何瀏覽器,用戶可能在瀏覽器上
12、他們的設置。cache讓網(wǎng)絡管理員完全控制 HTTP 會話。你可以改變,增加,或刪除 squid 的緩存,而不會顯著影響你的用戶上網(wǎng)沖浪。關于 HTTP的主要不利點就是該技術違背了 TCP/IP 的標準。這些協(xié)議要求路由器或交換機轉(zhuǎn)發(fā)TCP/IP 包到目的 IP 地址里指定的主機。然而轉(zhuǎn)發(fā)包到 cache破壞了這些規(guī)則。接受轉(zhuǎn)交過來的連接。用戶被了,以為它們在與真正的 web 服務器會話。這樣的導致在老版本的IE 瀏覽器中產(chǎn)生嚴重問題。瀏覽器的 Reload 按鈕是刷新 HTML 頁面的最容易的方法。當瀏覽器被配置成使用 cache時,reload 請求包含了一個 Cache-Control:
13、no-cache 頭部,它強迫產(chǎn)生 cache 丟失(或 cache 確認),并確保響應是最近更新的。假如沒有明確配置使用,瀏覽器會忽略該頭部。當使用 cache時,瀏覽器認為它在連接到原始服務器,因此沒必要發(fā)送該頭部。在這種情形下,squid 不會告知用戶的 Reload 按鈕,也許不會驗證 cache 響應。squid 的 ie_refresh 提供了解決此 bug 的決方法(見附錄 A)。已經(jīng)在其 IE 5.5 SP1 中解決了這個問題。因為類似的理由,你不能結(jié)合 cache使用 HTTP驗證。因為客戶端不知道這個,它不會發(fā)送必要的 Proxy-Authorization 頭部。另外,4
14、07(驗證請求)響應代碼也不恰當,因為響應看起來象來自原始服務器,原始服務器從來不會發(fā)送如此響應。也不能在 cache中使用 RFC 1413 ident 查詢(見 1 章節(jié))。Squid 不能對必要的 IP地址建立新的 TCP Socket 連接。操作系統(tǒng)在轉(zhuǎn)發(fā)連接到 squid 時,它執(zhí)行。然后,當 squid 希望 bind 新的 TCP Socket 到外部 IP 地址時,它不能執(zhí)行。它想 bind 的地址實際上并非真地的,所以 bind 系統(tǒng)調(diào)用失敗。cache也與設計成地址的 IP 過濾(見 RFC 2267:Network Ingress Filtering:Defeating
15、Denial of Service Attacks Which Employ IP Source AddressSpoofing)??紤]如圖 9-2顯示的網(wǎng)絡。路由器有 2 個 LAN 接口:lan0 和 lan1。網(wǎng)絡管理員在路由器上使用濾器,5以確保沒有主機傳送源地址的數(shù)據(jù)包。路由器只會轉(zhuǎn)發(fā)源地址對應相連網(wǎng)絡的數(shù)據(jù)過濾規(guī)則也許看起來如下:# lan0allow ip from /24 to any via lan0 deny ip from any to any via lan0# lan1allow ip from /16 to any via lan1 deny ip from any
16、 to any via lan1現(xiàn)在看看,當路由器和 lan1 中的 squid 主機配置成來自 lan0 中的 HTTP 連接后,會發(fā)生什么。Squid 裝扮成原始服務器,這意味著從 squid 到用戶的響應 TCP 包了源地址。lan0 過濾規(guī)則導致路由器這些包。為了讓 cache生效,網(wǎng)絡管理員須移除 lan0 規(guī)則。這樣就讓網(wǎng)絡有,從而易遭服務。我在先前的章節(jié)里描述過,客戶端在打開連接之前必須先進行 DNS 查詢。在某些環(huán)境中,這樣做可能有問題。你想進行 HTTP的主機必須能夠查詢 DNS。如果客戶端了解自己正使用(因為手工配置或自動配置),它通常就不去主機名。代替的,它簡單的將完整
17、URL 轉(zhuǎn)發(fā)給 squid,由 squid 來查詢原始服務器的 IP 地址。另一個小問題是,squid 接受任意目的 IP 地址的連接。例如,某個 web 站點當機了,但它仍然有 DNS存在。squid這個站點接受 TCP 連接??蛻舳藭J為該站點仍然在運行,因為連接有效。當 squid 連接到原始服務器失敗時,它強迫返回錯誤消息。萬一形勢不清,HTTP在初次使用時有些棘手或。許多不同的組件必須組合工作,。我強烈建議你在將其應用于生產(chǎn)每一步細節(jié)。并且要配置正確。甚至,從內(nèi)存中恢復整個配置也很環(huán)境之前,先建立測試環(huán)境。一旦你讓它正常運行,請69.3 網(wǎng)絡設備現(xiàn)在你了解了 cache的相關細節(jié),讓
18、看看如何實際讓它工作先配置網(wǎng)絡設備,它們用來HTTP 連接。9.3.1 內(nèi)置 Squid在該配置中,你無需交換或網(wǎng)絡路由設備來統(tǒng),也就是路由器(或網(wǎng)橋),請見圖 9-2。HTTP 連接。代替的,squid 運行的Unix 系該配置本質(zhì)上跳過了 9.1 章的頭三步。squid 主機充當網(wǎng)絡路由器,它接受 HTTP 連接包。假如你采用此方法,請直接跳到 9.4 章。9.3.2 四層交換許多使用四層交換機來支持 HTTP。這些產(chǎn)品提供的功能,例如健壯性檢測和負載均衡。我在這里僅僅講講。關于健壯性檢測和負載均衡的信息,請見 OReillys ServerLoad Balancing and Load
19、Balancing Servers, Firewalls, and Caches (John Wiley & Sons).的章節(jié)包含了許多產(chǎn)品和技術的示例配置。下面 Alteon/Nor下面的配置來自 Awitch 180 和 Alteons We8.0.21。網(wǎng)絡設置請見圖 9-4。7客戶端連接到端口 1,通過端口 2 連接到因特網(wǎng),squid 運行在端口 3。下面的行是交換機的/cfg/dump 命令的輸出。你無須敲入所有這些行。甚至,在Alteon 的新版里,某些命令可能改變了。注意 Alteon 把這個功能叫做 Web Cache 重定向(WCR)。如下是處理步驟:1.首先,你必須分配
20、給 Alteon 交換機一個 IP 地址。這是必要的,以便交換機能檢查 squid的存活狀態(tài)。/cfg/ip/if 1enaaddr mask broad 552.Alteon 的 WCR 屬于服務負載均衡(SLB)配置。所以,必須使用如下命令在交換機上激活SLB 功能:/cfg/slbon3.現(xiàn)在,用 squid 的 IP 地址定義 real server:/cfg/slb/real 1enarip 64.必須定義一個組,并分配給 real server 一個組號:/cfg/slb/group 1health tcp add 15.下一步定義 2 個過濾規(guī)則。第 1 條規(guī)則匹配 HTTP 連
21、接(目的端口是 80 的 TCP 包),并重定向它們到組 1 里的 server。第 2 條規(guī)則匹配所有其他數(shù)據(jù)正常轉(zhuǎn)發(fā)它們。/cfg/slb/filt 1enaaction redir sip any smask dip anydmask proto tcp sport anydport http8group 1rport 0/cfg/slb/filt 224enaaction allow sip any smask dip anydmask proto any6.最后一步是給 SLB 配置指定的交換端口。在端口 1 上,處理客戶端連接(這也是客戶端連接的端口),并增加 2 條過濾規(guī)則。在端
22、口 2 上,僅須配置它正常服務(例如,向上連接到ernet):cfg/slb/port 1nt ena filt ena add 1add 224/cfg/slb/port 2server ena為了驗證 HTTP配置正確并工作良好,你可以使用/ss/slb 和/info/slb 菜單里令。/info/slb/dump 是快速有效的查看整個 SLB 配置的方法: Main# /info/slb/dumpReal server se:1: 6, 00:c0:4f:23:d7:05, vlan 1, port 3, health 3, upVirtual server se:Redirect fi
23、lter se:1: dport http, rport 0, group 1, health tcp, backup none real servers:1: 6, backup none, upPort se:1: , cntfiltenabled, filters: 1 2242: , server9fiisabled, filters: empty3: fiisabled, filters: empty在該輸出里,注意到交換機顯示 Squid 在端口 3 上可到達,并且運行正常。你也能見到過濾規(guī)則 1 應用到端口 1。在端口狀態(tài)節(jié)里,端口 1 定義為客戶端連接端口,端口 2 簡單的標記
24、為服務端口。/ss/slb/real 命令顯示 real server(squid)的有用統(tǒng)計: Main# /ss/slb/real 1Real server 1 ss:Health check failures:04176055Current se Total ses Highest seOctets:s:s:s:0大部分統(tǒng)計與任務(例如 TCP 連接)數(shù)量相關。假如再次運行該命令,總共的任務計數(shù)會增加。最后,/ss/slb/group 命令顯示幾乎同樣的信息: Main# /ss/slb/group 1Real server group 1 ss:CurrentsSeTotals SeH
25、ighestsReal IP addressSeOctets1 6652004900652004900假如不止 1 個 real server 在組里,該輸出會更有趣。 Foundry下面的配置示例來自 ServerIron XL,運行的版本是 07.0.07T12。跟前面一樣,客戶端在端口 1, ernet 連接在端口 2,squid 運行在端口 3。然而,這樣的配置少了點東西,因為這10里可以激活 HTTP 全局。Foundry 的 cache(TCS)。請參考圖 9-4。的名字叫做 Transparent Cache Switching首先請給交換機分配 1 個 IP 地址,以便執(zhí)行健壯
26、性檢測:ip address Foundry 允許你在特定端口上激活或禁用 TCS。然而簡單起見,這里全局激活它:ip policy 1 cache tcp http global在該行里,cache 是針對 TCS 功能的關鍵字。下 1 行定義 web cache,我定義其名字為 squid1,并且告訴交換機它的 IP 地址:server cache-name squid1 6最后的步驟是將 web cache 加進 cache 組里:server cache-group 1 cache-name squid1假如在轉(zhuǎn)發(fā)連接時有問題,請參閱 show cache-group 命令的輸出:Se
27、rverIron#show cache-groupCache-group 1 has 1 members Admin-sus = Enabled Active = 0Hash_info: Dest_mask = Src_mask = Cache Server Namesquid1Admin-6us Hash-distribution3HTTP TrafficFrom toWeb-CachesName: squid1IP: 6Se: 6Groups =1Host-Web-cacheCurConn TotConn PacketsWeb-cache-HostSeactiveOctetsPackets
28、Octets15475009815853612170603710Cnt44119363412390116642405418887115072233959315976623156962151828731175796167805354332758Web-Server activeTotal某些輸出有些模糊,但通過重復該命令,并且觀察計數(shù)器的增長,你能了解是否在進行。show server real 提供幾乎同樣的信息:ServerIron#show server real squid111Real Servers InfoName : squid1Mac-addr: 00c0.4f23.d705I
29、P:6Range:1Se:ActiveWt:1Max-conn:1000000Src-nat (cfg:op):(off:off)Dest-nat (cfg:op):(off:off)squid1 is a TRANSPARENT CACHE in groups1Remote server: NoDynamic : NoServer-resets:0Mem:server: 02009eae Mem:mac: 045a3714PortSeMs CurConn TotConn Rx-pktsTx-pktsRx-octetTx-octetReashttpactive08552955737979347
30、1713373508204394253220default active062728335425106366016384089943684963010ServerTotal1482578928048998377294119171984079216230最后,使用 show logging 命令來觀察交換機是否顯示 squid 正?;虍惓#篠erverIron#show logging.00d00h11m51s:N:L4 server 6 squid1 port 80 is up00d00h11m49s:N:L4 server 6 squid1 port 80 is down00d00h10m2
31、1s:N:L4 server 6 squid1 port 80 is up00d00h10m21s:N:L4 server 6 squid1 is up注意 ServerIron 認為服務運行在 80 端口。以后你會見到 squid 運行在 3128 端口的示例。包過濾規(guī)則實際上將包的目的地址從 80 改變?yōu)?3128。這導致一些與狀態(tài)檢測有關的有趣結(jié)果,我在 節(jié)里會講到。 Extreme Networks在該示例里,硬件是 Summit1i,版本是 6.1.3b11。再次將客戶端分配在端口 1, ernet12在端口 2,squid 在端口 3。網(wǎng)絡配置見圖 9-5。Extreme 交換機僅
32、僅對在不同子網(wǎng)間進行路由的數(shù)據(jù)包進行 HTTP 連接的。換句話說,如果你配置 Extreme 交換機使用二層模式(單一 VLAN 里),就不能將包轉(zhuǎn)發(fā)給 squid。為了讓 HTTP正常工作,必須給用戶,Squid,和ernet 配置不同的 VLAN。configure Defauelete port 1-8create vlan Usersconfigure Users ip 92 configure Users add port 1create vlan configureconfigureerneternet ip 29 92ernet add port 2create vlan Squ
33、idconfigure Squid ip 5 92 configure Squid add port 3下一步是激活和配置交換機的路由:enable ipforwardingconfigure iproute add default 30最后,配置交換機重定向 HTTP 連接到 Squid:create flow-redirect http tcp destination any ip-port 80 source anyconfigure http add next-hop 6 Cisco Arrowpo下類配置基于我以前的測試筆記。然而,最近我沒有使用這類型的交換機,不能確保如下命13令仍
34、然正確:circuit VLAN1ip address service pxy1type transparent-cache ip address 6port 80protocol tcp activeowner foo content baradd service pxy1 protocol tcpport 80active 關于 HTTP 服務和健壯性檢測的評論在上面的示例里,路由器/交換機都直接轉(zhuǎn)發(fā)包,不會改變目的 TCP 端口。在 9.4用到的濾規(guī)則改變了目的端口。如果試圖在同一主機上運行 HTTP 服務和 squid,那么就產(chǎn)生了一個有趣。為了在 3128 端口運行 Squid 的同
35、時,還要在 80 端口運行 HTTP,濾配置必須有 1殊的規(guī)則,它接受到本機 HTTP 服務的 TCP 連接。否則,連接會直接轉(zhuǎn)交給 Squid。該規(guī)則易于建立。假如目的端口是 80,并且目的地址是服務器的,那么主機正常接受這個包。然而所有的包有外部目的地址,所以它們不會匹配該規(guī)則。然而,當路由器/交換機進行 HTTP 健壯性檢測時,它連接到服務器的 IP 地址。這樣,健壯性檢測的數(shù)據(jù)包匹配了上述規(guī)則,它不會轉(zhuǎn)交給 Squid。路由器/交換機檢測了錯誤的服務。假如 HTTP 服務 down 掉了,而 squid 還在運行,那健壯性檢測就產(chǎn)生錯誤結(jié)果。解決這個問題的一些選擇是:1.不要在 Squ
36、id 主機上運行 HTTP 服務;2.增加 1殊的濾規(guī)則,將來自路由器/交換機的狀態(tài)檢測的包轉(zhuǎn)交給 squid;3.配置路由器/交換機,改變目的端口為 3128;4.4 層狀態(tài)檢測。9.3.3 Cisco 策略路由策略路由與 4 層交換并非不同。它在 Cisco 和其他公司的路由產(chǎn)品上執(zhí)行。主要的區(qū)別是策14略路由不包括任何健壯性檢測。這樣,假如 squid 超載或完全不可響應,路由器還會繼續(xù)轉(zhuǎn)發(fā)包到 squid,而不是將包路由到原始服務器。策略路由要求 squid 位于路由器直接相連的子網(wǎng)中。在本示例里,使用了 Cisco 7204 路由器,運行 IOS Ver見圖 9-5。12.0(5)T
37、。網(wǎng)絡配置與前面的一樣,列表,匹配來自客戶端的到 80 端口的數(shù)據(jù)包。必須確保 Squid首先的配置步驟是定義發(fā)起的到 80 端口的數(shù)據(jù)包不會被再次。做到這點的方法之一是,定義 1 個特殊規(guī)則,來自 squid 的數(shù)據(jù)包,緊跟 1 條規(guī)則允許所有其他的數(shù)據(jù)包:acacs-list 110 deny tcp host 6 any eq wwws-list 110 permit tcp any any eq www另外,如果 Squid 和用戶位于不同的子網(wǎng),你可以僅僅允許來自用戶所在網(wǎng)絡的數(shù)據(jù)包:acs-list 110 permit tcp 55 any eq www下一步是定義路由。在這里你
38、告訴路由器轉(zhuǎn)發(fā)包到何處去:route-map proxy-redirect permit 10 match ip address 110set ip next-hop 6這些命令表明,“假如 IP 地址匹配列表 110,就轉(zhuǎn)發(fā)該包到 6”。在route-map到客戶行的數(shù)字 10 是一個序列號,假如你有多個路由端連接的接口:的話。最后一步是應用路由erface Ethernet0/0ip policy route-map proxy-redirectIOS 不對策略路由提供很多調(diào)試方法。然而,show route-map 命令足夠可用:router#show route-map proxy-r
39、edirectroute-map proxy-redirect, permit, sequence 10Match clauses: ip address (acSet clauses:s-lists): 110ip next-hop 6Policy routing matches: 730 packets, 64649 bytes159.3.4 Web Cache Coordination 協(xié)議Cisco 對 4 層交換技術的響應叫做 Web Cache Coordination Protocol(W).W在許多方面與典型的 4 層不同。封裝在 GRE(路由封裝類)里。這點允許數(shù)據(jù)包跨子網(wǎng)傳
40、輸,也就意味著首先,squid 不必直接連在路由器上。因為數(shù)據(jù)包是封裝的,squid 主機必須對其進行解有的 Unix 系統(tǒng)有解開 GRE 包的代碼。非所第二個不同是,路由器如何決定將負載分攤到多個 cache 上。事實上,路由器不做這個決定,由 cache 來做。當路由器有一組支持 W的 cache 時,其中一個 cache 主動成為組的。由cache 來決定如何分攤負載和通知路由器。在路由器重定向然任何連接之前,這是一個額外的必要步驟。因為 W使用 GRE,路由器可能強迫要求將來自 HTTP 請求的大 TCP 包分割成片斷。幸運的是,這點不會經(jīng)常發(fā)生,因為大部分 HTTP 請求比以太網(wǎng) M
41、TU size(1500 字節(jié))要小。默認的 TCP 和 IP 包頭部是 20 字節(jié),這意味著以太網(wǎng)幀能實際攜帶 1460 字節(jié)的數(shù)據(jù)。GRE封裝在 GRE 頭部增加了 20 字節(jié),另外在第二個 IP 頭部增加了 20 字節(jié)。這樣來自客戶端的正常的 1500 字節(jié)的 TCP/IP 包,在封裝后變成了 1540 字節(jié)。這樣數(shù)據(jù)包就太大而不能在單個以太網(wǎng)幀里傳輸,所以路由器將原始包分割成兩個片斷。 Wv1該節(jié)的配置示例在運行 IOS Ver同。12.0(5)T 的 Cisco 7204 路由器上測試。網(wǎng)絡配置跟圖 9-5首先,在 IOS 配置中輸入如下兩行,激活路由器的 W:ip wip wver
42、1web-cache接著,必須在單獨的路由器接口上激活 W。在 HTTP 包離開路由器的接口上激活W也就是路由器連接到外部原始服務器或ernet 網(wǎng)關的接口:,erface Ethernet0/1ip address 29 92ip wweb-cache redirect out請確認保存了配置改變。你也許想使用例如:列表來某些 web 站點的??梢允褂昧斜韥矸乐寡h(huán)轉(zhuǎn)發(fā)。16! dont re-ercept connections coming from Squid:acs-list 112 denytcp host 6 any eq www! dontercept this broken
43、web siteacs-list 112 denytcp any 55 eq www! allow other HTTP trafficacs-list 110 permit tcp any any eq wwwip wweb-cache redirect-list 112路由器不發(fā)送任何數(shù)據(jù)到 squid,直到 squid 宣稱它自己是路由器。我在 9.5.1 節(jié)里解釋如何配置 squid 的 W。 Wv2當前標準的Squid 發(fā)布僅支持Wv1。然而,可在的補丁。該代碼仍是實驗性的。找到Wv2注意從路由器發(fā)送到 Squid 的 GRE含了額外的 4 個字節(jié)。Wv2 在GRE 頭部和封裝的 I
44、P 包之間,了一個重定向頭部。也許需要修改內(nèi)核代碼來計算這個額外的頭部。 調(diào)試IOS 提供許多命令來監(jiān)視和調(diào)試 W。show ip wweb-cache 命令提供一些基本的信息:router#show ip wweb-cacheGlobal Winformation:Router information:Router Identifier:291.0Protocol Ve:Service Identifier: web-cache Number of Cache Engines: Number of routers:Total Packets Redirected:111424-none- 0
45、0-none- 0Redirect acs-list:Total Packets Denied Redirect:Total Packets Unassigned:Group acs-list:Total Messages Denied to Group:Total Authentication failures:017欲了解細節(jié),敘命令后加一個 detail 單詞:router#show ip wweb-cache detailWCache-Engine information:IP Address:Protocol Ve Se:60.4Usable 00000000000000000000
46、00000000000000000000000000000000000000000000FF:Initial Hash Info:Assigned Hash Info:FFHash Allotment: Packets Redirected:Connect Time:256 (100.00%)142400:17:40這里可以看到 squid 的 IP 地址和狀態(tài)。假如不止一個 cache 與路由器會話,那么 hash 分配信息看起來不同。大多數(shù)情況下,每個 cache 接受到相等的 hash 值。注意第二條命令輸出的協(xié)議版本值,與第一條命令的不一樣。不幸的是,賦予了版本號太多的意義。show
47、ip wweb-cache 命令看起來W協(xié)議的主版本號(例如 1 或 2),然而 show ip wweb-cache detail 的版本號看起來匹配 Squid 的 w_ver指令的值。9.4 操作系統(tǒng)配置為了讓 cache正常工作,必須在操作系統(tǒng)中激活某些網(wǎng)絡功能。首先,必須激活 IP 包轉(zhuǎn)發(fā)。這就允許操作系統(tǒng)接受目的地址是外部 IP 的數(shù)據(jù)包。接著,必須激活和配置內(nèi)核中的相關代碼,以重定向外部包到 Squid。9.4.1 Linux本節(jié)的指導適合 2.4 系列 Linux 內(nèi)核。我使用 RedHinux7.2(內(nèi)核是 2.4.7-10)。假如你使用的版本不同,那可能不能運行。建議搜索下
48、 Squid 的 FAQ 或其他地方,找到關于內(nèi)核的更新的或歷史的信息。在我測試 iptables 過程中,不必激活 IP 轉(zhuǎn)發(fā)。然而,你也可以試試在一開始就激活它,并在一切運行良好后,看看能否禁掉它。激活包轉(zhuǎn)發(fā)的最好的方法是在/etc/sysctl.conf 文件里增加如下行:net.ipv4.ip_forward = 1一般來說,在 HTTP生效前,不必編譯新內(nèi)核。假如你不知道如何配置和創(chuàng)建新 Linux18內(nèi)核,請參閱 OReillys Running Linux by Matt Welsh, Matthias Kalle Dalheimer,Kaufman。當你配置內(nèi)核時,請確認如下選
49、項被激活:andLaroGeneral setupNetworking support (CONFIG_NET=y) Sysctl support (CONFIG_SYSCTL=y)oNetworking optionsNetwork packet filtering (CONFIG_NETFILTER=y) TCP/IP networking (CONFIG_INET=y)Netfilter ConfigurationConnection tracking (CONFIG_IP_NF_CONNTRACK=y)IP tablepport (CONFIG_IP_NF_IPTABLES=y)Ful
50、l NAT (CONFIG_IP_NF_NAT=y)REDIRECTsupport (CONFIG_IP_NF_REDIRECT=y)oFile systems/proc filesystem support (CONFIG_PROC_FS=y)另外,請確認該選項沒被激活:o Networking optionsFast switching (CONFIG_NET_FASTROUTE=n)重定向外部數(shù)據(jù)包到 squid 的代碼是Netfiltersquid 的規(guī)則:的一部分。如下是發(fā)送 HTTP連接到iptables -t nat -A PREROUTING -i eth0 -p tcp -d
51、port 80 -j REDIRECT -to-port 3128Linux 內(nèi)核本質(zhì)上,許多不同的 tables。-t nat 選項表明正在修改 NAT(網(wǎng)絡地址轉(zhuǎn)換)表。使用 iptables 將原始服務器的 TCP/IP 地址轉(zhuǎn)換為 squid 的本地 TCP/IP 地址。每個 iptables 表有許多鏈。-A PREROUTING 表明增加了一條規(guī)則到內(nèi)建的鏈叫做PREROUTING。PREROUTING 鏈僅對從外部網(wǎng)絡進入系統(tǒng)的數(shù)據(jù)包有效。接下來的三個選項決定哪個包匹配該規(guī)則。-i eth0 選項限制規(guī)則僅對 eth0 接口上接受的數(shù)據(jù)包有效。-p tcp 選項指定 TCP 包,
52、-dport 80 指定包的目的端口是 80。假如這三個條件都是 true,那么包匹配該規(guī)則。-j REDIRECT 選項表明對匹配規(guī)則的包,采取何種動作。REDIRECT 是內(nèi)建的動作名,它導致iptables 改變包的目的地址為 。-to-port 3128 選項也指示iptables 改變目的TCP端口為 3128。19假如你在 squid 主機上運行 HTTP 服務(例如 Apache),就必須增加另外的 iptables 規(guī)則。該必要規(guī)則允許連接到 HTTP 服務。否則,REDIRECT 規(guī)則導致 iptables 轉(zhuǎn)發(fā)連接到 squid的 3128 端口??梢允褂?I 選項在列表頂
53、部一條則:iptables -t nat -I PREROUTING -i eth0 -p tcp -d 6 -dport 80 -j ACCEPT一旦確認所有 iptables 規(guī)則工作正確,記得運行如下命令來保存配置:/sbin/service iptables save將當前規(guī)則保存到/etc/sysconfig/iptables,當系統(tǒng)重啟時,這些規(guī)則自動載入。 Linux 和 W2.4 版本的 Linux 內(nèi)核自帶 1 個 GRE包。問題看起來在于路由器設置了 W接口。然而,它不能W任務里封裝的 GRE/GRE 包的協(xié)議類型域為 0 x883E。Linux 的 GRE驅(qū)動不知道如何處
54、理這類型包,因為它不了解 0 x883E 類型的協(xié)議??梢栽囋嚱oLinux打GRE模塊的補丁,以便它能在W下工作。Squid FAQ包含了對這個補丁的。然而,假如使用W指定的Linux模塊,事情會容易些。可以在這里找到它: w.c必須編譯 ip_w.c 文件為可裝載內(nèi)核模塊。有點棘手的是,依賴于內(nèi)核版本的不同,編譯選項可能不同。你可以進入內(nèi)核源代碼目錄,敲入 make modules 并觀察編譯器命令的滾動。然后拷貝這些命令中的一個,然后改變最后一個參數(shù)為 ip_w.c。如下是我在 2.4.7-10 Linux內(nèi)核中使用令:% gcc -Wall -D_ _KERNEL_ _ -I/usr/s
55、rc/linux-2.4.7-10/include-DMODULE -DMODVERS -DEXPORT_SYMBAB -include /usr/src/linux-2.4.7-10/include/linux/modvers.h -O2 -c ip_w.cgcc 命令在當前目錄會生成 ip_w.o 文件。下一步使用 insmod 命令,裝載模塊到內(nèi)核中:# insmod ip_w.o注意 ip_w模塊接受來自任何源地址的 GRE/W包。換句話說,用戶可能發(fā)送數(shù)外部的 GRE 包。例據(jù)到 squid cache。假如使用該模塊,應該安裝一條 iptables 規(guī)則,如:# iptables
56、-A INPUT -p gre -s 5 -j ACCEPT# iptables -A INPUT -p gre -j DROP20記敲入/sbin/service iptables save 命令來保存配置。9.4.2 FreeBSD本節(jié)的例子基于 FreeBSD-4.8,并可以在任何 FreeBSD-4 和 5 系列的后續(xù)版本上運行。要激活 IP 包轉(zhuǎn)發(fā),在/etc/sysctl.conf 中增加如下行:net.inet.ip.forwarding=1需要在內(nèi)核中激活 2 個特殊選項。假如你不知道如何編譯內(nèi)核,參見 FreeBSD Handbook 第9 章(). 編輯內(nèi)核配置文件,確保有
57、如下行:optionsoptionsIPFIREWALLIPFIREWALL_FORWARD假 如squid主 機 位 于 無 人 照 看 的 機, 我 也使 用IPFIREWALL_DEFAULT_TO_ACCEPT 選項。假如你被系統(tǒng)中。的規(guī)則困擾,仍然可以登陸ipfw 命令告訴內(nèi)核重定向連接到 squid:/sbin/ipfw add allow tcp from 6 to any out/sbin/ipfw add allow tcp from any 80 to any out/sbin/ipfw add fwd ,3128 tcp from any to any 80 in/sbi
58、n/ipfw add allow tcp from any 80 to 6 in第一條規(guī)則匹配 squid 主機發(fā)起的數(shù)據(jù)包。它確保外出的 TCP 連接不會被重新定向回 squid。第二條規(guī)則匹配 squid 響應客戶端的數(shù)據(jù)包。我在這里列出它,因為隨后會有另外的 ipfw 規(guī)則,這些規(guī)則會這些包。第三條規(guī)則實際重定向進來的連接到 squid。第四條規(guī)則匹配從原始服務器返回 squid 的數(shù)據(jù)包。這里又一次假設隨后會有相應的規(guī)則。假如在 squid 主機上運行 HTTP 服務,就必須增加另外的規(guī)則,它放過,而不是重定向,目的地址是原始服務器的 TCP 包。下列規(guī)則在 fwd 規(guī)則之前:/sbi
59、n/ipfw add allow tcp from any to 6 80 inFreeBSD 典型的將 ipfw 規(guī)則在/etc/rc.firewall 里。一旦你確認規(guī)則設置正確,記得保存它們。將如下行加入/etc/rc.local 文件,讓 FreeBSD 在啟動時自動運行/etc/rc.firewall。firewall_enable=YES21 FreeBSD 和 WFreeBSD版本 4.8 和后續(xù)版本內(nèi)建了對GRE和W在這里找到:的支持。早期的版本需要補丁,你可以. 內(nèi)建代碼的性能非常好,它是真正的內(nèi)核組織編寫的??赡芤残枰幾g支持GRE的新內(nèi)核。將如下行加入內(nèi)核配置文件里:ps
60、eudo-devicegre對Freebsd-5,使用device 代替了pseudo-device。當然,你也需要前面章節(jié)里提到的FIREWALL選項。在安裝和重啟了新內(nèi)核后,必須配置 GRE 通道來接受來自路由器的 GRE 包。例如:# ifconfig gre0 create# ifconfig gre0 6 5 netmask 55 up# ifconfig gre0 tunnel 6 5 # route delete 5ifconfig 命令在 gre0 接口上,增加了一個到路由器(5)的路由表必須刪除該路由,以便 squid 能與其他路由器會話。我發(fā)現(xiàn)你也許想或必須對來自路由器的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 語文素養(yǎng)大賽策劃書3篇
- 2025年榆林能源科技職業(yè)學院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 專題02 漫畫素材類選擇題(50題)
- 2024年電商應用與品牌市場洞察報告
- 課題申報參考:數(shù)據(jù)驅(qū)動的帆板高效推進搖帆策略研究
- 駕馭考試戰(zhàn)場的戰(zhàn)術思維
- 幼兒植樹節(jié)出游活動策劃方案五篇
- 酒店委托經(jīng)營合同范本
- 范文二手房買賣合同
- 商服用房買賣合同
- 文檔協(xié)同編輯-深度研究
- 七年級數(shù)學新北師大版(2024)下冊第一章《整式的乘除》單元檢測習題(含簡單答案)
- 2024-2025學年云南省昆明市盤龍區(qū)高一(上)期末數(shù)學試卷(含答案)
- 五年級上冊寒假作業(yè)答案(人教版)
- 2024年財政部會計法律法規(guī)答題活動題目及答案一
- 2025年中考語文復習熱搜題速遞之說明文閱讀(2024年7月)
- 和達投資集團(杭州)有限公司招聘筆試沖刺題2025
- 綜治工作培訓課件
- 2024年云網(wǎng)安全應知應會考試題庫
- 2024年全國職業(yè)院校技能大賽高職組(智能節(jié)水系統(tǒng)設計與安裝賽項)考試題庫-下(多選、判斷題)
- 2024年廣東省事業(yè)單位考試真題及答案5
評論
0/150
提交評論