FRRouting BGP-configuratie op een Linux VPS

13 min leestijd·Matthieu|

Stapsgewijze FRRouting BGP-opzet voor het aankondigen van je eigen IPv4- en IPv6-prefixen vanaf een Linux VPS. Behandelt installatie, vtysh-configuratie, prefix-lists, route-maps, GTSM en nftables-firewallregels.

Deze tutorial doorloopt het configureren van FRRouting (FRR) om je eigen IPv4- en IPv6-prefixen via BGP aan te kondigen vanaf een Linux VPS. Elk commando is getest op Debian 12 en Ubuntu 24.04 met FRR 10.5.

Aan het einde heb je een werkende eBGP-sessie met je upstream provider, dual-stack prefix origination via persistente dummy-interfaces, inbound en outbound routefiltering, GTSM-sessiebeveiliging en nftables-firewallregels die TCP 179 vergrendelen.

Als je twijfelt tussen FRR of BIRD2: beide zijn goede keuzes. FRR gebruikt een Cisco-achtige CLI (vtysh), wat vertrouwd aanvoelt als je met IOS of JunOS hebt gewerkt. BIRD2 gebruikt een declaratief configuratiebestand. Deze gids behandelt FRR. Voor BIRD2, zie BIRD2 BGP-configuratie op een Linux VPS.

Voor achtergrondinformatie over het meenemen van je eigen IP-ruimte naar een VPS, zie BGP: Breng je eigen IP naar een VPS.

Vereisten

Voordat je begint, heb je nodig:

  • Een publiek ASN (Autonomous System Number). Als je er nog geen hebt, zie Een ASN registreren bij RIPE NCC.
  • Minimaal een IPv4 /24 of IPv6 /48 prefix toegewezen aan je ASN.
  • ROA (Route Origin Authorization) objecten aangemaakt in het RPKI-dashboard van je RIR. Zie .
  • Een upstream provider die een BGP-sessie aanbiedt (IP transit of peering). Je hebt nodig: het ASN van de provider, de peer IPv4- en IPv6-adressen, en een afgesproken MD5-wachtwoord indien van toepassing.
  • Een Linux VPS met Debian 12 (Bookworm) of Ubuntu 24.04 (Noble). Root- of sudo-toegang.

Vervang in deze gids de volgende placeholders door je werkelijke waarden:

Placeholder Betekenis Voorbeeld
YOUR_ASN Je AS-nummer 212345
PEER_ASN ASN van de upstream provider 6939
PEER_IPV4 BGP peer IPv4 van de provider 198.51.100.1
PEER_IPV6 BGP peer IPv6 van de provider 2001:db8:1::1
YOUR_IPV4 Jouw kant van de BGP-peering (IPv4) 198.51.100.2
YOUR_IPV6 Jouw kant van de BGP-peering (IPv6) 2001:db8:1::2
YOUR_PREFIX_V4 Je IPv4-prefix 203.0.113.0/24
YOUR_PREFIX_V6 Je IPv6-prefix 2001:db8:abc::/48
MD5_PASSWORD Afgesproken TCP MD5-wachtwoord (van je provider)

Hoe installeer ik FRRouting op Debian 12 en Ubuntu 24.04?

Installeer FRR vanuit de officiele apt-repository om de laatste stabiele release te krijgen (10.5.x per maart 2026). De distributiepakketten in Debian en Ubuntu lopen vaak meerdere major versies achter. De officiele repo volgt de huidige stabiele versie en ondersteunt zowel Bookworm als Noble.

Voeg de GPG-signeringssleutel toe:

curl -s https://deb.frrouting.org/frr/keys.gpg | sudo tee /usr/share/keyrings/frrouting.gpg > /dev/null

Voeg de repository toe. Gebruik frr-stable om de laatste stabiele branch te volgen:

FRRVER="frr-stable"
echo deb '[signed-by=/usr/share/keyrings/frrouting.gpg]' https://deb.frrouting.org/frr \
     $(lsb_release -s -c) $FRRVER | sudo tee /etc/apt/sources.list.d/frr.list

Installeer FRR en de Python-tools (nodig voor frr-reload.py):

sudo apt update && sudo apt install -y frr frr-pythontools

