Dydaktyka:
FeedbackTo jest stara wersja strony!
Trasowanie (routing) – wyznaczenie dalszej drogi, którą zostanie wysłany pakiet. Jest wykonywane na warstwie sieci.
Na każdym urządzeniu wyznaczany jest adres IP następnego skoku i interface którym pakiet zostanie wysłany (nigdy cała trasa).
Urządzenia podejmują decyzję na podstawie tablicy tras (routing table, http://en.wikipedia.org/wiki/Routing_table).
Tablica routingu - lista znanych sieci i tras do nich.
Wpisy w tablicy definiują przynajmniej:
Schemat wyboru trasy:
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
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
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ą.
Czasam 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
Sposoby uzyskiwania informacji o trasach:
Protokoły trasowania można podzielić ze względu na obszar działania:
albo ze względu na sposób działania:
Narzędzia route
(net-tools) i ip route
(iproute2)
Wypisanie trasy:
route
ip route [list/show]
Sprawdzenie adresu następnego skoku do podanego adresu docelowego:
ip route get <addr>
/ # 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
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
sysctl -a -r 'ip.*\.forwarding'
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
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
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
route
route print
route add <SIEĆ> mask <MASKA> <NEXT_HOP>
(np. route add 192.168.1.0 mask 255.255.255.0 10.0.0.1
)route delete <SIEĆ>
(uwaga! jeśli jest wiele tras do tego samego adresu sieci z różnymi maskami – wszystkie będą usunięte!)tracert
1
typu DWORD do HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter