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 edytuj

RPDB 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 edytuj

Domyś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 edytuj

Skł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 edytuj

ip rule add edytuj

Polecenie 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 edytuj

Polecenie 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 edytuj

Polecenie 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 edytuj

Polecenie 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ą!