Aquest document explica una configuració bàsica dels Linksys WRT54G amb el firmware d'sveasoft. Això extén la funcionalitat prevista d'orígen per el fabricant al incorporar-hi un firmware, que en realitat es tracta d'un Linux modificat a partir de la versió original.
Aquest aparell en principi està previst per tal de que faci només d'AP, i com a funcionalitats addicionals, tallafocs i router i gestionar les polítiques d'accès. Amb els darrers firmwares de sveasoft és possible afegir-hi més coses, tot i que algunes estan en procés de desenvolupament. Entre elles:
Hi han també altres firmwares disponibles. En la secció d'enllaços de guifi.net hi trovareu més informació.
En els següents enllaços anireu veient pas a pas tot el procès.
Temptant la sort fent flashejats assentat des de casa per estalviar-me d'enfilar-me a les torres del Seminari, al final he aconseguit deixar mort un WRT54G degut a un flashejat incorrecte.
Sabia que es pot recuperar, i de fet es ben senzill, està documentat a diversos llocs però no està de més posar-ho aqui.
Resulta que quan l'aparell es queda en un estat on el botonet power fa pampallugues, és quan es mort.
Llavors cal fer-li el reset (30 segons prement el botò) i després comprovar que respon de nou a la adreca 192.168.1.1
Un cop ja respon, llavors agafarem un firmware original de Linksys, o les versions antigues (p.ex., el Satori). Sempre de tamany inferior a 3 megues. I...
...fem el flashejat via tftp, la seqüència és la següent:
]# tftp
tftp> connect 192.168.1.1
tftp> put Firmware_Satori-4_0G.bin
Sent 2746882 bytes in 6.8 seconds
tftp> quit
Ens esperem una miqueta i farà un reboot on un cop completat, ja torna a ser viu 
Si voleu saber com es fa amb altres sistemes operatius (no és tant senzill, pero quasi), també amb FTP o amb la utilitat "Auto upgrade Utility" que hi ha a la web oficial de Linksys. És un .exe pero imagino que aquest no deu pas portar cap virus 
Per entrar per ssh a les ràdios de forma segura (encriptat), independentment de la password, i amb el telnet desactivat, és a dir, per ssh:
ssh-keygen -b 1024 -t rsa

