===== Wstęp =====
/ # ip l
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP mode DEFAULT group default qlen 1000
link/ether 5c:f9:dd:78:3d:88 brd ff:ff:ff:ff:ff:ff
3: p4p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 90:e2:ba:1a:4d:48 brd ff:ff:ff:ff:ff:ff
5: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 08:ed:b9:4c:31:8b brd ff:ff:ff:ff:ff:ff
/ # ifconfig -a
em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 5c:f9:dd:78:3d:88 txqueuelen 1000 (Ethernet)
RX packets 2702 bytes 355076 (346.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 523 bytes 53668 (52.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 20 memory 0xddf00000-ddf20000
p4p1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.2 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::92e2:baff:fe1a:4d48 prefixlen 64 scopeid 0x20<link>
ether 90:e2:ba:1a:4d:48 txqueuelen 1000 (Ethernet)
RX packets 293 bytes 60122 (58.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 286 bytes 26478 (25.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device memory 0xdd420000-dd43ffff
wlan0: flags=4098<BROADCAST,MULTICAST> mtu 1500
ether 08:ed:b9:4c:31:8b txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
++++
==== 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ą [[https://en.wikipedia.org/wiki/Network_segment|segment sieci]]
nazywany [[https://pl.wikipedia.org/wiki/Domena_rozg%C5%82oszeniowa|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 ====
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
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
default via 150.254.44.1 dev wlan0 default via 150.254.130.42 dev eth0
/ # traceroute -T www.gov.pl traceroute to www.gov.pl (185.32.48.49), 30 hops max, 60 byte packets 1 150.254.32.65 (150.254.32.65) 0.677 ms 0.461 ms 0.523 ms 2 150.254.30.129 (150.254.30.129) 0.565 ms 0.553 ms 0.542 ms 3 hellfire.put.poznan.pl (150.254.6.36) 0.915 ms * 0.892 ms 4 PUTNET-BGP-P.put.poznan.pl (150.254.4.66) 0.700 ms 0.606 ms 1.645 ms 5 237.14.119.185-rev.hti.pl (185.119.14.237) 1.078 ms 0.774 ms 1.051 ms 6 088156078001.p2p.business.static.vectranet.pl (88.156.78.1) 7.493 ms 6.434 ms 6.538 ms 7 exatel.tpix.pl (195.149.232.45) 23.117 ms 22.719 ms 22.763 ms 8 88.220.42.166 (88.220.42.166) 7.340 ms 7.523 ms 7.495 ms 9 * * * 10 100.90.0.6 (100.90.0.6) 7.943 ms 7.506 ms 8.292 ms 11 185.32.48.49 (185.32.48.49) 7.623 ms 7.725 ms 7.957 ms / # traceroute poznan.pl traceroute to poznan.pl (150.254.186.176), 30 hops max, 60 byte packets 1 150.254.32.65 (150.254.32.65) 0.729 ms 0.565 ms 0.654 ms 2 150.254.30.129 (150.254.30.129) 0.577 ms 0.614 ms 0.596 ms 3 hellfire.put.poznan.pl (150.254.6.36) 1.528 ms 0.909 ms 0.595 ms 4 PUTNET-BGP-P.put.poznan.pl (150.254.4.66) 18.596 ms 18.314 ms 18.297 ms 5 mx-pp-wilda-irb-1.man.poznan.pl (150.254.163.29) 1.206 ms 1.243 ms 1.171 ms 6 150.254.249.66 (150.254.249.66) 1.485 ms 0.921 ms 1.540 ms 7 * * * 8 * * * 9 * * * ...++++ ===== 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 [[https://docs.kernel.org/networking/ip-sysctl.html|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 route'' * ''route [-6]'' (komenda ze starszej paczki narzędzi – ''net-tools'' – tej z której jest ''ifconfig'') * ''ip route show table all'' pokaże wszystkie trasy naraz Wyświetlenie adresu następnego skoku do podanego adresu docelowego na podstawie skonfigurowanej tablicy tras: * ''ip route get
/ # ip route default via 10.0.1.2 dev br0 proto dhcp src 10.0.1.3 metric 3 10.0.0.0/24 via 10.0.1.1 dev br0 proto dhcp src 10.0.1.3 metric 3 10.0.1.0/24 dev br0 proto dhcp scope link src 10.0.1.3 metric 3 10.0.2.0/24 via 10.0.1.254 dev br0 10.0.3.0/24 via 10.0.1.254 dev br0 metric 200 mtu 1480 blackhole 10.0.4.0/24 / # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.1.2 0.0.0.0 UG 3 0 0 br0 10.0.0.0 10.0.1.1 255.255.255.0 UG 3 0 0 br0 10.0.1.0 0.0.0.0 255.255.255.0 U 3 0 0 br0 10.0.2.0 10.0.1.254 255.255.255.0 UG 0 0 0 br0 10.0.3.0 10.0.1.254 255.255.255.0 UG 200 0 0 br0 10.0.4.0 0.0.0.0 255.255.255.0 U 0 0 0 * / # ip route get 10.0.1.2 10.0.1.2 dev br0 src 10.0.1.3 uid 1000 cache / # ip route get 10.0.0.1 10.0.0.1 via 10.0.1.1 dev br0 src 10.0.1.3 uid 1000 cache / # ip route get 150.254.32.129 150.254.32.129 via 10.0.1.2 dev br0 src 10.0.1.3 uid 1000 cache / # ip route get 10.0.3.3 10.0.3.3 via 10.0.1.254 dev br0 src 10.0.1.3 uid 1000 cache mtu 1480++++ ==== 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 ===== [[https://www.wireshark.org|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 ''[[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/route_ws2008|route]]'' (uwaga, wsparcie tylko dla IPv4) * Wyświetlenie tablicy tras ''route print'' * Dodanie trasy: ''route add