Hairpinning w teorii – przegląd technologii

1 komentarz | , autor: Damian Michalak

PODAJ TO

Hairpinning… cóż to jest? Sieci komputerowe obfitują w mniej lub bardziej wymyślne terminy, a ten jest jednym z moich ulubionych. W dużym uproszczeniu – hairpinning to określenie sytuacji, w której dany ruch wchodzi na pewnym interfejsie routera i po podjęciu decyzji o routingu wychodzi tym samym interfejsem. Nietypowe prawda? W tym artykule wyjaśnię skąd taka nazwa, jakie są przesłanki by stosować hairpinning oraz w jaki sposób go skonfigurować na Cisco ASA.

1. Skąd taka nazwa?

To akurat jest proste – po przeczytaniu wstępu oraz zobaczeniu obrazka w nagłówku artykułu skojarzenie powinno nasunąć się samo. Jeśli naszkicujemy sobie opisaną wcześniej sytuację (ruch wchodzi i wychodzi tym samym interfejsem) to nam wyjdzie tak zwany U-turn (ruch zawracający). Spinka do włosów dość ładnie to odzwierciedla. Na szczęście w języku polskim nikt póki co nie wymyślił żeby nazywać tę technikę spinkowaniem, dlatego też pozostajemy przy oryginalnym angielskim terminie – hairpinning 🙂

2. Zastosowanie

Hairpinning znajduje zastosowanie w sytuacji, w której w danym segmencie LAN mamy więcej niż jedno urządzenie routujące, a najkrótsza droga do sieci docelowej nie przechodzi przez bramę domyślną komputera będącego źródłem ruchu. Brzmi zawile? Zobrazujmy to na poniższym przykładzie:

hairpin1Host A chcąc się skomunikować z hostem B musi wysłać ruch do swojej bramy domyślnej jako, że host B znajduje się w innej sieci. Sieć jest skonfigurowana w taki sposób, że bramą domyślną dla sieci 192.168.1.0/24 jest ASA na wyjściu do Internetu. Najkrótsza trasa do hosta B jednak nie wiedzie przez ASA, a przez Internal Router. Konfiguracja sieci wymusza na nas zatem aby ruch, który trafi do ASA został zawrócony w stronę sieci 192.168.1.0/24 i następnie trafił do Internal Router’a. To wszystko oczywiście przy założeniu, że nasza ASA jest w routed mode.

Hairpinning musi być zastosowany ponieważ hosty końcowe (w naszym przypadku host A) nie mają świadomości jaka jest najkrótsza trasa do danej sieci. Wszystko co nie jest w sieci hosta jest po prostu „pchane” w stronę bramy domyślnej. Można by oczywiście dodać do hosta A trasę:

Spowodowałoby to, że brama domyślna nie byłaby angażowana, a ruch do hosta B byłby wysyłany bezpośrednio do Internal Router’a. Wada? Konieczność dodawania takiej trasy ręcznie na każdym hoście w sieci 192.168.1.0/24…

3. Implementacja na przykładzie Cisco ASA

Sama implementacja jest stosunkowo prosta. Zanim przejdę do komend mała wzmianka – na Cisco ASA aż do wersji 6. oprogramowania nie było możliwości stosowania hairpinningu. Wynikało to z domyślnego blokowania ruchu pomiędzy interfejsami o tym samym security-level. Dopiero od wersji 7 dodano komendę „same-security”, która pozwalała na routowanie ruchu między interfejsami o identycznym security-level (z pewnymi ograniczeniami). Począwszy od wersji 7.2 oprogramowania pojawiła się komenda:

To właśnie ona odpowiada za włączenie hairpinningu. I to tyle co do samej implementacji 🙂

4. Potencjalne problemy

Nietypowość sytuacji, w której się stosuje hairpinning może powodować pewne problemy. Tutaj opiszę dwa, najczęściej występujące:

a) problem z NATowaniem

Jeśli na Cisco ASA mamy uruchomiony NAT/global (w celu umożliwienia dostępu z sieci wewnętrznej do Internetu) to ubije on nam hairpinning:

Próbując spingować hosta B z hosta A na ASA pojawią się nastepujące logi:

Rozwiązaniem tego problemu jest dodanie dedykowanej konfiguracji NAT dla naszych sieci wewnętrznych, tak aby hairpinnowany ruch nie wpadał w NAT/global:

Począwszy od wersji 8.3 oprogramowania zmieniła się składnia komend do NATowania na Cisco ASA, ale sama logika rozwiązania pozostaje taka sama:

b) problem z asymetrycznym routingiem

Jeśli host A będzie nawiązywał komunikację z hostem B to ASA zarejestruje tylko pakiet SYN, a reszta komunikacji będzie już przechodziła bezpośrednio przez Internal Router. Na Cisco ASA możemy zatem zaobserwować sporo niekompletnych sesji, nie zmienia to jednak faktu, że będzie to działać:

hairpin2Co innego, gdy to host B będzie inicjował komunikację. W takiej sytuacji pierwszym pakietem, który zauważy ASA będzie SYN-ACK co spowoduje, że nasza biedna ASA będzie zdezorientowana:

hairpin3Pośrednim rozwiązaniem tego problemu jest zastosowanie funkcji „tcp state bypass„, konfigurowalnej z poziomu Modular Policy Framework (MPF):

Podsumowanie

W tym artykule omówiliśmy przesłanki do stosowania hairpinningu, poznaliśmy konfigurację oraz zapoznaliśmy się z potencjalnymi problemami. Z mojej strony słowa podziękowania dla Jimmiego Larssona z bloga nat0.net, który rozgryzł temat hairpinningu w dedykowanym wpisie. Jak zwykle, zachęcam Cię do podzielenia się swoimi przemyśleniami w komentarzach!

SPODOBAŁ CI SIĘ TEN ARTYKUŁ?
Dołącz do moich subskrybentów, a nie przegapisz kolejnych ciekawych artykułów!

Nie ujawnię nikomu Twojego adresu. Zero spamu.
Damian MichalakHairpinning w teorii – przegląd technologii
  • RiFF

    Wyjaśnienie NAT Hairpin jest przedstawione dużo prościej na przykładzie innego producenta sprzętu a dokładnie na WIKI Mikrotika – http://wiki.mikrotik.com/wiki/Hairpin_NAT, aczkolwiek tam przykład jest prostszy bo skupia się tylko na jednym urządzeniu 😉