Controleer de geinstalleerde versie:

sudo vtysh -c "show version" | head -1

Verwachte uitvoer:

FRRouting 10.5.3 (<hostname>) on Linux(6.8.0-xxx-generic).

FRR installeert als een systemd-service. Schakel het in zodat het herstart na een reboot en start het direct:

sudo systemctl enable --now frr

Controleer of het draait:

systemctl status frr

Je zou active (running) moeten zien in de uitvoer. FRR draait meerdere daemons (zebra, bgpd, etc.) beheerd door een enkel ouderproces.

Hoe schakel ik de BGP-daemon in bij FRR?

FRR levert alle protocoldaemons uitgeschakeld behalve zebra. Je moet bgpd expliciet inschakelen in het daemons-bestand voordat FRR een BGP-proces start. Het daemons-bestand staat op /etc/frr/daemons.

Bewerk het daemons-bestand:

sudo nano /etc/frr/daemons

Zoek de bgpd-regel en zet deze op yes:

bgpd=yes

Alle andere daemons (ospfd, isisd, etc.) kunnen op no blijven staan, tenzij je ze nodig hebt. Zebra staat altijd aan en beheert de kernel routing table.

Dit is wat elke daemon doet:

Daemon Functie Standaard
zebra Kernel route management, interface tracking altijd aan
bgpd BGP-protocol no
ospfd OSPFv2 no
ospf6d OSPFv3 (IPv6) no
ripd RIP no
isisd IS-IS no
staticd Statische routes via vtysh no

Herstart FRR om de wijziging door te voeren:

sudo systemctl restart frr

Controleer of bgpd draait:

sudo vtysh -c "show bgp summary"

Je zou % BGP instance not found moeten zien. Dat is verwacht: bgpd draait, maar er is nog geen router bgp geconfigureerd. Dat doen we hierna.

vtysh-basiskennis

vtysh is de geintegreerde shell van FRR. Het biedt een Cisco-achtige CLI voor het configureren van alle FRR-daemons vanuit een enkele interface. Een paar essentials voordat we beginnen met configureren.

Ga vtysh in:

sudo vtysh

Je bent nu in de FRR CLI. De prompt toont de hostnaam. De modi die je gaat gebruiken:

Modus Invoeren met Prompt Doel
Exec (standaard) # Show-commando's, verificatie
Config configure terminal (config)# Globale configuratie
Router BGP router bgp ASN (config-router)# BGP-configuratie
Address-family address-family ipv4 unicast (config-router-af)# Per-AFI/SAFI config

Om de actieve configuratie naar schijf op te slaan:

write memory

Dit schrijft naar /etc/frr/frr.conf. FRR gebruikt standaard een geintegreerd configuratiemodel: alle daemon-configuraties staan in een enkel bestand.

Verlaat vtysh met exit of end (keert terug naar exec-modus vanuit elke sub-modus).

Hoe configureer ik een BGP-sessie met mijn upstream provider?

Ga vtysh in en schakel naar configure terminal-modus om de kern van de BGP-configuratie op te zetten. Dit maakt het routerproces aan, stelt de router-ID in, schakelt automatische IPv4 unicast uit (zodat je exact bepaalt welke address families actief zijn per neighbor), en definieert de upstream peer.

sudo vtysh
configure terminal

router bgp YOUR_ASN
 bgp router-id YOUR_IPV4
 no bgp default ipv4-unicast

 neighbor PEER_IPV4 remote-as PEER_ASN
 neighbor PEER_IPV4 description Upstream-v4
 neighbor PEER_IPV4 password MD5_PASSWORD
 neighbor PEER_IPV4 ttl-security hops 1
 neighbor PEER_IPV4 soft-reconfiguration inbound

 neighbor PEER_IPV6 remote-as PEER_ASN
 neighbor PEER_IPV6 description Upstream-v6
 neighbor PEER_IPV6 password MD5_PASSWORD
 neighbor PEER_IPV6 ttl-security hops 1
 neighbor PEER_IPV6 soft-reconfiguration inbound

