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 traceroute
iftop -i <ifname>
/ tcpdump
/ iptraf-ng
apk 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 10
ip 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 30
ip 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 0x10
iptables -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 0xbabe
ip rule add fwmark 0xbabe lookup 90
ip route add default table 90 via 172.16.2.1
tcpdump -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