Więcej

    Hairpinning w teorii – przegląd technologii

    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.

    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 🙂

    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:

    Przykładowa topologia
    Przykładowa topologia

    Host 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ę:

    route -p 192.168.2.0 mask 255.255.255.0 192.168.1.2

    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…

    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:

    same-security-traffic permit intra-interface

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

    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:

    nat (inside) 1 0.0.0.0 0.0.0.0
    global (outside) 1 interface

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

    %ASA-3-305006: portmap translation creation failed for icmp src inside:192.168.1.100 dst inside:192.168.2.200 (type 8, code 0)

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

    static (inside,inside) 192.168.1.0 192.168.1.0 netmask 255.255.255.0
    static (inside,inside) 192.168.2.0 192.168.2.0 netmask 255.255.255.0

    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:

    object network obj-192.168.1.0
    subnet 192.168.1.0 255.255.255.0
    object network obj-192.168.2.0
    subnet 192.168.2.0 255.255.255.0
    object network obj_any
    subnet 0.0.0.0 0.0.0.0
    object network obj_any-01
    subnet 0.0.0.0 0.0.0.0
    object network obj-0.0.0.0
    host 0.0.0.0
    !
    object network obj-192.168.1.0
    nat (inside,inside) static 192.168.1.0
    object network obj-192.168.2.0
    nat (inside,inside) static 192.168.2.0
    object network obj_any
    nat (inside,outside) dynamic interface
    object network obj_any-01
    nat (inside,outside) dynamic obj-0.0.0.0

    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ć:

    Problem z asymetrycznym routingiem
    Problem z asymetrycznym routingiem

    Co 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:

    Jeszcze większy problem z asymetrycznym routingiem
    Jeszcze większy problem z asymetrycznym routingiem

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

    ASA(config)#access-list tcp_bypass extended permit tcp 192.168.1.0 255.255.255.0 any
    ASA(config)#access-list tcp_bypass extended permit tcp 192.168.2.0 255.255.255.0 any
    ASA(config)#class-map tcp_bypass
    ASA(config-cmap)#match access-list tcp_bypass
    ASA(config-cmap)#policy-map tcp_bypass_policy
    ASA(config-pmap)#class tcp_bypass
    ASA(config-pmap-c)#set connection advanced-options tcp-state-bypass
    ASA(config-pmap-c)#service-policy tcp_bypass_policy outside
    ASA(config-pmap-c)#static (inside,inside) 192.168.1.0 192.168.1.0 netmask 255.255.255.0
    ASA(config-pmap-c)#static (inside,inside) 192.168.2.0 192.168.2.0 netmask 255.255.255.0

    W tym artykule omówiliśmy przesłanki do stosowania hairpinningu, poznaliśmy konfigurację oraz zapoznaliśmy się z potencjalnymi problemami.

    A co Ty uważasz o hairpinningu? Miałeś okazję się z nim zetknąć?

    🗳 Jak przydatna była ta publikacja?

    Średnia ocena 5 / 5. Ilość głosów: 3

    Brak ocen. Bądź pierwszy!

    Dziękujemy za ocenę! Zapraszamy Cię do obserwowania NSS w mediach społecznościowych!

    Przykro nam, że ta publikacja okazała się być dla Ciebie nieprzydatna!

    Uwaga: Twój głos będzie liczony tylko jeśli udzielisz feedbacku używając formularza poniżej.

    Jak możemy poprawić tę publikację?

    Damian Michalak
    Network Consultant, Twórca Na Styku Sieci

    6 KOMENTARZE

    guest
    6 - Ilość komentarzy
    Sortuj wg najstarszych
    Sortuj wg najnowszych Sortuj wg najlepszych
    Inline Feedbacks
    View all comments
    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 😉

    loockas

    Jednocześnie jest to najpopularniejsze zastosowanie hairpiningu 🙂

    er

    mialo byc wyjasnione a zostalo zagmatwane jeszcze bradziej

    TomW

    Damian rozumiem, że w przypadku ASA hairpinning również będziemy go stosować do RA w oparciu o AnnyConnecta?
    Poprzez implementację same-security-traffic permit intra-interface.

    Przygotowujesz się do certyfikacji CCNA?

    Zapisz się na nasz NSSletter, a co tydzień we wtorek rano otrzymasz porcję sieciowej wiedzy oraz porady dotyczące certyfikacji.

    Uzupełniając powyższe pole wyrażasz zgodę na otrzymywanie od GetGoodNet Damian Michalak z siedzibą we Wrocławiu newslettera zawierającego treści edukacyjne. Zgodę możesz wycofać w każdym czasie.

    NSS na Social Media

    1,611FaniLubię
    72ObserwującyObserwuj
    133ObserwującyObserwuj
    1,220SubskrybującySubskrybuj

    Najnowsze artykuły

    spot_img

    Może Cię też zainteresować...

    6
    0
    Co sądzisz na temat tej publikacji? Zostaw proszę komentarzx
    ()
    x