L'encaminament és el mecanisme pel qual en una xarxa els paquets es fan arribar d'un origen a una destinació seguint un camí o ruta concreta. Cada node de la xarxa, quan rep un paquet a de prendre una decisió de que fer amb aquest paquet:
Els routers o encaminadors són els dispositius/nodes de xarxa que s'encarreguen de l'encaminament a nivell de xarxa.
L'encaminament és una funció típica en les xarxes WAN ja que a diferència de les xarxes LAN, el medi o canal de comunicació no és compartit sinó que s'utilitzen enllaços punt a punt (PPP) on cada node de la xarxa esdevé en un router o encaminador.
L'encaminament pot ser estàtic o dinàmic, en tots dos casos s'utilitzin taules de rutes, és a dir una base de dades composta per una taula on a cada fila és defineix una ruta possible. En el cas d'encaminament estàtic aquestes taules només són canviades pels administradors dels encaminadors i en el cas dinàmic les taules es poden modificar segons canvis en l'entorn (per exemple un encaminador pot modificar la seva taula de rutes de forma automàtica segons les indicacions d'un altre encaminador de la xarxa).
L'encaminament en xarxes petites normalment es fa salt a salt Hop by Hop utilitzant configuració estàtica, és a dir, cada encaminador només decideix quin és el següent pas en la ruta d'un paquet, deixant la resta de passos per als encaminador subsegüents. Podem veure un exemple d'encaminament salt a salt:
En xarxes més grans i amb topologies complexes es fa necessari utilitzar mecanismes més complexes basats en encaminament dinàmic.
En una xarxa podem identificar dos tipus de nodes (entenem com a node un dispositiu que està connectat a la xarxa):
D'encaminadors hi ha de múltiples tipus depenent del tipus de xarxa. Per exemple la xarxa telefònica commutada o RTC també utilitza encaminadors. En aquest article ens centrarem en les xarxes IP.
L'arquitectura bàsica d'un encaminador és:
El protocol IP es va dissenyar per tal d'interconnectar xarxes heterogènies és a dir que es poden connectar diferents tipus de xarxes de nivell 2 tot i que el més habitual actualment és Ethernet. Un router té dues o més interfícies connectades a xarxes diferents. Físicament, les interfícies de xarxa (NIC) estan formades per targes de comunicació que permeten transportar o rebre informació a través duna xarxa física específica.
Quan un router rep un paquet d'una interfície segueix el procés següent:
Aquest procediment s'anomena store&forward. Les taules d'encaminament han d'estar configurades i si el router rep un paquet amb un direcció desconeguda el descarta. Si un router rep molt datagrames per una mateixa NIC, quan el buffer s'empleni comença a descartar paquets.
En aquesta wiki podeu trobar informació entre d'altres dels següents tipus de routers:
Recursos:
Normalment les rutes es classifiquen en dos tipus:
Són aquelles rutes que s'afegeixen de forma manual (per indicació de l'administrador) al sistema.
Consulteu rutes estàtiques.
Són aquelles rutes que són afegides automàticament mitjançant la intervenció d'una aplicació informàtica. En aquest cas no requereixen la intervenció d'un administrador del sistema.
Vegeu Encaminament dinàmic
La majoria de sistemes operatius i en conseqüència els encaminadors on s'instal·len aquests sistemes operatius suporten treballar amb múltiples taules de rutes. A més cal tenir en compte que poden haver diversos nivells de concreció de la taula rutes (taules en cache, taules principals, taules secundaries, taules segons el protocol d'encaminament, etc.)
En aquest apartat veurem en detall l'encaminament en sistemes operatius Linux i les taules de rutes que hi intervenen. L'encaminament en aquests tipus de sistemes està integrat en el nucli (kernel) del sistema.
NOTA: Consulteu Encaminament a routerOS per veure un exemple en un altre SO (tingueu en compte però que realment la base és un Linux. També podeu consultar Encaminament dinàmic i protocols com OSPF o BGP per tal de saber com aquestes protocols de nivell d'aplicació poden afectar les taules de rutes del nucli del sistema operatiu)
El primer que cal tenir en compte és que el suport per a l'encaminament en sistemes operatius Linux ve incorporat al nucli del sistema (no cal instal·lar cap aplicació). A més cal tenir en compte que des dels nuclis Linux 2.2 es suporten múltiples taules de rutes:
[email protected]:~$ cat /etc/iproute2/rt_tables # # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep [email protected]:~$ sudo ip route show table 255 -->Mostra la taula de rutes local broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1 local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1 broadcast 192.168.204.0 dev eth0 proto kernel scope link src 192.168.204.212 local 192.168.204.212 dev eth0 proto kernel scope host src 192.168.204.212 broadcast 192.168.204.255 dev eth0 proto kernel scope link src 192.168.204.212 [email protected]:~$ sudo ip route show table main --> mostra la taula de rutes principal default via 192.168.204.1 dev eth0 proto static 169.254.0.0/16 dev eth0 scope link metric 1000 192.168.204.0/24 dev eth0 proto kernel scope link src 192.168.204.212 metric 1
Com ens mostra el fitxer rt_tables. podem fer servir de la 1 a la 252 per crear les noetres taules de rutes
Aquest sistema de múltiples taules de rutes proveïx d'una infraestructura molt flexible i potent per a implementar Policy routing i configuracions avançades d'encaminament.
NOTA: Cal tenir en compte que configuracions avançades d'encaminament com per exemple l'encaminament dinàmic utilitzarà aplicacions d'usuari per tal de modificar les taules de rutes del nucli del sistema. Per exemple amb quagga podeu configurar BGP per tal que els encaminadors veins puguin notificar al vostre router Linux l'existència de ruter que finalment seran incorporades a les rutes principals del sistema (les que es troben al nucli)
Si tenim tantes taules possibles, aleshores quin és el sistema per escollir la ruta adequada? Linux utilitza la routing policy database (RPDB) com a font de dades per a escollir la ruta correcta. Per tal de configurar aquesta base de dades podeu utilitzar l'ordre ip, més concretament les subordres ip route i ip rule.
Cada taula de rutes pot contenir un nombre arbitrari de entrades cadascuna de les quals ha de tenir la següent informació:
Scope | Descripció |
---|---|
global | L'adreça IP és vàlida arreu (normalment a tot Internet) |
site | L'adreça IP o ruta només es vàlida en una xarxa concreta (IPv6) |
link | L'adreça IP o ruta només es vàlida per aquest dispositiu. |
host | L'adreça IP o ruta només es vàlida en la màquina local |
Els podeu trobar al fitxer /etc/iproute2/rt_scopes
$ cat /etc/iproute2/rt_scopes # # reserved values # 0 global 255 nowhere 254 host 253 link # # pseudo-reserved # 200 site
NOTA: Altres sistemes operatius defineixen àmbits similars. Consulteu per exemple l' scope attribute a routerOS
IMPORTANT: Tingueu en compte que és possible tenir a una mateixa taula de rutes múltiples rutes a la mateixa destinació si és per a diferents tipus de serveis (ToS) o s'aplica a diferents interfícies de xarxa
Al nucli de Linux cada taula de rutes té un número entre 0 i 255. Les dos taules més utilitzades són:
255 --> Taula de rutes local 254 --> Taula de rutes principal
Es pot fer referència a una taula de rutes pel seu número o pel seu nom. Els noms de les taules s'especifiquen al fitxer:
$ cat /etc/iproute2/rt_tables # # reserved values # 255 local 254 main 253 default 0 unspec # #local # #1 inr.ruhep
Per exemple per posar el nom taula1 a la taula 100 s'afegeix la línia:
100 taula1
Routing policy o política de rutes o encaminament ([1]) permet establir diferents polítiques segons certs criteris (segons l'usuari, la IP d'origen...). La base de dades de polítiques de rutes (routing policy database) permet tenir tenir diferents conjunts de taules de rutes. Quan el nucli del sistema operatiu (kernel) ha de prendre un decisió de rutes consulta les taules de rutes. Per defecte hi ha 3 normes:
$ ip rule list 0: from all lookup local 32766: from all lookup main 32767: from all lookup default
NOTA: La majoria de nuclis ja ho tenen activat però per poder fer routing policy cal compilar el nucli amb les opcions "IP: advanced router" i "IP: policy routing" activades
NOTA: L'ordre route només modifica les taules main i local, que també és el que fa per defecte l'ordre ip si no s'indica cap taula especifica
L'ordre ip rule list llista la prioritat de totes les normes. Totes les normes s'apliquen a tots els paquets ('from all'). La taula main és la que ens mostra per defecte l'ordre route i podeu observar que hi ha dues taules noves:
Amb l'ordre ip podem implementar polítiques de rutes, creant normes que s'apliquin a taules diferents a les per defecte, és a dir aquests polítiques sobreescriuen la política per defecte en certes situacions.
Les trobareu al fitxer /etc/iproute2/rt_tables
cat /etc/iproute2/rt_tables # # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep
NOTA: rt és routing
Les diferents taules les podeu mostrar amb l'ordre ip route show. Per exemple per mostrar la taula local:
$ ip route show table local broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1 broadcast 192.168.111.255 dev wlan0 proto kernel scope link src 192.168.111.29 local 192.168.111.29 dev wlan0 proto kernel scope host src 192.168.111.29 broadcast 192.168.111.0 dev wlan0 proto kernel scope link src 192.168.111.29 broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1 local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
Els dos primers camps són de tipus broadcast. El primer camp:
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
Configura les adreces de broadcast per al dispositiu de looback. Aquest tipus de configuració és normativa i la trobareu a totes les màquines on proveu l'ordre, ja que l'adreça 127.255.255.255 és una IP reservada per al broadcast de les interfícies loopback
La segona línia és especifica de la màquina on s'ha executat ja que és una màquina amb la IP i màscara: 192.168.111.29/24:
broadcast 192.168.111.255 dev wlan0 proto kernel scope link src 192.168.111.29
Similar a la primera línia però aquesta configura l'adreça de broadcast de la interfície wlan0.
La següent ruta és de tipus local i es la ruta cap a l'adreça IP de la interfície wlan0 (fixeu-vos que té un scope host, és a dir només aplicable en la màquina). Aquesta ruta no s'afegeix mai de forma explicita sinó que es afegida automàticament pel kernel al configurar i activar la interfície de xarxa (p. ex. amb l'ordre ifconfig)
Les dos següents línies:
broadcast 192.168.111.0 dev wlan0 proto kernel scope link src 192.168.111.29 broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
I les últimes línies són la configuració de la interfície loopback:
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
Observeu com les adreces de xarxa i de broadcast tenen totes un scope de tipus link, és a dir són aplicables per a tots els dispositius connectats al mateix segment de xarxa.
Finalment observeu el camp final:
src 127.0.0.1
o
src 192.168.111.29
Això indica al sistema quina IP utilitzar com a IP d'origen per als paquets que surtin per la interfície de xarxa.
La taula principal la podeu consultar amb (similar a l'ordre route):
$ ip route show table main 192.168.111.0/24 dev wlan0 proto kernel scope link src 192.168.111.29 metric 2 169.254.0.0/16 dev wlan0 scope link metric 1000 192.168.0.0/16 via 192.168.111.100 dev wlan0 10.0.0.0/8 via 192.168.111.100 dev wlan0 default via 192.168.111.1 dev wlan0 proto static
Com podeu veure aquí totes les entrades són de tipus unicast, excepte l'entrada del gateway per defecte.
$ sudo ip route show table default
$ sudo ip route show table unspec 192.168.111.0/24 dev wlan0 proto kernel scope link src 192.168.111.29 metric 2 169.254.0.0/16 dev wlan0 scope link metric 1000 192.168.0.0/16 via 192.168.111.100 dev wlan0 10.0.0.0/8 via 192.168.111.100 dev wlan0 default via 192.168.111.1 dev wlan0 proto static broadcast 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1 broadcast 192.168.111.255 dev wlan0 table local proto kernel scope link src 192.168.111.29 local 192.168.111.29 dev wlan0 table local proto kernel scope host src 192.168.111.29 broadcast 192.168.111.0 dev wlan0 table local proto kernel scope link src 192.168.111.29 broadcast 127.0.0.0 dev lo table local proto kernel scope link src 127.0.0.1 local 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1 local 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1 fe80::/64 dev wlan0 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0 unreachable default dev lo table unspec proto kernel metric -1 error -101 hoplimit 255 local ::1 via :: dev lo table local proto none metric 0 mtu 16436 rtt 0.00ms rttvar 0.00ms cwnd 3 advmss 16376 hoplimit 0 local fe80::21f:3cff:fe52:79c0 via :: dev lo table local proto none metric 0 mtu 16436 advmss 16376 hoplimit 0 ff00::/8 dev wlan0 table local metric 256 mtu 1500 advmss 1440 hoplimit 0 unreachable default dev lo table unspec proto kernel metric -1 error -101 hoplimit 255
o altres taules les consultareu indicant el número de taula:
$ sudo ip route show table 255 $ sudo ip route show table 254 $ sudo ip route show table 253 $ sudo ip route show table 0
Vegeu també rtmon
La memòria cau d'encaminament o aka routing cache o Forwarding Information Base (FIB). La seva funció és emmagatzemaar les entrades de rutes utilitzades recentment. Es tracta d'una taula Hash i es consulta abans que les taules de rutes. Si es troba una coincidència a la cache la ruta s'aplica automàticament i es deixa de provar la resta d'opcions de la resta de rutes i taules de rutes.
Quan es fa un canvi a les rutes no s'apliquen automàticament per culpa de la memòria cau. Es poden aplicar els canvis fent un flush.
$ sudo ip route flush cache
La memòria cau es pot consultar amb:
$ sudo ip route show cache
Les claus que es troben a la taula hash són:
Els següents atributs seran emmagatzemats per cada entrada al cache de la taula de rutes:.
Recursos:
Típicament la selecció d'una ruta en sistemes "tradicionals" o poc complexes és realitza en base a un criteri hop-by-hop (salt a salt) i segons la adreça de destinació del paquet. El criteri salt a salt és aquell que només ens indica la pròxima màquina/router del camí que ha de seguir el paquet i aquesta màquina normalment és escollida segons la IP de destinació del paquet.
La majoria de sistemes Linux funcionen com a hosts o estacions de treball i no com a gateways i només solen tenir dos rutes:
Però és possible tenir configuracions més complexes i per això el algorisme de selecció de rutes de Linux permet tant escenaris simples com escenaris complexes.
El algorisme és el següent:
[email protected]:~$ sudo ip rule show 0: from all lookup local 32766: from all lookup main 32767: from all lookup default
[email protected]:~$ sudo route add -net 192.168.50.0 netmask 255.255.255.0 gw 192.168.204.1 [email protected]:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.204.1 0.0.0.0 UG 0 0 0 eth3 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth3 192.168.50.0 192.168.204.1 255.255.255.0 UG 0 0 0 eth3 192.168.204.0 0.0.0.0 255.255.255.0 U 1 0 0 eth3 [email protected]:~$ sudo route add default gw 192.168.204.1 [email protected]:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.204.1 0.0.0.0 UG 0 0 0 eth3 0.0.0.0 192.168.204.1 0.0.0.0 UG 0 0 0 eth3 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth3 192.168.50.0 192.168.204.1 255.255.255.0 UG 0 0 0 eth3 192.168.204.0 0.0.0.0 255.255.255.0 U 1 0 0 eth3 [email protected]:~$ sudo route add -net 192.168.50.128 netmask 255.255.255.128 gw 192.168.204.1 [email protected]:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.204.1 0.0.0.0 UG 0 0 0 eth3 0.0.0.0 192.168.204.1 0.0.0.0 UG 0 0 0 eth3 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth3 192.168.50.0 192.168.204.1 255.255.255.0 UG 0 0 0 eth3 192.168.50.128 192.168.204.1 255.255.255.128 UG 0 0 0 eth3 192.168.204.0 0.0.0.0 255.255.255.0 U 1 0 0 eth3
Les rutes en general es configuren amb l'ordre ip route o amb route (només la taula principal).
La següent taula mostra les claus que s'utilitzen per als criteris de cerca:
route cache | RPDB 2 | route table |
---|---|---|
destination | source | destination |
ToS | ToS | scope |
fwmark | fwmark | oif |
iif | iif |
La política per defecte instal·lada a un sistema és:
$ ip rule show 0: from all lookup local 32766: from all lookup main 32767: from all lookup 253
És a dir la primera taula en aplicar-se és la taula de rutes local. Després s'aplica la taula de rutes principal i finalment la taula de rutes 253 que és la taula de rutes per defecte (la qual normalment està buida).
IMPORTANT: Un error habitual és oblidar-se de que el protocol IP és un protocol sense estat. Cal tenir el compte tant els paquets d'entrada com els de sortida
Recursos:
SNAT (Source NAT) o també conegut com masquerade (cal tenir en compte però que no és exactament el mateix en tallafocs com iptables) s'utilitza molt en router/encaminadors per tal de permetre que un conjunt de màquines en una xarxa privada és puguin compartir a una xarxa pública (sovint Internet) compartint una sola connexió.
En una xarxa domèstica o xarxa SoHo (Small Office Home Office) normalment es disposa d'un sola connexió cap a Internet (típicament - --acacha 15:37, 18 feb 2010 (UTC) - una línia ADSL). L'encaminador (p. ex. Router ADSL) que ens permet connectar-nos a Internet té com a mínim dos interfícies de xarxa:
Les màquines de la xarxa privada es connecten a Internet "compartint la connexió Internet". En certa manera l'única màquina que està realment connectada a Internet de tota la xarxa és el gateway. Per tal que això sigui possible, cada paquet que passa pel router és obert i es modifica la IP d'origen. Hi ha un procés anomenat Connection Tracking que permet identificar quins paquets dels que retornen al router són respostes a peticions dels clients de la xarxa LAN. Aquest procés permet retornar els paquets a la màquina de la xarxa que els va demanar.
NOTA: Cal tenir en compte que el canvi de la IP és fa després de les decisions de Rutes, en terminologia iptables: POSTROUTING per tal de no interferir en la presa de decisions de rutes.
Consulteu:
Iptables#SNAT.2FMaSquerade_amb_iptables
Es poden connectar màquines de diferents xarxes configurant les taules de rutes del encaminadors que formen part d'un camí o ruta per Internet.
NOTA: Cal tenir en compte que la majoria d'Encaminador Soho només tenen dos rutes configurades: la de la xarxa local a la que estan connectats i el gateway per defecte er tal de sortir cap a Internet.
Suposeu la següent xarxa:
192.168.0.0/24 ---> Encaminador 1 ---> 192.168.1.0/24 ---> Router ADSL --> Internet
Molt possiblement el router ADSL només coneix les rutes per arribar a Internet i a la xarxa local. Si volem que un paquet que surti o passi (forwarding) pel router sàìga arribar a la xarxa 192.168.0.0/24 cal configurar una ruta. Es pot configurar una ruta estàtica de la següent manera:
$ sudo route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.1.100
On suposem que la IP de l'Encaminador 1 és 192.168.1.100.
NOTA: Els encaminadors tenen múltiples IP. Al indicar un gateway cal indicar sempre la IP que correspon al segment de xarxa que estem configurant