''
++++ Przykłady poleceń |
/ # 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
++++
===== Polityka systemu względem ruchu przechodzącego =====
Domyślnie Linux **nie** pozwala na przekazywanie (forward) pakietów. \\
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''
* albo starsze: \\ ''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
===== Narzędzia związane z trasowaniem w systemie Linux =====
iproute:
| 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. |
route:
| 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 |
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).
Pomoc: ''man route'' / '' man ip-route''
Narzędzia do sprawdzania trasy pakietu:
* ''tracepath''
* ''traceroute'' (w sali lab. potrzeba przełącznika ''-T'' lub ''-I'' do ominięcia firewalla)
* ''mtr''
Pętle routingu (przypomnienie).
Specjalne 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'' \\
**[[http://www.cs.put.poznan.pl/mlibuda/routing_stat_Linux.pdf|Slajdy]]**
===== [Ekstra] Wybrane mechanizmy odrzucające nielogiczne pakiety w Linuksie =====
Linux, widząc pakiet wysłany z adresu A i wchodzący na interfejs If sprawdza, czy zna trasę do nadawcy A (2) i czy trasa do A jest przez interfejs If (1). Jeśli nie jest spełnione (2) lub (1), to pakiet jest odrzucany o ile zmienna jądra ''rp_filter'' ma wartość odpowiednio 2 lub 1.
\\
Aby wyłączyć to zachowanie, należy:
sysctl net.ipv4.conf.all.rp_filter=0
sysctl net.ipv4.conf.p4p1.rp_filter=0
sysctl net.ipv4.conf.p4p2.rp_filter=0
Linux, widząc pakiet od adresu A wchodzący na interfejs I sprawdza, czy nie ma ustawionego adresu A na którymś ze swoich interfejsów (czyli: czy ktoś się pod niego nie podszywa). Jeśli tak jest, pakiet jest odrzucany o ile zmienna ''accept_local'' nie jest włączona.\\
Aby wyłączyć to zachowanie, należy:
sysctl net.ipv4.conf.p4p1.accept_local=1
sysctl net.ipv4.conf.p4p2.accept_local=1
Dokładny opis: https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
===== [Ekstra] Komendy dla Windowsa =====
* Obsługa tablicy routingu – polecenie ''route''
* Wyświetlenie tablicy tras ''route print''
* Dodanie trasy: ''route add mask '' (np. ''route add 192.168.1.0 mask 255.255.255.0 10.0.0.1'')
* Usunięcie trasy ''route delete '' (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 ''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")