Sieci w Linuksie/iproute2/ip/route

Polecenie ip route służy do zarządzania tablicami routingu wewnątrz jądra. Pozwala na dodawanie, usuwanie i modyfikowanie tras. Składnia polecenia wyświetlana za pomocą polecenia `ip route help`:

Składnia polecenia

edytuj
Usage: ip route { list | flush } SELECTOR
       ip route save SELECTOR
       ip route restore
       ip route get ADDRESS [ from ADDRESS iif STRING ]
                            [ oif STRING ]  [ tos TOS ]
                            [ mark NUMBER ]
       ip route { add | del | change | append | replace | monitor } ROUTE
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
            [ table TABLE_ID ] [ proto RTPROTO ]
            [ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
             [ table TABLE_ID ] [ proto RTPROTO ]
             [ scope SCOPE ] [ metric METRIC ]
INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...
NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ]
           [ rtt TIME ] [ rttvar TIME ] [reordering NUMBER ]
           [ window NUMBER] [ cwnd NUMBER ] [ initcwnd NUMBER ]
           [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ]
           [ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ]
TYPE := [ unicast | local | broadcast | multicast | throw |
          unreachable | prohibit | blackhole | nat ]
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
MP_ALGO := { rr | drr | random | wrandom }
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
TIME := NUMBER[s|ms|us|ns|j]

Opis poleceń i ich opcji

edytuj
typy tras
unicast - wpis w tablicy opisuje rzeczywistą trasę umożliwiającą komunikację z siecią opisaną przez zadany prefiks
local - miejsca docelowe są przypisane do lokalnej maszyny, pakiety zostaną skierowane z powrotem do komputera
broadcast - adres rozgłoszeniowy, Pakiety zostaną wysłane jako rozgłoszenie w warstwie 2
multicast - specjalny typ wpisu, używany do obsługi routingu typu multicast, normalnie nie pojawia się w tablicach routingu
throw - specjalny typ wpisu, używany wraz z politykami routingu. Jeżeli trasa tego typu zostanie dopasowana, zadziała tak, jakby w tablicy nie znaleziono pasującej trasy (spowoduje to przejście do następnej polityki w RPDB). Jeżeli routing polityczny nie jest używany jest to równoważne nie znalezieniu trasy (jeżeli nadawca jest lokalny otrzyma konumikat ENETUNREACH).
unreacheable - miejsce docelowe jest nieosiągalne. Dopasowanie trasy spowoduje wysłanie komunikatu ICMP host unreachable (3.1) do zdalnych nadawców, lokalni nadawcy otrzymają komunikat EHOSTUNREACH.
prohibit - miejsce docelowe jest nieosiągalne. Dopasowanie trasy spowoduje wysłanie komunikatu ICMP communication administratively prohibited (3.13), lokalni nadawcy otrzymają komunikat EACCESS.
blackhole - miejsce docelowe jest nieosiągalne. Pakiety są odrzucane po cichu (znikają). Lokalni nadawcy otrzymują komunikat EINVAL.
nat - ten typ trasy służył do realizacji NAT. W jądrze serii 2.6 nie jest obsługiwany.
anycast - nie zaimplementowane. Miejsce docelowe jest adresem typu anycast przyporządkowanym do lokalnej maszyny. Ten typ trasy jest podobny do local z tą różnicą, że adres docelowy nie jest poprawnym adresem źródłowym.
opcje
protokoły
kernel - trasa została dodana automatycznie przez jądro podczas konfiguracji. Przykładem mogą być trasy powiązane z adresem przypisanym do interfejsu sieciowego.
boot - trasa została dodana podczas uruchamiania systemu. Trasy takie zostaną automatycznie usunięte przez demona routingu, jeżeli zostanie uruchomiony. Jest to domyślny protokół, więc jeżeli trasa ma być używana w konfiguracji z demonami routingu należy podawać protokół static.
static - trasa została dodana przez administratora systemu. Trasa taka nadpisuje trasy dynamiczne, jest respektowana przez demony routingu, a nawet rozgłaszana przez nie sąsiadom.
redirect - trasa została dodana w wyniku otrzymania przekierowania ICMP (5.x). Trasy takie mają ograniczony czas życia.
ra - trasa została dodana w wyniku działania protokołu Router Discovery.
NUMBER - protokół może zostać oznaczony liczbowo, lub za pomocą nazwy zapisanej w pliku /etc/iproute2/rt_protos.

