Dydaktyka:
FeedbackTo jest stara wersja strony!
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, interejsu którym przyszedł pakiet, lub dowolnego filtra iptables – jak ma wyglądać tablica tras.
Dodatkowe materiały:
\ .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
Linux SK prog (lxc w OpenSUSE ma problemy)aptitude install lxc ip link add dev br0 type bridge ip link set enp0s3 master br0 ip link set br0 up dhclient br0 cd /var/lib/lxc/ tar xf zsk_policy_routing.tar.xz find /var/lib/lxc/ -name resolv.conf -exec cp /etc/resolv.conf \{\} \; source ./topologia_lxc
Lista kontenerów: lxc-ls -f
Podłączenie do kontenera: lxc-attach -n <nazwa>
Narzędzia w kontenerach:
ping i tracerouteiftop -i <ifname> / tcpdump / iptraf-ngapk update, instalacja pakietów: apk add … apk add openssh-client, apk add iproute2
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
Pokazanie tablicy tras vs pokazanie wszystkich tablic tras:
ip route show (lub: ip -4 -6 route show)ip -4 route show table all (lub: ip route show table all)
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:
ip rule [list]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:
ip route add default via 172.16.2.1 table 10 ip route show table 10 (lub: ip route show table all)ip rule add from 192.168.0.1/32 table 10ip rule show
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.
/etc/iproute2/rt_tables na lokalnym komputerze. /etc/iproute2/rt_tables tak, by nazywał przynajmniej dwie tabeleMożliwe reguły wyboru tablicy tras są podsumowane powyżej. Najważniejsze opcje przy ustawiani reguł to:
ip rule add … pref <preferencja> lookup|goto … ip rule add iif eth0 pref 500 lookup 20 ip rule add iif <ifname> … ip rule add from <sieć>/<maska> … ip rule add from 10.1.0.0/16 lookup 30ip rule add fwmark <wartość>/<maska> … ip rule add fwmark 0xbe lookup 40
Ostatnia opcja (fwmark) pozwala na połączenie wyboru tras z mechanizmem filtracji netfilter (iptables).
Zadanie 5.
throw lub unreachable dla wybranej podsieci ip r a table id unreachable siec/maska)
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:
iptables -t mangle -A PREROUTING … -j MARK --set-mark <mark>iptables -t mangle -A PREROUTING -p udp --dport 53 -j MARK --set-mark 0x10iptables -t mangle -A PREROUTING -s 192.168.0.1 -j MARK --set-mark 0x1/0x1
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ń:
iptables -t mangle -A PREROUTING -p udp --dport 53 -j MARK --set-mark 0xbabeip rule add fwmark 0xbabe lookup 90ip route add default table 90 via 172.16.2.1tcpdump -i eth1 "udp dst port 53" | cut -d" " -f 7-8
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.
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.
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