El nou Talisman du una pila de novetats que mica en mica es van implementant. N'hi ha una pila d'anunciades. Vegeu-ne algunes....
En el 1.0.2 es veu que ja venen cosetes per l'ipv6.... Acaba de sortir 
Una de les possiblitats és configurar-los de manera que un faci d'AP (Punt Calent) i els altres, en mode client (permetent la connexió al punt calent).
El primer pas a fer és posar un dels WRT54G en mode AP.
Al tractar-se de un mode de funcionament que ja està previst d'orígen, bàsicament es tracta simplement del que trovareu a la documentació de Linksys en la seva guia ràpida de instal·lació.
Per a configurar el client ja és imprescindible fer servir alguns dels firmwares que ofereixen aquesta possibilitat.
En aquest cas fem servir el Samandhi.
El WRT54G és un aparell molt atractiu en preu i pels hacks, segurament l'ideal per a fer un AP de baix cost d'elevades prestacions en termes de funcionalitat (gestió bàsica de firewall i ample de banda, linux a dins, logs de què passa, WDS...) per a compartir internet, i alhora donar cobertura a clients. Si ens agrada "remenar" l'aparell per dintre, al dur un linux i ser hackejable, és un aparell divertir de jugar-hi: hi podrem canviar els boot, fer comandes amb iptables, etc.
Com a client o com a bridge, també serveix, sempre i quant i en tant i en quant no es resolgui el problema de que només gestiona una MAC connectada, hi posem un sol ordinador. Per a posar-ne cal que hi hagi un altre router connectat (per exemple, un altre AP) o bé compartir lka connexió des del mateix ordinador, pero mai directament des del WRT54G en mode client.
Respecte dels firmware, és realment espèctacular com poden extendre la funcionalitat més enllà de les especificacions que fa el fabricant. Tanmateix, si el que es vol fer és engegar i funcionar al màxim de rendiment, potser val la pena fer servir si mes no una versió estable. Si tenim cap dubte, en el cas d'sveasoft, actualment tenen un fòrum molt actiu on et contesten molt ràpidament.
Jo els vaig comprar precisament per fer aquest pont i tinc múltiples ordinadors a cada banda, em fa mandra haver-hi de posar un altre router al darrera del client de manera que si algú vol algun WRT54G .... D'aquesta manera potser podré després explicar com va un D-Link o un US Robotics... 
Una de les opcions interessants disponibles amb el firmware d'sveasoft és la possibilitat de posar diversos aparells actuant com un de sol i fent de "repetidor" (WDS), estalviant així de fer enllaços entre ells per a connectar-los. La ventatja és obviament que s'estalvia força material, l'inconvenient, que en redueix les prestacions pel que fa a ample de banda disponible en alguns cassos i que s'aconsella que el nombre d'aparells en un grup WDS no sigui gaire gran....
Tanmateix, tot i aquestes pegues, pot resultar una opció interessant per a donar una cobertura important. Sempre es pot millorar la connexió via enlaços un cop ja hi ha més usuaris en el tram afectat, i per tant, la possibilitat d'afrontar la inversió de posar ponts d'enllaç dedicats per a millor l'ample de banda entre més interessats.
Hi han moltes maneres de configurar els Linksys WRT54G en mode WDS. Si us passejeu pels fòrums d'sveasoft en trovareu diferentes variants, des de les més senzilles, a les més complexes. De moment aqui es vol explicar la configuració que estem fent servir en un dels trams, que al unir diversos municipis, inclou enrutament i WDS P2P, és a dir, el que en podrfiem dir una de les configuracions complexes.
La configuració és la següent:
Passos que cal fer per a configurar-los.
. Un cop "flashejat" el Linksys WRT54G, el posarem en mode "AP" i a continuació, cal posar els paràmetres de xarxa (adreça IP...) i wireless (Canal, mode...) a les opcions que corresponguin.
Finalment, un cop configurat tot, podem anar a la opció "Status->Wireless" i comprovar la senyal que es rep des dels altres aparells. Si veiem que ens apareix un número diferent de zero, és que l'enllaç ja es produeix. Si tot i rebent senyal, hi ha encara alguna cosa que no funciona, reviseu bé les adreces, la configuració de l'encaminament... etc.
Aqui adjunto alguns dels arxius de configuració del OSPF que tenim ara mateix posats i funcionant en l'enllaç de Gurb-El Serrat, Calldetenes, Santa Eugènia de Berga i Vic.
Si contrasteu les adreces que hi consten, amb la taula d'enllaços de guifi.net, podreu entendre quin és l'entramat i com es fa.
Com podreu comprovar, únicament canvia l'identificador del servei OSPF, i la part del final, on s'especifiquen els camins estàtics adequats per a cada cas. Comentaris a aquesta configuració, benvinguts.
router id 10.138.0.1;
protocol device{
scan time 10;
}
protocol direct{
interface "-eth*","*";
}
protocol kernel{
learn;
persist;
scan time 10;
export all;
import all;
}
protocol ospf OSPFWDS{
area 0{
tick 8;
interface "wds0*"{
cost 1;
hello 15;
priority 1;
retransmit 7;
authentication none;
};
interface "br0"{
cost 1;
hello 15;
priority 1;
retransmit 7;
authentication none;
};
};
}
protocol static{
route 10.138.1.0/24 via 172.34.0.2;
route 10.138.2.0/24 via 172.34.0.13;
route 10.138.4.0/24 via 172.34.0.13;
route 0.0.0.0/0 via 10.138.0.2;
}
router id 10.138.1.1;
protocol device{
scan time 10;
}
protocol direct{
interface "-eth*","*";
}
protocol kernel{
learn;
persist;
scan time 10;
export all;
import all;
}
protocol ospf OSPFWDS{
area 0{
tick 8;
interface "wds0*"{
cost 1;
hello 15;
priority 1;
retransmit 7;
authentication none;
};
interface "br0"{
cost 1;
hello 15;
priority 1;
retransmit 7;
authentication none;
};
};
}
protocol static{
route 10.36.0.0/16 via 172.34.0.1;
route 0.0.0.0/0 via 172.34.0.1;
}
router id 10.138.2.1;
protocol device{
scan time 10;
}
protocol direct{
interface "-eth*","*";
}
protocol kernel{
learn;
persist;
scan time 10;
export all;
import all;
}
protocol ospf OSPFWDS{
area 0{
tick 8;
interface "wds0*"{
cost 1;
hello 15;
priority 1;
retransmit 7;
authentication none;
};
interface "br0"{
cost 1;
hello 15;
priority 1;
retransmit 7;
authentication none;
};
};
}
protocol static{
route 10.138.4.0/24 via 172.34.0.9;
route 10.138.2.0/24 via 172.30.0.14;
route 10.138.0.0/16 via 172.34.0.14;
}
Per a verificar que l'encaminament que s'està fent és correcte, n'hi ha prou amb provar-ho des de clients fent "pings" a les diferents adreces. Ens podem trovar però que si tenim algun error, no funcioni. Com ho podem llavors verficar?
Per fer-ho, el més còmode es activar el "telnetd" de cada Linksys WRT54G, això ho podrem fer des de la opció "Administration->Management" activant el botonet telnetd. Un cop ben configurat, ens hem de recordar de desactivar-lo, per seguretat.
Per fer telnet cap al punt d'accés, cal executar la comanda:
# telnet <adreça IP del punt d'accès>
Un cop a dins, podem ja provar de pings cap als altres:
# ping <adreça IP que volem provar>
Si no ens funciona, el primer que podem fer és verificar que el bird, que és l'executable del OSPF, està funcionant adequadament. Si és així, hauriem de visualitzar més o menys una sortida com aquesta a una comanda "ps":
# ps -ef |grep bird
8814 root S bird -c /tmp/bird/bird.conf
15901 root R grep bird
#
Això vol dir que el bird s'està executant amb l'identificador 8814. Si no hi apareix, és que hi ha algun error en la configuració que convé arreglar-lo. L'arxiu /tmp/bird/bird.conf és on queda desada la configuració que li hem posat, la podem llavors verificar ja sigui des de les pantalles web de l'administració, o directament amb el vi.
Avans de fer els canvis, convé provar bé, des de dins del router, fer pings a les adreces, com a mñinim les que ens serveixen d'enllaç intern en la configuració del WDS/P2P, comprovant que contesta la adreça IP del node remot.
# ping 172.34.0.2
PING 172.34.0.2 (172.34.0.2): 56 data bytes
64 bytes from 172.34.0.2: icmp_seq=0 ttl=64 time=7.3 ms
64 bytes from 172.34.0.2: icmp_seq=1 ttl=64 time=4.0 ms
64 bytes from 172.34.0.2: icmp_seq=2 ttl=64 time=4.1 ms
64 bytes from 172.34.0.2: icmp_seq=3 ttl=64 time=3.5 ms
64 bytes from 172.34.0.2: icmp_seq=4 ttl=64 time=3.5 ms
#
Un cop haguem fet els canvis, convé executar de nou el bird. Aquest cop ho podem fer però en mode "debug" per així poder visualitzar si dona algun error. Per fer-ho només cal executar:
# bird -c /tmp/bird/bird.conf -d
Si tot va bé, quedarà executant-se i podem provar els "pings" de nou, si hi ha algun error de sintaxi, abandonarà la execució i ens dirà en quina línia ha trovat l'error.
Apartat dedicat a temes de configuració avançada del Router sense fils Linksys amb el firmware d'Sveasoft Satori. Entre d'altres coses, s'entrarà en l'explicació de les comandes que es poden realitzar mitjançant una connexió telnet.
Els temes explicats en aquest apartat s'escapen de la configuració bàsica que es pot realitar mitjançant la interfície gràfica i entren dins les entranyes del Linksys amb la posible conseqüència que això pot comportar sobre el funcinoament erràtic del Router, fins hi tot amb la posibilitat de que aquest deixi de funcionar permanentment.
No obstant això, tot el que s'explica s'ha provat "in situ" sobre un aparell Linksys WRT54G versió 2. Es comenta que sobre versions prèvies no funciona igual. Així que compte amb els experiments.
Apartat per configurar el router per poder treballar-hi interiorment i deixar algunes portes obertes per si alguna cosa deixa de funcionar. Aquestes accions ens permetran conectar-nos via telnet dins el Linksys des de qualsevol port.
Configuracions a realitzar:
No obstant totes aquestes precaucions, aneu en compte a l'hora de realitzar qualsevol configuració vigilant el que heu modificat, perquè i que voleu aconseguir. I fins i tot connèixer quina sortida teniu si alguna cosa no funciona com s'esperava.
Un cop seguits tots aquests pasos tenim el router a punt per remenar-li les entranyes. I recordeu, sigueu atrevits, però previnguts. Si no us arrisqueu no aconseguireu res, però no està de més anar amb peus de plom. El resultat de no prendre aquestes precaucions pot ser haver de fer un "reset" a l'aparell (prement el botò que hi ha al darrera durant més de 30 segons) per tal de que es recuperin els valors d'orígen de fàbrica.
Apartat dedicar a la memòria flash del router Linksys. Aquesta memòria conté informació que utilitza el Linksys quan s'engega per poder configurar el sistema adecuadament. Té en memòria des de les IPs de configuació fins a les adreces MAC de cada una de les interficies.
Dins s'aquesta secció s'afegiran les descripcions de cadascuna de les variables que el Linksys utilitza, per què serveixen, quines modificacions poden fer-se, que pot ocasionar una modificació errònia en una d'aquestes variables, etc...
Per treballar amb la NVRAM del LinkSys, tenim la instrucció nvram que es dona la funcionalitat necessària per treure-li tot el suc que poguem. Fins hi tot borrar algunes variables que es farien inservible el router.
Les opcions d'aquesta instrucció són les següents:
nvram show. Mostra tot el llistat amb totes les variables del sistema. Com que n'hi ha un munt, podeu utilitzar la comanda | more per mostrar les variables pàgina a pàgina i la comanda | grep "filtre" per filtrar les variables que tinguin un cert valornvram get NomVariable. Mostra el valor de la variable indicat en NomVariable.nvram set NomVariable="Valor". Modifica el valor de la variable indicat en NomVariable amb el valor indicat a Valor. Les cometes són necessaries si dins el valor hi ha espais, sinó el sistema talla el valor al trobar el primer espai.nvram unset NomVariable. Elimina una variable del sistema.nvram commit. Fins que no s'executa aquesta instrucció els canvis realitzats només són modificats en memòria RAM, per això si es treu la corrent al router aquesta recupera els valors anterior. Amb aquesta instrucció ens assegurem que els valors modificats quedin emmagatzemats permanentment i siguin utiltizats pel router a l'arrancar. Tingueu en compte que cada cop que es realitza una modificació mitjançant les pàgines html del router aquest executa la instrucció de guardar els canvis realitzats, fent que els canvis introduits manualment quedin guardats permanentment. Així que eviteu treballar amb dues interficies a l'hora si no esteu segurs del que esteu fent.
Ja sabeu com treballar amb la nvram. Ara podeu consultar què són cadasquna de les variables que la componen i d'algunes que no hi són, però que podem crear-les.
Apartat per saber quina és la configuració per defecte d'un Linksys quan vé de fàbrica. Hi ha, però, una variable que està modificada, doncs és la que es permet accedir per telnet i treure el llistat.
Podeu també recuperar el valors d'aquestes variables a tal i com venen de fàbrica si remeu el botonet de "reset" de darrera l'aparell durant un espai de més de 30 segons seguits.
Si algú té un Linksys WRT54G nou, o sense canvis interns, pot realitzar un reset a l'aparell, configurar l'accés mitjançant telnet i volcar aquí el resultat de la instrucció:
# nvram show
Variables per defecte:
Aquí dins podeu trobar les proves experimentals que s'han realitzat per transformar un Router AP, que sols permetia enrutar cap a internet, en un router complert que disposa de 6 interficies de comunicació (5 interficies cablejades i 1 wifi) amb la posibilitat de encaminar la informació entre totes aquestes interficies.
També amb la posibilitat de utilitzar protocols d'enrutament dinàmic (BGP, RIP, OSPF), que permetrà construir xarxes complexes d'una mànera sencilla i econòmica.
Tingueu en compte que aquestes proves són experimentals i de nivell tècnic alt, i pot espatllar el vostre aparell.
Xarxes Virtuals:
Les xarxes virtuals en el linksys WRT54G s'utilitzen per separar en diferents subxarxes els ports cablejats del linksys. Gràcies a aquesta limitació, i en la forma que engega el linksys, podem aconseguir que cadaqun del ports del linksys pertanyi a una subxarxa diferent.
Per realitzar això hem d'analitzar alguns paràmetres que utiltiza el linksys per crear les xarxes virutals. Per defecte el sistema vé amb dues vlan, la vlan0 que fa referència a la xarxa local i la vlan1 que fa referència a la xarxa iternet. Per la configuració d'aquestes dues xarxes el sistema utlitza les següents variables:
El valor 5 que es posa al final de les variables de ports fa referència a la pròpia interfície i no pot faltar en cap de les definicions, si s'omet aquest valor al final d'alguna de les variables dita vlan deixarà de funcionar. Així mateix l'asterisc que es troba al final de la primera definició en la variable "vlan0ports" també és obligatoria per indicar quina vlan té el control principal de la interfície. Si s'omet, cap dels ports funcionarà i les interficies quedaran inservibles, i difícilment podrà modifica-se de nou la variable per aconseguir que els ports de la interfície tornin a funcionar.
Aconseguir una Xarxa Virtual per Port:
Ara intentarem modificar la configuració del linksys WRT54G per aconseguir convertir un semi-router en un router com deu mana. La idea es conseguir que el linksys es comporti com un router amb 5 subxarxes per a que poguem enrutar varies xarxes amb un aparell bastant econòmic.
NOTA: De moment no entrarem en definir la interfície de wireless, doncs té un tractament diferent.
Per definir les xarxes virtuals necessaries hem de definir les següents variables, una per a cada vlan:
Per poder modificar aquestes variables podeu adreçar-vos al següent enllaç. Però resumidament es modificar amb...
NOTA: Vigilar que la configuració s'ha entrat correctament i que no es repeteix cap port per a les diferents vlan. També no oblidar-se de possar el port 5 en cadasqun de les vlan. No oblidar-se de possar l'asterísc en la vlan0, i evitar possar-lo en la resta.
NOTA: Si no es volen tenir tantes xarxes virtuals i disposar d'un switch amb un parell o tres de ports, es poden eliminar alguna vlan i ajuntar alguns ports en una d'específica.
Un cop tenim les variables modificades i guardades en memòria, cada cop que es tregui l'alimentació i s'engegui el sistema tindrem a la nostra configuració la posibilitat de tenir 5 subxarxes diferents. Tinguem en compte que a partir d'ara la configuració de la xarxa local que vé configurada per defecte en el linksys, i que es pot modificar mitjançant la web només estarà assignada a els ports de la vlan0, tal com estava per defecte, així que s'ha de tenir clar com es configuren cadasquna de les vlan.
Ara el linksys WRT54G v2.x està preparat per tenir 5 vlan's cosa que no vol dir que les tinguem. El un pròxim document s'explicarà com configurar cadasquna de les diferents xarxes virtuals que hem possat a disposició del sistema.
En el document anterior, es va parlar sobre com fer que el sistema pugui tenir diferents xarxes virtual a disposició. En aquest document s'explicarà com activar-les i configurar-les.
Activar una Xarxa Virtual:
Les xarxes virtuals que hem configurat anteriorment, ara estan en el sistema com si fosin una interfície més. Per activar aquestes xarxes virtuals només caldria executar la intrucció "ifconfig" així:
Les subxarxes vlan0 i vlan1 poden modificar-se, però si utilitzem la configuració de LAN i WAN posada a la configuració web, no cal fer-ho.
NOTA: La instrucció per configurar interfícies disposa de moltes altres opcions que estan més ben explicades a aquí (s'ha de crear una ajuda per ifconfig).
Un cop configurades les vlan, el sistema crea les noves rutes per defecte del sistema. Ara ja podem accedir per cada port de les vlan respectives amb una subxarxa diferent. També per defecte, si els hosts de cada una de les subxarxes tenen la porta d'enllaç per defecte en algun dels ports del linksys, aquest enrutarà a qualsevol de les altres subxarxes que hi estan configurades. Això ho fa el linksys mitjançant enrutament estàtic.
En posteriors documents es mostrarà algun exemple on s'ajunten dos o més router linksys, per tenir una xarxa en condicions, utilitzant enrutament estàtic. També en un document posterior es comentarà l'enrutament dinàmic mitjançant l'aplicatiu BIRD. Un altre document explicarà que s'ha de fer per mantenir la configuració de les diferents vlan, així com eliminar el pont br0 del sistema.
Els linksys WRT54G v2 utilitzen una interficie virtual anpomenada pont que s'encarrega d'ajuntar dues o més interfícies reals com si pertanyesin a una sola subxarxa.
Configuració per Defecte:
El sistema disposa de l'aplicació brctl per crear, modificar, etc... ponts dins els sistema, podeu trobar més ajuda a aquí (s'ha de crear). Mitjançant instruccions podem eliminar les interfícies que formen part d'un pont, i fins hi tot eliminar el propi pont. Tanmateix, aquí intentarem evitar que el sistema crei el propi pont.
El linksys WRT54G quan s'engega configura el pont br0 amb les interficies wlan0 i eth1, que equivalen a la LAN i el WIFI. Si mirem en compte la configuració del linksys podem comprobar que existeix una variable sospitosa de crear aquest pont.
La variable lan_ifnames="vlan0 eth1 eth2 eth3" indica que les interficies anteriors formen part de la LAN del sistema, i ademés apareix la variable lan_ifname="br0" indicant quina és la interficie que ha de rebre la configuració de la LAN. Així doncs podem modificar aquestes dues variables per modifcar el comportament de la configuració del pont br0.
Solució Eliminar Pont:
La solució adoptada per eliminar el pont del sistema, ha estat modificar les dues variables anteriors per evitar que es crei. Les variables s'ha modificat amb la instrucció "nvram" que està explicada aquí (falta enllaç) amb aquests valors.
NOTA: En el document (falta enllaç) s'explica com fer perquè el sistema configuri cada cop que arrenca totes i cadasquna de les interficies virtuals.
Totes les proves que s'han fet fins ara, han utilitzat la intrucció "ifconfig", cosa que no ha permés que el sistema recuperi aquesta configuració després que el linksys perdi la alimentació elèctrica. Per fer que s'activi la configuració feta amb la instrucció "ifconfig" hem d'utlitzar la variable "rc_startup" perquè el linksys ho executi a l'arrancar. S'explica el significat d'aquesta variable aquí (falta l'enllaç).
Configuració de l'Arrencada:
Per que la configuració de les interfícies sigui aplicada cada cop que el sistema arranqui hem de modificar la seqüent variable d'un manera semblant a aquesta:
Aquest document intenta assegurar que el router funciona perfectament amb altres routers connectats entre ells. Aquesta prova només permetrà constatar que l'enrutament funciona al llarg de varies subxarxes, i no solsament amb dues xarxes.
Les proves amb protocols d'enrutament es deixen per més endavant, degut a la major dificultat de configuració i estudi que requereixen.
Configuació LinkSys 1:
El primer dels LinkSys WRT54G que tenim per a fer les proves, configurem les següents variables per aconseguir el seu propòsit, tal com es mostra en el gràfic.
Configuació LinkSys 2:
El primer dels LinkSys WRT54G que tenim per a fer les proves, configurem les següents variables per aconseguir el seu propòsit, tal com es mostra en el gràfic.
Les dues últimes instruccions "route", que s'utilitza per configurar les rutes estàtiques del sistema i que està explicada a aquí (falta l'enllaç), la primera de les intruccions elimina la ruta per defecte que disposa el sistema i posteriorment la assigna a la interfície adecuada.
Connexionat de la Xarxa:
Per probar que tot funciona, hem de connectar el sistema tal com es mostra en aquesta figura, i provar de connectar entre un ordinador i un altre. S'ha de fer notar que el cable que uneix els dos routers és un cable creuat.
En anteriors documents, s'ha configurat el LinkSys WRT54G v2 amb 5 xarxes virtuals i s'ha eliminat el pont br0, que no hi feia res. Amb aquesta configuració el sistema a deixat de fer funcionar la wifi.
Amb la modificació feta he investigat les comandes sobre la wifi del sistema. He descobert que el sistema carrega la configuració programada mitjançant la instrucció:
Veient que no m'en sortia he decidit resetejar el LinkSys per veure com estava la configuració per a que el sistema carregués la configuració automàticament. He observat que perquè faci això el sistema ha de tenir el pont br0 com a interficie de la LAN, així que dit hi fet, he decidit modifcar la configuració bàsica del sistema perquè el pont no s'elimini, però sense afegiri més interfícies en el pont.
Proves amb wifi AP:
Un cop em configurat els LinkSys activant les interficies wireless com a AP, una amb un nom diferent de l'altre, hem aconseguir una nova subxarxa per a cada router que podem utilitzar per enrutar.
El Primer AP funciona correctament, en totes les interficies.
El Segon AP funciona correctament, en totes les interficies.
Proves Enrutament wifi AP--Client:
Configurant un wifi com a client i l'altre com a AP, he aconseguit enrutar entre LinkSys via wifi.
Ara no tinc temps d'explicar-ho, però funciona perfectament i enruta dinàmicament entre 2 Linksys.
S'ha probat amb el protocol RIP amb un temps de convergència de 1 minut. I amb el protocol OSPF amb un temps de convergència de 1 minut i mig. Proves realitzades només amb 2 routers, tal com es mostra en el següent grafic.

