Routing
Fra Wikipedia, den frie encyklopedi.
Routing er å formidle protokoller mellom forskjellige nettverk. Routing skjer på lag 3, hvor man finner protokoller som IP og IPX. I kombinasjon med NAT blir routing av enkelte slurvete omtalt som å "dele internett".
| Innholdsfortegnelse |
Hvordan routing fungerer
For at routing skal ha noe for seg må man ha minst to nett adskilt av en router. Denne kan like gjerne være en dedikert router fra for eksempel Cisco (http://www.cisco.com/) eller ZyXeL (http://www.zyxel.com/) som en Linux- eller Windows-maskin. Det eneste kravet er at routeren må kjenne til begge nettene den er knyttet til, det vil si at den har en IP-adresse i hvert nett, og at den må videresende pakker for den aktuelle protokollen. For at en Linux-maskin skal route IP må ip_forward-parametret i /proc være satt:
# echo 1 > /proc/sys/net/ipv4/ip_forward
IP-protokollen har mekanismer som gjenkjenner om en IP-adresse befinner seg på et lokalt nett eller ikke (basert på nettmasken). I tilfelle IP-adressen ikke er lokal, sørger IP-protokollen for å sende den aktuelle trafikken til default gateway - eller om det er satt opp spesifikk routing, til en gitt gateway.
Eksempel på routing
Følgende eksempel viser routing i et nett hvor routeren har to nettverkskort (eth0 i 192.168.0.0/24 og eth1 i 172.30.50.0/24), hvor 10.0.0.0/8 nåes via en ny router som fins på 172.30.50.2. Nettverkene er illustrert på tegningen til høyre, og routingtabellen er hentet fra Linux-routeren nederst til venstre på tegningen.
$ /sbin/route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
172.30.50.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.0.0.0 172.30.50.2 255.0.0.0 UG 0 0 0 eth1
I kolonnen Flags ser vi at bokstaven G forekommer på to av linjene, disse indikerer routing via en gateway. Vi ser også hvilket nettverkskort trafikken går ut via for å nå den angitte gatewayen.
Hvilken vei går pakkene?
For å finne ut hvilken vei trafikken går gjennom de forskjellige routerne før de når målet kan du forsøke kommandoen traceroute. Eksemplet under viser hvilke routere som videresender en pakke fram til www.banetele.com.
$ traceroute -n www.banetele.com
traceroute to www.banetele.com (194.19.2.20), 30 hops max, 38 byte packets
1 80.232.36.129 0.750 ms 0.720 ms 0.427 ms
2 80.232.38.218 1.118 ms 1.175 ms 1.173 ms
3 80.232.38.220 1.500 ms 1.674 ms 1.432 ms
4 212.37.252.1 1.501 ms 2.301 ms 1.931 ms
5 213.236.195.141 2.751 ms 2.672 ms 2.048 ms
6 213.236.195.77 3.509 ms 3.755 ms 3.314 ms
7 193.156.90.10 226.116 ms 5.223 ms 207.781 ms
8 194.19.2.20 4.720 ms 3.902 ms 4.938 ms
Vær oppmerksom på at mange brannmurer blokkerer traceroute. Da kan verktøyet hping2 være nyttig.
Statisk og dynamisk routing
Statisk routing
Kommandoen route brukes til å opprette og fjerne statisk routing.
Opprette routing:
# route add -net 10.0.0.0 netmask 255.0.0.0 gw 172.30.50.2
Fjerne routing:
# route add -delete 10.0.0.0 netmask 255.0.0.0 gw 172.30.50.2
Dynamisk routing
I tillegg kan en router snakke med andre routere ved hjelp av routingprotokoller som RIP og OSPF for å få routingtabellen dynamisk oppdatert ut fra hva andre tilknyttede routere vet. På en Linuxrouter håndteres routingprotokoller av programvare som f.eks. Zebra eller Quagga. Kommandoen route vil vise om routen er satt dynamisk, det vil da dukke opp en D i tillegg til G i kolonnen Flags.
Feilsøking av Linuxrouter
Hvis routeren har kontakt mot ressurser på samme nettverk som hvert nettverkskort, mangler du sannsynligvis sysctl-variabelen ip_forward satt. Kommandoen under viser resultatet på en Linuxrouter hvor variabelen er satt riktig. Hvis resultatet i stedet er 0, vil ikke maskinen route trafikken.
# cat /proc/sys/net/ipv4/ip_forward
1


