Sieci w Linuksie/iproute2/ip/rule
Polecenie ip rule służy do zarządzania bazą danych polityk w jądrze (ang. Routing Policy DataBase, RPDB). RPDB pozwala na podejmowanie decyzji o routingu nie tylko na podstawie docelowego adresu IP i pola TOS, ale również za pomocą takich parametrów jak: adres źródłowy pakietu, interfejs wejściowy pakietu, protokół transportowy, znaczniki firewalla (fwmark). Aby móc skorzystać z routingu politycznego funkcja taka musi zostać wkompilowana w jądro (Networking support --> Networking options --> IP: policy routing).
Struktura RPDB
edytujRPDB składa się z polityk posortowanych według malejącego priorytetu (najwyższym priorytetem jest 0). Każda polityka składa się z selektora i akcji. Selektory odpowiedzialne są za dopasowanie pakietu, a akcje mówią co należy z pakietem zrobić (najczęściej jest to skok do wybranej tablicy routingu). Pakiety przechodzą po kolei przez RPDB i jeżeli polityka skieruje dany pakiet do tablicy routingu, w której znajduje się reguła, która może obsłużyć pakiet to kończy on przechodzenie przez RPDB, jeżeli nie to pakiet kontynuuje przejście przez RPDB od następnej reguły.
- UWAGA
Polityki powinny mieć jednoznaczne priorytety, ponieważ wartość priorytetu jest również numerem polityki. Jeżeli dwie polityki będą miały ten sam priorytet mogą wystąpić problemy np. podczas usuwania polityk.
W RPDB można odwoływać się do tablic routingu na dwa sposoby:
- za pomocą numerów tablic routingu (od 0 do 255). Tablice 255, 254, 253 mają specjalne znaczenie opisane poniżej.
- za pomocą nazw symbolicznych zapisanych w pliku /etc/iproute2/rt_tables
Domyślna zawartość RPDB
edytujDomyślnie w RPDB znajdują się 3 polityki o następujących priorytetach:
- 0: from all lookup local - polityka ta dopasowuje wszystkie pakiety i kieruje je do tablicy local (ID 255). Tablica local zawiera trasy do adresów lokalnych, czyli adresy osiągalne bezpośrednio. Znajdują się w niej m. in. trasy do adresów broadcast i adresy lokalnych interfejsów. UWAGA: Tej polityki nie da się usunąć!
- 32766: from all lookup main - polityka ta dopasowuje wszystkie pakiety i kieruje je do tablicy main (ID 254). Tablica main jest główną tablicą wyświetlaną np. przez polecenie `ip route show` bez dodatkowych parametrów. W tablicy main znajdują się normalne trasy. Tę politykę można dowolnie zmieniać/usuwać.
- 32767: from all lookup default - polityka ta dopasowuje wszystkie pakiety i kieruje je do tablicy default (ID 253). Tablica default jest domyślnie pusta. Służy do podejmowania decyzji jeżeli żadna reguła routingu nie została dopasowana wcześniej. Tę politykę można dowolnie zmieniać/usuwać.
Składnia polecenia
edytujSkładnia polecenia wyświetlona za pomocą polecnia `ip rule help` wygląda następująco:
Usage: ip rule [ list | add | del | flush ] SELECTOR ACTION SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ] [ iif STRING ] [ oif STRING ] [ pref NUMBER ] ACTION := [ table TABLE_ID ] [ prohibit | reject | unreachable ] [ realms [SRCREALM/]DSTREALM ] [ goto NUMBER ] TABLE_ID := [ local | main | default | NUMBER ]
Opis poleceń i ich opcji
edytujip rule add
edytujPolecenie to służy do dodawania polityk to RPDB. Poszczególne elementy selektora są ze sobą łączone za pomocą logicznej operacji AND. Dostępne selektory to:
- not - negacja całego selektora
- from PREFIX - adres źródłowy należy do sieci określonej przez PREFIX (w formacie CIDR)
- to PREFIX - adres docelowy należy do sieci określonej przez PREFIX (w formacie CIDR)
- tos TOS - wartość pola Type of Service jest równa TOS
- fwmark FWMARK[/MASK] - pakiet ma znacznik firewalla pasujący do FWMARK[/MASK] (oznaczanie pakietów przez netfilter opisane jest w rozdziale Sieci:Linux/Netfilter/iptables/akcje)
- iif STRING - interfejs źródłowy pasuje do nazwy interfejsu STRING (nie działa symbol wieloznaczny +!)
- oif STRING - interfejs wyjściowy pasuje do nazwy interfejsu STRING (uwaga jw.)
- dsfield TOS - wartość pola DSCP jest równa TOS (jest to nowsza wersja TOS)
Dostępne akcje to:
- table TABLE_ID - użyj tablicy o nazwie/numerze TABLE_ID, synonimem table jest lookup
- prohibit - wyślij komunikat ICMP o zabronionym administracyjnie celu (kod ICMP 3.9)
- reject - wyślij komunikat ICMP o odrzuconym celu
- unreacheable - wyślij komunikat ICMP o nieosiągalnej sieci (kod ICMP 3.0)
- realms [SRCREALM[/DSTREALM]] - użyj następujących światów
- goto NUMBER - przeskocz do polityki o numerze NUMBER
Numer polityki ustawia się za pomocą preference NUMBER, lub synonimu priority.
- Przykłady
Załóżmy, że posiadamy system o dwóch interfejsach publicznych eth1 i eth2 oraz sieć lokalną na interfejsie eth0. System ten posiada kolejno następujące adresy IP: 192.168.1.10/27, 192.168.2.6/29 oraz 192.168.0.1/24. Załóżmy, że system ten powinien umieć się komunikować ze światem przez oba interfejsy publiczne oraz NATować ruch lokalny przez interfejs eth2. W tym celu w pliku /etc/iproute2/rt_tables dopisujemy dwie nowe tablice:
100 table_1 200 table_2
oraz wykonujemy następujące polecenia:
ip rule add from 192.168.1.10 lookup table_1 priority 100 # 1 ip rule add from 192.168.2.6 lookup table_2 priority 101 # 2 ip route add default via 192.168.1.1 table table_1 # 3 ip route add default via 192.168.2.1 table table_2 # 4 ip route add default via 192.168.1.1 # 5
Polecenia (1-2) przywiązują adres źródłowy systemu do wybranych tablic routingu. Dzięki temu pakiety przychodzące na interfejs eth2 będą obsługiwane poprawnie (bez polecenia (2) system i tak odpowiadałby przez interfejs eth1!). Polecenia (3-4) dodają trasę domyślną kolejno do tablic table_1, table_2 i main. Do pełnego działania brakuje jeszcze reguł netfilter służących do realizacji NAT.
ip rule list
edytujPolecenie to wyświetla zawartość RPDB. Synonimem tego polecenia jest `ip rule show`. Polecenie to nie używa żadnych dodatkowych argumentów (wbrew rozpisce składni).
ip rule del
edytujPolecenie to pozwala usunąć wybraną regułę z RPDB. Argumentem tego polecenia może być cała reguła, lub tylko jej numer podany w postaci:
ip rule del priority 100
ip rule flush
edytujPolecenie to pozwala na usunięcie wszystkich reguł na raz (w tym reguł o numerach 32766 i 32767!). Nie przyjmuje dodatkowych argumentów.
- UWAGA
Jeżeli jest wkompilowana obsługa routingu politycznego to wydanie polecenia `ip rule flush` sprawi, że komputer utraci całkowicie łączność sieciową!