Wat elk directive doet:

  • bgp router-id: Een 32-bit identifier, meestal je primaire IPv4-adres. Moet uniek zijn op de peering.
  • no bgp default ipv4-unicast: Voorkomt dat FRR automatisch IPv4 unicast activeert voor elke neighbor. Je activeert address families expliciet. Dit is standaardpraktijk voor dual-stack opstellingen.
  • ttl-security hops 1: Schakelt GTSM in (RFC 5082). Vereist dat pakketten aankomen met TTL 254 (een hop verwijderd). Dropt gespoofde BGP-pakketten van externe bronnen. Wederzijds exclusief met ebgp-multihop.
  • password: Stelt TCP MD5-authenticatie in (RFC 2385). Beide kanten moeten dezelfde string gebruiken. Niet alle providers gebruiken dit. Laat het weg als je provider het niet vereist.
  • soft-reconfiguration inbound: Slaat ontvangen routes op in geheugen zodat je beleidswijzigingen kunt toepassen zonder de sessie te resetten. Gebruikt meer RAM maar voorkomt sessie-flaps tijdens filterupdates.

Verlaat de config-modus nog niet. We voegen hierna address families en filters toe.

Hoe kondig ik mijn eigen IPv4- en IPv6-prefixen aan?

Prefix origination in FRR vereist twee dingen: een network-statement in de BGP-configuratie, en de prefix aanwezig in de kernel routing table. De eenvoudigste manier om de prefix in de kernel te injecteren is via een dummy interface. We zetten eerst de dummy interfaces op en configureren daarna de BGP address families.

Hoe maak ik persistente dummy interfaces voor prefix origination?

Een dummy interface is een loopback-achtige interface die een IP-adres vasthoudt zonder gekoppeld te zijn aan fysieke hardware. FRR's zebra pikt routes op uit de kernel, dus als je prefix is toegewezen aan een dummy interface, installeert zebra deze en kan bgpd het aankondigen.

Maak de dummy interfaces aan met systemd-networkd zodat ze reboots overleven.

Maak het netdev-bestand aan:

sudo tee /etc/systemd/network/10-dummy-bgp.netdev > /dev/null << 'EOF'
[NetDev]
Name=dummy-bgp
Kind=dummy
EOF

Maak het netwerkbestand aan met je prefixen:

sudo tee /etc/systemd/network/10-dummy-bgp.network > /dev/null << 'EOF'
[Match]
Name=dummy-bgp

[Address]
Address=YOUR_PREFIX_V4

[Address]
Address=YOUR_PREFIX_V6
EOF

Gebruik voor het IPv4-adres het eerste bruikbare IP in je prefix (bijv. 203.0.113.1/24). Voor IPv6 gebruik je een willekeurig adres binnen je prefix (bijv. 2001:db8:abc::1/48).

Schakel systemd-networkd in als het nog niet actief is, en herstart het:

sudo systemctl enable --now systemd-networkd
sudo systemctl restart systemd-networkd

Controleer of de dummy interface actief is:

ip addr show dummy-bgp

Je zou zowel je IPv4- als IPv6-adressen toegewezen aan de interface moeten zien.

Controleer of de routes in de kernel staan:

ip route show dev dummy-bgp
ip -6 route show dev dummy-bgp

Address-family configuratie

Terug in vtysh config-modus (of ga opnieuw naar binnen met sudo vtysh dan configure terminal dan router bgp YOUR_ASN):

 address-family ipv4 unicast
  network YOUR_PREFIX_V4
  neighbor PEER_IPV4 activate
  neighbor PEER_IPV4 route-map EXPORT-V4 out
  neighbor PEER_IPV4 route-map IMPORT-V4 in
  neighbor PEER_IPV4 prefix-list BOGONS-V4 in
  neighbor PEER_IPV4 maximum-prefix 500000 80
 exit-address-family

 address-family ipv6 unicast
  network YOUR_PREFIX_V6
  neighbor PEER_IPV6 activate
  neighbor PEER_IPV6 route-map EXPORT-V6 out
  neighbor PEER_IPV6 route-map IMPORT-V6 in
  neighbor PEER_IPV6 prefix-list BOGONS-V6 in
  neighbor PEER_IPV6 maximum-prefix 200000 80
 exit-address-family

