Configurazione BGP con FRRouting su un VPS Linux
Guida passo passo alla configurazione BGP con FRRouting per annunciare i propri prefissi IPv4 e IPv6 da un VPS Linux. Copre installazione, configurazione vtysh, prefix-list, route-map, GTSM e regole firewall nftables.
Questo tutorial spiega come configurare FRRouting (FRR) per annunciare i propri prefissi IPv4 e IPv6 via BGP da un VPS Linux. Ogni comando e stato testato su Debian 12 e Ubuntu 24.04 con FRR 10.5.
Alla fine avrai una sessione eBGP attiva con il tuo provider upstream, origination dual-stack dei prefissi tramite interfacce dummy persistenti, filtraggio delle rotte in ingresso e in uscita, sicurezza della sessione tramite GTSM, e regole firewall nftables per bloccare TCP 179.
Se stai valutando se usare FRR o BIRD2, entrambi sono validi. FRR usa una CLI in stile Cisco (vtysh) che risulta familiare se hai lavorato con IOS o JunOS. BIRD2 usa un file di configurazione dichiarativo. Questa guida copre FRR. Per BIRD2, vedi BIRD2 BGP Configuration on a Linux VPS.
Per approfondimenti su come portare il proprio spazio IP su un VPS, vedi BGP: Bring Your Own IP to a VPS.
Prerequisiti
Prima di iniziare, servono:
- Un ASN (Autonomous System Number) pubblico. Se non ne hai ancora uno, vedi Register an ASN at RIPE NCC.
- Almeno un prefisso IPv4 /24 o IPv6 /48 assegnato al tuo ASN.
- Oggetti ROA (Route Origin Authorization) creati nella dashboard RPKI del tuo RIR. Vedi .
- Un provider upstream che offra una sessione BGP (transito IP o peering). Servono: l'ASN del provider, gli indirizzi IPv4 e IPv6 del peer, e una password MD5 concordata se prevista.
- Un VPS Linux con Debian 12 (Bookworm) o Ubuntu 24.04 (Noble). Accesso root o sudo.
In tutta la guida, sostituisci questi placeholder con i tuoi valori reali:
| Placeholder | Significato | Esempio |
|---|---|---|
YOUR_ASN |
Il tuo numero AS | 212345 |
PEER_ASN |
Numero AS del provider upstream | 6939 |
PEER_IPV4 |
IPv4 del peer BGP del provider | 198.51.100.1 |
PEER_IPV6 |
IPv6 del peer BGP del provider | 2001:db8:1::1 |
YOUR_IPV4 |
Il tuo lato del peering BGP (IPv4) | 198.51.100.2 |
YOUR_IPV6 |
Il tuo lato del peering BGP (IPv6) | 2001:db8:1::2 |
YOUR_PREFIX_V4 |
Il tuo prefisso IPv4 | 203.0.113.0/24 |
YOUR_PREFIX_V6 |
Il tuo prefisso IPv6 | 2001:db8:abc::/48 |
MD5_PASSWORD |
Password TCP MD5 concordata | (dal tuo provider) |
Come installare FRRouting su Debian 12 e Ubuntu 24.04
Installa FRR dal repository apt ufficiale per ottenere l'ultima release stabile (10.5.x a marzo 2026). I pacchetti nelle distribuzioni Debian e Ubuntu sono spesso diverse major version indietro. Il repository ufficiale segue la stable corrente e supporta sia Bookworm che Noble.
Aggiungi la chiave GPG di firma:
curl -s https://deb.frrouting.org/frr/keys.gpg | sudo tee /usr/share/keyrings/frrouting.gpg > /dev/null
Aggiungi il repository. Usa frr-stable per seguire l'ultimo branch stabile:
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
Installa FRR e i tool Python (necessari per frr-reload.py):
sudo apt update && sudo apt install -y frr frr-pythontools
Verifica la versione installata:
sudo vtysh -c "show version" | head -1
Output atteso:
FRRouting 10.5.3 (<hostname>) on Linux(6.8.0-xxx-generic).
FRR si installa come servizio systemd. Abilitalo per sopravvivere ai riavvii e avvialo subito:
sudo systemctl enable --now frr
Verifica che sia in esecuzione:
systemctl status frr
Dovresti vedere active (running) nell'output. FRR esegue piu daemon (zebra, bgpd, ecc.) gestiti da un unico processo padre.
Come abilitare il daemon BGP in FRR
FRR viene distribuito con tutti i daemon di protocollo disabilitati tranne zebra. Devi abilitare esplicitamente bgpd nel file dei daemon prima che FRR avvii un processo BGP. Il file dei daemon si trova in /etc/frr/daemons.
Modifica il file dei daemon:
sudo nano /etc/frr/daemons
Trova la riga bgpd e impostala su yes:
bgpd=yes
Tutti gli altri daemon (ospfd, isisd, ecc.) possono restare a no a meno che non ti servano. Zebra e sempre attivo e gestisce la tabella di routing del kernel.
Ecco cosa fa ciascun daemon:
| Daemon | Scopo | Default |
|---|---|---|
zebra |
Gestione rotte kernel, tracciamento interfacce | sempre attivo |
bgpd |
Protocollo BGP | no |
ospfd |
OSPFv2 | no |
ospf6d |
OSPFv3 (IPv6) | no |
ripd |
RIP | no |
isisd |
IS-IS | no |
staticd |
Rotte statiche via vtysh | no |
Riavvia FRR per applicare la modifica:
sudo systemctl restart frr
Verifica che bgpd sia in esecuzione:
sudo vtysh -c "show bgp summary"
Dovresti vedere % BGP instance not found. E' atteso: bgpd e in esecuzione, ma nessun router bgp e stato ancora configurato. Lo faremo nel prossimo passo.
Fondamenti di vtysh
vtysh e la shell integrata di FRR. Fornisce una CLI in stile Cisco per configurare tutti i daemon FRR da una singola interfaccia. Alcuni elementi essenziali prima di iniziare la configurazione.
Entra in vtysh:
sudo vtysh
Sei ora nella CLI di FRR. Il prompt mostra l'hostname. Le modalita che userai:
| Modalita | Accesso con | Prompt | Scopo |
|---|---|---|---|
| Exec | (default) | # |
Comandi show, verifica |
| Config | configure terminal |
(config)# |
Configurazione globale |
| Router BGP | router bgp ASN |
(config-router)# |
Configurazione BGP |
| Address-family | address-family ipv4 unicast |
(config-router-af)# |
Configurazione per AFI/SAFI |
Per salvare la configurazione corrente su disco:
write memory
Questo scrive su /etc/frr/frr.conf. FRR usa un modello di configurazione integrata per default: tutte le configurazioni dei daemon risiedono in un singolo file.
Esci da vtysh con exit o end (ritorna alla modalita exec da qualsiasi sotto-modalita).
Come configurare una sessione BGP con il provider upstream
Entra in vtysh e nella modalita configure terminal per impostare la configurazione BGP di base. Questo crea il processo router, imposta il router ID, disabilita l'IPv4 unicast automatico (cosi controlli esattamente quali address family sono attive per ogni neighbor), e definisce il peer upstream.
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
Cosa fa ogni direttiva:
bgp router-id: Un identificatore a 32 bit, tipicamente il tuo indirizzo IPv4 principale. Deve essere unico nel peering.no bgp default ipv4-unicast: Impedisce a FRR di attivare automaticamente IPv4 unicast per ogni neighbor. Attivi le address family esplicitamente. E' la pratica standard per configurazioni dual-stack.ttl-security hops 1: Abilita GTSM (RFC 5082). Richiede che i pacchetti arrivino con TTL 254 (a un hop di distanza). Scarta pacchetti BGP spoofati provenienti da sorgenti remote. Mutuamente esclusivo conebgp-multihop.password: Imposta l'autenticazione TCP MD5 (RFC 2385). Entrambi i lati devono concordare sulla stessa stringa. Non tutti i provider la usano. Ometti se il tuo provider non la richiede.soft-reconfiguration inbound: Memorizza le rotte ricevute in RAM cosi puoi applicare modifiche alle policy senza resettare la sessione. Usa piu RAM ma evita session flap durante gli aggiornamenti dei filtri.
Non uscire dalla modalita config. Aggiungeremo address family e filtri nel prossimo passo.
Come annunciare i propri prefissi IPv4 e IPv6
L'origination dei prefissi in FRR richiede due cose: una dichiarazione network nella configurazione BGP, e il prefisso presente nella tabella di routing del kernel. Il modo piu semplice per iniettare il prefisso nel kernel e tramite un'interfaccia dummy. Configureremo prima le interfacce dummy, poi le address family BGP.
Come creare interfacce dummy persistenti per l'origination dei prefissi
Un'interfaccia dummy e un'interfaccia simile al loopback che mantiene un indirizzo IP senza essere legata a hardware fisico. Lo zebra di FRR rileva le rotte dal kernel, quindi se il tuo prefisso e assegnato a un'interfaccia dummy, zebra lo installa e bgpd puo annunciarlo.
Crea le interfacce dummy usando systemd-networkd per renderle persistenti tra i riavvii.
Crea il file netdev:
sudo tee /etc/systemd/network/10-dummy-bgp.netdev > /dev/null << 'EOF'
[NetDev]
Name=dummy-bgp
Kind=dummy
EOF
Crea il file network con i tuoi prefissi:
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
Per l'indirizzo IPv4, usa il primo IP utilizzabile nel tuo prefisso (es. 203.0.113.1/24). Per IPv6, usa qualsiasi indirizzo nel tuo prefisso (es. 2001:db8:abc::1/48).
Abilita systemd-networkd se non e gia attivo e riavvialo:
sudo systemctl enable --now systemd-networkd
sudo systemctl restart systemd-networkd
Verifica che l'interfaccia dummy sia attiva:
ip addr show dummy-bgp
Dovresti vedere sia l'indirizzo IPv4 che IPv6 assegnati all'interfaccia.
Verifica che le rotte siano nel kernel:
ip route show dev dummy-bgp
ip -6 route show dev dummy-bgp
Configurazione address-family
Di nuovo in modalita config di vtysh (o rientra con sudo vtysh poi configure terminal poi 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
Dettagli:
activateabilita il neighbor all'interno di questa address family. Necessario perche abbiamo disabilitatobgp default ipv4-unicast.networkdice a bgpd di originare questo prefisso. Il prefisso deve esistere nella tabella di routing del kernel (zebra lo rileva dall'interfaccia dummy).maximum-prefix 500000 80chiude la sessione se il peer invia piu di 500.000 prefissi IPv4. Il80genera un warning all'80% (400.000). Regola in base al fatto che ricevi una full table o solo la default route. Per una sessione con sola default route, imposta questo a10.- I riferimenti a route-map e prefix-list puntano ai filtri che definiamo dopo.
Come filtrare le rotte BGP con prefix-list e route-map
Il filtraggio delle rotte non e opzionale. Senza filtri in uscita, un errore di configurazione potrebbe fare leak di prefissi che non ti appartengono. Senza filtri in ingresso, accetti rotte bogon e potenzialmente crei un blackhole del traffico. Questo segue la RFC 7454 (BGP Operations and Security).
Per un approfondimento sulle strategie di filtraggio, vedi .
Prefix-list in uscita
Annuncia solo i prefissi che ti appartengono. Nient'altro.
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
Se annunci piu prefissi, aggiungi altre righe permit con numeri di sequenza crescenti.
Prefix-list bogon in ingresso
Rifiuta i prefissi che non dovrebbero mai apparire su internet pubblica. Questa lista segue la 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
L'ultima riga permit in ogni lista accetta tutto cio che non e stato esplicitamente negato. Il le 24 (IPv4) e le 48 (IPv6) rifiutano prefissi troppo specifici: nessuno dovrebbe annunciare un /25 o piu lungo su IPv4, o un /49 o piu lungo su IPv6.
Route-map
Le route-map collegano le prefix-list e offrono un punto dove aggiungere policy aggiuntive in futuro (local-pref, community, 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
Le route-map di esportazione permettono solo i tuoi prefissi. Tutto il resto viene implicitamente negato (FRR nega tutto cio che non e esplicitamente matchato da una route-map). Le route-map di importazione fanno passare il traffico attraverso la prefix-list bogon, che nega i range bogon e permette tutto il resto.
Salva la configurazione:
write memory
Verifica che la configurazione sia stata scritta:
ls -la /etc/frr/frr.conf
Il file dovrebbe mostrare un timestamp di modifica recente con ownership frr:frr e permessi 640.
Come mettere in sicurezza la sessione BGP e proteggere TCP 179
BGP gira sulla porta TCP 179. Qualsiasi host su internet puo tentare di connettersi. Oltre al GTSM e all'autenticazione MD5 gia configurati, servono regole firewall per limitare TCP 179 agli indirizzi dei tuoi peer.
Regole firewall nftables
Installa nftables se non e gia presente. Sulle installazioni minimali di Ubuntu 24.04, non e incluso di default:
sudo apt install -y nftables
Crea la directory /etc/nftables.d/ per i file di configurazione drop-in e aggiungi una direttiva include alla configurazione principale di nftables cosi le regole personalizzate sopravvivono ai riavvii:
sudo mkdir -p /etc/nftables.d
echo 'include "/etc/nftables.d/*.conf"' | sudo tee -a /etc/nftables.conf
Crea un file di configurazione nftables dedicato per 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
Se hai gia una configurazione nftables, integra queste regole nella tua chain input esistente invece di creare una tabella separata. L'approccio qui sopra e autonomo e non interferisce con altre regole firewall.
Per aggiungere piu peer, aggiungi i loro IP al set elements:
elements = { 198.51.100.1, 203.0.113.1 }
Abilita nftables cosi le regole persistono tra i riavvii, poi ricarica per applicare il nuovo include:
sudo systemctl enable --now nftables
sudo systemctl reload nftables
Verifica che le regole siano caricate:
sudo nft list table inet bgp-filter
Dovresti vedere gli IP dei tuoi peer nei set e le regole della chain elencate.
Riepilogo sicurezza
| Protezione | Cosa fa | Configurato dove |
|---|---|---|
GTSM (ttl-security hops 1) |
Scarta pacchetti BGP non provenienti da un peer direttamente connesso | vtysh, per neighbor |
TCP MD5 (password) |
Autentica i segmenti TCP, previene l'iniezione di RST | vtysh, per neighbor |
| Prefix-list (uscita) | Annuncia solo i tuoi prefissi | vtysh, route-map |
| Prefix-list (ingresso) | Rifiuta range bogon/riservati | vtysh, per neighbor |
maximum-prefix |
Chiude la sessione se il peer invia troppe rotte | vtysh, per address-family |
| nftables | Limita TCP 179 agli IP dei peer noti | /etc/nftables.d/bgp.conf |
Come verificare la sessione BGP e la propagazione dei prefissi
Dopo aver salvato la configurazione con write memory, la sessione BGP dovrebbe iniziare a stabilirsi. La verifica avviene in tre fasi: controlli locali con vtysh, tabella di routing del kernel e looking glass esterni.
Comandi di verifica vtysh
| Comando | Cosa mostra |
|---|---|
show bgp summary |
Tutti i peer, il loro stato, prefissi ricevuti |
show bgp ipv4 unicast |
Tabella BGP IPv4 |
show bgp ipv6 unicast |
Tabella BGP IPv6 |
show bgp ipv4 unicast neighbors PEER_IPV4 advertised-routes |
Cosa stai inviando al peer |
show bgp ipv4 unicast neighbors PEER_IPV4 received-routes |
Cosa ti sta inviando il peer (richiede soft-reconfiguration inbound) |
show ip bgp neighbors PEER_IPV4 |
Stato dettagliato del neighbor, uptime, capability |
Controlla lo stato della sessione:
sudo vtysh -c "show bgp summary"
Output atteso (abbreviato):
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
Nota la colonna State/PfxRcd. Un numero significa che la sessione e stabilita e che quel numero di prefissi e stato ricevuto. Se vedi Active, Connect o OpenSent, la sessione non e ancora attiva. Consulta la sezione successiva per la risoluzione dei problemi.
Verifica che il tuo prefisso venga annunciato:
sudo vtysh -c "show bgp ipv4 unicast neighbors PEER_IPV4 advertised-routes"
Il tuo prefisso dovrebbe apparire nell'output. Se non c'e, verifica che:
- L'interfaccia dummy sia attiva (
ip addr show dummy-bgp). - La rotta esista nel kernel (
ip route show YOUR_PREFIX_V4). - La dichiarazione
networkcorrisponda esattamente al prefisso e alla maschera.
Verifica esterna
Controlla dall'esterno della tua rete che il prefisso sia visibile su internet.
Dalla tua macchina locale (non il VPS):
traceroute YOUR_PREFIX_V4_FIRST_IP
Usa bgp.tools per cercare il tuo prefisso e verificare:
- L'AS di origine corrisponde al tuo ASN.
- Lo stato ROA mostra "Valid" (non "Unknown" o "Invalid").
- Il prefisso e visibile da piu punti di osservazione.
Puoi anche interrogare il looking glass RIPE RIS:
curl -s "https://stat.ripe.net/data/looking-glass/data.json?resource=YOUR_PREFIX_V4" | python3 -m json.tool | head -50
Persistenza della configurazione
FRR salva la configurazione su /etc/frr/frr.conf quando esegui write memory in vtysh. Finche il servizio FRR e abilitato (systemctl enable frr), legge questo file all'avvio.
Ricontrolla entrambi i meccanismi di persistenza:
sudo systemctl is-enabled frr
Dovrebbe restituire enabled.
sudo vtysh -c "show running-config" | head -5
Confronta con il file salvato:
head -5 /etc/frr/frr.conf
Dovrebbero corrispondere. Se divergono, esegui di nuovo write memory.
L'interfaccia dummy persiste tramite systemd-networkd (configurata in precedenza). Verifica:
sudo systemctl is-enabled systemd-networkd
frr.conf completo e annotato
Ecco una configurazione di esempio completa come riferimento. Sostituisci tutti i placeholder con i tuoi valori.
frr version 10.5.3
frr defaults traditional
hostname bgp-vps
log syslog informational
!
! --- Prefix-list: uscita (solo i nostri prefissi) ---
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-list: filtri bogon in ingresso ---
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-map ---
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
!
! --- Configurazione BGP ---
router bgp 212345
bgp router-id 198.51.100.2
no bgp default ipv4-unicast
!
! Peer IPv4
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
!
! Peer IPv6
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
!
Risoluzione dei problemi
Sessione BGP bloccata nello stato Active o Connect
La sessione sta tentando di stabilirsi ma TCP 179 non riesce a connettersi. Controlla in ordine:
- Firewall: Riesci a raggiungere il peer sulla porta TCP 179?
sudo nft list ruleset | grep 179 - IP del peer: L'IP del neighbor e corretto? Gli errori di battitura sono la causa piu comune.
sudo vtysh -c "show bgp neighbors PEER_IPV4" | grep "BGP state" - MD5 non corrispondente: Se usi TCP MD5, entrambi i lati devono avere esattamente la stessa stringa password. Non c'e un messaggio di errore utile per questo. La sessione fallisce silenziosamente.
- GTSM: Se
ttl-security hops 1e impostato ma il peer e a piu hop di distanza (attraverso NAT o tunnel), il controllo TTL fallisce. Rimuovittl-securitye usaebgp-multihopper sessioni multi-hop.
Prefisso non visibile esternamente
La sessione e stabilita ma il prefisso non appare nei looking glass.
-
Controlla le rotte annunciate:
sudo vtysh -c "show bgp ipv4 unicast neighbors PEER_IPV4 advertised-routes"Se il tuo prefisso non e elencato, il filtro in uscita lo sta bloccando. Verifica che la prefix-list corrisponda al tuo prefisso esatto.
-
Controlla la rotta nel kernel:
ip route show YOUR_PREFIX_V4Se manca, l'interfaccia dummy e disattivata o mal configurata.
-
Controlla la validita ROA: Se il tuo ROA e mancante o errato, le reti che validano RPKI scarteranno il tuo annuncio. Verifica su RIPE RPKI Validator.
Lettura dei log
FRR scrive su syslog per default. Per seguire gli eventi specifici di BGP:
journalctl -u frr -f --grep="bgpd"
Per un output piu dettagliato, abilita il debug temporaneamente in vtysh:
debug bgp updates
debug bgp keepalives
Disattivalo quando hai finito (e molto prolisso):
no debug bgp updates
no debug bgp keepalives
Prossimi passi
- Aggiungere validazione RPKI: Configura il supporto RPKI integrato di FRR per validare le rotte in ingresso rispetto ai dati ROA. Vedi .
- Filtraggio avanzato: Costruisci route-map piu granulari con matching di community, filtri AS-path e tuning della local-preference. Vedi .
- Monitoraggio: Configura il monitoraggio delle sessioni BGP con tool come Prometheus + bgp_exporter o trap SNMP Zabbix per ricevere alert quando una sessione cade.
Copyright 2026 Virtua.Cloud. Tutti i diritti riservati. Questo contenuto e un'opera originale del team Virtua.Cloud. La riproduzione, ripubblicazione o redistribuzione senza autorizzazione scritta e vietata.
Pronto a provare?
Distribuisci il tuo server in pochi secondi. Linux, Windows o FreeBSD.
Vedi piani VPS