ip route add

edytuj

Polecenie to służy do dodawania tras do wybranej tablicy routingu. Domyślną tablicą jest main (id 254). Najprostszą postacią tego polecenia jest:

ip route add default via 192.168.0.1

Gdzie default jest mnemoniką 0.0.0.0/0, a 192.168.0.1 jest w ten sposób bramą domyślną. Powyższe polecenie jest równoważne poniższemu (jeżeli interfejsem przez który dostępny jest host 192.168.0.1 jest eth0):

ip route add unicast 0.0.0.0/0 via 192.168.0.1 dev eth0 table main proto boot

ip route list

edytuj

Polecenie to służy do wyświetlania zawartości tablic routingu. Synonimem jest `ip route show`. Opcje związane z tym poleceniem opisane są następującą składnią:

Usage: ip route { list | flush } SELECTOR
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
            [ table TABLE_ID ] [ proto RTPROTO ]
            [ type TYPE ] [ scope SCOPE ]

Użycie selektora umożliwia wyświetlenie tylko niektórych tras (w przypadku używania np. publicznego BGP może ich być setki tysięcy!). Polecenie `ip route show` może użyć dwóch dodatkowych nazw tablic: all oraz cache. Pierwsza wyświetla zawartość wszystkich tablic na raz, a druga wyświetla pamięć tymczasową tras.

ip route flush

edytuj

Polecenie to pozwala na skasowanie tras pasujących do selektora analogicznego do tego dla polecenia `ip route show`. Najczęstszym zastosowaniem jest kasowanie tablicy cache przy wprowadzaniu modyfikacji do tablicy tras, jeżeli modyfikacje te mają zadziałać natychmiast (normalnie cache działa na zasadzie per połączenie).

ip route get

edytuj

Polecenie to pozwala na znalezienie trasy do danego adresu. Dodatkowe opcje umożliwiają poprawne przeszukiwanie RPDB w przypadku, gdy używany jest routing polityczny. Znaczenie poszczególnych opcji wynika bezpośrednio z opisu polecenia `ip rule`.

ip route get ADDRESS [ from ADDRESS iif STRING ]
                     [ oif STRING ]  [ tos TOS ]
                     [ mark NUMBER ]

Polecenie `ip route get` używa bezpośrednio mechanizmu znajdowania tras w jądrze, co wiąże się z kilkoma konsekwencjami:

  • jeżeli trasa istnieje w tabeli cache, to jest ona zwracana. Oznacza to, że w szczególności jeżeli trasa powstała w wyniku otrzymania informacji o przekierowaniu to może się różnić od tego co wynikałoby z analizy na palcach tablic routingu.
  • jeżeli trasa nie istnieje w tabeli cache, to jej znalezienie powoduje dodanie wpisu do tabeli cache.
Przykłady
# ip r get 192.168.4.7
192.168.4.7 via 192.168.0.1 dev eth0  src 192.168.0.10 
    cache  mtu 1500 advmss 1460 hoplimit 64

Powyżej widoczna jest statyczna trasa, jeżeli jednak najpierw się spinguje tego hosta, to wynik będzie inny:

# ip r get 192.168.4.7
192.168.4.7 via 192.168.0.2 dev eth0  src 192.168.0.10 
   cache <redirected>  mtu 1500 advmss 1460 hoplimit 64

Trasa się zmieniła, ponieważ podczas pingowania host otrzymał przekierowanie ICMP, które zainstalowało trasę tymczasową.