Wybór trasy: specyficzność vs metryka

17

Rozumiem, że Linux wybiera najbardziej konkretną trasę do miejsca docelowego, kiedy dokonuje wyboru routingu . Ale co z metryką trasy? Czy ma wyższy priorytet niż specyfika trasy?

Docenione zostanie również odniesienie do szczegółów algorytmu wyboru routingu używanego przez system Linux.

Eugene Yarmash
źródło

Odpowiedzi:

26

Metryka tras służy do ustawiania preferencji między trasami o jednakowej specyficzności. Dotyczy to ogólnie routingu (np. Cisco, Windows itp.). Model działa więc tak:

  1. Znajdź najbardziej konkretną trasę (czyli najdłuższe dopasowanie prefiksu * )
  2. Jeśli istnieje wiele tras o tej samej specyfice, wybierz tę o najniższej odległości administracyjnej (rozróżnia to między innymi trasy bezpośrednio podłączone, trasy statyczne i różne protokoły routingu).
  3. W ramach tego protokołu routingu i określonej trasy (jeśli specyfika trasy i odległość administracyjna są takie same), wybierz trasę z najniższą metryką

Pamiętaj, że istnieją inne rzeczy, które mogą się odbywać na takim routingu opartym na zasadach, który pozwala wykonywać takie czynności, jak trasy oparte na źródłowym adresie IP. Ale specyfika trasy, odległość administracyjna, a następnie metryka to, co uważam za trzy główne rzeczy.

* Nazywa się to najdłuższym dopasowaniem prefiksu, ponieważ wygląda na podsieć w systemie binarnym (na przykład / 24) 11111111.11111111.11111111.00000000. Router może więc po prostu zeskanować prefiks pod kątem wartości binarnych 1 i zatrzymać, gdy osiągnie zero, a następnie dopasuje prefiks.

Kyle Brandt
źródło
1
Nie jest to do końca prawdą w systemie Linux, w którym nie ma rozróżnienia między odległością metryczną a administracyjną.
jch
1
@jch Does quagga and co. naśladować AD poprzez odpowiednie ustawienie metryki? (Nie żeby twój punkt nie był istotny, po prostu ciekawy)
Kyle Brandt
1
Nie, Quagga implementuje AD wewnętrznie w zebrademonie i wysyła tylko wybrane trasy do jądra - więc jądro nigdy nie musi radzić sobie z AD. Muszę to sprawdzić, ale myślę, że Quagga ustawia metrykę jądra na stałą wartość.
jch
Chcę tylko wspomnieć, że nie dotyczy to mostów ethernetowych, na przykład dwie identyczne trasy przez różne urządzenia o tej samej charakterystyce nadal powodują nieprawidłowe przekierowanie ruchu przez dłuższy i niepoprawny link.
Areeb Soo Yasir
9

Linux zapewnia szereg narzędzi do elastycznego wyboru routingu.

Pojedyncza tabela routingu

W najprostszym przypadku jest tylko jedna tabela routingu jądra i brak tras z atrybutem SRC. Ta tabela zawiera szereg tras, które zostały tam umieszczone ręcznie ( ip route add), przez demona DHCP lub demony routingu. W takim przypadku jądro wybiera:

  • najbardziej konkretna trasa;
  • jeśli istnieje wiele równorzędnych tras, ta z najmniejszą charakterystyką jądra.

Zauważ, że metryka jądra (wyświetlana przez ip route show) jest wybierana przez demona routingu i niekoniecznie jest związana z metryką konkretnego protokołu routingu. Na przykład Quagga używa tej samej metryki dla wszystkich tras instalowanych w jądrze, niezależnie od metryki protokołu.

Trasy specyficzne dla źródła

Linux obsługuje także trasy z atrybutem SRC, które pasują tylko do pakietów o danym adresie źródłowym. SRC działa tylko dla IPv6 i do niedawna był błędny (3.11, jeśli pamięć służy); Nie polecam go używać, chyba że wiesz, co robisz.

Wiele tabel routingu

Jeśli potrzebujesz większej elastyczności niż powyższa, musisz grać z wieloma stołami routingu i pisać reguły, aby wybrać jeden konkretny stół routingu dla każdego pakietu. Powszechną techniką jest wysyłanie na adres źródłowy w celu symulacji tras specyficznych dla źródła. Inną techniką jest uruchamianie każdego demona routingu we własnej tablicy routingu i symulowanie „odległości administracyjnej” firmy Cisco. Wszystko to opisano szczegółowo w rozdziale 4 LARTC .

jch
źródło
Nie to srcrobi atrybut. Będziesz chciał przeczytać man ip-routelub inne dokumenty. I działa z IPv4. Używam go, aby uzyskać cały ruch, w tym ruch routera, przez pojedynczy tunel IPSec typu net-to-net.
Zan Lynx,
1
Ten RTA_SRCatrybut działa dokładnie tak, jak powiedziałem; można uzyskać do niego dostęp za pomocą fromopcji ippolecenia. Opcja ippolecenia srcustawia RTA_PREFSRCatrybut, który opisujesz.
jch