El següent articles és una traducció del manual de l'aplicatiu "dimoni" BIRD que s'utilitza per tenir protocols d'encaminament. La pàgina original on es troba aquest manual fet per en Ondrej Filip, Pavel Machek, Martin Mares que és a http://bird.network.cz/bird.html.
El nom "BIRD" és actualment un acrònim de "Dimoni d'Encaminament d'Internet BIRD" (BIRD Internet Routing Daemon). Si volem un significat més formal el tenim:
BIRD: Bé doncs, nosaltres pensem que realment ja ha estat explicat. És un acrònim de "Dimoni d'Encaminament d'Internet BIRD" (BIRD Internet Routing Daemon), t'en recordes, oi?
Encaminament d'Internet: És un programa (Bé doncs, un dimonim com ja descobriràs en un moment) el qual treballa com un encaminador dinàmic en una xarxa de tipus Internet (que és, en una xarxa que corre sobre protocols IPv4 o IPv6). Els encaminadors són aparells que transmeten paquets entre xarxes interconectades per permetre que clients que no estan connectats directament a la mateixa xarxa local, es comuniquin entre ells. També per comunicar-se amb altres encaminadors d'Internet per descobrir la topologia de la xarxa que els permet trobar les regles òptimes (en termes d'alguna mètrica) per la transmissió de paquets (que són anomenades taules d'enrutament) i adaptar-les a les condicions de canvis tal com desconnexions d'enllaços de xarxes, construcció de noves connexions entre d'altres. Molts d'aquests encaminadors són aparells dedicats molt cars que executent 'firmware' obscur el qual és difícil de configurar i no està obert a cap canvi (a l'altra banda, el seu maquinari disenyat especialment els permet mantindre actius un munt de interfícies de xarxa d'alta velocitat, millor que ordinadors de propòsit general). Afortunadament, molts sistemes operatius de la familia dels UNIX permet a un ordinador normal actuar com un encaminador i transmetre paquests a través d'altres elements, però solsament d'acord a una taula configurada estàticament.
Un Dimoni d'Encaminament és, en terminologia de UNIX, un programa no interactiu executant-se pel darrera que fa la part dinàmica de l'encaminament d'Internet, el qual comunica amb els altres encaminadors, calcula les taules d'encaminament i les envia al kernel del Sistema Operatiu, el qual fa el reenviament dels paquests actuals. Existeixen realment altres dimonis d'encaminament com: routed (RIP only), GateD http://www.gated.org/ (no-lliure), Zebra http://www.zebra.org/ i MRTD http://www.zcu.cz/ftp/mirrors/mmrz/mrtd/, però les seves capacitats són limitades i els són relativament difícils de configurar i mantíndre.
BIRD és un Dimoni d'Encaminament d'Internet dissenyat per eliminar totes aquestes limitacions, per suportar tota la tecnologia d'encaminament utilitzada a Internet en el dia d'avui o planejada per ser utilitzada en un futur proper i per ser una arquitectura fàcilment extensible permetent que nous protocols d'encaminament siguin incorporats fàcilment. Sobre altres característiques, BIRD suport:
BIRD ha estat desenvolupat a la Facultat de Matemàtiques i Física, Charles University, Pagra, República Txeca com un projecte d'estudis. Aquest pot ser lliurement distribuit sota els termens de la Llicencia Pública General GNU.
BIRD ha estat dissenyat per treballar sota tots els sistemes com-UNIX. Ha estat desenvolupat i comprobat sota Linux 2.0 a 2.4, però els ports a latres sistemes (fins hi tot els no-UNIX) ha de ser relativament facie de dur a terme al ser una arquitectura altament modular.
En un sistema UNIX recent amb les eines de desenvolupament GNU (GCC, binutils, m4, make) i Perl, instal·lar BIRD ha de ser tant fàcil com:
./configure
make
make install
vi /usr/local/etc/bird.conf
bird
Tu pots utilitzar ./configure --help per obtindre una llista de les opcions de configure. Les més importants són: --enable-ipv6 el qual activa la compilació de BIRD per una versió de IPv6, --with-protocols= per produir un executable BIRD lleugerament més petit per desconfigurar els protocols d'encaminament que no utilitzis, i --prefix= per intal·lar BIRD en un lloc diferents de ./usr/local.
Pots passar-li varies opcions de linia de comandes al bird:
-c config name
dona el fitxer de configuració instanciat pel prefix /etc/bird.conf.
-d
activa els missatges de depuració i executa bird en primer plà.
-D filename of debug log
fitxer que rep la informació de depuració de stderr.
-s name of comunication socket
indica el fitxer del socket per comunicacions amb el client, per defecte és prefix/var/run/bird.ctl.
BIRD escriu missatges sobre el seu treball a fitxers de log o syslog (d'acord amb la configuració).
BIRD te una o més taules d'encaminament, les quals poden o no poden ser sincronitzades amb el kernel del Sistema Operatiu i que poden o no poden ser sincronitzats amb cada altre (mirar el protocol Pipe). Cada taula d'encaminament conté una llista de les rutes conegudes. Cada ruta consisteix de:
La taula d'encaminament manté múltiples entrades per una xarxa, però al menys una entrada per una xarxa i un protocol. La enntrada amb la preferència més alta s'utilitza per l'encaminament (nosaltres l'anomenarem ruta se·leccionada). Si hi ha més entrades amb les mateixes preferències i són del mateix protocol, el protocol decideix (normalment d'acord amb les mètriques). Si no ho son, una ordre interna s'utilitza per trencar l'empat. Pots obtindre la llista dels atributs de la ruta en la secció d'atributs d'Encaminament.
Cada protocol està connectat a una taula d'encaminament a través de dos filtres, els quals poden acceptar, refusar i modificar les rutes. Un filtre export comprova les rutes passades des de la taula d'encaminament al protocol, un filtre import comprova les rutes en la direcció oposada. Quan les taules d'encaminament obtenen una ruta des d'un protocol, aquesta recalcula la ruta sel·leccionada i els broadcasts de tots els protocols connectats a la taula. Els protocols normalment envien la modificació a altres encaminadors dins la xarxa.
BIRD es configura utilitzant un fitxer de text de configuració. Un cop arrencat, BIRD llegeix prefix/etc/bird.con (excepte que la opció de linia de comandes -d es doni). La configuració por ser canviada per requeriment de l'usuari: si modifiques el fitxer de configuració i llavors indiques a BIRD la senyal de SIGHUP, aquest s'ajustarà a la nova configruació. Llabors hi ha el client, amb el qual es permet parlar amb BIRD de forma més normal.
En la configuració, cada cop que una linia comença amb un # o estigui dins de /* */ és un come ntari, els espais en blank son entesos com a espais únics. Si hi ha un nombre variable d'opcions, aquestes s'agrupen amb les claus { }. Cada opció finalitza amb un ;. La configuració es sensible a les majuscules.
Aquest és un exemple de un fitxer de configuració simple. Activa la sincronització de les taules d'encaminament amb el kernel del Sistema Operatiu, scaneja per trobar noves interfícies de xarxa cada 10 segons i executa el protocol RIP en totes les interfícies de xarxa trobades.
protocol kernel {
persist; # No elimina les rutes quan BIRD finalitza.
scan time 20; # Escaneja la taula d'encaminament del kernel cada 20 segons.
export all; # Per defecte és export none
}
protocol device {
scan time 10; # Escaneja les interfícies cada 10 secgons
}
protocol rip {
export all;
import all;
}
log "filename"|syslog|stderr all|{ list of classes }
Activa els missatges de log que són d'una classe (altrament all o {error, trace etc.) dins els destins sel·leccionats. Les classes són: info, warning, error and fatal per missatges sobre els problemes locals, debugper missatges de depuració, trace per missatges sobre asumptes de màquines remotes, auth sobre fallades d'autentificació, bug per errors interns de BIRD. Pots especificar més d'una linia de log per establir logs de múltiples destinacions. Per defecte: logs sempre a log del sistema.
debug protocols all|off|{states, routes, filters, interfaces, events, packets}
Activa les opcions globals de depuració del protocol. Mirar debug en la pròxima secció. Per defecte: off
debug commands number
Controla les identificacions de les connexions de clients (0 per cap identificació, 1 per identificacions de connexió i desconnexions, 2 o més per identificació de totes les comandes de client. Per defecte: 0
filter name local variables{ commands }
Defineix un filtre. Pots apendre'n més en el següent capítol.
function name {parameters} local variables { commands }
Defineix una funció. Pots apendre'n més en el següent capitol.
protocol rip|ospf|bgp|... [name] { protocol options}
Defineix una instància d'un protocol definit per name (o amb un nom com "rip5" generat automàticament si no n'especifiques cap). Pots apendre'n més sobre la configuració de protocols en el seu propi capitol. Pots executar més d'una instància de molts protocols (com RIP o BGP). Per defecte, no hi ha cap instància configurada.
define constant = (expression)|number|IP address
Defineix una constant. Pots utilitzar-la més endavant en cada lloc on vulguis utilitzar un simple enter o una adreça IP.
router id IPv4 address
Activa l'ID de l'encaminador. És una paraula d'identificació única al món del teu encaminador, normalment una de les adreces IPv4 de l'encaminador. Per defecte: en la versió IPv4, l'adreça IP més baixa en una interficie no-interna. En la versió IPv6, aquesta opció és mandatoria.
tablename
Crea una nova taula d'encaminament. La taula d'encaminament per defecte es creada implícitament, altres taules d'encaminament han de ser afegides amb aquesta comanda.
eval expr
Evalua l'expresió de filtre donada. L'utilitzem per comprovar els filtres.
Per cada instància de protocol, pots configurar una branca d'opcions. algunes d'elles (les descrites en aquesta secció) són genèriques, algunes són específiques del protocol (mireu les seccions que parlen sobre els protocols).
La majoria d'opcions utilitzen un argument de tipus switch. Aquest pot ser o on, yes o una expressió numèrica amb un valor diferent de zero per la opció d'esser activat o off, no o una expressió numèrica que doni com a resultat zero per desactivar-lo. Un valor buit és equivalent a on ("un silenci significa una acceptació").
preference expr
Activa la preferència de les rutes generades per aquest protocol. Per defecte: depen del protocol.
disabled switch
Desactiva el protocol. Pots canviar l'estat d'activat/desactivat des de la linia de comandes de la interfície sense necessitat de tocar la configuració. Els protocols deshabilitat no són activats. Per defecte: el protocol està habilitat.
debug all | off | { states, routes, filters, interfaces, events, packets }
Activa les opcions de depuració del protocol. Si es pregunta, cada protocol és capaç de escriure missatges de traces sobre el seu treball en el log (amb categoria trace). Pots per cada requeriment imprimir all tots els missatges de traces o només les del tipus sel·leccionats: states per canvis d'estat del protocol (el protocol s'activa, el protocol es desactiva, arrenca, s'atura, etc.), routes per canvis de rutes amb la taula d'encaminament, filters per detalls en el filtratge de rutes, interfaces per events en canvis de interfícies enviats al protocol, events per events interns del protocol i packets pels paquets enviats i rebuts per un protocol. Per defecte: off.
import all | none | filter name | filter { filter commands } | where filter expressions
Especifica un filtre per utilitzar per filtrar rutes rebudes des del protocol a la taula d'encaminament. all és un abreujament de where true i none un abreujament de where false. Per defecte: all
export filter
Aquest és similar a la comada import, excepte que treballa en la dirección des de la taula d'encaminament cap al protocol. Per defecte: none.
table name
Connecta aquest protocol a una taula d'encaminament que no és la per defecte.
Hi han moltes opcions que tenen sentit només amb certs protocols:
passwords { password "password" from time to time passive time id num [...] }
Especifica el codi ha utilitzar amb aquest protocol. passive time és el temps des de que el codi no és utilitzat per enviar, però aquest es reconegut en la recepció. id és l'ID del code que és necessari per a certs protocols. El format del time és dd-mm-yyy HH:MM:SS.
interface "mask"|prefix [ { option; [...] } ]
Especifica quines interfícies són actives per aquest protocol i et permet activar opcions en base a la interfície. La màscara s'especifica com a tipus shell, així interface "*" {mode broadcast; }; engega el protocol en totes les interfícies en mode broadcast. Si el primer caràcter de la màscara és -, dites interfícies són excloses. Les màscares són comprovades d'esquerra a dreta, així interface "-eth*", "*";significa tots menys les ethernets. Per defecte: none.
Pots utilitzar el client de linia de comandes birdc per comunicarte amb un BIRD en execució. La comunicació és fa utilitzant el socket de UNIX bird.ctl (excepte que sigui canviat amb la opció -s donat per ambdos, el servidor i el client). Les comandes poden modificar accions simples com habilitació/deshabilitació de protocols, dient-li a BIRD que mostri varia informació, dient-li que mostri la taula d'encaminament filtrada per un filtre, o demanant que BIRD es reconfiguri. Aprenta ? quan vulguis per obtindre ajuda. L'Opció -v pot passar-se al client, per fer que llenci els codis de retorn amb els missatges. No necessites necessariament utilitzar birdc per parlar amb BIRD, les teves propies aplicacions poden fer-ho, també. El format de comunicacions entre BIRD i birdc és estable (mira la documentació del programador).
Aquest és un breu llistat de les funcions permeses:
dum resources|sockets|interfaces|neighbors|attributes|routes|protocols
Llença els continguts de les estructures de dades internes per la sortida de depuració.
show status
Mostra l'estat de les rutes, que en la vesió de BITD, entre els temps de la última reconfiguració.
show protocols [all]
Mostra la llista de les instàncies del protocol al llarg de les taules són connectades al estat del protocol, posiblement donen informació idònia, si s'especifica
all.
show ospf [interface|neighbors] [name] ["interface"]
Mostra informació detallada sobre el protocol OSPF, posiblement donant un llista boina de les interfícies i els veins. El
namede la intrància del protocol pot ser omessa si només existeix una sola intància.
show static [name]
Mostra informació detallada sobre rutes estàtiques. El
namede la instància del protocol pot ser omés si existeix només una instància.
show interfaces [summary]
Mostra la llista de interfícies. Per cada interfície, imprimeix el seu tipus, l'estat, l'MTU i l'adreça assignada.
show symbols
Mostra la llista de simbols definits en la configuració (noms dels protocols, taules d'encaminament, etc.).
show route [[for] prefix|IP] [table sym] [filter f|where c] [(import|proto) p] [options]
Mostra els continguts de la taula d'encaminament (per defecte la principal), les rutes, les seves mètriques i (en el cas d'haver escollit
all) tots els seus atributs.Pots especificar un prefix si vols imprimir les rutes d'un xarxa específica. Si utilitzes l'opció
for, obtindràs una entrada que serà utilitzada per reenviar paquests a la destinació donada. Per defecte, totes les rutes per cada xarxa són impreses amb la sel·leccionada a sobre, excepte amb la opcióprimary, cas pel qual només es mostraria la ruta sel·leccionada.Pots també demanar que imprimeixi només rutes processades i acceptades per un filtre donat (
filter nameofilter { filter }o equivalent a la condició donada (where condition) Les opcionsimportiprotodemanen per imprimir les entrades que poden ser vistes per un protocol específic. Ambimport, el filtre exportat del protocol és omés.La opció
statsdemana que es mostrin les estadístiques de les rutes (el nombre de xarxes, el nombre de rutes abans i després del filtratge). Si en lloc de l'anterior utilitzescount, només les estadístiques seran impreses.
enable|disable|restart name|"pattern"|all
Habilita, deshabilita o rearrenca una instància d'un protocol indicat, les instàncies coincideixen amb els patrons o totes les intàncies.
configure ["config file"]
Recarrega la configuració des d'un fitxer donat.
down
Finalitza el BIRD.
debug protocol|pattern|all all|off|{states|routes|filters|events|packets}
Controla la depuració del protocol.
BIRD conté un llenguatge simple de programació. (No, aquest no pot llegir correus
. Hi han dos objectes en aquest llenguatge: filtres i funcions. Els filtres són interpretats pel cor de BIRD quan una ruta ha començat a passar entre protocols i taules d'encaminament. El llenguatge de filtratge conté estructures de control if's i switch's, però no permet bucles. Un exemple de l'utilització de moltes característiques d'un filtre poden trobar-se a filter/test.conf.
Els filtres obtenen la ruta, miren els seus atributs i en modifiquen alguns d'ells si es desitja. Al final, aquest decideix si passa la ruta canviada (utilitzant accept o si es refusa reject. Mireu aquí un filtre simple:
filter not_too_far
int var;
{
if defined( rip_metric ) then
var = rip_metric;
else {
var = 1;
rip_metric = 1;
}
if rip_metric > 10 then
reject "La mètrica RIP és massa gran";
else
accept "ok";
}
Com pots veure, un filtre té una capçalera, una llista de variables locals, i un cos. La capçalera consisteix amb la paraula clau filter seguirda per un nom de filtre (únic). La llista de variables locals consisteix de parells de type name on cada parell defineix un variable local. El cos consisteix de { statements } .Cada statement s'acaba amb un ;. Tu pots agrupar diferents sentències en una sentència composta utilitzant claus ({ sentències }) que són utilitzades si vols per un bloc de codi condicional major.
BIRD suporta funcions, així no tens que repetir els mateixos blocs de codi un cop i un altre. Les funcions poder tenir zero o més paràmetres i no tenen variables locals. La recursivitat no està permesa. Mireu com son les definicions de funcions:
function name ()
int local_variable;
{
local_variable = 5;
}
function with_parameters (int parameter)
{
print parameter;
}
A diferència de C, les variables estan declarades després de la linia function, però abans del primer { (Per qui tingui curiositat, això forma part d'una norma, que ara mateix no recordo). Pots declarar els blocs que necessitis. Les funcions són cridades com en C: name(); with_parameters(5);. La funció pot retornar valors utlitzants la comanda return [expr]. Retornant un valor de sortida des de la funció actual (això és semblant a C).
Els filtres estan declarats d'una forma similar a les funcions exceptes que no poden tenir paràmetres explícits. Ells obtenen una entrada a la taula d'encaminament com a paràmetre implícit, aquest és passat automàticament a qualsevol funció cridada. El filtre a d'acabar amb la sentència accept o reject. Si hi ha un error d'execució en el filtre, la ruta es refusada.
Un bon truc per depurar filtres és utilitzar show route filter name des de la linia de comandes del client. Un exemple d'una sessió semblant seria:
pavel@bug:~/bird$ ./birdc -s bird.ctl
BIRD 0.0.0 ready.
bird> show route
10.0.0.0/8 dev eth0 [direct1 23:21] (240)
195.113.30.2/32 dev tunl1 [direct1 23:21] (240)
127.0.0.0/8 dev lo [direct1 23:21] (240)
bird> show route ?
show route [] [table ] [filter ] [all] [primary]...
bird> show route filter { if 127.0.0.5 ~ net then accept; }
127.0.0.0/8 dev lo [direct1 23:21] (240)
bird>
Cada variable i cada valor tenen un cert tipus. Els booleans, enters i enumeracions són incompatibles entre ells (això és així per evitar que ens disparis als peus).
Aquest és el tipus booleà, aquest només pot tenir dos valors,trueifalse. El booleà és l'únic tipus que tu pots utilitzar en les sentènciesif.
Aquest és un tipues enter genèric, pots guardar-hi valors des de -2000000000 fins +2000000000. Valors que exedeixin no seràn comprobat. Pots utlitzar la sintàxi 0x1234 per escriure valors hexagesimals.
Aquest és una parella de dos enters curts. Cada component pot tenir valors entre 0 i 65535. Els literals d'aquest tipus s'escriuen així (1234,5678).
Aquest és una cadena de caràcters. No hi ha forma de modificar els strings en els filtres. Pots passar-los entre funcions, assignar-los a variables de tipusstring, imprimir-los com variables, però no pots encadenar dos strings. Els literals string s'escriuen com"Això és una constant string".
Aquest tipus pot incloure una única adreça IP. Depenent de la comfiguració a l'hora de la compilació de BIRD serà utilitzat, aquestes són adreces IPv4 o IPv6. Les adreces IP estan escrites en la notació estàndard (10.20.30.40ofec0:3:4::1. Tu pots aplicar operadors especials.mask(num)en valors de tipus ip. Aquestes màscares indiquen tots els primers num bits de l'adreça IP. Així1.2.3.4.mask(seria correcte.= 1.0.0.0
Aquest tipus pot incloure un prefixe de xarxa que consisteix amb una adreça IP i un prefix de longitud. Els literals de prefix s'escriuen aixíipadress|pxlenoipadress|netmask. Hi han dos operadors especials per a prefixes:.ipque extreu l'adreça IP del parell, i.len, que separa la longitud del prefixe del parell. Així1.2.0.0/16.pxlen = 16és cert.
Els filtres reconeixen cuatre tipus de conjunts. Els conjunts son semblants als strings: tu pots passar-los però no pots modificar-los. Els literals de tipusset intés així[ 1, 2, 5..7]. Tal com pots veure, els valors simples i els rangs estan permesos en els conjunts. Els sets de prefixes són especials: pots especificar quines longituds de prefixe han de coincidir utilitzant[ 1.0.0.0/8+, 2.0.0.0/8-, 3.0.0.0/8{5,6} ].3.0.0.0/8{5,6}coincideixen amb els preficex 3.x.x.x on la longitud del prefixe és 5 o 6.address/num+és un abreujament deaddress/{0,num},address/num-és un abreujament deaddress/{0,num-1}. Per exemple,1.2.0..0/16 ~ [ 1.0.0.0/8{15,17}]és cert, però1.0.0.0/8 ~ [ 1.0.0.0/8- ]és fals.
Els tipus enumeració fixen un conjunt de possibilitats. No pots definir les teves pròpies variables del tipus, però alguns atributs de ruta són de tipus enumeració.
Una ruta BGP és una llista de nombre d'un sistema autònom. Tu no pots escriure literals d'aquest tipus.
Els màscares BGP són patrons equivalents utilitzats pels camis BGP (utilitzant la sintàxipath ~/2 3 5 ?/). Les màscares s'asemblen a patrons de comodins utilitzats en shells UNIX. Els números dels sistemes autònoms coincideixen amb ells,?equival a qualsevol (excepte buit) seqüència de nombres AS arbritaris (*no pot escollir-se, perquè/*és el començament d'un comentari). Per exemple:/4 3 2 1/ ~ /? 4 3 ?/és cert, però/4 3 2 1/ ~ /? 4 5 ?/és fals.
Llista de comunitat similar al conjunt de parells, excepte que aquest no és com els altres conjunts. Aquest pot ser modificat. No existeixen literals d'aquest tipus.
El llenguatge de filtratege suporta operadors d'enters comuns (+, -, *, /), parèntesis (a*(b+c)), comparació (a=b, a!=b, a<b, a>=b). Les operacions lògiques inclouen l'operador unari no (!), i (&&) i or (||). Els operadors especials inclouen ~ per la operació "és un element d'un conjunt" - aquest pot utilitzar-se en un element set d'elements del mateix tipus (retornant cert si l'element hi és en el conjunt indicat), o en IP i prefices (retornant cert si la IP esta dins el rang definit per aquest prefix), o un prefix i prefix (retornant cert si el primer prefix es més específic que el segon) o en bgppqth i bgpmask (retornant cert si el cami equival a la màscara) o un parell de clist (retornant cert si la comunitatés un elements de la llista de la comunitat).
Els filtres permeten dues estructures de control: condicions i sel·leccions de coincidència.
La sintàxi de una condició és: if boolean expression then command1; else command2; i pots utilitzar { command1; command2; ... } enlloc de cada commanda. La clausula else pot omètre's. Si la boolean expression és certa, el command1 s'executa, altrament s'executa el command2.
El cas és similar al case de Pascal. La sintàxi és case expre { else | num_or_prefix [ .. num_or_prefix]: statement ; [ ... ] }. La expressió de després del case por ser del qualsevol tipus que pugui estar al costat esquerre de l'operadors ~ i algun que hagi de ser membre del conjunt anteriorment permes :. Es permeten múltiples comandes sense l'agrupament {}. Si la expressió ecpr coincideix amb alguna clàusula :, les sentències de després de else: són executades.
Aquest és un exemple que utilitza les estructures if i cased:
case arg1 {
2: print "dos"; print "Pots possar més comandes sense {}";
3 .. 5: print "de tres a cinc";
else: print "algun altre";
}
if 1234 = i then printn "."; else {
print "no és 1234";
print "Necessites {} al voltant de múltiples comandes";
}
A un filtre se li passa implícitament una ruta, i pot accedir als seus atributs com si fosin accesos a variables. Els intents per accedir a atributs indefinits dona com a resultat a un error d'execució; pots comprovar si un atribut està definit utilitzant l'operador defined (atribut).
prefix net
La xarxa de la ruta de que es parla. Le només lectura. (Mireu el capítol sobre les taules d'encaminament.)
enum scope
L'ambit de l'adreça de la xarxa (SCOPE_HOSTper adreces locals a aquest client,SCOPE_LINKper els específics per un enllaç físic,SCOPE_SITEiSCOPE_ORGANIZATIONper adreces privades,SCOPE_UNIVERSEper la globalitat de les adreces visibles).
int preference
La preferència d'una ruta. (Mireu el capítol sobre les taules d'encaminament).
ip from
L'encaminador des del qual s'ha originat la ruta. Només de lectura.
ip gw
El pròxim salt dels paquets encaminats utilitzant aquesta ruta on han de ser reenviats.
enum source
quin protocol m'ha explicat aquesta ruta. Els valors possibles són: RTS_DUMMY, RTS_STATIC, RTS_INHERIT, RTS_DEVICE, RTS_STATIC_DEVICE, RTS_REDIRECT, RTS_RIP, RTS_OSPF, RTS_OSPF_EXT, RTS_OSPF_IA, RTS_OSPF_BOUNDARY, RTS_BGP, RTS_PIPE.
enum cast
Tipus de ruta (RTC_UNICASTper rutes normals,RTC_BROADCAST, RTC_MULTICAST, RTC_ANYCASTper rutes broadcast, multicast i anycast respectivament). De només lectura.
enum dest
Tipus de destí dels paquests on han d'enviar-se a (RTD_ROUTERper reenviament a un encaminador veí,RTD_NETWORKper encaminar-lo a una xarxa directament connectada,RTD_BLACKHOLEper paquest que s'han de descartar sense notificar-ho,RTD_UNREACHABLE, RTD_PROHIBITper paquets que han de ser retornats amb un ICMP de client innaccesible / o un missatge ICMP d'administrativament prohibit). Només de lectura.
També existeixen alguns atributs espècífics d'un protocol que seràn descrits en les seccions del protocol corresponents.
Les següents sentències estan disponibles:
variable = expr
Activa una variable donant-li un valor.
accept|reject [expr]
Accepta o refusa una ruta, amb la possibilitat d'imprimir expr.
return expr
Retorn expr des de la posició actual, la funció finalitza en aquest punt.
print|printn expr [, expr...]
Imprimeix les expressions donades; s'utilitzen principalment mentre els filtres estanen depuració. La variant printn no fa un final de linia.
quitbird
Finalitza BIRD. Utilitzat quan es depura l'intèrpret del filtre.
En principi havia col·locat tota l'explicació dels protocols en aquest únic apartat, però al veure que la seva extensió era massa llarga vaig decidir serparar-ho per protocols i a la vegada evitarà que la gent es lii.
Espero que ho hagi traduït correctament, si hi veieu algún error, no dubteu a dir-ho.
El Border Gateway Protocol (BGP) és un protocol d'encaminament utilitzat
avui en dia a Internet per l'encaminament a nivell troncal. Contrariament a
altres protocols, la seva convergència no compta que tots els encaminadors
segueixin les mateixes regles per la sel·lecció de rutes, fent imposible
implementar cap política d'encaminament a cap encaminador en la xarxa,
l'única restricció humana si un encaminador anuncia un encaminador, aquest
l'ha d'acceptar i reenviar els paquest d'acord amb ell.
El BGP treball limitat en sistemes autònoms (sovin abreujat com AS). Cada
AD és una part de la xarxa amb administració comuna i polítiques
d'encaminament comunes. Aquest s'identifica per un únic nombre de 16-bit.
Els encaminadors dins de cada AS normalment es comuniquen amb tots els
altres utilitzant un protocol d'encaminament interior (ja sigui OSPF o RIP)
o una variant interior del BGP (anomenat iBGP). Els encaminadors exteriors a
l'extrem del AS es comuniquen amb les seves parelles en els AS's vein via
BGP exterior (eBGP).
Cada encaminador BGP envia als seus veins modificacions de les parts de
la seva taula d'encaminament amb el desig d'exportar a través
amb una informació del camí completa (una llista de AS'es el paquet viatgarà
a través si aquesta utilitza una ruta en particular) de manera que eviti
encaminaments tancats.
El BIRD permet tots els requeriments de l'estàndard BGP4 definit a la RFC
1771 ftp://ftp.rfc-editor.or
g/in-notes/rfc1771.txt
incluint-hi diferents millores des de la última modificació f
tp://ftp.rfc-editor.org/internet-drafts/draft-ietf-idr-bgp4-09.txt.
Aquest també suporta els atributs de la comunitat de la RFC 1997
ftp://ftp.rfc-editor.or
g/in-notes/rfc1997.txt, la capacitat de negociació definida a la RFC
2842
ftp://ftp.rfc-editor.or
g/in-notes/rfc2842.txt.
Per la IPv6, utilitza les extensions estandard multiprotocol definides en la
RFC 2283 ftp://ftp.rfc-editor.or
g/in-notes/rfc2283.txt iincloent-hi els canvis descrits en la última
modificació ftp://ftp.rfc-editor.org/internet-drafts/draft-ietf-idr-bgp4
-multiprotocol-v2-05.txt i aplicades a la IPv6 d'acord amb la RFC 2545
ftp://ftp.rfc-editor.or
g/in-notes/rfc2545.txt.
El BGP no té cap mètrica simple, així les regles de sel·lecció d'una ruta
òptima entre les múltiples rutes BGP amb la mateixa preferència son un mica
més complexe i estan implementades d'acord al següent algoritme. Aquest
comença amb la primera regla, si hi han "millors" rutes, llabors utilitza la
segona regla per escollir entre elles i així continuant.
Cada instància de BGP correspon a un encaminador vei. Això permet tenir
un joc de polítiques d'encaminament i tots els altres paràmetres diferents
per cada veí s'utilitzen els paràmetres de configuració següents:
local as number
Defineix de quin AS formem part. (Notar que al contrari d'altres
encaminadors IP, BIRD intenta actuar com un encaminador localitzat alhora en
múltiples AS's, però en alguns casos necessites fer una estirada d'orelles
als camins BGP manualment en els filtres per aconseguir una conducta
consistent) Aquest paràmetre té aquesta funció.
neighbor ip as number
Defineix el veinat d'encaminadors on aquesta instància es
parlarà, i quin AS té localitzat. Excepte que utilitzis la clausula
multihop, aquest ha d'estar directament connectat a una de les
interfícies de l'encaminador. En el cas que el veí té el mateix AS que
nosaltres, nosaltres automàticament canviarem a iBGP. Aquest paràmetre
s'utilitza per això.
multihop number via ip
Configura el BGP multisalt a un veí que està connectat a un cert
nombre de salts més enllà i al qual nosaltres hem d'encaminar via el nostra
vei directe amb l'adreça ip. Per defecte està a off.
next hop seft
Eludeix el càlcul de l'atribut del pròxim salt i sempre notifica
la seva pròpia adreça orígen (mireu més aball) com a següent salt. Necessita
ser utilitzat només ocasionalment per burlar una mala configuració d'altres
encaminadors. Per defecte: disabled.
source address ip
Defineix l'adreça local que nosaltres hem d'utilitzar pel càlcul
del següent salt. Per defecte: l'adreça local final de la interfície del
nostre veí a la que està connectat.
disable after error switch
Quan es troba un error (ja sigui localment o per una altra
banda), deshabilita la intància automàticament i espera que un administrador
fixi el problema manualment. Per defecte: off.
hold time number
Temps en segons d'espera per un missatge d'alliverament des de
l'atre costat abans de considerar que la connexió a caducat. Per defecte:
depen de l'acord amb l'encaminador veí, nosaltres escollim 240 segons si
l'altre costat l'acceptarà.
startup hold time number
Valor del temporitzador que es manté abans que els encaminadors
canviin els missatges oberts per casualitat i accepti un valor real. Per
defecte: 240 segpms
keepalive time number
Retard en segons entre dos enviaments consecutius de missatges
keepalive. Per defecte: Un terç del hold time.
connect retry time number
Temps en segons d'espera abans de reintentar un intent fallit de
connexió. Per defecte: 120 segons.
start delay time number
Retard en segons entre la marxa del protocol i el primer intent
de connexió. Per defecte: 5 segons.
error wait time number, number
Mínim i màxim retard en segons entre una fallada de protocol (ja
sigui local o notificat pel semblant) i el rearranc automàtic. No s'aplica
quandisable after errorsés configurada. Si succeeixen errors
consecutius, el retard s'incrementa exponencialment fins que arriba al
màxim. Per defecte: 60, 300.
error forget time number
Màxim temps en segons entre dos fallades de protocol per
regalar-los com una seqüència d'error que fa que l'error waitincrementi exponencialment. Per defecte: 300
time
segons.
path metric switch
Habilita la comparació de longituds de camins quan es decideixin
quines rutes BGP són millors. Per defecte: on.
default bgp_med number
Valor del Discriminador de Sortida Múltiple per ser utilitza
durant la sel·lecció de ruta quan l'atribut MED s'ha perdut. Per defecte:
infinit.
defualt bgp_local_pref number
Valor de la Preferència Local a utilitzar durant la sel·lecció
de la ruta quan l'atribut de Preferència Local s'ha perdut. Per defecte:
0.
BGP defineix diferents atributs de ruta. Alguns d'ells (els marcats amb
'I' en la taula de sota) són disponibles només en les connexions internet
BGP. algunes d'elles (marcades amb 'O') són opcionals.
bgppath bgp_path
Seqüència de numeros AS que descriuen el cami AS que el paquet
viatjarà quan es reenvii d'acord a una ruta particular. En cas de BGP inter
no conté el numero de l'AS local.
int bgp_local_pref [I]
Valor de preferència local utilitzat per la sel·lecció entre
múltiples rutes BGP (mireu la sel·lecció de rutes més amunt). És utilitzat
com una mètrica adicional que es propagada a través de tot l'AS
local.
int bgp med [IO]
El Discriminador de Sortida Múltiple de la ruta és un atribut
opcional que sobint s'utilitza dins l'AS local per distàncies interiors a
varis encaminadors extrems. Mireu les regles de sel·lecció de ruta més amunt
per una semàntica exacta.
enum bgp_origin
L'origen de la ruta: ORIGIN:IGP si la ruta s'ha originat en un
protocol d'encaminament interior o ORIGIN_EGP si ha estat importat des d'un
protocol EGP (avui en dia sembla que està obsolet) o ORIGIN_INCOMPLETE si
l'origen és desconegut.
ip bgp_next_hop
Següent salt a utilitzar per reenviar els paquests a aquest
destí. En connexions BGP internes, és una adreça de l'encaminador d'origen
si aquest està dins un AS local o si és un encaminador extren el paquet
deixarà l'AS a través d'ell si és una ruta exterior. Així cada BGP que parla
dins l'AS te una posibilitat d'utilitzar el cami interior més curt possible
a aquest punt.
void bgp_atomic_aggr
Aquest és un atribut opcional que no duu cap valor, però la seva
sola presència indica que la ruta s'ha afegit des de múltiples rutes pel
algun encaminador en el camí des de l'orígen.
clist bgp_community [O]
Llista de valors comunitaris associats amb la ruta. Cada valor
és un parell (representar per un parell de tipus de dades dins els filtres)
de enters de 16-bits, el primer d'ells conté el número del AS que defineix
la comunitat i el segon l'identificador per-AS del seu naixement. Hi ha
molts usos del mecanisme de comunitat, però normalment són utilitzats per
dur polítiques d'informació com "no exportar a semblants d'USA". Així cada
AS pot definir les seves pròpies polítiques d'encaminament, aquest també té
una completa llibertat sobre quins atributs de comunitat defineix i quina és
la seva semàntica.
protocol bgp {
local as 65000; # Utilitza un nombre AS privat
neighbor 62.168.0.130 as 5588; # El nostre vei ...
multihop 20 via 62.168.0.13; # ... el qual està connectat
indirectament
export filter { # Utilitzem regles d'exportació
no trivials
if source = RTS_STATIC then { # Exportem només rutes
estàtiques
# Assigna la nostra comunitat
bgp_community.add((65000,5678));
# Incrementa la longitut del camí artificialment
# per notificar un canvi al AS local
if bgp_path ~ / 65000 / then
bgp_path.prepend(65000);
accept;
}
reject;
};
import all;
source address 62.168.0.1; # Utilitza una adreça d'origen
no-estandard
}
El protocol Device, no és un protocol d'encaminament real. No genera cap
ruta i només serveix com un mòdul per obtindre informació sobre les
interfícies des del kernel.
Excepte per algunes circumstàncies inusuals, probablement hauras
d'incloure aquest protocol en la configuració doncs, casi tots els altres
protocols requereixen interficies de xarxa per definir-los i
treballar-hi.
L'únic configurable és una el temps d'escaneix de les interfícies.
scan time number
Temps en segons entre dos encaneixos de la llista de interfícies
de xarxa. En sistemes on notifiquem sobre canvis en l'estat de les
interfícies asíncronament (com les noves versions de Linux), necessitem
escanejar la llista només per evitar confusions per la perdua de missatges
de notificació, així el temps per defecte s'ha de possar un valor
gran
Com que el protocol Device no genera cap ruta, no té cap atribut. Un
exemple de la configuració és així de simple:
protocol device {
scan time 10; # Escaneja les interfícies
}
El protocol Direct és un simple generador de rutes per defecte per totes
les xarxes directament connectades d'acord a la llista d'interfícies
proveides pel kernel via el protocol Device.
Es altament recomanat incloure aquest protocol en la teva configuració
excepte que vulguis utilitzar el BIRD com un servidor de rutes o un
reflector de rutes, que és una màquina que no reenvia paquest i només
participa en la distribució de informació d'encaminament.
L'únic configurable aquí és quines interfícies vigila:
interface pattern [, ...]
Per defecte, el protocol Direct generarà rutes per defecte per
totes les interfícies disponibles. Si vols restringir-les a algun subjoc
d'interfícies (per exemple i estàs utilitzant múltiples tables
d'encaminament de política d'encaminament i alguna dels dominis de la
política no contenen totes les interfícies), llabors utilitza aquesta
clausula.
Les rutes Direct no contenen ningun atribut específic.
Un exemple de configuració podria ser com aquest:
protocol direct {
interface "-arc*", "*"; # Exclueix les ARCnets
}
El protocol Kernel realment no és un protocol d'encaminament. Enlloc de
comunicar amb altres encaminadors de la xarxa, aquest realitza la
sincronització de les taules d'encaminament de BIRD amb el kernel del
Sistema Operatiu. Bàsicament, envia totes les modificacions de la taula
d'encaminament al kernel i cada cert temps comprova les taules del kernel
per mirar si algunes rutes han desaparegut (per exemple, espera la
notificació d'arrencada/caiguda d'una interfície) o si una ruta 'aliena' ha
estat afegida per algú més (depenent de la opció learn,
aquestes rutes son totes eliminades o acceptades de la nostra taula).
Si el vostre Sistema Operatiu només suporta una uníca taula
d'encaminament, pots configurar només una instància del protocol Kernel. Si
suporta múltiples taules (que permetren polítiques d'encaminament, com un SO
és per exemple el Linux 2.2), pots fer correr tantes instàncies co tu
vulguis, però cada una d'elles ha d'estar connectada a una taula
d'encaminament diferent de BIRD i a una taula diferent del kernel.
persist switch
Li diu a BIRD que deixi totes les seves rutes en les taules
d'encaminament quan aquest finalitza (enlloc de
netejar-les).
scan time number
Temps en segons entre dos escaneixos consecutius de la taula
d'encaminament del kernel.
learn switch
Habilita l'aprenentatge de les rutes afegides a les taules
d'encaminament del kernel per altres dimonis d'encaminament per
l'administrador del sistema. Això és posible només en sistemes que suportin
la indentificació de l'autor de la ruta.
kernel table number
Selecciona amb quina taula del kernel en particular treballarà
aquesta instància del protocol Kernel. Disponible només en sistemes que
suporten múltiples taules d'encaminament.
El protocol Kernel no defineix cap atribut de ruta
Una configuració simple pot veure's a continuació
protocol kernel {
import all;
export all;
}
O per un sistema amb dues taules d'encaminament:
protocol kernel { # Primera taula d'encaminament
learn; # Apren rutes alienes des del kernel
persist; # No elimina rutes quan bird finalitza
scan time 10; # Escaneja la taula del kernel cada 10
segons
import all;
export all;
}
protocol kernel { # Segona taula d'encaminament
table auxtable;
kernel table 100;
export all;
}
Open Shortest Path First(OSPF) (Primer el camí més curt) és un complet i
complexe protocol d'encaminament interior. L'actual versió de IPv4 (OSPFv2)
està definida a RFC 2328
href="ftp://ftp.rfc-editor.org/in-notes/rfc2328.txt">ftp://ftp.rfc-editor.or
g/in-notes/rfc2328.txt. És un protocol d'estat d'enllaç (primer el camí
més curt) -- cada ruta manté una base de dades que descriu la topologia del
sistema autònom. Cada encaminador participant té una copia idèntica de la
base de dades i tots els encaminadors corren el mateix algoritme per
calcular l'arbre amb el camí més curt entre ells com una arrel. l'OSPF
escull el camí amb menor cost com el millor camí.
En l'OSPF, els sistemes autònoms poden estar trencats per les respectives
arees per tal de reduir recursos consumits per intercanviar la informació
d'encaminament i per protegir les altres arees d'una informació
d'encaminament incorrecta. La topologia de l'area és amagada a la resta de
sistemes autònoms. Desafortunadament, multiples arees OSPF no són
completament supoertades per aquest versió de BIRD i cap en la versió de
IPv6 (OSPFv3).
Una altra característica molt important de l'OSPF és que pot mantindre la
informació de l'encaminament des de altres protocols (com l'Static o el BGP)
en aquesta base de dades d'estat d'enllaç com a rutes externes. Cada ruta
externa pot ser etiquetada per l'encaminador d'advertiment, fent que sigui
posible passar informació adicionar entre ruters en els extrems dels
sistemes autònoms.
L'OSPF detecte ràpidament canvis en la topologia del sistema autònom (tal
com una fallada d'una interfície d'un encaminador) i calcula una nova ruta
no tancada després d'un curt periode de convergència. Només es perd una
mínima quantitat de tràfic.
Cada encaminador que participa en l'encaminament OSPF períodicament envia
missatges Hello a totes les seves interfícies. Això permet als veins ser
descoberts dinàmicament. Quan els veins canvien les seves parts de la base
de dades de l'estat de l'enllaç i la mantenen idèntica per inundació de
modificacions. El procés d'inundació és fiable i asegura que cada
encaminador detecti tots els canvis.
La principal part de la configuració, poden incloure's-hi múltiples
definicions de arees OSPF amb identificador diferent. Aquestes definicions
inclouen moltes altres opcions i múltiples definicions de interfícies. La
definició de la interfície pot cointindre moltes opcions i definicions de
constants i llistes de veins en xarxes de no-broadcast.
protocol ospf <name> {
rfc1583compat <switch>;
area <id> {
stub <switch>;
tick <num>;
interface <interface pattern>
{
cost <num>;
stub <switch>;
hello <num>;
poll <num>;
retransmit <num>;
priority <num>;
wait <num>;
dead count <num>;
type [broadcast|nonbroadcast|pointopoint];
strict nonbroadcast <switch>;
authentication [none|simple];
password "<text>";
neighbors {
<ip>;
<ip> eligible;
};
};
};
}
rfc1583compat switch
Aquesta opció controla la compatibilitat amb el càlcul de taules
d'encaminament amb RFC 1583 href="ftp://ftp.rfc-editor.org/in-notes/rfc1583.txt">ftp://ftp.rfc-editor.or
g/in-notes/rfc1583.txt. Per defecte el valor és no.
area id
Aquest defineix una area OSPF amb ID d'area donat (un enter o
una adreça IPv4, similarment a un ID d'un encaminador). L'àrea més important
és la tronca (ID 0) a la qual totes les altes arees han d'estar
conectades.
stub switch
Les rutes externes no són inundades dins les arees stub. Per
defecte el valor és no.
tick num
El càlcul de la taula d'encaminament no és executat quan arriva
un únic canvi d'estat d'enllaç. Per reduir la utilització de la CPU, aquest
és processat més tard en intervals periòdics de num segons. Per
defecte el valor és 7.
interface pattern
Defineix les interfícies específiques al llarg d'una
àrea.
cost num
Especifica el cost (mètrica) de sortida d'una interfície. Per
defecte és 10.
stub switch
Si s'activa en una interfície aquesta no escolta cap paquet i no
envia cap hello. Per defecte és no.
hello num
Especifica l'interval en segons entre enviaments de missatges
Hello. Tingues en compte que tots els encaminadors de la mateixa xarxa
necessiten tenir el mateix interval de hola. Per defecte és
10.
poll num
Especifica l'interval en segons entre enviament de missatges de
Hello per alguns veins en la xarxa NBMA. Per defecte el valor és
20.
retransmit num
Especifica l'interval en segons entre retransmisions de una
modificació no acceptada. Per defecte el valor és 5.
priority num
En cada xarxa de accés múltiple (p.e. les Ethernet)
l'Encaminador Planejar o l'Encaminador de Backup Planejat són escollits.
Aquests encaminadors tenen algunes funcions especials en el procés
d'inundació. Prioritats majors incrementen les preferències en la seva
elecció. Els encaminadors amb prioritat 0 no són escollits. Per defecte el
valor és 1.
wait num
Un cop engefat, l'encaminador espera pel el nombre de segons
especificat entre l'el·lecció inicial i la construcció d'una alternativa.
Per defecte el valor és 40.
dead count num
Quan un encaminador no rep cap missatge des d'un veí en dead
count*hello segons, aquest considerarà que el vei ha
caigut.
type broadcast
El BIRD detecta automàticament el tipus de xarxa connectada,
però algunes vegades és convenient forçar l'ús manual d'un tipus diferent.
En xarxes broadcast, l'inundació i els missatges Hello s'envien utilitzant
multicasts (un únic paquest per tots els veins).
Type pointtopoint
Les xarxes punt-a-punt connecten exactament 2 encaminadors
junts. Al no haver-hi elecció en l'execució, es redueix el nombre de
missatges a enviar.
type nonbroadcast
En xarxes no-broadcast, els paquests són enviats a cada veí
separadament per la carència de capacitats multicast.
strict nonbroadcast switch
Si s'activa, no envia el hello a cap vei no identificat. Aquesta
opció es ignorada en qualsevol xarxa no-NBMA. Per defecte és
no.
authentication none
No s'enviaran passwords en els paquets OSPF. Aquest és el valor
per defecte.
authentication simple
Cada paquest porta un password de 8 bytes. Els paquets que no
duguin aquest password són ignorats. Aquest mecanisme d'autentificació és
molt dèbil.
password "text"
Un password de 8 bytes utitizat per
l'autentificació.
neighbors { set }
Un conjunt de veins als quals, en xarxes no-broadcast, enviaran
missatges Hello. Alguns d'ells podran ser marcats com a
escollibles.
L'OSPF defineix tres atributs de ruta. Cada ruta interna té una
metric. La mètrica va des de 1 fins a infinit (65535). Les
rutes externes utilitzen metric type 1 o metric type. Una mètrica de tipus 1 és semblant amb un mètrica interna, una
2
mètrica de tipus 2 és sempre més altra que una de tipus 2 o qualsevol altra
mètrica interna. Si especifiques ambdues mètriques només la mètrica 1 serà
utilitzada. Cada ruta externa també pot dur una etiqueta que és un enter de
32-bits, el qual s'utilitza quan s'exporten rutes a altres protocols,
altrament, això no afecta per res dins l'encaminament del domini de l'OSPF.
Per defecte la mètrica és de tipus 2, que és igual a 10000 i amb etiqueta
igual a 0.
protocol ospf MyOSPF {
export filter {
if source = RTS_BGP then {
ospf_metric1 = 100;
accept;
}
reject;
};
area 0.0.0.0 {
tick 8;
interface "eth*" {
cost 11;
hello 15;
priority 100;
retransmit 7;
authentication simple;
password "aaa";
};
interface "ppp*" {
cost 100;
};
interface "arc0" {
cost 10;
stub yes;
};
};
area 120 {
stub yes;
interface "-arc0" , "arc*" {
type nonbroadcast;
authentication none;
strict nonbroadcast yes;
wait 120;
poll 40;
dead count 8;
neighbors {
192.168.120.1 eligible;
192.168.120.2;
192.168.120.10;
};
};
};
}
El protocol Pipe serveix com un enlaç entre dos taules d'encaminament, permetent que les rutes siguin passades des d'una taula declarada com a primaria (p.e., la primera ñes connectada per utilitzar la paraula clau table) a una de secundaria (declarada utilitzant peer table i viceversa, depenent on estan situats els filtres. Els filtres d'exportació controlen les exportacions de les rutes des de la taula primaria a la secundaria, els filtres d'importació controla les de la direcció oposada.
La primaria utilitza multiples taules d'encaminament i el protocol Pipe ñes la política d'encaminament, on la manipulació d'un únic paquet no depen únicament de la seva adreça de destí, però també en la seva adreça d'origen, interfície d'origen, tipus de protocol i altres paràmetres similars. En molts sistemes (Linux 2.2 seria un bon exemple), el kernel permet reforçar polítiques d'encaminament per definit polítiques d'encaminament que escolleixen un de les diferents taules d'encaminament per ser utilitzades per un paquest d'acord amb aquests paràmetres. La composició d'aquestes regles estan fora de l'abast del treball de BIRD (a Linux, pots utilitzar la comanda ip), però pots crear diferents taules d'encaminament a BIRD, connectar-les a les de kernel, utilitzar filtres per controlar quines rutes apareixen en quines taules i també pots utilitzar el protocol Pipe per exportar un subconjunt sel·leccionat d'una taula a una altra.
peer table table
Defineix la taula d'encaminament secundaria a la que es connecta. La primera és sel·leccionada per la paraula clau table.
El protocol Pipe no defineix atributs de ruta.
Es considera un encaminador que serveix com un encaminador d'extrem de dos sistèmes autònoms diferents, cada un d'ells connectats a un subconjunt d'interfícies de l'encaminador, tenint la seva pròpia connectivitat exterior i desitjos per utilitzar les altres AS com a backup de connectivitat en cas d'interrupció de la seva pròpia linia exterior.
Probablement la solució més simple a aquesta situació és utilitzar dos taules d'encaminament (les em anomenat as1 i as2) i col·locar regles d'encaminament del kernel, així que els paquets que arriven des de interfícies pel primer AS seran encaminats d'acord a as1 i de forma semblant per la segona AS. Així, hem dividit el nostre encaminador en dos encaminadors lògics, cada un actuant en la seva pròpia taula d'encaminament, teint els seus pròpis protocols d'encaminament en les seves pròpies interfícies. Per aconseguir poder utilitzar les rutes de l'altre AS per propòsits de backup, nosaltres podem passar les rutes entre les taules a través d'un protocol Pipe mentre decreixen les seves preferències i corregint els seus camins BGP per reflectir l'encreuament de l'AS extrem.
table as1; # Define the tables
table as2;
protocol kernel kern1 { # Synchronize them with the kernel
table as1;
kernel table 1;
}
protocol kernel kern2 {
table as2;
kernel table 2;
}
protocol bgp bgp1 { # The outside connections
table as1;
local as 1;
neighbor 192.168.0.1 as 1001;
export all;
import all;
}
protocol bgp bgp2 {
table as2;
local as 2;
neighbor 10.0.0.1 as 1002;
export all;
import all;
}
protocol pipe { # The Pipe
table as1;
peer table as2;
export filter {
if net ~ [ 1.0.0.0/8+] then { # Only AS1 networks
if preference>10 then preference = preference-10;
if source=RTS_BGP then bgp_path.prepend(1);
accept;
}
reject;
};
import filter {
if net ~ [ 2.0.0.0/8+] then { # Only AS2 networks
if preference>10 then preference = preference-10;
if source=RTS_BGP then bgp_path.prepend(2);
accept;
}
reject;
};
}
El protocol RIP (algunes vegades també anomenat Rest In Pieces) és un protocol simple, on cada encaminador fa broadcast (a tots els seus veins) de distància a totes les xarxes que ell pot arribar. Quan l'encaminador escolta la distància a una altra xarxa, aquest l'incrementa i torna a fer broadcast. Els broadcasts es an en intèrvals regulars. Així, si alguna xarxa es fa inaccesible, els encaminadors mantenen les crides als altres que la seva distància original s'ha reduit en 1 (actualment, suma la mètrica de la interfície, que normalment és 1). Després d'un temps, la distància arriba a l'infinit (que és 15 a RIP) i tots els encaminadors saben que la xarxa és innaccesible. El RIP intenta minimitzar situacions on el contatge a l'infinit és innecessari, perquè és lent. Esperar a l'infinit origina 16, tu no pots utilitzar RIP en xarxes on la màxima distàcia és major que 15 clients. Pots llegir més sobre RIP a http://www.ietf.org/html.charters/rip-charter.html. Ambdos IPv4 (RFC 1723 ftp://ftp.rfc-editor.org/in-notes/rfc1723.txt) i IPv6 (RFC 2080