Przezroczyste proxy
- Kamil Folga,
- 01.05.2005
Pytanie: Serwery web-cache w mojej sieci pracują przy wykorzystaniu oprogramowania Squid. W sieci działa także sprzęt Cisco. W jaki sposób mogę utworzyć w takiej konfiguracji przezroczyste proxy? Czy mogę połączyć kilka serwerów web-cache w klaster?
Pytanie: Serwery web-cache w mojej sieci pracują przy wykorzystaniu oprogramowania Squid. W sieci działa także sprzęt Cisco. W jaki sposób mogę utworzyć w takiej konfiguracji przezroczyste proxy? Czy mogę połączyć kilka serwerów web-cache w klaster?
Odpowiedź: Idea przezroczystego proxy dla ruchu HTTP zakłada umieszczenie serwera web-proxy (np. Squid) pomiędzy przeglądarką użytkownika a serwerem www. Zaletą takiego rozwiązania jest możliwość kontrolowania i logowania ruchu, zredukowanie obciążenia łączy zewnętrznych, czy wreszcie możliwość wymuszenia konieczności korzystania z proxy przez użytkowników. Dla klienta tego typu rozwiązanie jest praktycznie niezauważalne, a komunikacja odbywa się tak, jakby było to bezpośrednie połączenie do serwera.
WCCP (Web Cache Communication Protocol) jest protokołem stworzonym przez Cisco, który realizuje funkcje przezroczystego przekierowania wybranego typu ruchu przechodzącego przez router. Pomiędzy routerem a serwerem proxy komunikacja odbywa się poprzez utworzony tunel GRE (Generic Routing Encapsulation).
Squid umożliwia współpracę z WCCP. Musi zostać skonfigurowany do powiadamiania routera WCCP o tym, że jest dostępny jako przezroczyste proxy. Jeżeli router jest skonfigurowany do przekazywania ruchu HTTP, musi opakowywać pakiety w tunel GRE z docelowym adresem serwera web-cache. Serwer web-cache powinien rozpakowywać pakiety GRE i przekazywać do serwera Squid. W odpowiedzi Squid przekazuje pakiet pod adresem routera, co poprzedza opakowaniem pakietu przez GRE.
Konfiguracja serwera Squid jako przezroczyste proxy wygląda następująco:
http_port 8080
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_single_host off
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
Pakiety przychodzące na port 80 serwera web-cache należy przekierować na port 8080 serwera Squid. Wystarczy dodać odpowiednią regułę do skryptu iptables:
/sbin/iptables -t nat -A PREROUTING -p TCP -i eth0 -dport 80 -s 0.0.0.0/0.0.0.0 -j REDIRECT -to-port 8080
WCCP zadziała tylko w przypadku, gdy serwer web-cache będzie rozpakowywał pakiety GRE przekazywane przez router. Linux obsługuje taką możliwość dzięki modułowi ip_wccp. Instalacja modułu wygląda następująco:
web-cache# /sbin/modprobe ip_wccp
Konfiguracja Squid powinna zostać uzupełniona także następującymi parametrami:
wccp_version 1 # wersja protokołu wccp
wccp_router 192.168.0.1 # adres ip routera wccp
Konieczne staje się także wprowadzenie kilku zmian do konfiguracji routera Cisco. W trybie konfiguracji globalnej należy wprowadzić następujące polecenia:
ip wccp version 1
ip wccp web-cache
W trybie konfiguracji interfejsu LAN routera WCCP wprowadzamy polecenie:
ip wccp web-cache redirect in
Monitorowanie poprawności pracy protokołu umożliwia komenda:
sh ip wccp web-cache
Powyższa konfiguracja pozwala na włączenie do 32 maszyn pełniących rolę serwera web-cache. Istnieje możliwość sterowania i rozdzielania ruchu. W przypadku awarii jednego z serwerów pozostałe przejmują jego zadania. Jeżeli wszystkie serwery ulegną awarii, router WCCP automatycznie przekaże ruch bez pośrednictwa proxy.