Routing statyczny ================= Internet składa się z mniejszych, połączonych ze sobą sieci komputerowych. Jak przesłać pakiet z dowolnego urządzenia w Internecie do dowolnego innego urządzenia, jeśli jego trasa przecina wiele podsieci? .. image:: _static/routing.png Rutery (urządzenia warstwy sieciowej) przesyłają pakiety między sieciami. Router posiada tablicę trasowania (*routing table*) zawierającą: * adres sieci docelowej (*destination*) i maskę podsieci (*mask*) * bramę (*gateway*) Przykładowo: ======================= ========================== =============================== destination mask gateway ======================= ========================== =============================== ``192.168.1.0`` ``255.255.255.0`` ``10.0.0.1`` ``192.168.2.0`` ``255.255.255.0`` ``10.0.0.2`` ``192.168.3.0`` ``255.255.255.0`` ``10.0.0.3`` ``192.168.4.0`` ``255.255.255.0`` ``10.0.0.4`` ``10.0.0.0`` ``255.0.0.0`` ``-`` ======================= ========================== =============================== Jeśli pakiet przychodzący do rutera ma być wysłany na adres komputera 192.168.1.42/24, to ruter określa, że ma on trafić do sieci 192.168.1.0/24 (na podstawie *destination,mask*). Wtedy ruter przesyła pakiet na adres IP 10.0.0.1 (określonmy przez *gateway*). Jeśli pakiet przychodzący do routera ma być wysłany do sieci w której router się znajduje (oznaczone **-**), to jest on rozgłoszony w odpowiedniej sieci. Uwagi: * Wybór trasy to proces wieloetapowy: dla danego pakietu, każdy kolejny ruter podejmuje niezależnie decyzję o tym, dokąd dalej ten pakiet przesłać. * Adreś źródłowy pakietu nie jest brany pod uwagę przy wyznaczaniu trasy. Typy routingu: * routing statyczny (*static routing*) -- zawartość tablicy routingu zdefiniowana przez administratora (na stałe), * routing dynamiczny (*dynamic routing*) -- tablica routingu wyznaczona jest przez protokół routingu (np. RIP, OSPF, IS-IS, IGRP) w czasie działania urządzenia. * routing sprzętowy -- realizowany przez hardware * routing programowy -- realizowany przez software Przykład -------- .. image:: _static/routing-example.png Tablice tras: R1 "" ======================= ========================== =============================== destination mask gateway ======================= ========================== =============================== ``10.0.0.0`` ``255.0.0.0`` ``-`` ``20.0.0.0`` ``255.0.0.0`` ``-`` ``30.0.0.0`` ``255.0.0.0`` ``20.0.0.2`` ``40.0.0.0`` ``255.0.0.0`` ``20.0.0.2`` ======================= ========================== =============================== R2 "" ======================= ========================== =============================== destination mask gateway ======================= ========================== =============================== ``10.0.0.0`` ``255.0.0.0`` ``20.0.0.1`` ``20.0.0.0`` ``255.0.0.0`` ``-`` ``30.0.0.0`` ``255.0.0.0`` ``-`` ``40.0.0.0`` ``255.0.0.0`` ``30.0.0.2`` ======================= ========================== =============================== R3 "" ======================= ========================== =============================== destination mask gateway ======================= ========================== =============================== ``10.0.0.0`` ``255.0.0.0`` ``30.0.0.1`` ``20.0.0.0`` ``255.0.0.0`` ``30.0.0.1`` ``30.0.0.0`` ``255.0.0.0`` ``-`` ``40.0.0.0`` ``255.0.0.0`` ``-`` ======================= ========================== =============================== Wyznaczanie trasy """"""""""""""""" Obliczanie trasy dla pakietu wysłanego z sieci ``10.0.0.0`` pod adres ``40.0.0.2``: 1. Ruter **R1** wyodrębnia z pakietu adres sieci docelowej: operacja ``AND`` na ``40.0.0.2`` i kolejnych maskach w swojej tablicy. * Dla każdego wiersza w wyniku zawsze otrzymuje ``40.0.0.0``. * Po każdym mnożeniu sprawdza, czy wynik jest równy *destination* danego wiersza. * Po pomnożeniu przez czwartą maskę wynik jest równy *destination*, więc pakiet zostaje wysłany jest pod adres ``20.0.0.2``. 2. Ruter **R2** po otrzymaniu pakietu postępuje dokładnie tak samo, jak **R1**, więc wysyła pakiet pod adres ``30.0.0.2``. 3. Ruter **R3** po otrzymaniu pakietu powtarza całą procedurę i stwierdza, że siecią docelową jest ``40.0.0.0``, czyli ta, w której sam jest obecny. Pakiet zostaje więc rozgłoszony w sieci lokalnej i odebrany przez komputer o adresie ``40.0.0.2``. Routing statyczny w Linuksie ---------------------------- Komputer może wykonywac funkcje routera, jeśli ma ustawioną tablicę routingu i włączoną funkcję przenoszenia pakietów między logicznymi interfejsami (*forwarding*). Tabela routingu """"""""""""""" Polecenie ``ip route``: * pokaż tablicę: ``ip route`` lub ``ip route show`` * pokaż tablicę dla urządzenia ``eth0``: ``ip route show dev eth0`` * dodaj trasę do sieci ``192.168.55.0/24`` przez ruter o adresie ``192.168.1.254`` dla urządzenia ``eth0``: ``ip route add 192.168.55.0/24 via 192.168.1.254 dev eth0`` * dodaj domyślną bramę dla urządzenia ``eth0``: ``ip route add default via 192.168.1.254`` * usuń trasę do sieci ``192.168.55.0/24`` dla urządzenia ``eth0``: ``ip route delete 192.168.55.0/24 dev eth0`` Forwarding """""""""" Ustawienie za pomocą pliku ``/proc/sys/net/ipv4/ip_forward``: * wartość ``1`` -- włączony forwarding * wartość ``0`` -- wyłączony forwarding Manipulacja plikiem za pomocą ``sysctl``: * wyświetl zawartość: ``sysctl net.ipv4.ip_forward`` * włącz forwarding: ``sysctl -w net.ipv4.ip_forward=1`` * wyłącz forwarding: ``sysctl -w net.ipv4.ip_forward=0`` Manipulacja plikiem: * wyświetl zawartość: ``cat /proc/sys/net/ipv4/ip_forward`` * włącz forwarding: ``echo 1 > /proc/sys/net/ipv4/ip_forward`` * wyłącz forwarding: ``echo 0 > /proc/sys/net/ipv4/ip_forward`` Ustawienie na stałe: ``/etc/sysctl.conf``