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.
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ę:
- cel – sieć docelowa (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 interfejs wyjściowy (eth1, wlan0):
- dla sieci bezpośrednio podłączonych podaje się tylko urządzenie,
- w każdym innym przypadku podaje się adres następnego skoku, czyli adres bezpośrednio połączonego urządzenia któremu przekazać wiadomość od przesłania dalej,
- metryka – koszt wysłania daną trasą pakietu, używany do porównywania tras do tego samego celu (metryka to wartość liczbowa, np. 0, 1, 10, 679842).
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:
- 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
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ń:
traceroute {-I|-T} <cel>
Z uwagi na firewall Politechniki proszę używać opcji-Ilub-T, która go skutecznie omijamtr <cel>
Zauważ, że urządzenia na trasie mogą:
- przekazywać dalej dane, ale nie odpowiadać na próbę zbadania trasy (np. mieć tak ustawiony firewall),
- mieć źle skonfigurowaną tablicę tras, przez co nie wiedzą gdzie wysłać odpowiedź na próbę zbadania 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):
ip [-6] route [list|show]
np.ip routeroute [-6](komenda ze starszej paczki narzędzi –net-tools– tej z której jestifconfig)ip route show table allpokaże wszystkie trasy naraz
Wyświetlenie adresu następnego skoku do podanego adresu docelowego na podstawie skonfigurowanej tablicy tras:
ip route get <addr>
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
- 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!)
- Sprawdzenie trasy:
tracert - Włączenie ruchu przechodzącego:
- Wpisanie wartości
1typu DWORD doHKLM\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")