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

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.

Funcionament

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:

  • Expected destination prefix
  • Prefix length
  • Path of autonomous systems to the destination
  • Next hop in attributes, which can carry a wide range of additional information that affects the acceptance policy of the receiving router.

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.

Protocol d'establiment de sessió BGP

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.

Conceptes

  • AS
  • AS-PATH
  • Cost/Distància:
  • iBGP: el protocol BGP quan s'utilitza entre ruters que tenen AS diferents es comporta com a iBGP amb una distància administrativa de 200. Cal tenir en compte que OSPF té una distància administrativa per defecte de 110 i per tant sempre serà l'opció preferida.
  • eBGP: el protocol BGP quan s'utilitza entre ruters que tenen AS diferents es comporta com a eBGP amb una distància administrativa de 20.
  • BGP Filters
  • asprepend
  • Local preference

iBGP i eBGP

  • iBGP: el protocol BGP quan s'utilitza entre ruters que tenen el mateix AS number es comporta com a iBGP amb una distància administrativa de 200. Cal tenir en compte que OSPF té una distància administrativa per defecte de 110 i per tant OSPF sempre serà l'opció preferida.
  • eBGP: el protocol BGP quan s'utilitza entre ruters que tenen diferent AS number es comporta com a eBGP amb una distància administrativa de 20.

Recursos:

iBGP

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

Història de BGP

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.

Conceptes

Sistemes autònoms (SA) / Autonomous Systems (AS)

Autonomous Systems
AS

ASNs a españa

Autonomous System number ASN

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

BGP Peer

AS-PREPEND

(TODO!)

AS-prepend: posar dos AS iguals seguits al AS-PATH, permet indicar camí preferent

Exemples

BGP multihoming

Sistemes operatius

routerOS

Consulteu RouterOS BGP.

Linux

Consulteu Quagga, concretament Quagga i BGP

BGP i guifi.net

Documentació

Vegeu:

Exemple de un sol click

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:

  • La AS del node
  • Hi ha una instància per node
  • A diferència de OSPF, no s'indiquen les xarxes a distribuir. A la instància s'indica però (al menys això fa unsolclic) que es propagaran les rutes estàtiques (ojo amb rutes tipus default gateway i xarxes de classe C que no les estiguem propagant, calen filtres) i les connectades entre d'altres
  • És important tenir activats els filtres. A unsolclic s'utilitzen els filtres que es creen per a OSPF
  • Les arees backbone de OSPF i BGP estan per defecte als trastos, no cal indicar-les

Les configuracions que hi ha són:

VilaplanaSebastia7Rd1:

> routing 
[admin@VilaplanaSebastia7Rd1] /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:

  • OSPF està desactivat

VilaplanaEscolesRd1:

[admin@VilaplanaEscolesRd1] > routing
[admin@VilaplanaEscolesRd1] /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:

Fitxer:BGPGuifi.png

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

Resol·lució de problemes. Troubleshooting

Enllaçar per BGP dos trastos. Paquets routing-test i routing

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.

Intercanvi de rutes entre operadores (ISPs)

Vegeu:

http://guifi.net/node/29525

Consulteu també:

Agregació de rutes

BGP vs OSPF

Consulteu OSPF#OSPF_vs_BGP

Troubleshooting. Resol·lució de problemes

RouterOS. route bgp info: Failed to Open BGP connection: connection refused

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:

  • Que podeu fer ping a la IP remota: a l'exemple 172.16.136.19
  • Que la IP remota té BGP activat. El port de BGP és el 179 i normalment la sessió(connexió s'estableix per TCP
  • Comproveu que no hi haguí cap firewall bloquejant la IP i/o el port.

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

BGP sessions i timers

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:

BGP Tools

RFCs

  • RFC 4271: Border Gateway Protocol 4
  • RFC 4456 BGP Route Reflection
  • RFC 5065 Autonomous System Confederations for BGP
  • RFC 1997 BGP Communities Attribute
  • RFC 2385 TCP MD5 Authentication for BGPv4
  • RFC 5492 Capabilities Advertisement with BGP-4
  • RFC 2918 Route Refresh Capability
  • RFC 4760 Multiprotocol Extensions for BGP-4
  • RFC 2545 Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing
  • RFC 4893 BGP Support for Four-octet AS Number Space

Vegeu també

Enllaços externs