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)

Alert.png Aquesta wiki forma part dels materials d'un curs
Curs: DissenyXarxesLinux, LinuxAdministracioAvancada
Fitxers: Enrutament_IP_Configuracio_taula_de_routes_NAT.pdf
Repositori SVN: http://svn.projectes.lafarga.cat/svn/iceupc/LinuxAdministracioAvan%c3%a7ada/moodle/sessio4
Usuari: anonymous
Paraula de pas: sense paraula de pas
Autors: Sergi Tur Badenas

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:

  • 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.
  • 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)

Vegeu també 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.
2) Si no hi ha entrada a la cache, aleshores el kernel comença el procés de selecció de ruta (route selection)
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
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.
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:

Route distance

Vegeu també Enrutament_dinàmic#Conceptes

aka (Cisco language) administrative distance i és defineix com:

A measure of trustworthiness of the source of the route. If a router learns about a destination 
from more than one routing protocol, administrative distance is compared and the preference is 
given to the routes with lower administrative distance. In other words, it is the believability 
of the source of the route."

S'utilitza per decidir quines rutes pasen a ser actives (es coloquen a la taula de rutes) en el cas de tenir més d'una opció per a una mateixa ruta (això sol succeir al utilitzar configuracions complexes o amb protocols d'encaminament dinàmic). In other words, the administrative distance is used to compare routes originating from different routing protocols (including static and connected), whereas the metric is used to compare routes within one single source of origin or family. The default administrative distance value itself is a proprietary concept and derived from quality aspects of old or modern routing protocols. What matters more is its value for relative comparison. Several other vendors have implemented the Cisco numeric values for administrative distances. However, this is merely common practice and not based on standards.

NOTE

For the discussion in this chapter, the terms routing table and forwarding table are used interchangeably, because this is common practice in the literature as well. However, understanding of the difference between those terms and the Forwarding Information Base (FIB) and Routing Information Base (RIB) is of paramount importance for a thorough grasp of the structures where dynamic routing protocols store their information and how it is ultimately used for forwarding decisions by the stack.

En sistemes operatius de tipus Unix/Linuxles taules de rutes no utilitzen el concepte de distància administrativa. Tos els tipus de rutes s'expressen en termes de metrics/hop count. Cal tenir en compte però que alguns software de routing com MRTd, Zebra, o GateD utilitzen el concepte d'administrative distance o un concepte equivalent. Cal recordar que Unix utilitza el que es coneix com most specific route/prefix first o LPM (vegeu Encaminament ).

Because Cisco IOS Software employs administrative distances, it uses them to differentiate connected routes (0 or 1) from static routes (usually 1). The subtle reason why connected routes can appear with an administrative distance of both 0 and 1 is explained in the section "The Near and Far End of a Link" later in this chapter. As one notable difference to UNIX forwarding tables, Cisco IOS Software static routes differ from each other in terms of administrative distance. In the UNIX world, they solely differ in terms of metric and nothing else. In the view of the Cisco IOS designers, the view of metrics for connected and static routes is not applicable and reserved for dynamic routes to express the preference of a route.

There is one notable difference between Linux and the BSD world of operating systems: BSD Unices do not provide a metric when adding routes via the route command. In contrast, all BSD ifconfig implementations are capable of metric assignments to an interface.

Les distàncies per defecte depenen del sistema operatiu:

Linux

Cisco:

TODO

RouterOS:

Protocol Distància
Connected 0
Static 1
eBGP 20
OSPF 110
RIP 120
MME 130
iBGP 200

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

Linux com encaminador

IP forwarding

NOTA: Potser esteu buscant ip-forwarding una opció del servidor de DHCP

IP forwarding (aka Internet routing) és el procés utilitzat per determinar quina ruta ha de seguir un paquet IP. Aquest procediment utilitza la informació de rutes per tal de prendre una decisió.

Recursos:

Activar ip_forwarding

Es pot fer modificant el valor del fitxer:

$ cat /proc/sys/net/ipv4/ip_forward

De 0 a 1.

NOTA: El fitxer no es pot modificar amb un editor. Per fer la modificació cal utilitzar echo

$ sudo su
# echo 1 > /proc/sys/net/ipv4/ip_forward

També es pot fer al fitxer /etc/sysctl.conf. Consulteu l'article Sysctl._Tunning_del_kernel.

NOTA: Cal que tingueu en compte que per a IPv6 cal canviar un altre paràmetre. Consulteu Sysctl._Tunning_del_kernel#Activar_el_forwarding

Activar ip_forwarding a IPv6

Vegeu Router_Advertisement_Daemon#Configuraci.C3.B3n_pr.C3.A8vies_del_sistema._IPv6_forwarding. Consulteu també IPv6.

Fer permanent la configuració de ip_forwarding

Creeu el fitxer:

$ sudo joe /etc/network/if-pre-up.d/router

I li poseu el següent contingut (shell script):

 #!/bin/sh
 echo 1 > /proc/sys/net/ipv4/ip_forward

I feu el fitxer executable:

$ sudo chmod +x /etc/network/if-pre-up.d/router

Configuració per DHCP

Es pot indicar l'opció ip-forwarding.

option ip-forwarding on;

Consulteu:

Consulteu també DHCP.

NOTA: No ho he provat mai!

Configuració permanent de l'encaminament

Script a les carpetes de la carpeta /etc/network

A la carpeta:

$ ls /etc/network
if-down.d  if-post-down.d  if-pre-up.d  if-up.d

Trobareu carpetes .d que s'encarreguen de contenir executables que s'executaran com a hooks al succeir certs esdeveniments.

Podeu posar escripts executables en aquestes carpetes que configurin rutes estàtiques. Consulteu:

Xarxes_Linux#Hooks_de_configuraci.C3.B3_de_la_xarxa

Vegem un exemple concret de com activar permanentment el IP forwarding.

NOTA: Potser encara és millor canviar el fitxer /etc/sysctl.conf o etc/sysctl.d/* segons escaigui. Consulteu sysctl.

A la carpeta:

/etc/network/if-up.d

Creeu un fitxer anomenat router:

$ sudo joe router

Amb el text:

#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward

Com podeu veure hem creat un script de shell. Ara feu-lo executable:

$ sudo chmod +x router

Ordres relacionades amb l'encaminament

route

Vegeu route

Missatges d'error de la comanda route

Consulteu: Xarxes_Linux#Missatges_d.27error_de_la_comanda_route

Comanda ip route

Consulteu ordre ip

iptables

Vegeu iptables

Paràmetres del nucli (kernel)

Vegeu també sysctl

rp_filter

Vegeu rp_filter

Activar source route

Cal? No pot ser una font de problemes de seguretat?

Consulteu Sysctl._Tunning_del_kernel#accept_source_route.

Activar ICMP redirects

Al fitxer /etc/sysctl.conf:

$ cat /etc/sysctl.conf
...
# Do not send ICMP redirects (we are not a router)
#net.ipv4.conf.all.send_redirects = 0

Cal canviar-ho a:

net.ipv4.conf.all.send_redirects = 1

Encaminament avançat

SNAT i masquerade

Consulteu source NAT.

DNAT i multigateway

Consulteu DNAT i multigateway

Encaminament dinàmic

Vegeu encaminament dinàmic.

Policy Routing

Vegeu Policy Routing

Altres:

Altres sistemes operatius

Consulteu:

Encaminament a routerOS

Vegeu Encaminament a routerOS.

Resolució d'errors. TroubleShooting

Error "SIOCADDRT: File exists" a l'afegir rutes estàtiques al fitxer /etc/network/interfaces

A vegades no s'executen les comandes que hi ha al fitxer interfaces amb la opció up, com per exemple:

auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1
up route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.1.20

Per què abans de fer l'up succeïx algun error... Podeu executar:

$ sudo ifup --verbose eth0

Per saber els detalls del que funciona malament. A vegades una solució pot ser posar pre-up en comptes d'up.

Recursos

Vegeu també

Enllaços externs