http://guifi.net/propuesta_routing-bgp-completo http://www.nanog.org/meetings/nanog25/presentations/philip.pdf http://mum.mikrotik.com/presentations/AE12/ali.pdf
El BGP o Border Gateway Protocol és un protocol mitjançant el qual s'intercanvia informació d'encaminament entre sistemes autònoms (SA o en anglès AS Autonomous Systems). Per exemple, els ISP registrats a Internet solen compondre's de diversos sistemes autònoms i per a aquest cas és necessari un protocol com BGP.
Entre els sistemes autònoms dels ISP s'intercanvien les seues taules de rutes a través del protocol BGP. Aquest intercanvi d'informació d'encaminament es fa entre els routers externs de cada sistema autònom. Aquests routers han de suportar BGP. El protocol de gateway fronterer (BGP) és un exemple de protocol de gateway exterior (EGP). BGP és el protocol més utilitzat com a EGP (External Gateway Protocol)
La forma de configurar i delimitar la informació que conté i intercanvia el protocol BGP és creant el que es coneix com sistema autònom. Cada sistema autònom (AS) tindrà connexions o, millor dit, sessions internes (iBGP) i a més sessions externes (eBGP).
BGP intercanvia informació d'encaminament entre sistemes autònoms alhora que garanteix una elecció de rutes lliures de bucles. És el protocol principal de publicació de rutes utilitzat pels ISP a Internet. BGP4 és la primera versió que admet encaminament entre dominis sense classe (CIDR) i agregat de rutes.
A diferència dels protocols de Gateway interns (IGP), com RIP, OSPF i EIGRP, no usa mètriques com nombre de salts, ample de banda, o retard. BGP pren decisions d'encaminament basant-se en polítiques de la xarxa, o regles que utilitzen diversos atributs de ruta BGP.
Les connexions entre BGP neighbors o BGP peers s'estableixen manualment. Les comunicacions entre dos routers veïns es fan mitjançant una sessió TCP al port 179:
$ cat /etc/services | grep 179 bgp 179/tcp # Border Gateway Protocol bgp 179/udp
Cada router BGP (BGP Speaker) enviarà periòdicament (per defecte cada 60 segons) missatges keep-alive per tal de mantenir la connexió establerta.
NOTA: BGP és l'únic protocol que utilitza TCP com a protocol de transport
Quan BGP s'utilitza dins d'una mateixa zona autònoma (AS) parlem de Internal BGP (IBGP).
Quan BGP s'utilitza entre zones autònomes diferents parlem de External BGP (EBGP).
Els encaminadors que estan als límits (boundary) d'un AS se'ls anomena border o edge routers.
Un cop una sessió BGP està funcionant (vegeu l'apartat Protocol d'establiment de sessió BGP) els BGP speakers intercanvien missatges UPDATE sobre les destinacions possibles a les quals un router BGP té accés. Al protocol BGP la descripció CIDR d'una ruta s'anomena Network Layer Reachability Information (NLRI).
Un NLRI inclou:
BGP speakers incrementally announce new NLRI to which they offer reachability, but also announce withdrawals of prefixes to which the speaker no longer offers connectivity.
Consulteu la gràfica d'estats de:
http://en.wikipedia.org/wiki/Border_Gateway_Protocol#Finite_State_Machine
TODO: Afegir gràfica d'estats
TODO: Llista dels estats i explicació:
TODO: Lligar amb la documentació de RouterOS BGP, explicar com es pot veure l'estat i com es mostren els canvis d'estat al Log de routerOS.
Recursos:
El iBGP no pot ser discontinuo. Es a dir, entre dos iBGP no pot existir encaminament OSPF per exemple. Si hi ha OSPF torna boig al iBGP per que les rutes que s'injecten entre els iBGP tenen pes 200 i les que rep a través del OSFP arriben amb pes 110.
Si hi han dos frontera BGP que fan eBGP cap a un altre zona i fan iBGP internament, derivat del primer punt, tots els salts entre ambdos nodes tenen que correr el protocol BGP amb el mateix AS tonts els fronterees i els que els interconecten, de forma que facin un unic iBGP.
Les rutes apreses per eBGP no es poden injectar al OSPF... Els iBGP fronteres han d'injectar rutes per defecte (default-originate) per que els OSPF sapiquen arribar fins a un dels frontera i d'aqui, via iBGP arribar al frontera per on han de sortir. Es a dir, els iBGP defineixen una troncal en tota regla, dintre la zona.
Els nodes amb iBGP poden correr el protocol OSPF pero el seu OSPF no pot rebre injeccio de rutes del iBGP.
5-Tenint present tot lo anterior OSPF no es pot injectar al BGP, almenys sense com a minim filtrar la default gateway.
Aixo porta com a consecuancia que sigui complexe administrar una zona. Per exemple, si partim d'aixo...
<----eBGP/iBGP+OSPF----OSPF
si afeguim un node frontera cap a un altre zone al darrera del OSPF...
<---eBGP/iBGP+OSPF----OSPF-----OSPF+iBGP/eBGP--->
Aixo no funcionaria be, i caldria com a mínim convertir el node intermig d'OSPF en mixte OSPF+iBGP, es a dir així:
<---BGP/iBGP+OSPF----OSPF+iBGP-----OSPF+iBGP/eBGP--->
Els nodes frontera tenen que generar sempre una default route per que es l´única forma que els equips amb únicament OSPF sàpiguen arribar fins un dels iBGP per emprendre el camí a través dels routers iBGP fins a arribar al que toca eBGP/iBGP per poder sortir de la zona.
L´única variant si no es vol lo anterior seria treballar amb nomes BGP, fent eBGP cap a un altre zona i fent iBGP internament.
Al marge d'això evidentment fer agregació de rutes....
Al respecte de el que moltes vegades s'ha comentat que el BGP no permet escollir la millor ruta dons no es ven be així, si que ho permet; tot i que nos es de la forma habitual que fem servir amb el OSPF, molt mes senzilla; nomes amb un cost mes alt. El cost BGP es mesura en salts entre AS amb el que, entre d'altres, una ruta amb un AS_PATH (concatenació de ASs per on passa la ruta) mes petit la ruta sera preferida.
Una forma de donar prioritat a una ruta es fent que el seu AS_PATH es faci mes gran concatenat el nostre AS manualment.... per exemple si rebem una ruta que te el AS_PATH (sense les comentes es clar): "2000,1000" i el nostre AS es el 3000, en sortir de nosaltres el seu AS_PATH seria "3000,2000,1000". Si abans de sortir concatenem el nostre AS 1 vegada la ruta sortiria així: "3000,3000,2000,1000". Amb aixo la ruta, sortint per aquell frontera tindrà un camí mes llarg que sortint per un altre". Evidentment el nostre AS es pot concatenar mes d'un cop però tenint en compte que el AS_PATH te un màxim, que ara no recordo quin es. Localment també es pot manipular per on volem fer sortir els paquets cap a un destí. Be, tot això s'ha de remenar i evidentment es una mica, com a poc, complexe xD
TODO:
BGP was created to replace the Exterior Gateway Protocol (EGP) routing protocol to allow fully decentralized routing in order to allow the removal of the NSFNet Internet backbone network. This allowed the Internet to become a truly decentralized system. Since 1994, version four of the BGP has been in use on the Internet. All previous versions are now obsolete. The major enhancement in version 4 was support of Classless Inter-Domain Routing and use of route aggregation to decrease the size of routing tables. Since January 2006, version 4 is codified in RFC 4271, which went through more than 20 drafts based on the earlier RFC 1771 version 4. RFC 4271 version corrected a number of errors, clarified ambiguities and brought the RFC much closer to industry practices.
Autonomous Systems AS
La IANA és l'encarregada d'assignar-los:
Els números van de 0 a 65535 i estan controlats per la IANA:
http://www.iana.org/assignments/as-numbers/as-numbers.xhtml
De la mateixa manera que passa amb les ips privades hi ha un rang reservat per usos privats:
64512-65534
(TODO!)
AS-prepend: posar dos AS iguals seguits al AS-PATH, permet indicar camí preferent
Consulteu RouterOS BGP.
Consulteu Quagga, concretament Quagga i BGP
Vegeu:
Dos nodes amb una connexió punt a punt per WDS:
Xarxa privada de connexió: 172.16.136.0/30
172.16.136.1/30 VilaplanaEscolesRd1 (AS:29768) <---------> 172.16.136.2/30 VilaplanaSebastia7Rd1 (AS: 29767)
La web de guifi assigna un AS a cada node. Bàsicament per activar BGP cal crear una instància de BGP i després indicar els peers BGP (BGP Peer).
Cada Instància ha de indicar:
Les configuracions que hi ha són:
VilaplanaSebastia7Rd1:
> routing [[email protected]] /routing> export # jan/02/1970 00:19:31 by RouterOS 5.2 # software id = YCNA-93SV # /routing bgp instance set default as=29767 client-to-client-reflection=yes disabled=no \ ignore-as-path-len=no name=default out-filter=ospf-out \ redistribute-connected=yes redistribute-ospf=yes redistribute-other-bgp=\ yes redistribute-rip=yes redistribute-static=yes router-id=10.36.139.65 \ routing-table="" /routing ospf instance set default disabled=yes distribute-default=never in-filter=ospf-in \ metric-bgp=auto metric-connected=20 metric-default=1 metric-other-ospf=\ auto metric-rip=20 metric-static=20 name=default out-filter=ospf-out \ redistribute-bgp=as-type-1 redistribute-connected=no \ redistribute-other-ospf=no redistribute-rip=no redistribute-static=no \ router-id=10.36.139.65 /routing ospf area set backbone area-id=0.0.0.0 disabled=no instance=default name=backbone type=\ default /routing bgp peer add address-families=ip as-override=no default-originate=never disabled=no \ hold-time=3m in-filter=ospf-in instance=default multihop=no name=\ VilaplanaEscolesRd1 nexthop-choice=default out-filter=ospf-out passive=no \ remote-address=172.16.136.1 remote-as=29768 remove-private-as=no \ route-reflect=no tcp-md5-key="" ttl=1 use-bfd=no /routing filter add action=accept chain=ospf-out disabled=no invert-match=no prefix=\ 10.0.0.0/8 prefix-length=8-32 add action=discard chain=ospf-out disabled=no invert-match=no add action=accept chain=ospf-in disabled=no invert-match=no prefix=10.0.0.0/8 \ prefix-length=8-32 add action=reject chain=ospf-in disabled=no invert-match=no /routing ospf interface add authentication=none authentication-key="" authentication-key-id=1 cost=10 \ dead-interval=40s disabled=no hello-interval=10s instance-id=0 interface=\ ether5-bgp network-type=broadcast passive=no priority=1 \ retransmit-interval=5s transmit-delay=1s use-bfd=no /routing ospf network add area=backbone disabled=yes network=172.16.136.0/30
Observeu que:
VilaplanaEscolesRd1:
[[email protected]] > routing [[email protected]] /routing> export # jan/02/1970 00:59:54 by RouterOS 4.10 # software id = CUHJ-VEAD # /routing bgp instance set default as=29768 client-to-client-reflection=yes comment="" disabled=no \ ignore-as-path-len=no name=default out-filter=ospf-out \ redistribute-connected=yes redistribute-ospf=yes redistribute-other-bgp=\ yes redistribute-rip=yes redistribute-static=yes router-id=10.36.139.97 \ routing-table="" /routing ospf instance set default comment="" disabled=yes distribute-default=never in-filter=\ ospf-in metric-bgp=auto metric-connected=20 metric-default=1 \ metric-other-ospf=auto metric-rip=20 metric-static=20 name=default \ out-filter=ospf-out redistribute-bgp=no redistribute-connected=no \ redistribute-other-ospf=no redistribute-rip=no redistribute-static=no \ router-id=0.0.0.0 /routing ospf area set backbone area-id=0.0.0.0 comment="" disabled=no instance=default name=\ backbone type=default /routing bgp peer add address-families=ip as-override=no comment="" default-originate=never \ disabled=no hold-time=3m in-filter=ospf-in instance=default multihop=no \ name=VilaplanaSebastia7Rd1 nexthop-choice=default out-filter=ospf-out \ passive=no remote-address=172.16.136.2 remote-as=29767 remove-private-as=\ no route-reflect=no tcp-md5-key="" ttl=1 use-bfd=no /routing filter add action=accept chain=ospf-out comment="" disabled=no invert-match=no \ prefix=10.0.0.0/8 prefix-length=8-32 add action=discard chain=ospf-out comment="" disabled=no invert-match=no add action=accept chain=ospf-in comment="" disabled=no invert-match=no \ prefix=10.0.0.0/8 prefix-length=8-32 add action=reject chain=ospf-in comment="" disabled=no invert-match=no /routing ospf interface add authentication=none authentication-key="" authentication-key-id=1 \ comment="" cost=10 dead-interval=40s disabled=yes hello-interval=10s \ instance-id=0 interface=ether5-BGP network-type=broadcast passive=no \ priority=1 retransmit-interval=5s transmit-delay=1s use-bfd=no /routing ospf network add area=backbone comment="" disabled=yes network=172.16.136.0/30
Per l'entorn gràfic:
IMPORTANT: Per tal que es propaguin les rutes, cal tenir altres interfícies dels trastos amb rangs de xarxes i que estiguin actius. El que volem dir és que en un entorn de laboratori si només connectem els dos Peers i no connectem res més, al no haver-hi rutes actives no es propagaran. Crec recordar que quelcom similar pot passar amb radios AP que no tinguin cap client connectar
NOTA: El un solclic deixa preparats tan OSPF com BGP, però sempre un dels dos està desconnectats. TODO: Jo he provat de treure tot el que posa de OSPF i només deixar BGP i encara funciona BGP per tant, suposo que no és necessari que estigui la configuració de OSPF per a tal de funcionar BGP, però no ho he confirmat amb ningú més
SuperTrasto doble: enllaços i punts d'accés. Mentre estava configurant el supertrasto que va al Serrat de Calldetenes, una caixa doble amb dos RB532A units per un cable de xarxa als ports 'ether2', m'he adonat que no es passaven les rutes de l'un cap a l'altre.
Tornant a obrir un terminal a una de les plaques i passant-li la configuració de l'UnSolClic he vist que es queixava en la part de la configuració del BGP. A l'aplicació està la informació correctament introduida i el fitxer de configuració es veu correcte.
He vist que a 'System/Packages' hi havia activat el paquet 'routing' i que el paquet 'routing-test' estava desactivat. He desactivat el 'routing', he activat el 'routing-test' i fet un 'System/Reboot' a les dues plaques perquè el canvi tingués efecte.
Fet això, al passar l'UnSolClic de nou a les dues plaques, no he obtingut cap missatge d'error i s'han començat a passar les rutes sense dificultat.
Vegeu:
http://guifi.net/node/29525
Consulteu també:
Consulteu OSPF#OSPF_vs_BGP
Si al log de routerOS us apareixen missatges com:
route bgp info --> Failed to Open BGP connection: connection refused route bgp info --> RemoteAddress=172.16.136.19
Aleshores el problema és que heu definit un peer BGP al qual no us hi podeu connectar. Cal comprovar:
En el meu cas l'error era que en un enllaç punt a punt amb WDS fet amb nodes híbrids utilitzant una xarxa de gestió de guifi 172.x.x.x de 6 hosts no havia posat la IP remota del peer correctament (havia posat la IP remota de la Nanostation - no tenen BGP! - i no pas la de la RB750G). Per tant en aquest cas el ping funcionava però no estava obert el port
$ cat /etc/services | grep bgp bgp 179/tcp # Border Gateway Protocol bgp 179/udp
Els timers són negociats
M-BGP si no està forçats, es negocien els que siguin diferents als default. 3 minuts (o 180 segons?) es lo habitual, amb peer de backup val la pena escurçar aquest temps a la meitat?
Quan tarda en aixecar una sesió FULL BGP? Un minut aprox al CCR
Recursos: