Guida MikroTik
RoutingAvanzato

BGP in RouterOS v7: instance, connection, local.role e output.network

Configura BGP v7 in RouterOS: creazione dell'instance, connessioni eBGP e iBGP con local.role, annuncio di prefissi con output.network e differenze fondamentali rispetto alla v6.

BGP in RouterOS v7: cosa cambia rispetto alla v6

In RouterOS v6 la configurazione BGP era concentrata in /routing/bgp/instance e /routing/bgp/peer. In RouterOS v7 l'architettura è completamente diversa: l'istanza si dichiara in /routing/bgp/instance con un AS number, e ogni sessione peer è una entry in /routing/bgp/connection con sub-parametri dotted (local.role, remote.address, remote.as, output.network, ecc.). Il vecchio menu /routing/bgp/peer non esiste più.

Quando un WISP ha davvero bisogno di BGP

BGP serve quando: (1) hai un tuo blocco IP pubblico (PA o PI) e un AS number e vuoi annunciarlo; (2) hai più upstream e vuoi multihoming/ridondanza tra operatori; (3) fai peering a un IXP (es. MIX, TOP-IX, NaMeX). Se hai un solo upstream e nessun AS, ti basta una default route statica — non complicarti la vita con BGP.

Configurazione eBGP di base verso l'upstream
# 1. Creare l'istanza BGP con il proprio AS number
/routing/bgp/instance/add \
  name=bgp-main \
  as=65001 \
  router-id=10.255.0.1

# 2. Creare la connessione eBGP verso il peer ISP (AS 65002)
/routing/bgp/connection/add \
  name=peer-upstream \
  instance=bgp-main \
  remote.address=203.0.113.2 \
  remote.as=65002 \
  local.role=ebgp \
  local.address=203.0.113.1 \
  output.network=mynetworks \
  output.filter=bgp-out \
  input.filter=bgp-in \
  comment="Peering eBGP con ISP upstream"

# 3. Definire i prefissi da annunciare al peer
/routing/bgp/network/add \
  network=192.0.2.0/24 \
  comment="Il nostro blocco IP pubblico"

# Verificare sessione BGP e rotte ricevute
/routing/bgp/session/print
/ip/route/print where bgp
Annunciare un prefisso richiede che esista una rotta che lo copre nel RIB (es. la connected del /24, o una blackhole sull'aggregato). Se annunci 192.0.2.0/24 ma non hai nessuna rotta per quel /24, BGP non lo propaga. Combina sempre l'annuncio con una blackhole sull'aggregato (vedi articolo blackhole) per l'anti-loop.

local.role: il parametro chiave per eBGP e iBGP

Il parametro local.role definisce il tipo di sessione BGP e attiva le policy di sicurezza predefinite (RFC 8212: senza policy esplicite, eBGP non annuncia/accetta nulla per default). I valori principali:

ValoreUsoComportamento
ebgpTra AS diversi (upstream, peer)Decrementa TTL, non propaga attributi iBGP
ibgpStesso AS (router interni)Propaga rotte BGP internamente, niente loop via AS-path
ebgp-rsRoute server di un IXPNon altera next-hop né AS-path
ebgp-rs-clientClient di un route serverLato client del route server IXP
Valori di local.role in RouterOS v7
Sessione iBGP con route reflector
# Router A (route reflector) — AS 65001
/routing/bgp/instance/add name=ibgp-rr as=65001 router-id=10.255.0.1

/routing/bgp/connection/add \
  name=ibgp-to-routerB \
  instance=ibgp-rr \
  remote.address=10.255.0.2 \
  local.role=ibgp \
  local.address=10.255.0.1 \
  reflect=yes \
  comment="Route Reflector -> Client"

# Router B (client del RR) — AS 65001
/routing/bgp/instance/add name=ibgp-client as=65001 router-id=10.255.0.2

/routing/bgp/connection/add \
  name=ibgp-to-rr \
  instance=ibgp-client \
  remote.address=10.255.0.1 \
  local.role=ibgp \
  local.address=10.255.0.2
iBGP richiede full-mesh (ogni router parla con ogni altro) OPPURE un route reflector. Per più di 3-4 router BGP interni, il route reflector (reflect=yes) evita l'esplosione delle sessioni. Le sessioni iBGP vanno tra le loopback dei router (non gli IP di interfaccia), così sopravvivono alla caduta di un singolo link.

Ricevere solo la default (non la full table)

La full table BGP supera i 950.000 prefissi: un router entry-level (poca RAM) non la regge. La maggior parte dei WISP single/dual-homed non ha bisogno della full table — basta ricevere una default route dall'upstream. Si filtra l'input per accettare solo 0.0.0.0/0, risparmiando RAM e CPU.

Accettare solo la default dall'upstream
# Chain di filtro: accetta solo 0.0.0.0/0, rifiuta tutto il resto
/routing/filter/rule/add chain=bgp-in-defaultonly \
  rule="if (dst==0.0.0.0/0) { accept }"
/routing/filter/rule/add chain=bgp-in-defaultonly rule="reject"

# Applica alla connessione (l'upstream deve essere configurato per inviarti la default)
/routing/bgp/connection/set [find name=peer-upstream] input.filter=bgp-in-defaultonly
ATTENZIONE migrazione v6→v7: ricrea OGNI peer come /routing/bgp/connection con instance= che punta a /routing/bgp/instance. Il vecchio /routing/bgp/peer non esiste. Inoltre per RFC 8212 una sessione eBGP v7 SENZA input.filter/output.filter espliciti non scambia rotte: imposta sempre i filtri (anche solo 'accept' se vuoi tutto).
BGPeBGPiBGPBGP v7routing/bgp/connectionlocal.roleoutput.networkASpeerprefixroute reflectionBGP instanceROSv7full tabledefault-originateupstream

Configura senza fatica con l'AI

In WispOS l'agente AI genera la configurazione RouterOS dalle tue parole e un tutor ti guida passo passo.

Prova WispOS