Details:

  • activate schakelt de neighbor in binnen deze address family. Vereist omdat we bgp default ipv4-unicast hebben uitgeschakeld.
  • network vertelt bgpd om deze prefix te origineren. De prefix moet bestaan in de kernel routing table (zebra pikt het op van de dummy interface).
  • maximum-prefix 500000 80 verbreekt de sessie als de peer meer dan 500.000 IPv4-prefixen stuurt. De 80 genereert een waarschuwing bij 80% (400.000). Pas aan op basis van of je een volledige tabel of alleen een default route ontvangt. Voor een default-route-only sessie, stel dit in op 10.
  • De route-map en prefix-list verwijzingen wijzen naar filters die we hierna definiëren.

Hoe filter ik BGP-routes met prefix-lists en route-maps?

Routefiltering is niet optioneel. Zonder outbound filters kan een foutieve configuratie prefixen lekken die niet van jou zijn. Zonder inbound filters accepteer je bogon-routes en routeer je mogelijk verkeer naar een zwart gat. Dit volgt RFC 7454 (BGP Operations and Security).

Voor een diepgaandere blik op filterstrategieen, zie .

Outbound prefix-lists

Kondig alleen prefixen aan die van jou zijn. Niets anders.

ip prefix-list OUR-PREFIXES-V4 seq 10 permit YOUR_PREFIX_V4
ip prefix-list OUR-PREFIXES-V4 seq 999 deny any

ipv6 prefix-list OUR-PREFIXES-V6 seq 10 permit YOUR_PREFIX_V6
ipv6 prefix-list OUR-PREFIXES-V6 seq 999 deny any

Als je meerdere prefixen aankondigt, voeg dan meer permit-regels toe met oplopende volgnummers.

Inbound bogon prefix-lists

Weiger prefixen die nooit op het publieke internet mogen verschijnen. Deze lijst volgt de NLNOG BGP Filter Guide:

ip prefix-list BOGONS-V4 seq 10 deny 0.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 20 deny 10.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 30 deny 100.64.0.0/10 le 32
ip prefix-list BOGONS-V4 seq 40 deny 127.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 50 deny 169.254.0.0/16 le 32
ip prefix-list BOGONS-V4 seq 60 deny 172.16.0.0/12 le 32
ip prefix-list BOGONS-V4 seq 70 deny 192.0.2.0/24 le 32
ip prefix-list BOGONS-V4 seq 80 deny 192.88.99.0/24 le 32
ip prefix-list BOGONS-V4 seq 90 deny 192.168.0.0/16 le 32
ip prefix-list BOGONS-V4 seq 100 deny 198.18.0.0/15 le 32
ip prefix-list BOGONS-V4 seq 110 deny 198.51.100.0/24 le 32
ip prefix-list BOGONS-V4 seq 120 deny 203.0.113.0/24 le 32
ip prefix-list BOGONS-V4 seq 130 deny 224.0.0.0/4 le 32
ip prefix-list BOGONS-V4 seq 140 deny 240.0.0.0/4 le 32
ip prefix-list BOGONS-V4 seq 999 permit 0.0.0.0/0 le 24

ipv6 prefix-list BOGONS-V6 seq 10 deny ::/8 le 128
ipv6 prefix-list BOGONS-V6 seq 20 deny 100::/64 le 128
ipv6 prefix-list BOGONS-V6 seq 30 deny 2001:2::/48 le 128
ipv6 prefix-list BOGONS-V6 seq 40 deny 2001:10::/28 le 128
ipv6 prefix-list BOGONS-V6 seq 50 deny 2001:db8::/32 le 128
ipv6 prefix-list BOGONS-V6 seq 60 deny 3fff::/20 le 128
ipv6 prefix-list BOGONS-V6 seq 70 deny 2002::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 80 deny 3ffe::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 90 deny 5f00::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 100 deny fc00::/7 le 128
ipv6 prefix-list BOGONS-V6 seq 110 deny fe80::/10 le 128
ipv6 prefix-list BOGONS-V6 seq 120 deny fec0::/10 le 128
ipv6 prefix-list BOGONS-V6 seq 130 deny ff00::/8 le 128
ipv6 prefix-list BOGONS-V6 seq 999 permit ::/0 le 48

De laatste permit-regel op elke lijst accepteert alles wat niet expliciet geweigerd is. De le 24 (IPv4) en le 48 (IPv6) weigeren te specifieke prefixen: niemand zou een /25 of langer op IPv4 moeten aankondigen, of een /49 of langer op IPv6.

Route-maps

Route-maps koppelen de prefix-lists aan elkaar en geven je een plek om later meer beleid toe te voegen (local-pref, communities, AS-path prepending).

route-map EXPORT-V4 permit 10
 match ip address prefix-list OUR-PREFIXES-V4

route-map EXPORT-V6 permit 10
 match ipv6 address prefix-list OUR-PREFIXES-V6

route-map IMPORT-V4 permit 10
 match ip address prefix-list BOGONS-V4

route-map IMPORT-V6 permit 10
 match ipv6 address prefix-list BOGONS-V6

De export route-maps laten alleen je eigen prefixen door. Al het andere wordt impliciet geweigerd (FRR weigert alles wat niet expliciet gematcht wordt door een route-map). De import route-maps sturen verkeer door de bogon prefix-list, die de bogon-bereiken weigert en al het andere doorlaat.

Sla de configuratie op:

write memory

Controleer of de config is weggeschreven:

ls -la /etc/frr/frr.conf

Het bestand zou een recente wijzigingsdatum moeten tonen met eigenaar frr:frr en permissies 640.

Hoe beveilig ik de BGP-sessie en bescherm ik TCP 179?

BGP draait op TCP-poort 179. Elke host op het internet kan proberen ermee te verbinden. Naast de GTSM en MD5-authenticatie die al geconfigureerd zijn, heb je firewallregels nodig om TCP 179 te beperken tot je peer-adressen.

nftables-firewallregels

Installeer nftables als het nog niet aanwezig is. Op minimale Ubuntu 24.04-installaties is het standaard niet meegeleverd:

sudo apt install -y nftables

Maak de /etc/nftables.d/-directory aan voor drop-in configuratiebestanden en voeg een include-directive toe aan de hoofd nftables-config zodat aangepaste regels reboots overleven:

sudo mkdir -p /etc/nftables.d
echo 'include "/etc/nftables.d/*.conf"' | sudo tee -a /etc/nftables.conf

Maak een apart nftables-configuratiebestand aan voor BGP:

sudo tee /etc/nftables.d/bgp.conf > /dev/null << 'EOF'
table inet bgp-filter {
    set bgp_peers_v4 {
        type ipv4_addr
        elements = { PEER_IPV4 }
    }

    set bgp_peers_v6 {
        type ipv6_addr
        elements = { PEER_IPV6 }
    }

    chain input {
        type filter hook input priority 0; policy accept;

        # Allow BGP from known peers only
        tcp dport 179 ip saddr @bgp_peers_v4 accept
        tcp dport 179 ip6 saddr @bgp_peers_v6 accept

        # Allow BGP return traffic (our side initiates)
        tcp sport 179 ip saddr @bgp_peers_v4 accept
        tcp sport 179 ip6 saddr @bgp_peers_v6 accept

        # Drop all other BGP attempts
        tcp dport 179 drop
        tcp sport 179 drop
    }
}
EOF

Als je al een nftables-configuratie hebt, voeg deze regels dan samen met je bestaande input chain in plaats van een aparte tabel te maken. De aanpak hierboven is op zichzelf staand en interfereert niet met andere firewallregels.

Om meerdere peers toe te voegen, voeg hun IP's toe aan de elements-set:

elements = { 198.51.100.1, 203.0.113.1 }

Schakel nftables in zodat regels reboots overleven, en herlaad om de nieuwe include op te pikken:

sudo systemctl enable --now nftables
sudo systemctl reload nftables

Controleer of de regels geladen zijn:

sudo nft list table inet bgp-filter

Je zou je peer-IP's in de sets en de chain-regels moeten zien.

Beveiligingsoverzicht

