Blog (40)
Komentarze (807)
Recenzje (3)

Source-based routing w Linuksie w 5 minut

@DocentSource-based routing w Linuksie w 5 minut17.02.2012 22:46

Vyatta, której namiętnie używamy na naszych głównych, jak i mniej głównych routerach nie obsługuje tzw. "source-based routingu", czyli routingu, który inaczej traktuje klientów pochodzących z różnych adresów IP. Temat ten wałkowany jest od lat na forach Vyatty i od lat jej producent obiecuje, że implementacja SBR pojawi się w końcu w kolejnej wersji. Niestety tak się nie dzieje... Można się z tym pogodzić albo... pogrzebać trochę w bebechach leżącego u podstaw Vyatty Debiana. Okazuje się to bardzo proste.

Na początek słówko wstępu: czyli jak, co i po co? Routing wbrew pozorom dotyczy każdego z nas, nawet jeśli nasze obcowanie z Internetem ogranicza się do rozmów na komunikatorze i wrzucania fotek na Facebooka. Każdy system, także Wasz Windows, posiada swoją własną tablicę routingu, czyli drogowskaz dla połączeń sieciowych. Najprawdopodobniej Wasza tablica routingu jest nieskomplikowana - ruch do innych komputerów w sieci lokalnej, jeśli jakieś w ogóle są, przesyłany jest bezpośrednio do tych komputerów (bo są podłączone fizycznie do tej samej sieci co Wasz komputer), zaś cały pozostały ruch wysyłany jest do Waszego dostawcy usług internetowych za pośrednictwem tzw. bramy domyślnej. Adres tej bramy to tzw. default route, domyślna ścieżka dla wszystkich połączeń, dla których nie ma ścieżek bardziej szczegółowych. Często określa się ją jako 0.0.0.0/0 albo default.

Wszystko co przechodzi przez Wasz system, przechodzi też przez tę tablicę routingu. Jedną i tę samą. Source-based routing to zmienia. Dzięki niemu możemy zdecydować: komputer A będzie obsługiwany przez tablicę X, zaś komputer B przez tablicę Y. Pozostałe komputery obsłuży tablica Z. Oczywiście możemy to rozciągnąć na całe sieci komputerów, według potrzeby. Z podobnym problemem zetknęliśmy się niedawno podczas zmiany konfiguracji routingu w biurze redakcji. Vyatta stanęła przed trudnym zadaniem: ruch do Internetu z części serwerów powinien być przekazywany do Warszawy (gdzie znajduje się nasza podstawowa serwerownia) i dopiero stamtąd wypychany do świata, zaś pozostałe komputery - w tym na przykład notebooki redaktorów - zwyczajnie powinny wychodzić na zewnątrz przez naszego wrocławskiego operatora, najkrótszą drogą.

Na szczęście okazało się, że mechanizmy sieciowe Vyatty nie wchodzą w konflikt ze standardowymi narzędziami sieciowymi Debiana, w tym przypadku pakietem iproute2. Bez większych problemów można stworzyć w systemie kolejne tablice routingu, o których co prawda interfejs Vyatty nie będzie nic wiedzieć, ale będą działać tak jak trzeba ;)


root@VYATTA04:/home/vyatta# ip route add default dev vtun1 table 1
root@VYATTA04:/home/vyatta# ip route add 10.0.0.0/24 dev eth0 table 1
root@VYATTA04:/home/vyatta# ip route add 194.0.171.64/26 dev eth0 table 1

Wykonanie powyższych poleceń (oczywiście jako root) sprawi, że Linux stworzy nową tablicę routingu o numerze 1 (domyślna tablica nie ma numeru, nazywa się main). Według tej tablicy ruch do sieci lokalnej 10.0.0.0/24 oraz podsieci 194.0.171.64/26 będzie przekazywany lokalnie przez podłączony interfejs eth0, zaś cały pozostały ruch - w tym ruch do Internetu - wychodzić będzie przez tunel OpenVPN o nazwie vtun1 - w naszym przypadku jest to tunel łączący siedzibę redakcji we Wrocławiu z serwerownią w Warszawie.

Możemy sprawdzić efekt powyższych poleceń wywołując listing obu tablic:


vyatta@VYATTA04:~$ ip route list table 1
default dev vtun1  scope link
10.0.0.0/24 dev eth0  scope link
194.0.171.64/26 dev eth0  scope link

vyatta@VYATTA04:~$ ip route list table main
default via 78.x.x.x dev eth1  proto zebra
10.0.0.0/24 dev eth0  proto kernel  scope link  src 10.0.0.254
78.x.x.x/29 dev eth1  proto kernel  scope link  src 78.x.x.x
127.0.0.0/8 dev lo  proto kernel  scope link  src 127.0.0.1

Jest to prawdziwa tablica routingu na jednym z naszych routerów, ale niektóre trasy które nie są związane z tematem tego posta usunąłem dla poprawy czytelności ;) Jak widać, nowa tablica 1 została dodana zgodnie z zamierzeniami. To jednak jeszcze nie wszystko. Teraz musimy dodać reguły, za pomocą których system zdecyduje, którą tablicę stosować dla których klientów.


root@VYATTA04:/home/vyatta# ip rule add from 194.0.171.64/26 table 1

Powyższe polecenie sprawi, że ruch pochodzący z podsieci 194.0.171.64/26 będzie obsługiwany przez dodaną przed momentem tablicę 1. Pozostały ruch trafi do domyślnej tablicy main. Na koniec trzeba jeszcze tylko odświeżyć cache routingu:


root@VYATTA04:/home/vyatta# ip route flush cache

I gotowe - działa od razu, nie trzeba niczego restartować etc. - to nie Windows ;) Jest niestety jeden problem: Vyatta całą konfigurację systemu ma zapisaną w swoim specjalnym pliku config.boot, a ponieważ zrobiliśmy właśnie coś, czego Vyatta sama w sobie nie rozumie, po restarcie routera stracimy nasza nową tablicę routingu oraz regułę. Na szczęście najnowsza wersja Vyatty 6.3 posiada specjalny skrypt przewidziany właśnie do umieszczenia w nim konfiguracji, która wykracza poza oficjalnie wspierane scenariusze. Plik ten to /config/scripts/vyatta-postconfig-bootup.script. Wystarczy, że umieścimy w nim powyższe polecenia jedno po drugim.

Na koniec muszę dodać, że podobny efekt można uzyskać też stosując wbudowany w Vyattę mechanizm WAN Load Balancing, niemniej jest to niestandardowy zestaw binarek opracowany przez zespół Vyatty (a więc tylko przez nich może być supportowany), na dodatek niepozbawiony wad - korzystaliśmy z niego kiedyś do dzielenia ruchu wychodzącego do Internetu na kilka łączy DSL i niestety bywało różnie... Lepiej moim zdaniem skorzystać tutaj z natywnego, linuksowego routingu, niż z narzędzia, które de facto stworzone zostało do równoważenia obciążenia, czyli czegoś zupełnie innego, niż chcemy w tym przypadku osiągnąć.

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.