четверг, 16 апреля 2015 г.

Squid3 + Cisco: WCCPv2 HTTP/HTTPS transparent interception

Введение

Как показал более, чем четырехгодичный опыт эксплуатации Squid в инфраструктуре Cisco, наиболее оптимальное решение по перенаправлению трафика на прокси - это WCCP.

Как показал опыт, использование Policy Route, являясь наиболее простым методом, имеет существенные недостатки. Во-первых, это ощутимая загрузка процессора роутера. Во-вторых, в случае малейшей ошибки в конфигурации в ряде случаев образуется очень трудно обнаружимая роутинговая петля. И, в-третьих, в случае если по какой-либо причине хост прокси-сервера уходит в оффлайн, весь интернет-доступ прекращается. Помимо этого, на хосте прокси должен быть включен форвардинг, что в случае некоторых операционных систем бывает отдельной задачей.

WCCP позволяет решить все эти вопросы в одно действие. 

Загрузка CPU на современных роутерах падает до минимума, отключение прокси не приводит к прекращению доступа в интернет, можно строить отказоустойчивые конфигурации с множественными прокси (а также использовать иерархические кэш-структуры), форвардинг на прокси становится не обязательным, а доступ настраивается через extended ACL, что работает реально быстрее, снижая латентность инсталляции в целом.

Схема сетевой топологии


В данной схеме WCCP настраивается на внутреннем роутере, Cisco 2911, с установленным iOS 15.5(1)T.

Замечание: Первоначально данная конфигурация была написана и полностью протестирована на Cisco iOS 15.4(1)T и 15.4(3)M. В дальнейшем тестировалась вплоть до 15.6(2)T.

Конфигурация Cisco iOS


!
ip cef
ip wccp web-cache redirect-list WCCP_ACCESS
ip wccp 70 redirect-list WCCP_ACCESS
no ipv6 cef
!
!
!
interface GigabitEthernet0/1
ip address 192.168.200.2 255.255.255.0
ip wccp web-cache redirect out
ip wccp 70 redirect out
!
!

ip access-list extended WCCP_ACCESS
 remark ACL for HTTP/HTTPS
 remark Squid proxies bypass WCCP
 deny   ip host 192.168.200.3 any
 remark LAN clients proxy port 80/443
 permit tcp 192.168.0.0 0.0.255.255 any eq www 443
 remark all others bypass WCCP
 deny   ip any any
!
!


Замечание: ip wccp web-cache выполняет редирект только HTTP (80 порт). Для редиректа HTTPS необходимо создать динамический сервис 70.

Конфигурация Squid


# WCCPv2 parameters
wccp2_router 192.168.200.2
wccp2_forwarding_method l2
wccp2_return_method l2
wccp2_rebuild_wait off
wccp2_service standard 0
wccp2_service dynamic 70
wccp2_service_info 70 protocol=tcp flags=dst_ip_hash,src_ip_alt_hash,src_port_alt_hash priority=231 ports=443

# Cisco Routers uses hash (default), switches - mask
# If uses switch L3 (like 3750 or similar), uncomment next line.

#wccp2_assignment_method mask

Замечание: Важный момент касается использования методов взаимодействия прокси и роутера. Cisco на роутерах, как правило, поддерживает функциональность и router и switch. Что позволяет использовать для взаимодействия с прокси как GRE (на системах, где он поддерживается), так и L2 (даже в отсутствие свич-платы с конвергентными портами). В нашем случае используется L2, поскольку сетевой стек Solaris не поддерживает GRE нативно (на самом деле он GRE никак не поддерживает в десятой версии), а мы используем именно его как платформу прокси-сервера. Следует, однако, помнить, что L2 почти всегда - hardware accelerated и имеет меньший оверхед (он просто MAC-адреса переписывает, а не выполняет инкапсуляцию-декапсуляцию), что позволяет получить значительно бОльшую производительность и нагрузочную способность. GRE выполняется на процессоре циски, по-сути, софтверно, что приводит к повышенной нагрузке на процессор.

Полезная справочная таблица по сервисным группам WCCP в Cisco:


Заключение

Не забудьте, что прокси-сервер должен быть уже сконфигурирован для поддержки HTTPS (SSL Bump). Оригинальная статья была написана для Squid Wiki.