Bescherming Wat het doet Geconfigureerd waar
GTSM (ttl-security hops 1) Dropt BGP-pakketten die niet van een direct verbonden peer komen vtysh, per neighbor
TCP MD5 (password) Authenticeert TCP-segmenten, voorkomt RST-injectie vtysh, per neighbor
Prefix-list (outbound) Kondigt alleen je eigen prefixen aan vtysh, route-map
Prefix-list (inbound) Weigert bogon/gereserveerde bereiken vtysh, per neighbor
maximum-prefix Verbreekt sessie als peer te veel routes stuurt vtysh, per address-family
nftables Beperkt TCP 179 tot bekende peer-IP's /etc/nftables.d/bgp.conf

Hoe verifieer ik de BGP-sessie en prefix-propagatie?

Na het opslaan van de config met write memory zou de BGP-sessie moeten beginnen met opbouwen. Verificatie gebeurt in drie stappen: lokale vtysh-controles, kernel routing table, en externe looking glasses.

vtysh-verificatiecommando's

Commando Wat het toont
show bgp summary Alle peers, hun status, ontvangen prefixen
show bgp ipv4 unicast IPv4 BGP-tabel
show bgp ipv6 unicast IPv6 BGP-tabel
show bgp ipv4 unicast neighbors PEER_IPV4 advertised-routes Wat je naar de peer stuurt
show bgp ipv4 unicast neighbors PEER_IPV4 received-routes Wat de peer naar jou stuurt (vereist soft-reconfiguration inbound)
show ip bgp neighbors PEER_IPV4 Gedetailleerde neighbor-status, uptime, capabilities

Controleer de sessiestatus:

sudo vtysh -c "show bgp summary"

Verwachte uitvoer (ingekort):

IPv4 Unicast Summary:
BGP router identifier YOUR_IPV4, local AS number YOUR_ASN, vrf default
Neighbor        V    AS   MsgRcvd  MsgSent  TblVer   InQ  OutQ  Up/Down  State/PfxRcd
PEER_IPV4       4  PEER_ASN   1205     843       0      0     0 01:23:45        12

Let op de kolom State/PfxRcd. Een getal betekent dat de sessie is opgezet en dat zoveel prefixen zijn ontvangen. Als je Active, Connect of OpenSent ziet, is de sessie nog niet actief. Zie het volgende gedeelte voor probleemoplossing.

Controleer of je prefix wordt geadverteerd:

sudo vtysh -c "show bgp ipv4 unicast neighbors PEER_IPV4 advertised-routes"

Je prefix zou in de uitvoer moeten verschijnen. Als dat niet zo is, controleer dan:

  1. De dummy interface is actief (ip addr show dummy-bgp).
  2. De route bestaat in de kernel (ip route show YOUR_PREFIX_V4).
  3. Het network-statement komt overeen met de exacte prefix en het masker.

Externe verificatie

Controleer van buiten je netwerk of de prefix zichtbaar is op het internet.

Vanaf je lokale machine (niet de VPS):

traceroute YOUR_PREFIX_V4_FIRST_IP

Gebruik bgp.tools om je prefix op te zoeken en verifieer:

  • Het origin AS komt overeen met je ASN.
  • De ROA-status toont "Valid" (niet "Unknown" of "Invalid").
  • De prefix is zichtbaar vanaf meerdere uitkijkpunten.

Je kunt ook de RIPE RIS looking glass bevragen:

curl -s "https://stat.ripe.net/data/looking-glass/data.json?resource=YOUR_PREFIX_V4" | python3 -m json.tool | head -50

Configuratie bewaren

FRR slaat zijn configuratie op in /etc/frr/frr.conf wanneer je write memory uitvoert in vtysh. Zolang de FRR-service is ingeschakeld (systemctl enable frr), leest het dit bestand bij het opstarten.

Controleer beide persistentiemechanismen:

sudo systemctl is-enabled frr

Zou enabled moeten teruggeven.

sudo vtysh -c "show running-config" | head -5

Vergelijk met het opgeslagen bestand:

head -5 /etc/frr/frr.conf

Ze zouden overeen moeten komen. Als ze afwijken, voer write memory opnieuw uit.

De dummy interface blijft bestaan via systemd-networkd (eerder geconfigureerd). Verifieer:

sudo systemctl is-enabled systemd-networkd

Volledig geannoteerd frr.conf

