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 trasy do konkretnego adresu:
ip route get [addr]
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 od adresu A wchodzący na interfejs If sprawdza, czy zna trasę do nadawcy A (2) i czy trasa do A jest przez interfejs If (1). Następnie odrzuca pakiet jeśli zmienna jądra rp_filter
ma wartość odpowiednio 2 lub 1.
Aby wyłączyć to zachowanie, należy:
net.ipv4.conf.all.rp_filter=0 net.ipv4.conf.p4p1.rp_filter=0 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 i zmienna accept_local
jest wyłączona, pakiet jest odrzucany.
Aby wyłączyć to zachowanie, należy:
net.ipv4.conf.p4p1.accept_local=1 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