|
|
Gianrico Fichera | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
BGP |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Articolo beta 0.9 -revisione 16/3/03
L'allocazione degli indirizzi
della rete Internet mondiale e' responsabilita' di cinque enti,
chiamati RIR (Regional Internet Registry): RIPE, l'ARIN,
APNIC, il LACNIC e l'AFRINIC. Il RIPE si occupa di Europa e Africa
del Nord, l'ARIN dell'America del Nord, l'APNIC dell'Asia e del
Pacifico, il LACNIC dell'America Latina, l'AFRINIC per l'Africa. I RIR assegnano gli indirizzi Internet a chiunque ne chieda in numero "sufficiente" a fronte di un canone annuale. I RIR normalmente assegnano indirizzi con almeno una mask di /21. Queste sono 8 classi C. Prima di poter ottenere le classi si dovra' dimostrare di avere effettivamente bisogno di un tale numero di indirizzi IP indicandone l'utilizzo. Il motivo di cio' e' dovuto al fatto che la risorsa "indirizzo IP" e' limitata e anzi di fronte ad un prossimo esaurimento delle risorse IPV4 i RIR adottano regole sempre piu' restrittive, invitando il passaggio a IPV6. L'assegnazione diretta di indirizzi IP dal RIPE si puo' ottenere dopo essere diventati LIR (https://www.ripe.net/membership/new-members/registration.html). Dopo l'iscrizione vi arrivera' comunicazione dal RIPE. Si dovra' effettuare il pagamento di quanto dovuto e si diventa LIR. Ogni LIR e' associato a un RIR. Il nome LIR deriva dal fatto che si diventa responsabile locale dell'assegnazione di risorse IP. Per i costi vedi anche questo link: http://www.ripe.net/membership/new-members/index.html Normalmente dai piccoli utenti fino all'enterprise difficilmente si contatta direttamente il RIPE (in Europa). Piuttosto bisogna contattare un ISP in grado di assegnarci le classi (l'elenco e' qui: http://www.ripe.net/membership/indices/index.html ). Infatti chi ci assegna gli indirizzi IP e' normalmente il nostro fornitore di banda Internet, che dovra' comunque comunicare al RIPE l'intestatario degli stessi, a meno che non si tratti semplicemente di un singolo o di una coppia di indirizzi. Basta avere un ADSL con 8 indirizzi IP assegnati per figurare nel database del RIPE e quindi essere anche facilmente identificabili a partire dagli indirizzi ip in uso. Normalmente avere in uso degli indirizzi
assegnati dal nostro provider invece che direttamente dal
RIPE non e' un problema, anzi la maggior parte degli utenti non ne e'
neppure consapevole. Questo pero' implica una dipendenza
dal nostro provider, che puo' diventare fastidiosa se si
utilizzano gli indirizzi IP assegnati per fornire servizi
Internet. La tanto agognata indipendenza puo' essere fondamentale anche in contesti in cui vi sono requisiti di ridondanza e affidabilita' che trovano l'anello piu' debole della catena proprio nell'avere un unico provider fornitore di banda Internet. In questi casi cio' che va fatto e' dividere la banda tra due differenti fornitori, soluzione sicuramente piu' costosa, ma in grado di consentire alti livelli di up-time e, come vedremo, l'indipendenza dal singolo provider anche per gli indirizzi IP. Infatti per gestire una situazione del genere, chiamata di multihoming, si dovrebbero avere necessariamente degli indirizzi IP propri, e non di proprieta' di uno dei due provider in quanto, in tal caso, i pacchetti in ingresso giungerebbero sicuramente da un link solo, consentendo un bilanciamento del traffico solo in uscita. In casi di multihoming come questo, e' necessario ottenere degli IP propri, che per l'Europa chiederemo al RIPE. Si puo' anche richiedere al RIPE solo l'autonomous system (AS), nel caso in cui il fornitore di connettivita' ci assegni delle classi indipendenti. Ma cosa vuol dire essere Autonomous System (AS)? Il RIPE non assegna solo indirizzi IP ma fornisce anche il numero AS. Gli AS suddividono la Internet mondiale in aree, ognuna delle quali e' sotto una comune amministrazione. Il numero di AS non e' un concetto astratto e burocratico ma piuttosto un valore numerico che i router stessi utilizzano quando si scambiamo le informazioni di routing tramite il protocollo BGP. Il numero di AS inizialmente era a 16bit. Adesso si utilizzano AS a 32 bits. Ogni LIR al RIPE deve avere un numero di AS. Chi possiede un AS puo' annunciare ai router degli AS vicini i propri indirizzi assegnati dal RIPE. Questi si propagheranno nella Internet mondiale se i router degli AS vicini lo permettono. Il protocollo di routing che agisce tra gli AS e consente la propagazione delle route a livello mondiale e' il BGP (Border Gateway Protocol).
Multihoming e classi indipendenti Un ISP e' un LIR, ovvero e' un membro del RIPE
con la responsabilita' di gestire un numero significativo di
indirizzi IP, almeno una /21. Possono essere LIR anche soggetti
diversi dagli ISP purche' abbiamo una necessita' di indirizzi IP
pubblici sufficientemente grande (superiore alla singola classe
C) o quanto meno riescono a dimostrarlo. Il LIR paga un canone
annuo al RIPE avra' un AS assegnato e puo' utilizzare
personalmente o assegnare a terzi i propri indirizzi IP. Le classi si chiamano PA perche' il LIR e' libero di aggregarle nei suoi annunci BGP verso gli upstream provider. Se il cliente cambia provider perdera' le sue classi. Ovvero il cliente deve avere come upstream provider il LIR per poter utilizzare le sue classi. Se il cliente ha esigenze particolari, ad esempio vuole un numero di IP superiore a quelli normalmente assegnati (che sono ad esempio 4,8,16 o 32 ip), vuole una sua autonomia amministrativa nell'uso degli indirizzi IP, vuole un AS o vuole un multihoming con BGP. Se il cliente non deve assegnare gli IP a terzi puo richiedere classi IP. Altrimenti puo' diventare lui stesso LIR. Le classi PI possono essere assegnate da un LIR ad un utente finale sponsorizzandolo. In questo caso il LIR richiedera' le risorse al
RIPE per conto del cliente. Le classi PI assegnate non faranno
parte dello spazio PA assegnato al LIR dal RIPE. Il cliente avra'
un contratto siglato con il LIR e diventera' un "Direct
Assignment User". In questo caso il cliente deve siglare con il
LIR un contratto di tipo "Independent Assignment Request and
Maintenance Agreement" e deve pagare una quota al LIR e non al
RIPE. Il vantaggio per il cliente e' che deve pagare il LIR con
il quale puo' trattare per un prezzo normalmente inferiore a
quello che si paga direttamente al RIPE. Se il LIR e' un'azienda
che termina la sua attivita' il cliente puo' chiedere di
mantenere le sue classi con un nuovo LIR oppure di passare al
rapporto diretto con il RIPE. Se un utente ha classi PA non puo' richiedere
un numero di AS. In ogni caso con classi PI il cliente non puo'
cedere indirizzi IP a terzi.
I vari protocolli di routing descritti nei vari documenti di questo sito web, quali RIP, IGRP, EIGRP, OSPF, sono in grado di gestire reti di dimensione da piccola a media, se vogliamo medio/grande, come nel caso di OSPF. Ma una caratteristica comune a tutti questi protocolli e' che sono pensati per funzionare all'interno di un'unica amministrazione. Sostanzialmente sono pensati per essere gestiti da una stessa organizzazione (basta pensare al comportamento delle distribute-list in OSPF). Ad esempio un router di una rete OSPF, se mal configurato, puo' creare problemi alla rete intera. Ogni router OSPF contiene nella sua tabella informazioni topologiche su tutti i router della sua area. Ma la rete Internet mondiale e' tutt'altra cosa. Due router possono appartenere a due amministrazioni differenti ed essere gestiti da persone di enti differenti. Non attiverei mai l'OSPF del mio ISP all'interno dei router dei clienti, a meno che essi non siano privi della possibilita' di amministrarli. Se c'e' necessita' di amministrazione configurerei la macchina del cliente con delle route statiche, oppure, usando il BGP se il cliente ha un proprio numero di AS. BGP interviene ai confini del nostro AS, scambiando le informazioni di routing con gli altri AS. Con BGP vi e' la possibilita' di definire chiaramente cosa annunciare ai router degli AS vicini e cosa accettare da loro. Una buona configurazione BGP rifiuta dagli AS vicini cio' che gli AS vicini non sono amministrativamente tenuti ad annunciare. Ma ecco un esempio:
All'interno dell'AS numero 65512 vi e' un'organizzazione unica, che ad esempio puo' essere un ISP, oppure una enterprise. All'interno dell'organizzazione vi sara' una rete con decine di router, con protocollo EIGRP, o OSPF ad esempio. Ma a noi interessano le relazioni di routing tra questa organizzazione e le altre, che potrebbero essere altri ISP. Cosi' se AS65512 e' un provider nazionale allora AS65513, AS65522 e AS65533 potrebbero essere i tre provider che gli forniscono la banda internazionale. Oppure AS65533 e' una enterprise che prende banda Internet dai due provider nazionali AS65512 e AS65513. Poi il provider AS65512 prende la sua banda internazionale da AS65513. AS65522 non ha banda internazionale diretta ma la compra da AS65512. BGP consente l'interfacciamento tra queste diverse entita' in modo sicuro ed efficiente. Ecco come:
Tra due router con BGP sono possibili due tipi di sessioni: I-BGP, E-BGP. Il primo, internal BGP, si ha quando i due router appartengono allo stesso AS, come A ed F in figura. Il secondo, external BGP, e' tra AS differenti, come A e B, o A e C in figura. Nel caso di I-BGP vale la seguente importante regola:
La figura mostra sicuramente meglio il concetto:
Il router B riceve la tabella dal router A ma non la propaga al router C. Il router D riceve la tabella dal router E e la propaga al router C. Il router C non la propaga al router B. Se il nostro scopo e' di avere entrambe le tabelle di routing su B e C in modo da poter scegliere il percorso migliore allora e' necessario creare le sessioni BGP formando una topologia FULL-MESH: dobbiamo aggiungere delle sessioni BGP tra A e C e tra D e B. Esempio di configurazione
Annunciare solo le route originate da questo AS !
Numeri di AS dei principali operatori (aggiornato 5 Gennaio 2010)
Community Le community sono delle sequenze numeriche che si possono agganciare a delle route. Sostanzialmente sono delle informazioni aggiuntive che si possono 'attaccare' come etichette a delle route. Con parole semplici l'utilita' sta nel fatto che se possiamo agganciare delle sequenze numeriche a delle route possiamo inviare ai router BGP delle informazioni aggiuntive che possono utilizzare, ad esempio, per differenziale le route per provenienza. In questo esempio vediamo una route proveniente da un provider che non ha associato delle community (o che ha filtrato) e un provider che le invia. Ci sono numerose community associate alla riga di route d'esempio, e ognuna di esse e' una indicazione della provenienza della route (Le X sono delle cifre cancellate appositamente). gianrico#sh ip
bgp 8.2.120.0 Per propagare le community ad un router con cui facciamo peering e' necessario usare il comando: neighbor
XX.XX.XX.XX send-community both he community attribute is a transitive, optional attribute in the range of 0 to 4,294,967,200. The community attribute is a way to group destinations in a certain community and apply routing decisions according to those communities. Load-balancing
Con il comando "maximum-path" si puo' fare in modo che BGP tenga
piu' route verso le destinazioni attive. Di default vengono
scartate tutte tranne una. Fact #1: Load-balancing is always unidirectionalCEF can use three load distribution methods: Per-host load-balancing, where the algorithm selects the outgoing path based on the combination of the source and destination IP address. Per-port load balancing, where even distinct layer-4 (TCP or UDP) sessions between the same pair of hosts can flow over different paths. Per-packet load balancing, where each successive packet is sent onto a different outbound path. Per-packet load balancing can easily result in out-of-order packets that significantly reduce TCP session throughput or result in loss of data in some UDP-based protocols, for example SNA or NetBIOS Fast Sequenced Transport (FST) or Voice-over-IP (VoIP) transport. Even worse, out-of-order packets might be interpreted as attacks by some firewalls. RULE Avoid per-packet load balancing at all cost. Last but not least, sometimes you should replace IP-based load balancing with layer-2 mechanisms, for example link bundling with multilink PPP (for serial links) or EtherChannel (for Ethernet-based point-to-point links).
Local-preference
Il parametro local-preference di
default e' 100. Il valore e' da
0 to 4294967295. Il valore e' inviato solo
ai router con lo stesso AS. I valori piu' bassi hanno priorita'
inferiore di quelli piu' alti.
The
ESEMPIO DI FILTRI IN INGRESSO
neighbor
192.168.30.100 route-map PROVIDER1_IN in 2. Nell'esempio che segue, che possiamo considerare applicato alle route BGP in input, viene assegnata una priorita' locale solo ad alcune classi che cadono in una access-list che avranno priorita' inferiore. Avra' conseguenze sul traffico in uscita verso queste destinazioni. route-map
PROVIDER1_IN permit 20 La seconda route-map vuota e' un permit any per le righe restanti. Altrimenti in tabella BGP resteranno SOLO quelle che fanno match con l'access-list 3 !!! Se non si mette nulla e' come se ci fosse un "route-map PROVIDER1_IN deny 30"
route-map
PROVIDER1_IN deny 5 4. Nell'esempio che segue abbiamo sempre una sessione BGP con PROVIDER1 che ci fornisce connettivita'. Vogliamo dare una priorita' piu' alta in uscita (250) solo verso reti all'interno dell'AS di PROVIDER (che in questo esempio e' il numero 65000), dando priorita' inferiore a tutte le altre. Questo e' abbastanza ovvio perche' in ogni caso il percorso piu' breve per raggiungere le reti di PROVIDER1 e attraverso la connettivita' che ci fornisce. Si ricordi che si presume che il valore di default di local-preference sia 100.
route-map PROVIDER1_IN
permit 5
route-map PROVIDER_IN
permit 10 5. match con tutti i path che iniziano con 1267 e hanno almeno 3 AS aggiuntivi
L'espressione regolare si evince dal seguente comando "show
ip bgp regexp ^1267_[0-9]+_[0-9]+_[0-9]+_"
Annuncio delle classi alla rete BGP
1. Supponiamo di avere un peering con ISP1 e
di voler annunciare le nostre classi, assegnate dal RIPE (o da
altro LIR). Possiamo ovviamente
decidere di annunciare una parte o tutte le classi che
utilizziamo. L'annuncio e'
fondamentale in quanto il routing di ritorno dalla rete Internet
e' possibile solo dopo l'annuncio. Nota: SE AVETE UNA CONFIGURAZIONE MULTIHOMING SENZA FILTRI IN USCITA LE ROUTE IN ARRIVO DA UN FORNITORE VERRANNO ANNUNCIATE SUGLI ALTRI!!! E' BENE CREARE UNA ROUTE-MAP CHE SPECIFICHI ESATTAMENTE COSA ANNUNCIARE (ad es. "neighbor ... route-map 63 out", se non e' presente la route-map equivale ad un deny any negli annunci)
router bgp 64000 Potete verificare la corretta applicazione della regola come segue: GIA7600#show ip bgp neighbors 192.94.219.197
advertised-routes CASO NEXT-HOP ERRATO: catalystsec#show ip bgp nei A.B.C.D adv
BGP table version is 1238, local router ID is A1.B1.C1.D1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path *> 192.31.72.0/21 10.11.12.13 0 32768 i *> 192.242.61.0 10.11.12.13 0 32768 i Allora il router ricevente scartera' gli annunci in quanto il next-hop (un ip privato) e' irraggiungibile. Per sistemare il next-hop fare in modo che le reti annuniciate abbiamo una riga di routing con "null0" come next-hop creando eventuali sottoreti con next-hop differente se necessario.
route-map ASPREPEND permit 10 set as-path prepend 24994 24994 24994 <-- OCCHIO NON SI VEDE CON show ip bgp nei 2222 adverti.Devi vedere looking ! Con una semplice espressione regolare possiamo verificare che le route-map vengano applicate correttamente:
7600#show ip bgp regexp
^65000$
7600#show ip bgp regexp
^65000_ Nell'esempio
che segue abbiamo una sessione BGP con PROVIDER1 e una seconda
con PROVIDER2.
route-map PROVIDER1_IN
permit 10 In the following example, an access list and a distribute list are defined to configure the BGP routing process to advertise only network 192.168.0.0. An outbound route refresh is initiated to activate the distribute-list. If this command is configured without a predefined access list, the distribute list will default to permitting all traffic. <--- QUINDI METTERE SEMPRE UN'ACCESS-LIST
Router(config)# access-list 1 permit 192.168.0.0 0.0.255.255 Router(config)# access-list 1 deny 0.0.0.0 255.255.255.255 <--- OCCHIO A QUESTA DENY. Se non c'e' niente nell'acl di default e' permit any per distribute Router(config)# router bgp 50000 Router(config-router)# distribute-list 1 out Router(config-router)# end Router# clear ip bgp out
SESSIONE IBGP tra due ROUTER I router
ITESYS1 e ITESYS2 sono collegati tra loro in back-to-back.
Ognuno ha una sessione BGP con un differente ISP esterno. Il
collegamento back-to-back tra i due router ha degli IP privati,
diciamo 192.168.12.14 lato ITESYS2 e 192.168.12.13 lato ITESYS1. ISP1
-------- ITESYS2-192.168.12.14---------------------192.168.12.13-ITESYS1--------------ISP2 quindi la parte blu e' LAN (ethernet) mentre la parte nera e' WAN (potrebbe essere ATM, fibra ottica ethernet, SDH etc.) 1. Innanzitutto decidiamo cosa deve uscire da
ITESYS2 verso ISP1. route-map FILTROINGRESSO1 permit 10 description --- destinazioni accettate da ITESYS1 --- match as-path 28 set local-preference 1000 2. Facciamo in modo che ITESYS1 rifiuti
qualsiasi route di aggiornamento da ITESYS2 e che mandi a
ITESYS2 solo le destinazioni che scegliamo: itesys2: route-map FILTROINGRESSO1 permit 10 description --- queste sono le destinazioni accettate da ISP1--- match as-path 28 set local-preference 1000 route-map VERSOITESYS1OUT permit 10 description --- manda verso ITESYS1 solo queste route --- match as-path 29 ! route-map VERSOITESYS1IN permit 10 description --- non accetta nulla da ITESYS1 in ingresso --- ! 3. Facciamo in modo che ITESYS2 accetti gli
annunci da ITESYS1 cambiando il next-hop del BGP (che di fatto
diventa ITESYS2 e non piu' ISP1) route-map ANNUNCIOCATSECIN permit 10 description --- tutto cio' che arriva da ITESYS2 ha next hop 192.168.12.14 --- set ip next-hop 192.168.12.14 ! route-map ANNUNCIOCATSEC permit 10 description --- non invia nulla a ITESYS2 --- match ip address 14 ! access-list 14 deny any ! Si noti che in itesys1 arriveranno le route da ITESYS2 con il parametro local-preference correttamente settato a 1000. Ovvero non si perde questo dato nella sessione IBGP.
Se siete interessati ad un template BGP sicuro vedete qui: http://www.team-cymru.org/ReadingRoom/Templates/secure-bgp-template.html
Esempio di dimensione delle tabelle BGP al Settembre 2008 e risorse necessarie Come si vede 256mega di RAM e' il minimo (i numeri di AS sono alterati) 7600#show ip bgp summary Esempio di dimensione delle tabelle BGP al Giugno 2009 e risorse necessarie eutelia#sh ip bgp sum Debugging e
comandi gw-3640-A# sh ip bgp summ Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down
State/PfxRcd 2.
Verifichiamo i dettagli dei router neighbor BGP gw-3640-A#sh ip bgp nei For address family: IPv4 Unicast Connections established 5; dropped 4 Event Timers (current time is 0xD8EC8AC): iss: 2781263762 snduna: 2781283769 sndnxt: 2781283769 sndwnd:
16194 SRTT: 300 ms, RTTO: 303 ms, RTV: 3 ms, KRTT: 0 ms Datagrams (max data segment is 536 bytes): BGP neighbor is 216.133.69.2, remote AS 65500, external link For address family: IPv4 Unicast Connections established 5; dropped 4 Enqueued packets for retransmit: 0, input: 0 mis-ordered: -225 (0 bytes) Event Timers (current time is 0xD8ED14C): iss: 3173509963 snduna: 3173555775 sndnxt: 3173555775 sndwnd:
16251 SRTT: 355 ms, RTTO: 526 ms, RTV: 171 ms, KRTT: 0 ms Datagrams (max data segment is 536 bytes): 3. Leggiamo la tabella bgp gw-3640-A#sh ip bgp path Address Hash Refcount Metric Path gw-3640-A#sh ip route Codes: C - connected, S - static, I - IGRP, R - RIP, M -
mobile, B - BGP Gateway of last resort is not set
B 208.221.13.0/24 [20/0] via 217.223.243.9, 06:42:59 .... gw-3640-A#sh ip bgp BGP table version is 6667706, local router ID is 10.70.80.13 Network Next Hop Metric LocPrf Weight Path * 3.0.0.0 217.223.243.9 0 65400 1299 1239 80 i Network Next Hop Metric LocPrf Weight Path *> 6.1.0.0/16 216.133.69.2 0 65500 7176 1 7170 14 ...... gw-3640-A#sh ip bgp regexp _65500 3257_ BGP table version is 6411071, local router ID is 10.70.80.13 Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path * 62.10.0.0/15 216.133.69.2 0 65500 3257 8612 i * 62.24.228.0/23 216.133.69.2 0 65500 3257 8785 8785 24765 i * 62.24.230.0/23 216.133.69.2 0 65500 3257 8785 8785 24765 i * 62.26.0.0/15 216.133.69.2 0 65500 3257 12312 i * 62.40.0.0/19 216.133.69.2 0 65500 3257 8469 i * 62.64.128.0/17 216.133.69.2 0 65500 3257 9105 i * 62.79.0.0/16 216.133.69.2 0 65500 3257 8807 i * 62.111.0.0/17 216.133.69.2 0 65500 3257 12312 20968 20968 20968 20968 20968 20968 20968 i * 62.116.128.0/19 216.133.69.2 0 65500 3257 12312 15456 i gw-3640-A#sh ip bgp regexp _65500 3257_ BGP table version is 6411091, local router ID is 10.70.80.13 Network Next Hop Metric LocPrf Weight Path *> 62.10.0.0/15 216.133.69.2 200 65500 3257 8612 i *> 62.24.228.0/23 216.133.69.2 200 65500 3257 8785 8785 24765 i *> 62.24.230.0/23 216.133.69.2 200 65500 3257 8785 8785 24765 i *> 62.26.0.0/15 216.133.69.2 200 65500 3257 12312 i *> 62.40.0.0/19 216.133.69.2 200 65500 3257 8469 i *> 62.64.128.0/17 216.133.69.2 200 65500 3257 9105 i *> 62.79.0.0/16 216.133.69.2 200 65500 3257 8807 i gw-3640-A# BGP table version is 6411741, local router ID is 10.70.80.13 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 62.98.0.0/17 216.133.69.2 0 65500 9034 i *> 62.149.128.0/17 216.133.69.2 0 65500 9034 i * 217.223.243.9 0 65400 9034 9034 9034 gw-3640-A#sh ip bgp regexp _20959_ BGP table version is 6411946, local router ID is 10.70.80.13
Network Next Hop Metric LocPrf Weight Path *> 80.204.0.0/16 216.133.69.2 200 65500 3269 20959 i gw-3640-A#sh ip bgp 195.210.91.83 BGP routing table entry for 195.210.64.0/19, version 5824765 65500 1267 gw-3640-A#sh ip route 207.254.48.0 Routing entry for 207.254.48.0/24 gw-3640-A#sh ip route 207.254.48.0 longer Codes: C - connected, S - static, I - IGRP, R - RIP, M -
mobile, B - BGP Gateway of last resort is not set B 207.254.48.0/24 [20/0] via 217.223.243.9, 00:00:07
3.9 SOFT RECONFIGURATION Quando si effettuano delle modifiche nella configurazione BGP, come la modifica di route-map oppure l'aggiunta di nuovi parametri di configurazione, queste modifiche non sono recepite dai neighbor finche' non le si attivino con il reset della sessione BGP. Poiche' il reset della sessione BGP, con la conseguente ritrasmissione dell'intera tabella BGP, e' un'operazione critica e che crea disservizio, e' necessario utilizzare dei meccanismi che permettano il reset senza la brutale cancellazione dell'intera tabella BGP. Questo puo' essere fatto con la riconfigurazione soft che per le versioni piu' vecchie di IOS va effettuata aggiungendo il comando: neighbor A.B.C.D soft-reconfiguration inbound" Successivamente, con il comando "clear ip bgp A.B.C.D soft"
e' possibile resettare la sessione BGP senza la perdita della
tabella di routing. Con il "BGP Soft Reset Enhancement" e' ora possibile fare il reset della sessione BGP senza aggiungere voci di configurazione e senza l'uso di risorse addizionali di memoria (ma aspettatevi un picco nel processore) Verificate che il vostro neighbor supporti questa funzionalita' con: catalyst#show ip bgp neighbor 192.168.30.30 | include refresh
Route refresh: advertised and received(new)
In questo caso potete fare il reset della sessione senza la configurazione di cui sopra e solo con il comando "clear ip bgp 192.168.30.30 soft in/out"
Supponiamo di avere due router BGP che comunicano attraverso la rete MPLS di un operatore. La rete dell'operatore supporta il BGP e quindi i nostri router devono avere delle sessioni BGP con i router dell'operatore. USERS C ------------ router B ------WAN OPERATORE------ router A --------- Internet Il router B ha una sessione BGP con il router dell'operatore.
Per "WAN" si intende una maglia di router di un operatore terzo
che supporta il BGP (come capita per le reti MPLS). Affiche gli utenti "C" possano navigare router B deve ricevere la route di default dal router A (a meno che il router B non propaghi l'intera tabella BGP mondiale attraverso l'operatore che normalmente non lo consente).
ROUTER A Nella configurazione di base:
Il router non ha la route di default nella tabella bgp: 7200-MIX#show ip bgp Affinche' incorpori la route di
default e' necessario indicarlo espressamente. router bgp 65000 Adesso: 7200-routerA #show ip bgp Come potete vedere la route di
default ha "Next Hop" pari a "0.0.0.0". Infatti: 7200-routerA#show ip bgp 0.0.0.0 Come vedere automaticamente BGP si prende dalla tabella di routing statica la route di default. Sostanzialmente la semplice "default-originate" fa fare al router una sequenza equivalente a questa: router bgp
65000 Attenzione: "show ip bgp neighbor IPNEIGHOBOR advertised-routes" nel router A NON mostra l'annuncio della 0.0.0.0
ROUTER B 7200_routerB#sh ip bgp Come vedete arriva la route statica: 7200_routerB#show ip bgp 0.0.0.0 Non e' necessaria una statica di routing di default perche' arriva dal BGP e la sovrascriverebbe. 7200_routerB#show ip bgp Con un "debug ip bgp updates" router B a volte rifiutava la route statica dando: ... Queste due righe sono giuste Potrebbe essere il bug: CSCsf20947 Che pero' ha come workaround un semplice
"clear ip bgp" del neighbor. In effetti con una serie di "clear
ip bgp" il problema non si e' riproposto. Nota:
Ecco come rifiutare l'annuncio della route di default in ingresso
BGP TRA LO STESSO AS Supponiamo di avere l'AS 65000 e di utilizzarlo in due localita' geografiche separate. Ovviamente annunciamo classi diverse dalle due localita' altrimenti non funzionerebbe il routing. Che conseguenze ha la propagazione con lo stesso AS da localita' differenti? Poiche' il numero di AS viene utilizzato solo per il calcolo del best-path dei router cio' non e' un problema. Il problema nasce proprio tra le due localita' da cui fate gli annunci. Infatti il sito A non riceve gli annunci del sito B e viceversa. Ovvero i due siti vedono tutto il mondo ma non si vedono tra loro. Il motivo e' che nell'AS-PATH ricevuto dal sito B c'e' il numero di AS 65000, del sito mittente. Allora l'algoritmo BGP, pensando che ci sia un loop, perche' di fatto il sito A ha l'AS 65000, scarta la route. Per ovviare a questo problema dobbiamo dire a BGP di accettare gli as-path che contengono se stesso come AS e cio' si fa con: neighbor IPNEIGHBOR allowas-in Questo problema nasce anche nelle reti MPLS dove si assegnano ai clienti AS privati e i clienti hanno tante sedi. Per ogni sede si puo' usare lo stesso AS pero' utilizzando questo comando. Vedi anche qui: http://www.shafagh.net/2009/10/ccie-sp-bgp-as-pe-ce.html
Soluzione alternativa: Esiste anche il comando " neighbor IPNEIGHBOR local-as 65000 no-prepend replace-as" il quale fa comparire il router come con as 65000 per IPNEIGHBOR. La key "no-prepend replace-as" fa in modo tale che non compaia l'as reale neanche nell'as-path (in caso contrario nell'as-path mette sia il local-as che l'as reale). In questo modo, piuttosto che permettere al router remoto l'as-path del router mittente (cosa sporca per la presenza di un loop) possiamo semplicemente annunciare senza usare quell'AS.
Rimozione as-path privati as
If the AS_PATH includes both private and public AS numbers, BGP doesn't remove the private AS numbers. This situation is considered a configuration error. 7200-MIX#sh ip bgp | include 2.0.63.170
4. Verifichiamo l'uso del processore per i processi BGP Durante lo scaricamento della tabella BGP il
processore puo' arrivare anche al 99% (dipende dalla piattaforma).
Poi si raggiunge la convergenza della tabella di routing. Questo
dovrebbe durare per due tre minuti. gianrico#sh process
cpu | include BGP Segue aggiornamento del 13/9/07 BGP load-balancing verso uno stesso provider Si tratta del
problema di load-balancing tra link multipli verso uno stesso
fornitore di connettivita', con il quale si ha una sessione BGP
ma piu' link. Tra tutte le route per una destinazione che giungono alla tabella di routing (tra route dinamiche, statiche e generate da reti direttamente connesse) solo quella con distanza amministrativa inferiore viene inserita in tabella di routing. Se vi sono piu' route per la stessa destinazione e con la stessa distanza amministrativa il router sceglie quella che ha metrica piu' bassa. Nel momento in cui differenti route per la stessa destinazione hanno la stessa distanza amministrativa e la stessa metrica entrano tutte nella tabella di routing e si puo' avere un load-balancing. Nella tabella di routing entrano al piu' 4 route di questo tipo tranne per il BGP dove ne entra solo una. Alcuni protocolli di routing gestiscono nativamente di load-balancing come IGRP e EIGRP e OSPF. RIP non lo gestisce. Supponiamo di avere una configurazione di questo tipo: ip route 192.168.111.24
255.255.255.255 serial2/1/0 E possibile fare load-balancing per-packet (process-switching) o per-destination (fast-swiching). Nel primo caso ogni pacchetto viene inviato a rotazione su un'interfaccia diversa del gruppo. Nel secondo ogni differente flusso viene inviato a rotazione e la classificazione viene fatta per destinazione e non per pacchetto. Pertanto nel secondo caso non aspettatevi di avere il traffico perfettamente suddiviso tra le interfacce coinvolte. Nel primo caso invece potete avere i pacchetti che giungono a destinazione in ordine invertito, il che puo' essere un problema per certe applicazioni (ad esempio VOIP) Se fate una serie di show ip route vedete come l'interfaccia di uscita cambia (e' quella indicata con l'asterisco). In neretto potete osservare come il router utilizza a rotazione tutte le route a disposizione: Core7200#sh ip route 192.168.111.24 Per stabilire il tipo di load-balancing da effettuare si usano i comandi "ip route-cache" e "no ip route-cache" all'interno delle interfacce fisiche coinvolte. Nel primo caso si abilita la route-cache dove il router memorizza le destinazioni pertanto si abilita il per-destination. E' la configurazione di default. Il discorso fatto vale se voi non usate il CEF ovvero che vi sia "no ip cef" nel file di configurazione. Se usate il CEF questo articolo non ne copre il funzionamento nel caso di load-balancing. Caso BGP Il load-balancing cosi' realizzato e' unidirezionale, ovvero solo in uscita. Per controllare il ritorno, in questo caso specifico, dovete chiedere la collaborazione del vostro provider.
Segue aggiornamento del 20/8/08 BGP multi-homing con numerosi provider in tecnologia Ethernet Il peering con gli operatori ISP sempre piu' spesso viene realizzato con collegamenti in tecnologia Ethernet. E' comune ricevere connettivita' attraverso fibra ottica in collegamenti MAN ed e' comune ricevere un'interfaccia ethernet 10/100/1000. Il costo delle porte Ethernet e' sicuramente di molto inferiore a collegamenti equivalenti con tecnologie differenti, come ATM, tuttavia il costo per porta in un router e' normalmente superiore rispetto a quella su uno switch. Pertanto si puo' utilizzare in questi casi un performamente switch e dedicare una VLAN ad ogni operatore. Quindi con un trunk con il router si possono riportare le VLAN in subinterfaces ethernet del router. In questo modo abbiamo espanso il numero di interfacce ethernet nel nostro router con costi molto ragionevoli e possiamo procedere ad effettuare i peering BGP con gli operatori. Infatti ogni subinterface avra' l'indirizzo IP del point-to-point fornito dall'operatore ISP, in quanto lo switch e' trasparente.
Aggionamento il 16/9/2007
USO MEMORIA wind#show ip bgp sum BGP router identifier 192.168.54.2, local AS number 3.143 BGP table version is 13619656, main routing table version 13619656 139847 network entries using 18459804 bytes of memory 150968 path entries using 7850336 bytes of memory 4935672+18459804=23395476 29379/27471 BGP path/bestpath attribute entries using 4935672 bytes of memory 25878 BGP AS-PATH entries using 973760 bytes of memory 1809 BGP community entries using 85768 bytes of memory 0 BGP route-map cache entries using 0 bytes of memory 27892 BGP filter-list cache entries using 334704 bytes of memory Bitfield cache entries: current 3 (at peak 4) using 92 bytes of memory BGP using 32640136 total bytes of memory BGP activity 3978652/3838782 prefixes, 5184289/5033321 paths, scan interval 60 secs Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 192.168.120.33 4 1267 3313751 48685 13619142 0 0 2w3d 114485 192.168.88.1 4 3.143 88214 2949493 13619656 0 0 1w1d 36482 wind# wind# wind# wind#show ip route summary IP routing table name is Default-IP-Routing-Table(0) IP routing table maximum-paths is 32 Route Source Networks Subnets Overhead Memory (bytes) connected 0 4 256 608 static 1 2 192 456 bgp 196751 64120 75723 8949952 21331616 <-- nella tabella di routing entrano 64120 righe External: 112352 Internal: 27491 Local: 0 internal 1642 1924424 Total 65763 75729 8950400 23257104 <-- memoria occupata dalla tabella di routing Removing Queue Size 0 wind# wind# wind#sh processes memory | include BGP 9 0 22392 82555368 10068 0 0 BGP Scheduler 76 0 306307260 3246839276 10068 0 0 BGP I/O 191 0 0 966324 10068 0 0 BGP Scanner 205 0 0 0 7068 0 0 BGP Event 323 0 2910374520 699415116 81499924 0 0 BGP Router Ovvero 81mega di memoria usati dal BGP wind#show ip bgp path
Address Hash Refcount Metric Path
0x4A8FE45C 0 27 0 i
0x4A8FCCA4 1 4 0 1267 174 3267 5568 5568 5568 5568 5568 3316 47595 i
0x4FC08FD0 1 2 0 1267 15412 24320 10109 i
0x507DA35C 1 6 0 1267 3491 38154 i
0x4C3BB3DC 1 2 0 1267 3257 12850 31263 i
0x4F378D04 1 4 0 1267 19151 20115 3599 14871 ?
0x4EDFA97C 1 60 0 1267 2686 714 i
0x4EF24458 1 2 0 1267 22212 19024 19024 19024 19024 11892 i
0x4D927530 1 42 0 1267 22212 19024 19024 19024 19024 11892 i
0x4E613080 1 2 0 1267 3491 14751 11817 23227 i
0x50044AF8 1 2 0 1267 174 8732 8732 49170 i
0x5078E768 1 6 0 15589 174 72 i
0x4F696594 1 2 0 1267 12713 47521 i
...
wind#show ip bgp
BGP table version is 13651160, local router ID is 192.168.54.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
r>i0.0.0.0 192.168.88.1 0 100 0 15589 i
*> 3.0.0.0 192.168.120.33 0 1267 15412 9304 80 i
*>i3.51.92.0/23 192.168.88.1 0 100 0 15589 3549 7018 ?
*>i4.0.0.0/9 192.168.88.1 0 100 0 15589 1299 3356 i
*>i4.0.0.0 192.168.88.1 0 100 0 15589 1299 3356 i
*> 4.23.112.0/24 192.168.120.33 0 1267 174 21889 i
*> 4.23.113.0/24 192.168.120.33 0 1267 174 21889 i
*> 4.23.114.0/24 192.168.120.33 0 1267 174 21889 i
BGP E ROUTE LOOP Se dal BGP arriva l'annuncio di una classe che il router gia' ha, ad esempio nella stessa ethernet della sessione BGP, si ha un route loop. Esempio: router A con ethernet 2.0.63.169/24 ------------------ router B 2.0.63.170/30 BGP NEIGHBOR Il router neighbor annuncia la statica. r> 2.0.63.168/30 2.0.63.169 0 0 65000 2267 ? che pero' il router A ha gia' nella sua ethernet (anche se con netmask allargato). Quindi, la route ricevuta vince, ma c'e' un loop perche' la ethernet del router A combacia con una sotto rete che il router B dice di avere. Diciamo che se il router B non annunciasse la sua ethernet (ha un 'redistribute static') o se i netmask fossero uguali il problema non si porrebbe. D'altro canto il BGP non puo' correggere il loop in questo caso, perche' i netmask sono differenti. Altrimenti non entrerebbe in tabella BGP la route proveniente da B. Feb 15 15:31:05.819:
%IPRT-3-RIB_LOOP: Resolution loop formed by routes in RIB 7200_A#show ip route loops
RIPE Il RIPE e' l'ente europeo che si occupa della gestione delle risorse IPv4/IPv6 per l'Europa, il Medio Oriente e parte dell'Asia. Chiunque abbia bisogno di indirizzi IP e' tenuto a chiederli al RIPE oppure farsegli assegnare da un ISP. Nella maggior parte dei casi si ricade nel secondo caso (connettivita' XDSL e accessi ad Internet da utenti e uffici), per le aziende piu' grandi e gli ISP spesso si utilizza la prima via. Se vogliamo diventare LIR non appena firmato il contratto viene mandato un documento con i parametri di accesso al "LIR PORTAL". Questi consistono in una terna con l'ID del cliente uno username e una password. Lo username iniziale e' "admin". All'interno dell'area dovrete creare un nuovo account quindi sloggarvi e riloggarvi con il nuovo account. Solo a questo punto vi appariranno tutte le opzioni e in particolare le "Request forms" per fare le richieste di AS e delle classi.
Prima di richiedere un numero di AS e' necessario avere un address space da annunciare, o quantomeno una richiesta di ticket aperta per l'attesa assegnazione. Pertanto, per i nuovi arrivati, la prima cosa da fare e' chiedere una "IPv4 First Allocation". Innanzitutto inseritevi nei "LIR contacts"
Come interagire col RIPE: creazione oggetti person e mnt. 1. Andate su www.ripe.net. Cliccate su "Data & Tools"
2. Selezionate la voce "RIPE Database" e poi "Webupdates" ![]()
3. Cliccate su "Webupdates" A questo punto si possono fare le seguenti operazioni ovvero creare o modificare:
4. Il primo oggetto da creare, se
partite da zero con il RIPE, e' un oggetto di tipo "person" che
identifica la vostra persona.
5. Vi
apparira' una scheda da riempire. Potete fare come nell'esempio.
Notate il campo "nic-hdl". Questo e' un valore che ![]()
6. A questo punto dovreste avere una
notifica di successo oppure una indicazione degli errori che
avete commesso nel ![]() Notate che viene assegnato l'importante nic-handle: "mp12515-RIPE" Affinche' si possa proteggere questo oggetto bisogna creare un secondo oggetto di tipo manteiner (mntner). Questo serve proprio per la protezione e quindi e' fondamentale. Quindi creiamo l'oggetto mntner e poi modifichiamo il person aggiungendo la password. Solo creando un oggetto manteiner si possono proteggere gli altri record del database. 1a. Tornate alla pagina iniziale e scegliete il nuovo oggetto di tipo mntner: ![]()
2a. Riempite la scheda. Ecco un esempio. Notate la riga auth. Si specifica che si usera' una password di tipo MD5. La password e' criptata. Per crearla potete andare su https://www.ripe.net/cgi-bin/crypt.cgi dove un web tool vi converte la password in chiaro in forma criptata. Ovviamente "gianrico-mnt" e' il mio nome seguito da "-mnt". Voi scegliete il vostro: ![]() 3a. A questo punto l'oggetto mnter e' pronto. Dobbiamo ora associare l'oggetto manteiner al nostro oggetto 'person' cosi' da proteggerlo con le specifiche indicate nell'oggetto manteiner, come la password. 3b. Quindi tornate alla pagina iniziale. Invece di scegliere "Add object" cliccate su: Modify or delete an existing objecte inserite il vostro nic-handle oppure il vostro nome e cognome. Ritroverete l'oggetto person a cui dovete aggiungere i campi: "mnt-by" con il vostro oggetto manteiner e un oggetto password con la vostra password (quella che avete inserito nell'oggetto mainteiner) in chiaro. A questo punto ogni modifica successiva implichera' l'aggiunta della riga password con la password inserita nell'oggetto manteiner per autenticare la modifica. 4a. La procedura e' finita. Avete un oggetto person con un nic-handle, un oggetto manteiner. Questo vi servira' come base per la gestione di indirizzi IP nel RIPE. Quando dovrete fare una modifica all'oggetto person, dovrete aggiungere il campo password con la password che avevate scelto, affinche' l'aggiornamento vada a buon fine. Stessa cosa dicasi per l'oggetto manteiner. Ecco il risultato cercando nel database del RIPE "gianrico-mnt": mntner: gianrico-mnt descr: mainteiner ipv6 admin-c: gf4986-RIPE auth: MD5-PW $1$9M9hge7H$vnaPeZeH8oHfmEPvBdAtR/ mnt-by: gianrico-mnt referral-by: gianrico-mnt source: RIPE # Filtered person: gianrico fichera address: via costanza d'aragona 8 - catania - mnt-by: gianrico-mnt e-mail: gianrico@gianrico.com phone: +39095434534 nic-hdl: gf4986-RIPE source: RIPE # Filtered Notate come puo' apparire uno o piu' oggetti person (in questo caso 1). Sono quelli a cui si fa riferimento nell'oggetto mnter. Se si cambia il riferimento admin-c in mntner cambiera' in corrispondenza l'oggetto person. Cancellazione di un oggetto.
Gestione classi di indirizzi IP tramite RIPE Esaminiamo due interrogazioni al database del RIPE. Per ovvi motivi di riservatezza la classe appare "192.168" anche se, ovviamente, nei casi reali si trattera' di IP pubblici.
Altre letture Consiglio di consultare l’enorme documentazione disponibile on-line nel sito della cisco http://www.cisco.com/. E’ possibile trovare sempre tutto cio’ che si cerca.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| E |
Copyright 2002-2009 Gianrico Fichera – ITESYS srl Il
materiale di questa pagina non e’ sponsorizzato o
sottoscritto da Cisco Systems, Inc. Ciscoâ
e’ un trademark di Cisco Systems, Inc. negli Stati Uniti e
in altri stati. L’autore di questa pagina non si assume
nessuna responsabilita’ e non da nessuna garanzia
riguardante l’accuratezza e la completezza delle
informazioni presenti nonche’ da conseguenze sull’uso
delle informazioni presenti in questa pagina. |
This material is not sponsored by, endorsed by, or affiliated with Cisco Systems, Inc., Cisco, Cisco Systems, and the Cisco Systems logo are trademarks or registered trade marks of Cisco Systems, Inc. or its affiliates. All other trademarks are trademarks of their respective owners. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