Hier is een volledig voorbeeldconfiguratie ter referentie. Vervang alle placeholders door je eigen waarden.

frr version 10.5.3
frr defaults traditional
hostname bgp-vps
log syslog informational
!
! --- Prefix-lists: outbound (only our prefixes) ---
ip prefix-list OUR-PREFIXES-V4 seq 10 permit 203.0.113.0/24
ip prefix-list OUR-PREFIXES-V4 seq 999 deny any
!
ipv6 prefix-list OUR-PREFIXES-V6 seq 10 permit 2001:db8:abc::/48
ipv6 prefix-list OUR-PREFIXES-V6 seq 999 deny any
!
! --- Prefix-lists: inbound bogon filters ---
ip prefix-list BOGONS-V4 seq 10 deny 0.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 20 deny 10.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 30 deny 100.64.0.0/10 le 32
ip prefix-list BOGONS-V4 seq 40 deny 127.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 50 deny 169.254.0.0/16 le 32
ip prefix-list BOGONS-V4 seq 60 deny 172.16.0.0/12 le 32
ip prefix-list BOGONS-V4 seq 70 deny 192.0.2.0/24 le 32
ip prefix-list BOGONS-V4 seq 80 deny 192.88.99.0/24 le 32
ip prefix-list BOGONS-V4 seq 90 deny 192.168.0.0/16 le 32
ip prefix-list BOGONS-V4 seq 100 deny 198.18.0.0/15 le 32
ip prefix-list BOGONS-V4 seq 110 deny 198.51.100.0/24 le 32
ip prefix-list BOGONS-V4 seq 120 deny 203.0.113.0/24 le 32
ip prefix-list BOGONS-V4 seq 130 deny 224.0.0.0/4 le 32
ip prefix-list BOGONS-V4 seq 140 deny 240.0.0.0/4 le 32
ip prefix-list BOGONS-V4 seq 999 permit 0.0.0.0/0 le 24
!
ipv6 prefix-list BOGONS-V6 seq 10 deny ::/8 le 128
ipv6 prefix-list BOGONS-V6 seq 20 deny 100::/64 le 128
ipv6 prefix-list BOGONS-V6 seq 30 deny 2001:2::/48 le 128
ipv6 prefix-list BOGONS-V6 seq 40 deny 2001:10::/28 le 128
ipv6 prefix-list BOGONS-V6 seq 50 deny 2001:db8::/32 le 128
ipv6 prefix-list BOGONS-V6 seq 60 deny 3fff::/20 le 128
ipv6 prefix-list BOGONS-V6 seq 70 deny 2002::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 80 deny 3ffe::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 90 deny 5f00::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 100 deny fc00::/7 le 128
ipv6 prefix-list BOGONS-V6 seq 110 deny fe80::/10 le 128
ipv6 prefix-list BOGONS-V6 seq 120 deny fec0::/10 le 128
ipv6 prefix-list BOGONS-V6 seq 130 deny ff00::/8 le 128
ipv6 prefix-list BOGONS-V6 seq 999 permit ::/0 le 48
!
! --- Route-maps ---
route-map EXPORT-V4 permit 10
 match ip address prefix-list OUR-PREFIXES-V4
!
route-map EXPORT-V6 permit 10
 match ipv6 address prefix-list OUR-PREFIXES-V6
!
route-map IMPORT-V4 permit 10
 match ip address prefix-list BOGONS-V4
!
route-map IMPORT-V6 permit 10
 match ipv6 address prefix-list BOGONS-V6
