作者 主題: [原創]實作 Cisco + squid WCCP v2 Transparent Proxy server  (閱讀 15679 次)

0 會員 與 1 訪客 正在閱讀本文。

adersun

  • 懷疑的國中生
  • **
  • 文章數: 34
    • 檢視個人資料
實作 Cisco + squid WCCP v2 Transparent Proxy server

作者 : Adersun
版權宣言 : 可任意轉載, 轉載時請務必著明作者及出處

前言:

WCCP這種協定主要的功能是提供路由器(Router)與快取伺服器(Cache Server)之間的溝通, 這種溝通的結果是希望能達成一種機制, 將user所要求的需求經過路由器時, 路由器將此需求及時的重導(Redirect) 到快取伺服器上, 如果快取伺服器儲存了符合user所要求的資料, 則快取伺服器便直接將該份符合的資料回應給user.
如需了解 WCCP, 請參閱 :
http://www.ringline.com.tw/epaper/11%E6%9C%88%E8%B6%A8%E5%8B%A22.asp

我現在的環境是在 Asia 各個分公司都設立 transparent proxy 節省頻寬, 但我們又不是每個分公司都有 IT 人員, 所以每次出問題就要到處飛來飛去, 所以我想採用 squid + WCCP v2  來作, 這樣就算 proxy server 當掉, 網路都還是可以直接透過 router 進出而不至於整個 site 停擺等 IT 來處理.

這次寫一下實作 Cisco + squid WCCP v2 Transparent Proxy server, 因為要用 WCCP ver 2, 而 WCCP 是利用 GRE 通道來建立 , 所以需要 Cisco IOS 12.x 以上, 及 squid ver 2.5 以上, Linux kernel 需要在 2.4.x.

以下為我的環境 :

Cisco 3640 router --> IOS: 12.2
RedHat 8 + kernel 2.4.18
squid 2.5.PRE7

開始實作 :

下載 Linux kernel 2.4.18 及 kernel patch 重新編譯使其支援 GRE 及 WCCP ver2
# cd /usr/src
# wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.18.tar.gz
# wget http://squid.visolve.com/developments/ip_wccp-2_4_18.patch
# tar zxvf linux-2.4.18.tar.gz
# mv linux linux-2.4.18
# ln -s linux-2.4.18 linux
# cd linux-2.4.18
# patch -p1 < ../ip_wccp-2_4_18.patch
# make menuconfig

重新編譯時請將 :
CONFIG_NET_IPGRE=y
CONFIG_NET_IPGRE_BROADCAST=y
CONFIG_NET_SCH_GRED=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_IPWCCP=y
其他選項起配合你的實際需要去編.

# make dep
# make clean
# make bzImage
# make modules
# make modules_install
# cp /usr/src/linux-2.4.18/System-map /boot/System-map-2.4.18
# rm -f /boot/System-map
# ln -s /boot/System-map-2.4.18 /boot/System-map
# cp /usr/src/linux-2.4.18/arch/i386/boot/bzImage /boot/vmlinuz-2.4.18
# mkinitrd /boot/initrd-2.4.18.img 2.4.18

編輯 /etc/grub.conf
title Linux recompiled (2.4.18 For Squid WCCP v2)
        root (hd0,0) <-- 請按照你的實際狀況來寫
        kernel /boot/vmlinuz-2.4.18 ro root=/dev/hda1<-- 請按照你的實際狀況來寫
        initrd /boot/initrd-2.4.18.img <-- 請按照你的實際狀況來寫

reboot 你的 Linux 然後以你剛剛編譯完的 kernel 開機.

下載及安裝 squid-2.5.PRE7 及 WCCP v2 patch for squid :
# cd /usr/src
# wget http://www.squid-cache.org/Versions/v2/2.5/squid-2.5.PRE7.tar.gz
# wget http://squid.visolve.com/developments/wccpv2.patch
# tar -xvzf squid-2.5.PRE7
# cd squid-2.5.PRE7
# patch -p1 < ../wccpv2.patch
# ./configure --enable-wccpv2
# make
# make install

到這裡你的系統已經有能力支援 squid 跑 WCCP v2 了, 現在要修改 squid.conf 使 squid 成為 WCCP v2 transparent proxy server :

# vi /usr/local/squid/etc/squid.conf

httpd_accel_with_proxy on
httpd_accel_port 80
httpd_accel_host virtual
httpd_accel_uses_host_header on
http_port 3128
no_cache deny QUERY
no_cache deny spc_nocache
emulate_httpd_log on
http_access allow all
http_access allow localhost
icp_access allow all
wccp2_version 2
wccp2_routr 123.123.123.1 <-- 此為你 cisco router
其他關於 squid 的設定請參閱其他 squid 的文章, 在此不做闡述.
# squid -z <-- 製造 squid 要用的快取目錄

接下來我們要告訴 Linux kernel 在開機時建立 GRE 以及啟動 squid :
# vi /etc/rc.d/rc.local
加入以下幾行 :

#Start packege forwarding....
echo 1 > /proc/sys/net/ipv4/ip_forward
#Start create gre tunnel....
modprobe ip_gre
iptunnel add gre1 mode gre remote 123.123.123.1 local 123.123.123.123 dev eth0
# 123.123.123.1 為你 Cisco router 接至 proxy server 的 ethernet interface, 123.123.123.123 為你 eth0 的 IP
ifconfig gre1 192.168.123.1 up
# 要給 GRE tunnel 一個 IP, 根據我的情況使用虛擬 IP 一樣可以使用
#Start squid proxy cache....
/usr/sbin/squid &

設定 Cisco router 開啟 WCCP v2 :

conf t
ip wccp enable
ip wccp version 2
ip wccp web-cache
Int (你想要 cache 的output interface)
ip wccp web-cache redirect out

大功告成, 測試是否成功 :

1. 看看 /var/log/squid/access.log 是否開始紀錄web requests passing through
2. 或是在 Cisco 上用 debug ip wccp event 指令, 是否有 'I see you/here I am'

Good Luck !!

sauropod

  • 可愛的小學生
  • *
  • 文章數: 9
    • 檢視個人資料

YZ

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
ip_wccp 可以將其編成 module ,就不用去作 patch&compile kernel 的動作.
不過如果 kernel GRE 沒開,那就得重新 compile kernel,但是最少不用在上
ip_wccp patch.

squid 官方網址提供的 ip_wccp.c 支援到 kernel-2.6.0 了.
http://www.squid-cache.org/WCCP-support/Linux/ip_wccp.c