IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Introducció

Xarxa WAN amb enllaços PPP

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:

  • Quedar-se el paquet quan ell és el destinatari
  • Enviar al paquet cap a un altre node veí (FORWARDING)
  • O potser eliminar el paquet per què és incorrecta.

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.

WAN3.png

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:

EnrutamentSkoleLinux.png

En xarxes més grans i amb topologies complexes es fa necessari utilitzar mecanismes més complexes basats en encaminament dinàmic.

Encaminadors

En una xarxa podem identificar dos tipus de nodes (entenem com a node un dispositiu que està connectat a la xarxa):

  • Hosts: Són aquells dispositius que només estan connectats a una xarxa. També es poden definir com els nodes que només tenen un enllaç cap al resta de la xarxa. En aquest tipus de dispositius la xarxa finalitza. També coneguts simplement com nodes o nodes fulla, estacions de treball.
  • Encaminadors: Són els dispositius que estan connectats a dos o més xarxes. També es poden definir com els nodes que tenen dos o més enllaços cap al resta de la xarxa. En aquest tipus de dispositius la xarxa no finalitza sinó que s'exten. També coneguts com routers.

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:

EncaminadorArquitecturaIPForwarding.jpg

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:


  1. El datagrama passa a la funció ip_input. Aquesta funció comprova que vagi dirigit al mateix router, si és així passa als nivell superiors, en cas contrari passa a la funció ip_output (IP forwarding). Aquesta és la diferència entre un host i un router, quan un host rep un datagrama que no és per ell el descarta (els hosts tenen desactivat el IP forwarding).
  2. ip_output és l'encarregat de l'encaminament, utilitza la taula d'encaminament, que conté les xarxes destinació on sap arribar el router. Per cada xarxa destinació la taula diu per quina interfície s'ha d'enviar el datagrama.
  3. Un cop consultada la xarxa, ip_output passa el paquet al nivell 2 (al driver de la NIC) per on s'enviarà el paquet. El paquet es guarda a un buffer a l'espera que la NIC l'agafi.

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:

Tipus de rutes

Normalment les rutes es classifiquen en dos tipus:

Estàtiques

Són aquelles rutes que s'afegeixen de forma manual (per indicació de l'administrador) al sistema.

Afegir rutes estàtiques

Consulteu rutes estàtiques.

Dinàmiques

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

Taules de rutes

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)

Taules de rutes a Linux

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:

  • COMPTE!! la comanda route -n no noda tota la informació.
  • ifconfig tampoc dona tota la informaciño de les routes
  • Utilitzarem , la comanda ip
  • Per veure totes les taules de routes consultarem l'arxiu:
