Информация
На главную Главная

Мой t-cards.ru
Войти Войти
Зарегистрироваться Регистрация

Разное
Форум Форум
Вернуться Форумы на t-cards.ru> Hard"n"Soft
Логин
Пароль
Регистрация Участники Поиск >> FAQ


Сообщения в теме: "CISCO WCCP2 + SQUID + FreeBSD 6.2..."
23.12.2007 23:12
Admin

Регистрация: 19.04.2006
Проживание: Калуга
Сообщения: 57
По умолчаниюCISCO WCCP2 + SQUID + FreeBSD 6.2

Оказалась у меня в руках недавно cisco 3845 одного из калужских провайдеров.
Решил поднять на ней wccp2, можно сказать, мечту детства.
Напомню тем кто знает, и поведаю тем, кто не в курсе - wccp протокол разработан cisco и позволяет использовать распределённую систему из 32 кеш-хранилищь, каждое из которых так же может принимать редиректы от множества cisco роутеров. Превосходство системы в повышенной отказоустойчивости. Если хранилище не отвечает на запросы роутера - оно удаляется из списка. Если удалено последнее из хранилищь - трафик летит без редиректа. Пользователи не замечают проблем, а при рабочей системе можно экономить http трафик в пределах от 10 до 20% всего объема.
Итак, нашел в инете очень много инфы про эту связку, однако какого-либо полного описания как обычно не было. Собсна то, как я решил задачу не подходит не под одно из описания да и сам я ожидал несколько иной формы работы.
Ладно, приступим.
На циске нам делать ничего практически не надо, пара комманд:
(config)#ip wccp web-cache
(config-if)#ip wccp web-cache redirect out
на внешнем интерфейсе, который имеет выход в инет.
при необходимости также мона добавить комманды, ограничивающие доступ. если ваш кеш-контейнер имеет доступ в инет через эту же циску необходимо отделить её ip от тех, которые будут редиректиться в хранилище. Иначе получится ацкей цикл.
После этого ставим squid 2.6 или выше. Я скомпилял из портов STABLE версию 3.0.
Много статей в инете на тему надо или не надо поднимать GRE туннель до циски. Я отвечаю - надо. Но не простой. Описание есть на самом сайте сквида, вот цитатко:
And then configure the tunnel so that the router's GRE packets are accepted:

# ifconfig gre0 create
# ifconfig gre0 $squid_ip $router_ip netmask 255.255.255.255 up
# ifconfig gre0 tunnel $squid_ip $router_ip
# route delete $router_ip

хитрость состоит в том, что исходящие пакеты на адрес циски не будут инкапсулироваться в GRE, этого и не надо, так как squid и циска должны общаться между собой по порту 2048/UDP без всяких туннелей.
Далее... есть статьи в которых трудяги бьют себя пяткой в грудь и заявляют, что никакого заворота трафа при использовании wccp2 быть не должно. Честно говоря может оно и так, но подампив GRE туннель я увидел что приходят http запросы на 80 удалённый порт. Эти пакеты ессно дропались, сквиду до них не было никакого дела . Я создал заворот на 3128 порт, всё заработало. Правило нечто подобное:
/sbin/ipfw add 1000 fwd 127.0.0.1,3128 tcp from any to not me dst-port 80 via gre0

Возможны есть и иные варианты, возможно действительно можно без GRE и без заворота, если есть те, кто настроил иначе - отпишитесь.
23.12.2007 23:18
Admin

Регистрация: 19.04.2006
Проживание: Калуга
Сообщения: 57
По умолчаниюCISCO WCCP2 + SQUID + FreeBSD 6.2

Да... ещё один очень важный момент. Взгяните на исходники if_gre.c
case SIOCSIFFLAGS:
if ((error = suser(curthread)) != 0)
break;
if ((ifr->ifr_flags & IFF_LINK0) != 0)
sc->g_proto = IPPROTO_GRE;
else
sc->g_proto = IPPROTO_MOBILE;
if ((ifr->ifr_flags & IFF_LINK2) != 0)
sc->wccp_ver = WCCP_V2;
else
sc->wccp_ver = WCCP_V1;
goto recompute;

Это означает, что при создании туннеля GRE необходимо передать флаг link2, по умолчанию создаётся link0. Убил много времени на это.