Handleiding

BGP

Een sessie met je transit of met een andere partij, opgezet tot aan het punt waar filters handwerk worden.

BGP is het protocol waarmee losse netwerken op internet elkaar vertellen welke adresreeksen ze hebben. Je hebt het nodig als je een eigen AS-nummer en eigen IP-ruimte hebt, of als je afspraken maakt met een partij die dat wel heeft. Heb je dat niet, dan heb je geen BGP nodig, hoe vaak het ook langskomt in discussies over redundantie.

Dit hoofdstuk gaat over wat de tool voor je opzet, en, net zo belangrijk, waar hij ophoudt.

Waar het staat

In het onderdeel Routing (OSPF, BGP, policy), in de groep BGP. Dat onderdeel staat standaard uit. In de wizard zit het in de rol Core router, in de stap Routing, samen met de adressen en OSPF.

De velden

Eigen AS
Je eigen AS-nummer. Verplicht, want zonder dit wordt er niets gegenereerd. Voor een private opzet tussen je eigen routers gebruik je een nummer uit 64512 tot 65534.
Router-ID
Leeg laten betekent: het loopback-adres dat je bovenaan het onderdeel hebt ingevuld. Vul je daar niets in, vul dan hier wel iets in.
Te adverteren netwerken
Komma-gescheiden prefixen, bijvoorbeeld 192.0.2.0/24. Dit is wat je aan de wereld aanbiedt.

Daaronder staat de tabel met peers. Per peer:

  • Naam en het adres van de peer.
  • Remote AS. Is dat hetzelfde nummer als je eigen AS, dan maakt de tool er een iBGP-sessie van; anders eBGP. Je hoeft die keuze dus niet zelf te maken.
  • Lokaal adres, optioneel. Invullen als de sessie vanaf een bepaald adres moet komen, bijvoorbeeld je loopback.
  • TCP MD5-wachtwoord, optioneel. Laat je het leeg, dan waarschuwt de tool. Doe dat niet: een sessie zonder wachtwoord is een sessie die iemand anders kan proberen op te zetten.
  • Multihop, als de peer niet in een direct aangesloten subnet zit.
  • Alleen default accepteren. Hierover gaat de volgende paragraaf.

Volledige tabel of alleen een default

Dit is de keuze die het meeste uitmaakt, en hij zit in één schakelaar.

Laat je Alleen default accepteren uit, dan neemt de router aan wat de peer stuurt. Bij een transitpartij is dat de volledige internettabel: op het moment van schrijven ruim een miljoen prefixen. Dat kost geheugen en het kost tijd bij het opbouwen van de sessie. Op een CCR met genoeg RAM is dat prima; op een RB5009 of kleiner is het dat meestal niet.

Zet je hem aan, dan krijg je alleen de standaardroute van die peer. De tool genereert daarvoor een filterketen bgp-in-default-only die alles behalve 0.0.0.0/0 weigert, en hangt die als input.filter aan de sessie. Voor de meeste aansluitingen met één of twee transits is dit wat je wilt: je krijgt een werkende uitweg zonder de hele tabel te dragen.

De praktische vuistregel: wil je alleen redundant internet, neem dan een default. Wil je daadwerkelijk per bestemming kunnen kiezen welke transit je neemt, dan heb je de volledige tabel nodig, en dan heb je ook de router die dat aankan.

Wat de tool genereert

  • Zijn er netwerken ingevuld, dan een adreslijst bgp-networks in /ip firewall address-list met jouw prefixen.
  • /routing bgp template set default met je AS, de router-id en, als er netwerken zijn, output.network=bgp-networks.
  • Twee filterketens onder /routing filter rule: bgp-in-default-only zoals hierboven, en bgp-out-networks, die alleen jouw eigen prefixen naar buiten laat en al het andere weigert.
  • Per peer een /routing bgp connection met de naam, het template default, remote.address en remote.as, de rol iBGP of eBGP, eventueel local.address, multihop en tcp.md5-key, de uitgaande filterketen, address-families=ip en routing-table=main.

Die uitgaande filterketen is de belangrijkste regel in het hele blok. Zonder zo'n filter kan een verkeerd geconfigureerde router routes doorsturen die hij van de ene peer kreeg naar de andere, en dan ben je transit voor mensen die daar niet om gevraagd hebben. De tool zet daarom standaard een filter dat alleen je eigen netwerken naar buiten laat. Heb je geen netwerken ingevuld, dan is de keten reject: je kondigt niets aan.

Controleren doe je met /routing bgp session print voor de status en /ip route print where bgp voor wat je binnenkrijgt.

Waar het formulier ophoudt

Dit is het onderdeel waar de tool het meest bescheiden is, en dat is met opzet. BGP is onderhandelen, niet invullen.

  • Filters zijn handwerk. De twee ketens die je krijgt zijn een vangnet, geen beleid. Prefix-lijsten, AS-path-filters, communities, local preference, MED, prepending: niets daarvan komt uit dit formulier. Wat je peer van je verwacht staat in de afspraak met die peer, en dat typ je zelf in /routing filter rule.
  • Geen max-prefix. Er wordt geen limiet gezet op het aantal prefixen dat een peer mag sturen. Bij een volledige tabel is dat iets om zelf toe te voegen.
  • Geen RPKI. Validatie van routeherkomst zit niet in de tool.
  • Alleen IPv4. De sessies krijgen address-families=ip. Voor IPv6 voeg je zelf een address family of een tweede sessie toe.
  • Eén routeringstabel. Alles gaat in main. Geen VRFs.
  • Een v6-configuratie met BGP wordt niet omgezet. Net als bij OSPF blijven /routing bgp-regels uit een RouterOS v6-export staan als commentaar met "convert by hand", inclusief de routingfilters. De BGP-implementatie is in v7 herschreven; automatisch gokken zou hier echte schade doen.

Gebruik dit blok dus als startpunt: de sessies komen op, je eigen prefixen gaan naar buiten en niets anders, en daarna maak je het beleid af op het apparaat.

Verder lezen

OSPF voor routering binnen je eigen netwerk, Statische routes en policy routing als BGP te zwaar is, en Van v6 naar v7 voor wat er bij importeren wel en niet wordt omgezet.

Meteen proberen? Open de configurator