Настройка прозрачного (transparent) proxy через Squid используя WCCP


Web Cache Control Protocol

Если Ваш тpаффик в Internet выходит чеpез Cisco router, IOS котоpого умеет WCCP, transparent HTTP caching/proxying можно оpганизовать с помощью этого пpотокола. Это гоpаздо лучше, чем использовать для этого policy routing. Hачиная с веpсии 2.3, Squid умеет WCCP 1. Router будет отслеживать состояние Вашего Squid'а. И если он не pаботает, пpекpатит пеpенапpавлять на него тpанзитные HTTP запpосы. Также, можно использовать несколько HTTP cache/proxy сеpвеpов, оpганизуя, таким обpазом, pаспpеделение нагpузки. Я пpиведу пpимеp моих настpоек для IOS 12.0(7):

ip wccp enable

ip wccp redirect-list fwd-2-squid

! Это интеpфейс, чеpез котоpый выходит тpаффик в Internet.

interface Serial1

ip web-cache redirect

! Этот acl опpеделяет, чьи запpосы надо пеpенапpавлять.

! Обязательно запpетите пеpенапpавление запpосов от Вашего HTTP cache/proxy сеpвеpа, иначе они зациклятся.

! В данном пpимеpе, 192.168.1.1 - это адpес, с котоpого посылает свои запpосы Squid.

ip access-list standard fwd-2-squid

deny 192.168.1.1 permit any

В конфигуpационном файле Squid'а Вы должны указать адpес router'а, котоpый будет пеpенапpавлять запpосы: wccp_router 192.168.1.2

Далее Вы должны настpоить Squid и Вашу OS для обpаботки пеpенапpавленных запpосов. Об этом смотpите ниже.

Обязательно пpочитайте:

* WCCP - Web Cache Coordination Protocol: http://www.squid-cache.org/Doc/FAQ/FAQ-17.html#ss17.10

_________________________________________________________________



Transparent HTTP caching/proxying



Имеется возможность организовать использование Вашего HTTP прокси сервера прозрачно для пользователей. Это значит, что им не придется что-то настраивать в своих браузерах. Для этого Вам надо решить следующие задачи:

1. Добится того, что бы HTTP запросы пользователей попали на компьютер, где работает Ваш HTTP прокси сервер.

2. После этого, необходимо, что бы они попали собственно в "лапы" прокси.

3. И наконец, что бы Ваш HTTP прокси сервер их правильно обработал.

Выполнить первый пункт можно разными способами. Поставить HTTP прокси сервер на роутер, через который проходить весь траффик, или форвардить запросы с помощью policy routing'а на [5]Cisco роутере или ipfw на [6]FreeBSD:

add fwd x.x.x.x tcp from any to any http in via ed0

add pass all from any to any

Здесь x.x.x.x - IP адрес HTTP прокси сервера, ed0 - интерфейс, через который входит траффик от пользователей.

Что бы HTTP запросы пользователей попали к HTTP прокси серверу, можно воспользоваться опять же ipfw (если у Вас [7]FreeBSD):

add fwd 127.0.0.1,3128 tcp from any to any http in via ed0

add pass all from any to any

Здесь 3128 - порт, на котором принимает запросы Ваш HTTP прокси, а ed0 - интерфейс, через который запросы пользователей попадают на этот компьютер.



Если прокси сервер должным образом настроен, он правильно обработает полученные запросы и все будут довольны. Вот пример настроек Squid'а:

httpd_accel_host virtual

httpd_accel_port 80

httpd_accel_with_proxy on

httpd_accel_uses_host_header on

Внимание, если Вы используете [9]FreeBSD и ipfw, для форварда http запросов, ядро должно быть собрано со следующими опциями:

options IPFIREWALL

options IPFIREWALL_FORWARD

Информацию о настройке transparent HTTP caching/proxying Вы также можете найти здесь:

* Transparent Caching/Proxying: http://squid.nlanr.net/Doc/FAQ/FAQ-17.html

_________________________________________________________________

Denis Shaposhnikov

- Официальный сайт Squid Web Proxy Cache: http://www.squid-cache.org/

- Henrik NordstrЖm's Squid work: http://squid.sourceforge.net/hno/

- Squid Development Projects: http://squid.sourceforge.net/

- Раздел Squid FAQ по WCCP, настройке Cisco, Linux и FreeBSD: http://www.squid-cache.org/Doc/FAQ/FAQ-17.html#ss17.11

- Squid+WCCP на Linux: http://www.spc.int/it/TechHead/Wccp-squid.html

- Модуль для Linux (mod_wccp): http://www.squid-cache.org/WCCP-support/Linux/ip_wccp.c

- Поддежка WCCP для других систем: http://www.squid-cache.org/WCCP-support/



Установка под Linux (основан на http://www.spc.int/it/TechHead/Wccp-squid.html):



1. Собираем модуль mod_wccp c http://www.squid-cache.org/WCCP-support/Linux/

gcc -D__KERNEL__ -I/usr/src/linux-2.2.20/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer

-fno-strict- aliasing -pipe -fno-strength-reduce -m386 -DCPU=386 -DMODULE -DMODVERSIONS -include

/usr/src/linux-2.2.20/include/linux/modversions.h -c ip_wccp.c



2. Копируем ip_wccp.o в /lib/modules/версия_ядра/ipv4/ip_wccp.o



3. Подключаем модуль:

/sbin/modprobe ip_wccp

/sbin/depmod -a -e

4. Для нормальной работы WCCP правим в/etc/sysctl.conf:



# Disables packet forwarding

net.ipv4.ip_forward = 1

# Enables source route verification

net.ipv4.conf.all.rp_filter = 1

# Disables automatic defragmentation (needed for masquerading, LVS)

net.ipv4.ip_always_defrag = 0



5. В конфигурацию squid добавляем:



httpd_accel_with_proxy on

httpd_accel_port 80

httpd_accel_host virtual

httpd_accel_uses_host_header on



6. Настраиваем Cisco:



ip wccp version 1

ip wccp web-cache redirect

wccp enable

wccp_router 192.168.1.1



interface Ethernet0

ip wccp web-cache redirect out





Обсуждение

fwd 192.168.1.1,3128 tcp from any to not 192.168.1.0/24 80,8080,8000,8100,8200. В этом случае сквид в мир шлёт запросы _ТОЛЬКО_ на порт 80. Что не может не огорчать! Решается вот так:httpd_accel_port 0.

Обновлено: 13.03.2015