Narzędzia użytkownika

Narzędzia witryny


Pasek boczny


O mnie


Dydaktyka:

Feedback


bio-sk:sieci_routing

To jest stara wersja strony!


Warstwa sieci

Warstwa łącza danych zapewnia komunikację między bezpośrednio połączonymi urządzeniami.

Warstwa sieci zapewnia komunikację między dowolnymi urządzeniami.

Wiadomości na warstwie sieci nazywa się pakietami.
Urządzenia warstwy sieci to trasowniki (routery).

Protokół IPv4 i IPv6

IPv4 = Internet Protocol version 4 (RFC 791); czasami skracane do inet
IPv6 = Internet Protocol version 6 (RFC 82001)); czasami skracane do inet6

Budowa nagłówka IPv4 i IPv6:

źródło: https://www.ripe.net/support/training/material/ripe-ncc-training-material

Pole opcje w IPv4 pozwala dodawać kolejne informacje do nagłówka IPv4.
W IPv6 zamiast tego po nagłówku IPv6 może znajdować się nagłówek z kolejnymi informacjami:

Wskazanie protokołu warstwy transportu

Pole protokół w nagłówku IPv4 lub następny nagłówek w ostatnim nagłówku IPv6 wskazuje który protokół warstwy transportu jest w danych pakietu. Numery protokołów są powszechnie znanie – patrz http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml lub less /etc/protocols.

Fragmentacja

Rozmiar pakietów IP jest ograniczany przez MTU warstwy niższej. Żeby przesłać porcję danych większą niż ten maksymalny rozmiar pakietu, dane trzeba podzielić na fragmenty, przesłać każdy z nich w osobnym pakiecie i złożyć u odbiorcy.
Pakiety przenoszące fragmenty tej samej wiadomości warstwy transportu mają ten sam identyfikator i odpowiednią pozycję fragmentu (offset). Poza ostatnim, fragmenty mają we flagach ustawiony bit więcej fragmentów (MF).
W IPv4 fragmentację może wykonać każde urządzenie na drodze pakietu, w IPv6 tylko nadawca. IPv4 w polu flag ma bit zabraniający fragmentacji (DF)
Fragmentacji, o ile to możliwe, należy unikać – często prowadzi do nieoptymalnego wykorzystania sieci.

Dla przetestowania fragmentacji można wykorzystać komendę ping, dodając przełącznik ping -s <rozmiar>, np:
ping -s 5000 150.254.32.65                 ping -s 5000 2001:808:201:100::1

Ograniczanie skutków pętli na warstwie sieci

Żeby w powstałej na skutek błędnej konfiguracji sieci pakiet nie krążył w nieskończoność, każde urządzenie warstwy sieci zmniejsza o jeden wartość pola TTL / hop limit. Gdy ta wartość spadnie do 0, pakiet nie jest dalej przekazywany.

ICMP i IGMP

ICMP

Protokół IP nie przewiduje informowania nadawcy o problemach.

Funkcje diagnostyczne i kontrolne dla IP spełnia protokół ICMP (Internet Control Message Protocol). ICMP różni się w szczegółach między wersją dla IPv4 (ICMP) i dla IPv6 (ICMPv6).
ICMPv6 spełnia też dodatkowe funkcje (o których będzie osobno później).

ICMP/v6 pozwala między innymi na:

  • wysłanie informacji zwrotnej o niedostarczeniu pakietu, z podaniem powodu, np:
    • nie ma takiej sieci, komputera, programu docelowego, … (destination unreachable)
    • zabroniono fragmentacji, a pakiet był za duży żeby go przesłać dalej (packet too big)
    • pakiet zrobił za dużo skoków i skończył się TTL/hop limit (time exceeded)
  • testowanie łączności (ping – echo request i echo reply)

Aby zaobserwować komunikaty ICMP, można wykonać:

  • ping <cel>
  • traceroute [-q 1] -T <cel> (porównaj z traceroute -I <cel>)
  • ping -s 1440 2001:470:647b::1 (przed ponownym uruchomieniem wykonaj ip -6 r flush cache)
  • połączenie do nieużywanego portu, np: host pl. lab-net-1 (z lab-net)
  • połączenie do nieosiągalnego (np. nieistniejącego) adresu, np. host pl. lab-sec-33 (z lab-net)

IGMP

