Introduzione
In questo articolo viene descritto come filtrare i prefissi Border Gateway Protocol (BGP) con numeri Autonomous System (AS) da 4 byte in Cisco IOS®.
Premesse
I numeri AS a 4 byte sono stati introdotti in BGP quando il pool di numeri AS a 2 byte liberi è diventato basso. Ciò significa che un numero AS può ora essere un numero a 2 byte o a 4 byte. RFC 6793 specifica i numeri AS a 4 byte. Un numero AS a 2 byte è un numero compreso tra 1 e 65.535. Un numero AS a 4 byte è un numero compreso tra 1 e 4.294.967.295.
Il numero AS a 4 byte può essere rappresentato in modo punteggiato o come numero semplice. Un esempio di numero AS a 4 byte puntato è 7,52359. Questo è il punto della notazione AS. Un esempio di numero a 4 byte semplice è 511111. Si tratta della notazione AS asplain. 7.52359 è lo stesso di 511111.
Un router Cisco IOS può utilizzare la notazione AS. Nelle versioni più recenti di Cisco IOS, il valore predefinito è asplain. Per utilizzare la notazione AS con punti, è possibile usare il comando bgp asnotation dot.
Se per qualsiasi motivo l'amministratore di rete non desidera inviare prefissi BGP con uno o più numeri AS a 4 byte nel PERCORSO AS verso un peer BGP (eBGP) esterno, questi prefissi possono essere filtrati. Per ottenere questo risultato, il documento fornisce un possibile filtro. È possibile che si desideri impedire a un altoparlante BGP di inviare prefissi BGP con numeri AS a 4 byte nel PERCORSO AS. Un esempio potrebbe essere rappresentato da un difetto del diffusore BGP ricevente che determina un comportamento avverso, che si verifica solo per i prefissi BGP con numeri AS a 4 byte nel PERCORSO AS.
Filtro numerico AS da 4 byte
Nota: Il filtro illustrato in questa sezione può essere utilizzato solo quando il protocollo BGP sul router viene eseguito in modalità punto di annotazione.
Questo filtro può filtrare i prefissi con PERCORSI AS che contengono uno o più numeri AS a 4 byte.
router bgp 1
bgp asnotation dot
neighbor 10.1.1.2 remote-as 2
address-family ipv4
neighbor 10.1.1.2 activate
neighbor 10.1.1.2 filter-list 1 out
ip as-path access-list 1 deny .*[0-9]+\.[0-9]+.*
ip as-path access-list 1 permit .*
Di seguito viene riportato un esame del filtro.
- [0-9] indica qualsiasi cifra.
- Il segno + indica una o più occorrenze. Quindi [0-9]+ significa qualsiasi numero, perché possono essere presenti più cifre.
- \. indica . (punto). La barra rovesciata è necessaria per essere certi che il router non tratti il punto come carattere speciale ma come un punto. . è un carattere speciale e indica qualsiasi carattere (il carattere jolly).
- Il valore * indica zero o più dei precedenti. Quindi .* significa abbinare qualsiasi cosa.
- Il filtro completo .*[0-9]+\.[0-9]+.* indica qualsiasi cosa con un punto al suo interno.
Di seguito è riportato un esempio:
Il router 1 (R1) riceve otto prefissi in BGP. Il prefisso BGP 10.100.1.1/32 è l'unico prefisso con un percorso AS costituito solo da numeri AS di 2 byte. Tutti gli altri prefissi BGP hanno uno o più numeri AS a 4 byte in AS PATH.
R1#show bgp ipv4 unicast
BGP table version is 9, local router ID is 10.100.1.100
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 10.100.1.1/32 10.1.3.4 0 0 4 100 200 300 i
*> 10.100.1.2/32 10.1.3.4 0 0 4 1.34464 3.3392 4.37856 i
*> 10.100.1.3/32 10.1.3.4 0 0 4 1.34464 200 4.37856 i
*> 10.100.1.4/32 10.1.3.4 0 0 4 500 4.37856 600 ?
*> 10.100.1.5/32 10.1.3.4 0 0 4 7.41248 3200 400 65000 ?
*> 10.100.1.6/32 10.1.3.4 0 0 4 50 3200 400 9.60176 ?
*> 10.100.1.7/32 10.1.3.4 0 0 4 66 1.57464 77 5.17320 99 ?
*> 10.100.1.8/32 10.1.3.4 0 0 4 7.52359 99 66 99 5.18307
3.37515 99 66 3.37515 99 ?
R1 annuncia solo i prefissi senza alcun numero AS a 4 byte nel percorso AS verso il peer BGP 10.1.1.2.
R1#show bgp ipv4 unicast neighbors 10.1.1.2 advertised-routes
BGP table version is 9, local router ID is 10.100.1.100
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 10.100.1.1/32 10.1.3.4 0 0 4 100 200 300 i
Total number of prefixes 1
È possibile verificare il filtro .*[0-9]+\.[0-9]+.* dalla tabella BGP con il comando show ip bgp regexp:
R1#show ip bgp regexp .*[0-9]+\.[0-9]+.*
BGP table version is 9, local router ID is 10.100.1.100
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 10.100.1.2/32 10.1.3.4 0 0 4 1.34464 3.3392 4.37856 i
*> 10.100.1.3/32 10.1.3.4 0 0 4 1.34464 200 4.37856 i
*> 10.100.1.4/32 10.1.3.4 0 0 4 500 4.37856 600 ?
*> 10.100.1.5/32 10.1.3.4 0 0 4 7.41248 3200 400 65000 ?
*> 10.100.1.6/32 10.1.3.4 0 0 4 50 3200 400 9.60176 ?
*> 10.100.1.7/32 10.1.3.4 0 0 4 66 1.57464 77 5.17320 99 ?
*> 10.100.1.8/32 10.1.3.4 0 0 4 7.52359 99 66 99 5.18307
3.37515 99 66 3.37515 99 ?
Il filtro .*[0-9]+\.[0-9]+.* filtra tutti i prefissi con uno o più numeri AS a 4 byte nell'attributo AS PATH.
Di seguito è riportato un altro modo per verificare i filtri applicati alla tabella BGP:
R1#show bgp ipv4 unicast filter-list 1
BGP table version is 9, local router ID is 10.100.1.100
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 10.100.1.1/32 10.1.3.4 0 0 4 100 200 300 i
R2 ha ricevuto solo il prefisso 10.100.1.1/32 da R1 a causa del filtro.
R2#show bgp ipv4 unicast
BGP table version is 6, local router ID is 10.1.1.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 10.100.1.1/32 10.1.1.1 0 1 4 100 200 300 i
Configurazione alternativa
In alternativa, è possibile utilizzare una route-map anziché un filter-list:
router bgp 1
bgp asnotation dot
neighbor 10.1.1.2 remote-as 2
address-family ipv4
neighbor 10.1.1.2 route-map no-4byte out
ip as-path access-list 1 deny .*[0-9]+\.[0-9]+.*
ip as-path access-list 1 permit .*
route-map no-4byte permit 10
match as-path 1
Modalità asplain
Quando il comando bgp asnotation dot viene rimosso, ossia l'annotazione è semplice, l'output non visualizza più i punti nei numeri AS a 4 byte. Questo output è lo stesso mostrato in precedenza, con la differenza che i numeri AS punteggiati sono ora come semplici.
R1#show bgp ipv4 unicast
BGP table version is 9, local router ID is 10.100.1.100
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 10.100.1.1/32 10.1.3.4 0 0 4 100 200 300 i
*> 10.100.1.2/32 10.1.3.4 0 0 4 100000 200000 300000 i
*> 10.100.1.3/32 10.1.3.4 0 0 4 100000 200 300000 i
*> 10.100.1.4/32 10.1.3.4 0 0 4 500 300000 600 ?
*> 10.100.1.5/32 10.1.3.4 0 0 4 500000 3200 400 65000 ?
*> 10.100.1.6/32 10.1.3.4 0 0 4 50 3200 400 650000 ?
*> 10.100.1.7/32 10.1.3.4 0 0 4 66 123000 77 345000 99 ?
*> 10.100.1.8/32 10.1.3.4 0 0 4 511111 99 66 99 345987
234123 99 66 234123 99 ?
Il comando BGP show con l'espressione regolare usata nel filtro sul router non filtra i prefissi con un punto nella tabella BGP, perché non ci sono più prefissi con il formato numero AS a 4 byte con punti nella tabella BGP. I numeri AS a 4 byte sono ora in formato normale.
R1#show ip bgp regexp .*[0-9]+\.[0-9]+.*
R1#
Il comando BGP show con l'elenco dei filtri mostra anche che il filtro non funziona quando il router è in modalità semplice:
R1#show bgp ipv4 unicast filter-list 1
BGP table version is 9, local router ID is 10.100.1.100
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 10.100.1.1/32 10.1.3.4 0 0 4 100 200 300 i
*> 10.100.1.2/32 10.1.3.4 0 0 4 100000 200000 300000 i
*> 10.100.1.3/32 10.1.3.4 0 0 4 100000 200 300000 i
*> 10.100.1.4/32 10.1.3.4 0 0 4 500 300000 600 ?
*> 10.100.1.5/32 10.1.3.4 0 0 4 500000 3200 400 65000 ?
*> 10.100.1.6/32 10.1.3.4 0 0 4 50 3200 400 650000 ?
*> 10.100.1.7/32 10.1.3.4 0 0 4 66 123000 77 345000 99 ?
*> 10.100.1.8/32 10.1.3.4 0 0 4 511111 99 66 99 65509 56
100000 ?
Il filtro as-path non funziona:
R1#show bgp ipv4 unicast neighbors 10.1.1.2 advertised-routes
BGP table version is 9, local router ID is 10.100.1.100
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 10.100.1.1/32 10.1.3.4 0 0 4 100 200 300 i
*> 10.100.1.2/32 10.1.3.4 0 0 4 100000 200000 300000 i
*> 10.100.1.3/32 10.1.3.4 0 0 4 100000 200 300000 i
*> 10.100.1.4/32 10.1.3.4 0 0 4 500 300000 600 ?
*> 10.100.1.5/32 10.1.3.4 0 0 4 500000 3200 400 65000 ?
*> 10.100.1.6/32 10.1.3.4 0 0 4 50 3200 400 650000 ?
*> 10.100.1.7/32 10.1.3.4 0 0 4 66 123000 77 345000 99 ?
*> 10.100.1.8/32 10.1.3.4 0 0 4 511111 99 66 99 65509 56
100000 ?
Network Next Hop Metric LocPrf Weight Path
Total number of prefixes 8
Filtro per modalità semplice
Questo filtro può essere utilizzato quando il protocollo BGP sul router viene eseguito in modalità semplice:
ip as-path access-list 4 deny _6553[6-9]_
ip as-path access-list 4 deny _655[4-9][0-9]_
ip as-path access-list 4 deny _65[6-9][0-9][0-9]_
ip as-path access-list 4 deny _[6][6-9][0-9][0-9][0-9]_
ip as-path access-list 4 deny _[7-9][0-9][0-9][0-9][0-9]_
ip as-path access-list 4 deny _[1-9][0-9][0-9][0-9][0-9][0-9]+_
ip as-path access-list 4 permit .*
Oppure, ecco lo stesso, ma più compatto:
ip as-path access-list 4 deny _(6553[6-9]|655[4-9][0-9]|65[6-9][0-9][0-9]|6[6-9]
[0-9][0-9][0-9]|[7-9][0-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9][0-9]+)_
ip as-path access-list 4 permit .*
A causa di questo filtro, viene filtrato qualsiasi numero AS superiore a 65.535. Anche in questo caso, è possibile applicare la regola al router BGP adiacente se si utilizza un elenco di filtri o una mappa delle route.
Nota: Il filtro illustrato in questo articolo non funziona su una sessione BGP (iBGP) interna, che include su un router Reflector.