Table of Contents

Wstęp

Do budowy sieci lokalnych (ale nie tylko) używa się głównie dwóch typów urządzeń: przełączników (ang. switch) i trasowników (ang. router).

Dwa urządzenia połączone ze sobą kablem lub połączone za pośrednictwem samych switchy mogą wysłać bezpośrednio do siebie ramki ethernetowe.

Jeżeli na ścieżce między urządzeniem źródłowym SRC a urządzeniem docelowym DST jest router R, to urządzenie SRC nie może wysyłać ramki ethernetowej do urządzenia DST. Zamiast tego, SRC może wysłać ramkę ethernetową do routera R, który patrząc na dane zawarte w ramce (zwykle adresy IP) prześle ją dalej do urządzenia DST.

Adresy MAC

Do adresowania ramek ethernetowych – wiadomości przesyłanych między urządzeniami bezpośrednio połączonymi lub połączonym tylko switchami – używa się adresów MAC (adresów fizycznych).
Adres MAC ma 48 bitów i jest zapisywany szesnastkowo, w 6 grupach po 8 bajtów oddzielonych dwukropkiem.
Przykład adresu: 5c:f9:dd:78:3d:88.

Adresy MAC są wykorzystywane też w innych sieciach niż Ethernet – przykładowo są tak samo używane w sieciach Wi-Fi.

Unikalne adresy MAC

Adres MAC używany domyślnie (tzn. używany jeśli administrator nie wybierze innego) jest ustawiany w nienadpisywalnej pamięci karty sieciowej przez jej producenta.
Taki adres MAC jest podzielony na dwie części: pierwsza połowa to identyfikator producenta (OUI), druga połowa to numer karty.
Producenci sprzętu muszą wykupić pulę adresów. Lista zajętych początków adresów jest dostępna publicznie, razem z informacją kto ma który OUI.

System operacyjny musi sam wpisać adres MAC do każdej ramki, adres MAC używany przez kartę można zmienić na inny.

Pozostałe adresy MAC

Adresy MAC z ustawionym bitem 0x01 w pierwszym bloku to adresy multicastowe (i adres rozgłoszeniowy, ff:ff:ff:ff:ff:ff).
Adresy użyte przez IPv4 do multicastu zaczynają się od 01:00:5e:…, a IPv6 od 33:33:…

Adresy MAC z ustawionym bitem 0x02 w pierwszym bloku to adresy lokalnie administrowane (nieunikalne). Można je nadawać np. urządzeniom wirtualnym.

Wyświetlanie / zmiana adresów MAC

odczyt adresów MAC zmiana adresu MAC
ip link [show dev eth0] ip link set dev eth0 address 12:34:56:78:90:ab
ifconfig [eth0] ifconfig eth0 hw ether 12:34:56:78:90:ab

Większość sterowników kart pozwala zmieniać MAC tylko na wyłączonych kartach.

Przykłady poleceń wyświetlających adres MAC:

Podsieci i adresy IP a switche/routery

Urządzenia połączone ze sobą kablem lub połączone za pośrednictwem switchy mogą wysyłać do siebie wiadomości bezpośrednio, więc nadaje im się adresy z tej samej podsieci IP.

Połączone ze sobą bezpośrednio switche razem z bezpośrednio połączonymi do tych switchy urządzeniami tworzą segment sieci nazywany domeną rozgłoszeniową.
Nadanie adresów IP z tej samej podsieci na urządzeniach podłączonych do różnych takich segmentów sieci jest nieprawidłową konfiguracją!
Komunikacje między takimi segmentami (domenami rozgłoszeniowymi) realizują routery.

Trasy

Spójrz na sieć z ilustracji. Zauważ, że cokolwiek PC1 chce przesłać przez sieć, może przesłać jedynie kablem do urządzenia R1 – bo tylko takie połączenie ma.
Ale co z PC2? Jeżeli chce wysłać dane do PC1 albo do PC3, to skąd ma wiedzieć czy przesłać je kablem "w lewo" czy "w prawo"?
I skąd ma wiedzieć czy podać te dane do przekazania dalej urządzeniu R1 czy R2 (na "lewym" kablu), bądź R3 czy R4 (na "prawym" kablu)?
Wszystko to musi ustawić administrator tworząc tablicę tras.

Urządzenia podejmują decyzję dokąd dalej wysłać pakiet na podstawie tablicy tras (routing table).
Taką 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 które określają do jakich adresów IP ten komputer zna drogę i wskazuje jak/którędy można się do tych adresów dostać.
W tablicy tras są zarówno informacje o adresach IP z którymi urządzenie może się bezpośrednio komunikować (trasy bezpośrednie), jak i informacje o adresach do których można się dostać tylko za pośrednictwem innych urządzeń.

Na każdy wpis w tablicy tras składa się:

Zwykle definiuje się w tablicy tras też 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

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

Trasowanie

Trasowanie (routing) to wyznaczenie następnego urządzenia do którego zostanie przesłana wiadomość kierowana pod wskazany w tej wiadomości docelowy adres IP.
Na każdym kolejnym urządzeniu wyznaczany jest adres IP następnego skoku i interfejs którym pakiet zostanie wysłany (nigdy cała trasa).

Schemat wyboru trasy na podstawie tablicy tras:

  1. 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
  2. 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
  3. 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

Sprawdzanie trasy

Do sprawdzania trasy którą idą dane do wskazanego adresu IP (czy nazwy domenowej), czyli do sprwdzenia przez jakie routery IP przechodzą dane na drodze do podanego celu, można użyć poleceń:

Zauważ, że urządzenia na trasie mogą:

Przykład badania trasy:

Polityka systemu względem ruchu przechodzącego

Domyślnie Linux nie pozwala na przekazywanie pakietów które przyszły na jednym interfejsie do wysłania innym interfejsem (ang. packet forwarding).
Żeby zmienić to zachowanie, czyli pozwolić Linuksowi pracować jako router, należy zmienić parametry jądra wykonując komendy:
sysctl net.ipv4.conf.all.forwarding=1
sysctl net.ipv6.conf.all.forwarding=1

Komenda sysctl zmienia opcje jądra systemu operacyjnego. Więcej informacji znajdziesz w dokumentacji jądra.

Zamiast komendy sysctl można też skorzystać z katalogu /proc:
echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
dla IPv4 będzie też działać starszy plik: echo 1 > /proc/sys/net/ipv4/ip_forward

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

Trasowanie statyczne w Linuksie

Wyświetlanie tablic routingu w systemie Linux

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

Wyświetlenie adresu następnego skoku do podanego adresu docelowego na podstawie skonfigurowanej tablicy tras:

Przykłady poleceń

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

Wireshark

Wireshark to narzędzie, które pozwala między innymi wyświetlić i analizować wiadomości wysłane przez karty sieciowe.
W tym celu, po uruchomieniu należy wybrać kartę i rozpocząć przechwytywanie. Następnie wyświetli się lista przechwyconych wiadomości. Zaznaczenie jednej z nich spowoduje wyświetlenie jej w postaci rozkodowanej – rozwijalnego drzewa dla każdego z kolejnych użytych na różnych warstwach sieci protokołów. Dodatkowo treści wiadomości pokazywana jest szesnastkowo.

[Ekstra] Komendy dla Windowsa