Narzędzia użytkownika

Narzędzia witryny


Pasek boczny

sk1:routing_wstep

Trasowanie – wstęp, routing statyczny w Linuksie

Routing

Trasowanie (routing) – wyznaczenie dalszej drogi, którą zostanie wysłany pakiet. Jest wykonywane na warstwie sieci.

Na każdym urządzeniu wyznaczany jest adres IP następnego skoku i interface którym pakiet zostanie wysłany (nigdy cała trasa).

Urządzenia podejmują decyzję na podstawie tablicy tras (routing table, http://en.wikipedia.org/wiki/Routing_table).

Tablica routingu - lista znanych sieci i tras do nich.
Wpisy w tablicy definiują przynajmniej:

  • cel - sieć docelową (np. 1.2.0.0/16, 192.168.2.0/24)
  • trasę - adres następnego skoku (np. 3.4.5.6, 192.168.1.1) lub/i port wyjściowy (slo1, tun2)
    • typowo podaje się tylko adres następnego skoku (czyli adres z bezpośrednio połączonej sieci)
    • dla sieci bezpośrednio podłączonych podaje się tylko urządzenie
  • metrykę - koszt wysłania daną trasą pakietu, używany do porównywania tras, (np. 0, 1, 10, 679842)
  • w routerach CISCO (na których będą kolejne zajęcia) dodatkowo parametr administrative distance (AD), który jest używany do rozstrzygania wyboru trasy jeśli więcej protokołów routingu poda trasę do tej samej sieci

Wybór trasy

Schemat wyboru trasy:

  • z tras do sieci w których znajduje się docelowy adres wybiera się trasy do sieci o najdłuższej masce, np.:
    172.21.0.0/16 via 172.16.0.16 dev eth2
    172.21.0.0/24 via 172.16.0.24 dev eth2 
    172.21.0.0/28 via 172.16.0.28 dev eth2

    pakiet kierowany do 172.21.0.15 zostanie wysłany przez 172.16.0.28, a
    pakiet kierowany do 172.21.0.55 zostanie wysłany przez 172.16.0.24

  • jeśli wybór nie jest jednoznaczny - trasa o najmniejszym koszcie, np.:
    150.254.44.0/23 dev wlan0  proto kernel  scope link  src 150.254.45.39   metric 2003
    150.254.44.0/23 dev wlan1  proto kernel  scope link  src 150.254.44.149  metric 1002

    tu zawsze wybrana jest trasa przez 150.254.44.149, jako ta o niższym koszcie

  • jeśli wybór nie jest jednoznaczny - pierwsza w tablicy.
    default via 150.254.44.1 dev wlan0
    default via 150.254.130.42 dev eth0

Zwykle definiuje się w tablicy tras trasę domyślną.
Czasam jest ona traktowana "specjalnie" – pokazywana w osobnym miejscu lub opisana jako default (zamiast adresu sieci).
Jeśli nie – do zdefiniowania trasy domyślnej używa się adresu 0.0.0.0/0

Tworzenie tablicy tras

Sposoby uzyskiwania informacji o trasach:

  • ręczna konfiguracja
  • użycie protokołów routingu

Protokoły trasowania można podzielić ze względu na obszar działania (w odniesieniu do obszarów autonomicznych (AS) [1]):

  • wewnętrzne (IGP - Interior Gateway Protocol), np. RIP, EIGRP, OSPF, IS-IS
  • zewnętrzne (EGP - Exterior Gateway Protocol) - obecnie (jedynym) używanym jest BGP

albo ze względu na sposób działania:

  • wektora odległości (distance vector), np. RIP, IGRP – wymieniają się z sąsiadami informacjami o osiągalnych sieciach; wyznaczają tylko koszty dotarcia do sieci
  • stanu łącza (link state), np. OSPF, IS-IS – wymieniają się z sąsiadami informacjami o topologii sieci; budują pełną mapę sieci
  • wektora ścieżki (path-vector), np. BGP – wymieniają się z sąsiadami pełnymi ścieżkami do każdej sieci; zbierają listę dostępnych ścieżek; algorytm używany tam gdzie sieć jest za duża by działał algorytm stanu łącza; algorytm podobny do wektora odległości, ale dużo lepiej radzi sobie ze zmianami topologii

http://en.wikipedia.org/wiki/Routing

Wyświetlanie tablic routingu w systemie Linux

Narzędzia route (net-tools) i ip route (iproute2)

Wypisanie trasy:

  • route
  • ip route [list/show]

Sprawdzenie adresu następnego skoku do podanego adresu docelowego:

  • ip route get <addr>

Przykłady poleceń

Polityka systemu względem ruchu przechodzącego

Domyślnie Linux nie pozwala na przekazywanie (forward) pakietów.
Aby zmienić to zachowanie, należy zmienić parametry jądra wykonując jedno z:

  • sysctl net.ipv4.conf.all.forwarding=1
    lista dostępnych zmiennych: sysctl -a -r 'ip.*\.forwarding'
    więcej informacji: man 8 sysctl oraz man 7 ip
  • albo starsze:
    sysctl net.ipv4.ip_forward=1

Można też skorzystać z katalogu /proc:

  • echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
  • echo 1 > /proc/sys/net/ipv4/ip_forward

Ponadto na większości produkcyjnych systemów firewall domyślnie zabrania na przepuszczanie ruchu

Narzędzia związane z trasowaniem w systemie Linux

iproute:

Dodanie trasy ip route add <addr>/<mask> [via <addr>] [dev <ifname>]
Dodanie trasy przez następny skok ip route add <addr>/<mask> via <addr>
np.: ip r add 192.168.5.0/24 via 192.168.0.254
Dodanie trasy przez urządzenie ip route add <addr>/<mask> dev <ifname>
np.: ip r add 192.168.6.0/24 dev tun0
Dodanie trasy domyślnej ip route add default via <następny skok> [dev <urządzenie>]
np.: ip r add default via 192.168.0.1
Usunięcie trasy ip route del <specyfkacja trasy>
np.: ip r del 192.168.5.0/24 via 192.168.0.254
Usunięcie całej tablicy routinug ip route flush
Uwaga! Usuwa też trasy do bezpośrednio połączonych sieci.

route:

Dodanie trasy route add [-net|-host] <cel> [netmask <maska>] [gw <brama>] [dev <ifname>] , np.
route add -net 192.168.5.0 [netmask 255.255.255.0] gw 192.168.0.254
Usunięcie trasy route del [-net|-host] <cel> [netmask <maska>] [gw <brama>] [dev <ifname>] , np.
route del -net 192.168.5.0 [netmask 255.255.255.0] gw 192.168.0.254
Dodanie trasy domyślnej route add default [gw <brama>] [dev <ifname>], np:
route add default gw 192.168.0.1
Uwaga! Starsze wersje nie znają słowa kluczowego default, trzeba ustawiać trasę do 0.0.0.0/0

Trasa może definiować jednocześnie adres następnego skoku i urządzenie.
Podanie samego urządzenia starczy tylko w specjalnych przypadkach, takich jak np. sieć bezpośrednio połączona.

Przy definiowaniu trasy można podać też inne opcje mające wpływ na wybór trasy (metric, src) jak i też na sposób wysyłania nią pakietów (np. mtu, opcje TCP).

Pomoc: man route / man ip-route

Narzędzia do sprawdzania trasy pakietu:

  • tracepath
  • traceroute (w sali lab. potrzeba przełącznika -T lub -I do ominięcia firewalla)
  • mtr

Pętle routingu (przypomnienie).

Specjalne trasy odrzucające pakiety - throw unreachable prohibit blackhole, np:
ip r a blackhole 10.0.0.0/8
ip r a unreachable 10.0.0.0/8

Slajdy

[Ekstra] Wybrane mechanizmy odrzucające nielogiczne pakiety w Linuksie

Linux, widząc pakiet wysłany z adresu A i wchodzący na interfejs If sprawdza, czy zna trasę do nadawcy A (2) i czy trasa do A jest przez interfejs If (1). Jeśli nie jest spełnione (2) lub (1), to pakiet jest odrzucany o ile zmienna jądra rp_filter ma wartość odpowiednio 2 lub 1.
Aby wyłączyć to zachowanie, należy:

sysctl net.ipv4.conf.all.rp_filter=0
sysctl net.ipv4.conf.p4p1.rp_filter=0
sysctl net.ipv4.conf.p4p2.rp_filter=0

Linux, widząc pakiet od adresu A wchodzący na interfejs I sprawdza, czy nie ma ustawionego adresu A na którymś ze swoich interfejsów (czyli: czy ktoś się pod niego nie podszywa). Jeśli tak jest, pakiet jest odrzucany o ile zmienna accept_local nie jest włączona.
Aby wyłączyć to zachowanie, należy:

sysctl net.ipv4.conf.p4p1.accept_local=1
sysctl net.ipv4.conf.p4p2.accept_local=1

Dokładny opis: https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

[Ekstra] Komendy dla Windowsa

  • Obsługa tablicy routingu – polecenie route
    • Wyświetlenie tablicy tras route print
    • Dodanie trasy: route add <SIEĆ> mask <MASKA> <NEXT_HOP> (np. route add 192.168.1.0 mask 255.255.255.0 10.0.0.1)
    • Usunięcie trasy route delete <SIEĆ> (uwaga! jeśli jest wiele tras do tego samego adresu sieci z różnymi maskami – wszystkie będą usunięte!)
  • Sprawdzenie trasy tracert
  • Włączenie ruchu przechodzącego:
    • Wpisanie wartości 1 typu DWORD do HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter
    • Podobne działanie daje udostępnienie połączenia internetowego (ppm na połączeniu sieciowym / "Właściwości" / karta "Udostępnianie" / "Zezwalaj innym użytkownikom sieci na łączenie się poprzez połączenie internetowe tego komputera")
sk1/routing_wstep.txt · ostatnio zmienione: 2019/04/08 15:03 przez jkonczak