Spis treści

Policy routing

Jeśli urządzenie ma kilka alternatywnych tras w stronę tej samej sieci, można skonfigurować:

Policy routing oznacza, że przygotowane przez administratora reguły decydują – na podstawie adresu źródłowego, interfejsu którym przyszedł pakiet, lub dowolnego filtra iptables – jak ma wyglądać tablica tras.

Dodatkowe materiały:

Topologia używa w przykładach

\                                                             .1
 \         .---. .1     172.16.1/24                       .---- PC1
I(- - - --( gw1 )--------                                /
N\         `---'         \                192.168.0/24  /   .2
T \                       \.2                          /   .-- PC2
E  )                       .------. .254      +-----+--'   /
R /                       ( router )----------| <-- |-----'   
N(                         `------'           | --> |----------- PC3
E )        .---. .1         /.2               +-----+-.   
T/- - - --( gw2 )-----------                           `---- PC4
/          `---'         172.16.2/24                   

Przygotowanie środowiska do zajęć

# instalacja LXC
aptitude update
aptitude install lxc
# rozpakowanie kontenerów
cd /var/lib/lxc/
tar xf SCIEZKA_DO_PLIKU/zsk_policy_routing.tar.xz
# konfiguracja serwerów DNS w kontenerach
find /var/lib/lxc/ -name resolv.conf -exec cp /etc/resolv.conf \{\} \;
# konfiguracja mostków używanych w kontenerach i start kontenerów
source ./topologia_lxc

Lista kontenerów: lxc-ls -f
Podłączenie do kontenera: lxc-attach -n <nazwa>

Narzędzia w kontenerach:

Policy routing należy konfigurować na kontenerze nazwanym router.

Zadanie 1. Podłącz się do kontenera enduser2 i sprawdź trasę do fc.put.poznan.pl

Podstawy

Pokazanie tablicy tras vs pokazanie wszystkich tablic tras:

Zadanie 2. Która tablica tras jest używana jeśli nie poda się table …?

Kolejność użycia tablic tras definiują reguły, do wypisania których użyj:

Aby wybrać trasę, system przegląda kolejno reguły (w rosnącej kolejności preferencji) i wykonuje to, co te nakazują. Przykłady:

0: from all lookup local przejrzyj tablicę tras o nazwie local (identyfikator 0)
200: from all lookup 5 przejrzyj tablicę tras o identyfikatorze 5
500: from all goto 700 przeskocz do reguły numer 700 (tzn. pomiń reguły 501÷699)
501: from 1.2.3.4/30 lookup default dla pakietów z sieci 1.2.3.4/30 przejrzyj tablicę default
502: from all to 5.6.7.8/30 lookup default dla pakietów idących do sieci 5.6.7.8/30 przejrzyj tablicę default
503: from all iif eth0 lookup default dla pakietów wchodzących interfejsem eth0 przejrzyj tablicę default
504: from all fwmark 0x50 lookup default dla pakietów oznaczonych jako 0x50 przejrzyj tablicę default
504: from all fwmark 0x30/0x70 lookup default dla pakietów których ((mark & 0x70) == 0x30) przejrzyj tablicę default

Jeśli we wskazanej przez lookup tabeli zostanie znaleziona trasa dalsze reguły nie są przeglądane.

Skrócona pomoc: ip rule help
Dokumentacja : man ip-rule

Zadanie 3. Wykonaj przykładowe polecenia i zaobserwuj działanie:

Powyższe ćwiczenie pokazuje jak stworzyć nową tabelę tras i dodać do niej wpis, oraz jak stworzyć prostą regułę która przegląda tą trasę. Tablice tras mają identyfikatory numeryczne. Dla ułatwienia można nadać im identyfikatory słowne zmieniając treść pliku /etc/iproute2/rt_tables.

Zadanie 4.

Możliwe reguły wyboru tablicy tras są podsumowane powyżej. Najważniejsze opcje przy ustawiani reguł to:

Ostatnia opcja (fwmark) pozwala na połączenie wyboru tras z mechanizmem filtracji netfilter (iptables).

Zadanie 5.

fwmark

Reguły iptables potrafią ustawić znacznik pakietom. Jest to uniwersalny sposób na oznaczanie wybranych pakietów tak, by inne komponenty systemu mogły osobno traktować wybrany ruch.
Znacznik to liczba 32-bitowa, zwykle zapisywana szesnastkowo (tzn. od 0x0 do 0xFFFFFFFF).

Droga pakietu przez mechanizmy filtrujące w systemie Linux podsumowana jest tutaj: [PL] [EN]

Aby ustawić znacznik przed podjęciem decyzji o trasowaniu, trzeba go dodać do łańcucha PREROUTING tabeli mangle:

Zadanie 6. Wyzeruj konfigurację. Następnie skonfiguruj router tak, by domyślnie ruch szedł przez gw1, natomiast zapytania DNS przez gw2. Na gw2 wyświetlaj treść zapytań:

Znacznik MARK można skopiować do informacji o połączeniu używając do tego celu -j CONNMARK z opcjami --save-mark, a następnie nadać nowym pakietom z tego samego połączenia używając --restore-mark.

Zadania

Zadanie 7. Ustaw policy routing tak, by ruch dopuszczony przez domyślną politykę ruchu PP [1] [2] był wysyłany do gw1. Pozostały ruch pokieruj przez gw2.

Zadanie 8. Ustaw politykę, by połączenia SSH, zapytania DNS i komunikaty NTP szły przez gw2. Resztę puść przez gw1.
Następnie dodaj trasę, która w razie awarii łącza do gw1 pokieruje cały ruch przez gw2.

Zadanie 9. Korzystając z modułu limit lub hashlimit ustaw, by w każdej minucie pierwsze 32KB wysłane z eth0 szło przez gw1, nadwyżka przez gw2.

Multipath route

Osobnym tematem jest równoważenie obciążenia przez wybór jednej z dostępnych tras do tej samej sieci.
Przykładowa komenda równoważąca obciążenie prez podanie kilku tras do tego samego celu poniżej:
ip route add default nexthop via 172.16.1.1 weight 1 nexthop via 172.16.2.1 weight 1