!
! --- BGP configuration ---
router bgp 212345
 bgp router-id 198.51.100.2
 no bgp default ipv4-unicast
 !
 ! IPv4 peer
 neighbor 198.51.100.1 remote-as 6939
 neighbor 198.51.100.1 description Upstream-v4
 neighbor 198.51.100.1 password SECRET
 neighbor 198.51.100.1 ttl-security hops 1
 neighbor 198.51.100.1 soft-reconfiguration inbound
 !
 ! IPv6 peer
 neighbor 2001:db8:1::1 remote-as 6939
 neighbor 2001:db8:1::1 description Upstream-v6
 neighbor 2001:db8:1::1 password SECRET
 neighbor 2001:db8:1::1 ttl-security hops 1
 neighbor 2001:db8:1::1 soft-reconfiguration inbound
 !
 address-family ipv4 unicast
  network 203.0.113.0/24
  neighbor 198.51.100.1 activate
  neighbor 198.51.100.1 route-map EXPORT-V4 out
  neighbor 198.51.100.1 route-map IMPORT-V4 in
  neighbor 198.51.100.1 prefix-list BOGONS-V4 in
  neighbor 198.51.100.1 maximum-prefix 500000 80
 exit-address-family
 !
 address-family ipv6 unicast
  network 2001:db8:abc::/48
  neighbor 2001:db8:1::1 activate
  neighbor 2001:db8:1::1 route-map EXPORT-V6 out
  neighbor 2001:db8:1::1 route-map IMPORT-V6 in
  neighbor 2001:db8:1::1 prefix-list BOGONS-V6 in
  neighbor 2001:db8:1::1 maximum-prefix 200000 80
 exit-address-family
!

Probleemoplossing

BGP-sessie vastgelopen in Active of Connect status

De sessie probeert op te bouwen maar TCP 179 kan geen verbinding maken. Controleer in deze volgorde:

  1. Firewall: Kun je de peer bereiken op TCP 179?
    sudo nft list ruleset | grep 179
    
  2. Peer IP: Is het neighbor-IP correct? Typefouten zijn de meest voorkomende oorzaak.
    sudo vtysh -c "show bgp neighbors PEER_IPV4" | grep "BGP state"
    
  3. MD5-mismatch: Als je TCP MD5 gebruikt, moeten beide kanten exact dezelfde wachtwoordstring hebben. Er is geen duidelijke foutmelding hiervoor. De sessie bouwt stilletjes niet op.
  4. GTSM: Als ttl-security hops 1 is ingesteld maar de peer meerdere hops verwijderd is (via een NAT of tunnel), faalt de TTL-controle. Verwijder ttl-security en gebruik in plaats daarvan ebgp-multihop voor multi-hop sessies.

Prefix niet extern zichtbaar

Je sessie is opgezet maar de prefix verschijnt niet op looking glasses.

  1. Controleer geadverteerde routes:

    sudo vtysh -c "show bgp ipv4 unicast neighbors PEER_IPV4 advertised-routes"
    

    Als je prefix niet vermeld staat, blokkeert het outbound filter het. Controleer of de prefix-list overeenkomt met je exacte prefix.

  2. Controleer de kernelroute:

    ip route show YOUR_PREFIX_V4
    

    Als deze ontbreekt, is de dummy interface niet actief of verkeerd geconfigureerd.

  3. Controleer ROA-validiteit: Als je ROA ontbreekt of onjuist is, zullen RPKI-validerende netwerken je aankondiging droppen. Verifieer op RIPE RPKI Validator.

Logs lezen

FRR logt standaard naar syslog. Om BGP-specifieke events te volgen:

journalctl -u frr -f --grep="bgpd"

Voor meer uitgebreide uitvoer, schakel debug tijdelijk in via vtysh:

debug bgp updates
debug bgp keepalives

Schakel het uit als je klaar bent (het is erg uitgebreid):

no debug bgp updates
no debug bgp keepalives

Volgende stappen

  • RPKI-validatie toevoegen: Configureer FRR's ingebouwde RPKI-ondersteuning om inkomende routes te valideren tegen ROA-data. Zie .
  • Geavanceerd filteren: Bouw gedetailleerdere route-maps met community matching, AS-path filters en local-preference tuning. Zie .
  • Monitoring: Zet BGP-sessiemonitoring op met tools als Prometheus + bgp_exporter of Zabbix SNMP traps om meldingen te krijgen wanneer een sessie wegvalt.

Copyright 2026 Virtua.Cloud. Alle rechten voorbehouden. Deze inhoud is een origineel werk van het Virtua.Cloud-team. Reproductie, herpublicatie of herdistributie zonder schriftelijke toestemming is verboden.

Klaar om het zelf te proberen?

Deploy uw eigen server in seconden. Linux, Windows of FreeBSD.

Bekijk VPS-aanbod
FRRouting BGP-configuratie op een Linux VPS