[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

  • FIB: No és realment una taula de rutes però la posem aquí per que es important tenir-la sempre en compte. Per no penalitzar el rendiment de l'encaminament consultant per a cada paquet quina ruta ha de seguir, s'utilitza una memòria cache. Les taules de ruta del sistema no son consultades si ja hi ha una entrada a la memòria cau. Una vegada hem enviat o rebut una paquet a una ip aquesta es guarda a una memòria cache. Té com a ventatge que tarda menys a tornar ha enviar un paquet a la mateixa ip, com a inconvenient si la cahe esta plena o no s'actualitza (Fluix) pot provocar problemes amb les noves ip que s'hurien de guardar a la cau.
  • Taula de rutes local: Aquesta és una taula normalment gestionada de forma automàtica pel nucli del sistema. Aquesta taula li indica al sistema com accedir a les IPs pròpies (p.ex l'interfície de loopback) així com a les xarxes a les que està directament connectat a més de configurar el comportament per defecte amb les adreces reservades: adreça de xarxa i adreça de broadcast. Normalment les entrades d'aquesta taula es creen al activar les interfícies de xarxa locals. Els usuaris poder eliminar rutes d'aquesta taula (tot i ser estrany) però no poden afegir cap ruta a aquesta taula (al menys directament però si que es veritat que es podria afegir una nova entrada a la taula al configurar una nova adreça IP). És la taula de menys prioritat i té el número més alt: 255. aka local routing table.
  • Taula de rutes principal: Aquesta és la taula de rutes més coneguda i és la que es pot consultar i modificar per defecte amb l'ordre route. Per exemple al afegir una adreça Ip amb l'ordre ifconfig automàticament s'afegeix una ruta local per a la xarxa d'aquella adreça IP a aquesta taula. Com el seu nom aquesta taula de rutes conté les rutes principals i en sistemes amb encaminament senzill com estacions de treball normalment només es configura aquesta taula de rutes. Internament té el número 254. aka main routing table.
  • A més es poden arribar a definir 252 taules de rutes addicionals. Vegeu l'ordre ip route i l'article sobre Routing policy.

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ó:

  • Adreça de destinació: potser una adreça IP concreta o una adreça de xarxa. Aquesta és l'entrada principal (primary key) de la taula de rutes
  • Tos; Type of Service: es pot encaminar segons els camp Type of service de la capçalera IP. El fitxer /etc/iproute2/rt_dsfield conté una llista dels possibles valors d'aquest camp.
  • Output interface: Indica la interfície de xarxa per la qual sortiran els paquets
  • Scope: el ip scope indica el àmbit en que es aplicable l'adreça IP. Normalment el scope no s'indica de forma explicita al afegir una ruta ja que la pròpia adreça ip o xarxa de destinació de la ruta ja ens indica un scope àmbit per defecte. Per exemples les adreces 127.0.0.0/8 són del rand d'adreces Ip locals i per tant no poden ser encaminades cap a cap altre dispositiu. Els tipus d'scope són:
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

Taules de rutes per defecte i routing policy

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

Routing cache o FIB (Forwarding Information Base)

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:

  • dst, Destination Address: La IP de destinació del paquet. Aquesta era la IP de destinació en el moment en que es va emmagatzemar la ruta.
  • src, Source Address: La IP d'origen del paquet. Aquesta era la IP d'origen en el moment en que es va emmagatzemar la ruta.
  • tos, Type of Service: Si no hi ha marca ToS al packet (tos == 0), l'entrada no s'utilitza. Si hi ha marca aleshores el nucli buscarà si hi ha alguna coincidància amb el valor de ToS. Si no troba cap coincidència continuarà (traversing) llegint la taula RPDB
  • fwmark: Una marca afegida al paquet per administrar-lo (normalment per eines de filtratge com iptables). Aquest paquet no forma part del paquet físic i només existeix localment com a part de la estructura de dades que hi ha a la memòria RAM per tal de representar el paquet. Si no hi ha fwmark aleshores aquesta entrada no s'utilitza com a criteri. Si existeix es buscarà una coincidència dels camps "dst, src, tos?, fwmark" i sni no es troba res es continuarà llegint la RPDB
  • iif, inbound interface: El nom de la interfície per la que el paquet ha arribat.


Els següents atributs seran emmagatzemats per cada entrada al cache de la taula de rutes:.

  • cwnd, FIXME Window
  • FIXME. A) I don't know what it is. B) I don't know how to describe it.
  • advmss, Advertised Maximum Segment Size
  • src, (Preferred Local) Source Address
  • mtu, Maximum Transmission Unit
  • rtt, Round Trip Time
  • rttvar, Round Trip Time Variation
  • FIXME. Gotta find some references to this, too.
  • age
  • users
  • used

Recursos:

Procés de selecció de ruta (route selection)

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:

  • La ruta de la xarxa local
  • La resta de rutes s'envien cap al gateway de la xarxa

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:

1) Primer es consulta el cache d'encaminament (routing cache). Es tracta d'una taula hash en memòria RAM que conté les rutes utilitzades recentment i permet encaminar de forma més ràpida. Si es troba una entrada a la cache aleshores s'aplica i no es continua el procés. Es pot consultar el cache amb l'ordre ip route show cache.
La memòria cau físicament guardada a la RAM.
Quan fem una taula hash fem una especie de vectors on els "hash son els índexs". augmenta la velocitatde lectura.
2) Si no hi ha entrada a la cache, aleshores el kernel comença el procés de selecció de ruta (route selection)
Funciona amb un sistema de prioritats i de normes (a continuació)
3) El nucli itera per prioritat (vegeu Ordre_ip#Prioritat_de_les_normes) de la base de dades d'encaminament (RPDB o Routing Policy DataBase). Es a dir es busca la ruta a les diferents taules de rutes segons l'ordre de prioritat que tinguin. Per cada coincidència a la RPDB el nucli intenta trobar una ruta coincident a la ip de destinació a la taula de rutes especificada. Es pot consultar i gestionar la RPDB amb l'ordre ip rule
Per veure les normes:
[email protected]:~$ sudo ip rule show
0:	from all lookup local 
32766:	from all lookup main 
32767:	from all lookup default 
4) En cas de trobar múltiples rutes possibles sempre s'aplica el criteri Longest Prefix Match (LPM), és a dir s'apliquen les rutes més específiques per davant de les més generalistes. L'última ruta en aplicar-se és la ruta per defecte (si existeix) que en la majoria de configuracions consisteix a enviar el paquet al gateway de la xarxa. L'ús d'aquest algorisme permet l'agregació ja que permet que en comptes d'haver d'afegir una ruta per a cada màquina o per a multitud de xarxes petites, puguem agregar en una sola ruta múltiples màquines o xarxes.
[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
5) Si no es troba cap coincidència el paquet serà descartat.

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:

Tipus d'encaminament

Per SNAT o Masquerade

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:

  • Interfície connectada a la xarxa pública: Aquesta és la interfície connectada cap a la xarxa pública (típicament Internet però també pot ser un altre tipus de xarxa pública com guifi.net). Aquesta interfície té una adreça IP que l'identifica a la xarxa pública. Aquesta adreça és de tipus pública (consulteu ipcalc com a eina que us permet saber quan una IP és pública o privada)
  • Interfície connectada a la xarxa pública: Normalment a la xarxa LAN domèstica o SoHo. Aquesta interfície té una IP privada (normalment el més habitual és una classe C )

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

Rutes Hop By Hop

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