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:
Wypisanie trasy - route
/ ip route [list/show]
Sprawdzenie trasy do konkretnego adresu - ip route get [addr]
Domyślnie Linux nie pozwala na przekazywanie (forward) pakietów. Aby zmienić to zachowanie, należy wykonać:
sysctl net.ipv4.conf.all.forwarding=1
lista dostępnych zmiennych - sysctl -a -r 'net\.ipv.\.conf\..*\.forwarding'
więcej informacji - man 8 sysctl
i man 7 ip
albo starsze sysctl net.ipv4.ip_forward=1
Można też skorzystać z katalogu /proc
echo 1 > /proc/sys/net/ipv4/ip_forward
Dodatkowo na większości produkcyjnych systemów firewall domyślnie zabrania na przepuszczanie ruchu
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 |
Trasa może definiować zarówno urządzenie jak i adres następnego skoku.
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, mtu
) jak i też na sposób wysyłania nią pakietów (np. 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
(zamiast takich tras zaleca się stosowanie firewalla)
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