Do zarządzania przynależnością do grup multicastowych w IPv4 służy protokół IGMP.
W IPv6 to samo zadanie włączono w protokół ICMPv6 (pod nazwą MLD).

Używając wiadomości protokołu IGMP/ICMPv6 urządzenie można ogłosić informację że chce otrzymywać wiadomości wysłane na konkretne multicastowe adresy IP.
Odpowiednio ustawione routery mogą przekazywać dalej te informacje (i wybrane pakiety multicastowe), a switche podsłuchują (IGMP snooping) wymiany wiadomości IGMP/ICMPv6 żeby wiedzieć na które porty warto wysyłać wiadomości multicastowe.

Wyświetlenie grup do których należy komputer [IP]: netstat -g   /   ip maddr
Wyświetlenie grup do których należy komputer [MAC]: cat /proc/net/igmp i cat /proc/net/igmp6   /   ip maddr
Oczekiwanie na wiadomość multicastową na adresie IPv4 można zasymulować przez: socat udp4-recv:0,ip-add-membership=239.1.2.3:br0 -
Oczekiwanie na wiadomość multicastową na adresie IPv6 można zasymulować przez: socat udp6-recv:0,ipv6-join-group=[ff05::ace]:br0 -

Przykładowy wynik poleceń:

Trasowanie

Wstęp

Trasowanie

Zadaniem warstwy sieci jest dostarczenie danych do dowolnego wskazanego urządzenia w sieci.
Jeśli cel nie jest bezpośrednio połączony, dane (pakiety) trzeba wysłać do wybranego z bezpośrednich sąsiadów.

Zauważ że adres źródłowy i docelowy warstwy sieci (adres IP) zostaje bez zmian od źródła do celu, a adres źródłowy i docelowy warstwy łącza danych (adres MAC) jest ustawiany na nowo przez każde kolejne urządzenie.

Trasowanie (routing) to wyznaczenie następnego urządzenia do którego zostanie wysłany pakiet.
Na każdym urządzeniu wyznaczany jest adres IP następnego skoku i interfejs którym pakiet zostanie wysłany (nigdy cała trasa).

Tablica tras

Urządzenia podejmują decyzję dokąd dalej wysłać pakiet na podstawie tablicy tras (routing table).

Tablicę tras można zbudować ręcznie (trasowanie statyczne), lub skonfigurować i uruchomić protokół trasowania dynamicznego który automatycznie zbuduje taką tablicę.

Tablica tras to lista wpisów na które składają się przynajmniej:

  • cel – sieć docelową (np. 1.2.0.0/16, 192.168.2.0/24)
  • trasa – 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
  • metryka – 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

Przykład tablicy tras w Linuksie:

default          via 150.254.32.65  dev br0 proto dhcp
10.0.0.0/8       via 150.254.32.126 dev br0
10.3.0.0/16      via 150.254.32.65  dev br0
10.8.0.0/16      via 172.16.0.1     dev enp1s0 metric 100
10.8.0.0/16      via 150.254.32.88  dev br0    metric 200
150.254.32.64/26 dev br0    proto kernel scope link src 150.254.32.75
172.16.0.0/16    dev enp1s0 proto kernel scope link src 172.16.0.10
172.18.0.0/16    dev enp1s0 scope link

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ą.
Czasami 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

Trasowanie statyczne w Linuksie

Wyświetlanie tablic routingu w systemie Linux

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

Wypisanie trasy (uwaga, komendy wypisują zwykle osobno trasy do IPv4 i IPv6):

  • ip [-6] route [list|show]
  • route [-6]
  • ip route show table all       pokaże wszystkie trasy naraz

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 pakietów (packet forwarding).
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
  • 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

Komendy zmieniające trasy

iproute2

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.

net-tools

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

Komendy ustawiające trasy IPv4 i IPv6 są identyczne, przykłady są tylko dla IPv4 dla zwięzłości materiałów.

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).

W Linuksie istnieją specjalne pseudo-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

[Ekstra] Komendy dla Windowsa

  • Obsługa tablicy routingu – odwieczne polecenie route (uwaga, wsparcie tylko dla IPv4)
    • 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!)
  • Można też użyć odpowiedni cmdlet modułu NetTCPIP albo komendę netsh
  • 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")
1) Ten dokument jest trzecim z kolei RFC opisującym IPv6, pierwszy to RFC 1883
bio-sk/sieci_routing.1729773900.txt.gz · ostatnio zmienione: 2024/10/24 14:45 przez jkonczak