Archivi tag: cisco

Snmpwalk: visualizzare informazioni sulle interfacce di un Cisco Catalyst 3750

Recentemente mi è capitato di avere a che fare con un tool per il monitoraggio della rete (weathermap). Questo tool, affinchè riesca a monitorare il traffico che interessa le varie interfacce di uno switch o di un router, effettua banalmente delle query SNMP.

Ora, la versione di tale protocollo abilitata sui vari device è la 2, ergo, utilizzando snmpwalk posso interrogare l’agente (e i vari subagent) in esecuzione sul dispositivo di mio interesse semplicemente digitando:

snmpwalk -v 2c -c <community string> <ip del dispositivo> 1.3.6.1.2.1.2.2.1.1

Direte voi… cos’è quel numero strano in coda alla query? Ebbene, quello è l’OID (Object Identifier) relativo alle interfacce del Catalyst. Ogni OID viene generato a partire dal cosiddetto SMI (Structure of Management Information), che presenta una struttura “ad albero”. Per maggiore completezza, un esempio di SMI è riportato nella figura sottostante:

Snmp.gif
Grazie alle MIB (Management Information Base), inoltre, è possibile identificare mediante una determinata stringa parte di un OID. La tabella seguente può far capire in modo abbastanza banale che cosa si intende per MIB:
OID                     MIB
1.3                      org
1.3.6                   dod
1.3.6.1               internet
1.3.6.1.1            directory
1.3.6.1.2            mgmt
1.3.6.1.3            experimental
1.3.6.1.4            private
1.3.6.1.4.1         enterprises
Quindi l’OID utilizzato nell’ambito della query effettuata mediante snmpwalk equivale a:
mgmt.1.2.2.1.1
Infine, occorre precisare che del protocollo in questione esistono ben 3 versioni: la 1 e la 2 piuttosto insicure, in quanto non cifrano la community string (neanche quando le query vengono effettuate da remoto attraverso Internet). La versione 3, invece, prevede un meccanismo di cifratura che la rende molto più sicura rispetto alle versioni precedenti.
Bye.

VTP (Virtual Trunking Protocol)

Il VTP (Virtual Trunking Protocol) è un protocollo di livello 2 proprietario Cisco, il cui scopo è quello di mantenere allineato il database in cui sono contenute le VLAN comuni a più switch. Affinchè la propagazione delle informazioni avvenga correttamente, è necessario che tutti gli switch facciano parte dello stesso dominio VTP.

Uno switch può operare in tre modalità VTP:

Server: crea, modifica e cancella le VLAN per l’intero dominio VTP e salva le informazioni relative alle LAN virtuali all’interno dell’NVRAM. E’ la modalità di default per gli switch su cui viene abilitato il VTP;

Client: non può effettuare operazioni dirette sulle VLAN di dominio (ad esempio creazione o cancellazione) e non salva nell’NVRAM le informazioni inviate dal server, occupandosi esclusivamente di propagarle ai vicini;

Transparent: può eseguire il forwarding delle informazioni inviate dal server ma è caratterizzato dalla presenza di un database locale di VLAN, il quale non influenza il database di dominio.

Alcuni casi particolari di cui bisogna tener conto sono i seguenti:

1) l’aggiornamento inviato dal server ha un revision number inferiore rispetto a quello delle informazioni possedute dal client. In tal caso il client scarterà l’update proveniente dal server.

2) gli switch non riescono a mettere in sharing le loro VLAN. E’ molto probabile che il nome di dominio VTP non coincida in tutti gli switch del network.

3) il pruning mode dello switch è attivo: ciò significa che lo switch non invierà traffico broadcast, multicast o unknown (ovvero verso un’indirizzo non presente all’interno della CAM) su tutti i trunk, evitando spreco di risorse e di banda.

Inoltre, poichè in un dominio VTP possono esserci più server, si potrebbe verificare uno scenario del tutto sconveniente, in cui viene aggiunto uno switch che opera in modalità server e che possiede un revision number inferiore rispetto a quello dei server già attivi. Ciò farebbe in modo che sull’intero dominio VTP tutte le VLAN precedenti vengano sovrascritte da quelle presenti nel database del server appena aggiunto. Si potrebbe evitare ciò semplicemente aggiungendo una password nell’ambito dello stesso dominio VTP.

Per ciò che concerne la configurazione di tale protocollo, alcuni comandi utili sono i seguenti (per il server):

Switch1#vlan database

configuro il nome del dominio:

Switch1(vlan)# vtp domain CCNA

dichiaro le VLAN che dovranno essere propagate agli altri switch:

 Switch1(vlan)# vlan 2 name Administration
 Switch1(vlan)# vlan 3 name Students

configuro la password VTP:

Switch1(vlan)# vtp password Cisco

Nell’ambito del client, invece, mi basterà digitare:

Switch2#vlan database

dichiaro espressamente che lo switch deve operare in modalità client:

Switch2(vlan)# vtp client

configuro la password VTP:

Switch1(vlan)# vtp password Cisco

ed infine configuro il nome del dominio:

Switch2(vlan)# vtp domain CCNA

Per ciò che concerne la diagnostica possiamo digitare:

Switch# sh vtp status

il cui output è simile al seguente:

VTP Version                     : 2
 Configuration Revision          : 247
 Maximum VLANs supported locally : 1005
 Number of existing VLANs        : 33
 VTP Operating Mode              : Client
 VTP Domain Name                 : Lab_Network
 VTP Pruning Mode                : Enabled
 VTP V2 Mode                     : Disabled
 VTP Traps Generation            : Disabled
 MD5 digest                      : 0x45 0x52 0xB6 0xFD 0x63 0xC8 0x49 0x80
 Configuration last modified by 0.0.0.0 at 8-12-99 15:04:49
Switch# sh vtp counters

che mostra tutta una serie di statistiche associate allo scambio di pacchetti nell’ambito del protocollo in questione, ad esempio:

VTP statistics:
Summary advertisements received: 7
Subset advertisements received: 5
Request advertisements received: 0
Summary advertisements transmitted: 997
Subset advertisements transmitted: 13
Request advertisements transmitted: 3
Number of config revision errors: 0
Number of config digest errors: 0
Number of V1 summary errors: 0
VTP pruning statistics:

Trunk            Join Transmitted Join Received    Summary advts received
from on-pruning-capable device
---------------- ---------------- ---------------- ---------------------------
Fa5/8             43071            42766            5

Il post termina qui, a presto.

NB: tali comandi si riferiscono a CatOS.

Abilitare SSH su switch Cisco Catalyst 3750

Prima di introdurre questa mini-guida, occorre precisare che non tutte le IOS Cisco supportano SSH. Nella fattispecie, quelle abilitate a ricevere connessioni mendiante Secure SHell riportano la dicitura K9 nell’ambito del filename.

Ma veniamo a noi. Per prima cosa, occorre creare la chiave RSA da utilizzare come fingerprint. Per fare ciò basta digitare il comando:

Switch(config)# crypto key generate rsa general-keys label ssh-fingerprint

Dopodichè digitiamo:

Switch(config)# ip ssh version 2

in modo da abilitare sul dispositivo la versione 2 del protocollo SSH (più robusta della 1).

Adesso definiamo username e password di accesso:

Switch(config)# username <vostro username> password <vostra password>

A questo punto disabilitiamo l’accesso telnet e consentiamo solo quello ssh usando il comando transport input (e già che ci siamo aggiungiamo username e password appena creati come credenziali per il login):

 Switch(config)# line vty 0 15
 Switch(config)# login local
 Switch(config-line)# transport input ssh
 Switch(config-line)# end

Infine salviamo la configurazione:

Switch# copy run start

ed il gioco è fatto.

A presto.

EIGRP – Parte Terza

In questo post vedremo come configurare correttamente L’EIGRP.

Per prima cosa occorre inizializzare il protocollo definendo l’AS all’interno del quale deve operare:

Router(config)# router eigrp <AS>

Successivamente è necessario definire le reti che tale protocollo deve pubblicare:

Router(config-router)# network <rete> [wildcard mask]

Nella fattispecie, la wildcard mask è facoltativa e rappresenta la classe della rete appena dichiarata. Ad esempio:

Router(config-router)# network 10.1.1.0 0.0.0.255

indica una rete di classe C, mentre:

Router(config-router)# network 192.168.1.0 0.0.255.255

indica una rete di classe B.

L’uso della wildcard mask consente di fornire al protocollo di routing in questione informazioni più dettagliate sulle reti che deve pubblicare, oltre a tenere sotto controllo gli effetti dell’auto summarization delle rotte.

Per configurare la default route che verrà utilizzata nell’ambito dell’EIGRP basta scivere:

Router(config)# ip default-network <rete>

(quest’ultima deve essere presente tra le network dichiarate all’EIGRP)

mentre per rimuoverla occorre usare il comando:

Router(config)# no ip route <rotta>

La default route così definita verrà redistribuita a tutti i router vicini. Ciò non accadrebbe se la default route venisse dichiarata con il comando:

Router(config)# ip route 0.0.0.0 0.0.0.0 <IP del router connesso direttamente>

Occorre notare, però, che nel caso in cui avessi dichiarato una rotta del tipo:

Router(config)# ip route 0.0.0.0 0.0.0.0 <interfaccia>

avrei potuto ottenere la ridistribuzione della stessa, previa dichiarazione della rete 0.0.0.0 all’EIGRP mediante il comando network, ovvero:

Router(config-router)# network 0.0.0.0

Summarization delle rotte

La summarization delle rotte consente di ridurre notevolmente le dimensioni delle tabelle di routing (con conseguente risparmio in termini di banda). In particolare, mediante questa caratteristica (abilitata per default nell’ambito dell’EIGRP), possono essere rappresentate più reti contemporaneamente mediante un unico indirizzo IP che le ingloba.

Per calcolare il numero di reti che possono essere aggregate nell’ambito di un unico indirizzo basta applicare la formula:

n = <numero di bit della subnet mask> – <numero di bit della summary mask>. 2^n mi darà il numero esatto delle reti che possono essere aggregate grazie alla summarization.

Facciamo un esempio. Supponiamo che si voglia aggregare le rotte 192.168.1.0/24, 192.168.2.0/24 e 192.168.3.0/24 mediante l’indirizzo 192.168.0.0/22. Apllico la formula sopra citata per individuare quante sono le subnet che posso rappresentare mediante questo indirizzo:

n = 24 – 22 = 2. Inoltre 2^2 = 4. Posso quindi rappresentare 4 subnet in tutto (le tre citate in precedenza e la 192.168.0.0/24).

Per disabilitare l’auto summarization basta digitare:

Router(config-router)# no auto-summary

mentre per impostare manualmente l’indirizzo di summarization occorre scrivere:

Router(config)# ip summary-address eigrp <AS> <indirizzo di summarization> <subnet mask relativa all'indirizzo di summarization> [distanza amministrativa]

In particolare, l’ultimo parametro ci consente di definire la distanza amministrativa per la rotta aggregata. Nel caso in cui non venisse definita dall’utente, EIGRP assegnerà alla rotta aggregata una distanza amministrativa pari a 5.

NB: affinchè il router che fa uso delle rotte aggregate non vada alla ricerca di rotte più specifiche (creando potenzialmente dei loop), le summarizated route punteranno ad un interfaccia software fittizia, ovvero Null0.

Load balancing

Una funzione molto interessante relativa all’EIGRP è il cosiddetto load balancing, ovvero il bilanciamento del carico. Tale caratteristica permette di instradare il traffico lungo più cammini aventi la stessa metrica (costo). Per default il bilanciamento del carico viene effettuato utilizzando un massimo di 4 cammini. Posso comunque definire manualmente il numero di cammini da utilizzare (fino ad un massimo di 16) attraverso il comando:

Router(config-router)# maximum-paths <numero di cammini>

NB: ponendo il parametro <numero di cammini> pari a 1 disabilito il load balancing. Inoltre, il load balancing viene applicato solo al traffico che passa attraverso il router e non a quello che viene generato dal router stesso.

E’ bene notare che il load balancing può essere applicato anche su cammini che non hanno la stessa metrica. In questo caso parliamo di unequal-cost load balancing. Posso implementarlo attraverso il comando:

Router(config-router)# variance <valore>

dove <valore> è un intero compreso tra 1 e 128 (1 indica l’equal-cost load balancing).

Per capire lungo quali rotte verrà bilanciato il traffico basta operare come segue:

1) considero la rotta avente metrica più bassa (ovvero la FD della successor route);

2) moltiplico la metrica (FD) per <valore>;

3) Una volta calcolato il prodotto, userò tutte le rotte aventi FD <= al prodotto stesso. Ad esempio:

RouterA FD 1100

RouterB FD 1100

RouterC FD 2000

RouterD FD 3000

Supponendo che il valore della varianza sia 2, otterrò:

1100 x 2 = 2200

Per il bilanciamento userò quindi le rotte che coinvolgono il router A, il router B ed il router C, ma non il router D. Tali rotte verrano salvate nell’ambito della tabella di routing.

Per controllare il bilanciamento del carico su rotte aventi metrica (FD) differente, occorre digitare:

Router(config-router)# traffic-share [balanced | min across-interfaces]

Con la keyword balanced distribuisco il carico proporzionalmente alla metrica (FD) dei cammini. Invece, mediante la keyword min across-interfaces effetto il bilanciamento solo lungo i cammini aventi metrica (FD) più bassa.

EIGRP e WAN

L’EIGRP lavora efficientemente nell’ambito delle WAN, sia per ciò che concerne i collegamenti point-to-point che per quanto riguarda le reti NBMA (point-to-point e multipoint).

Per default, l’EIGRP usa il 50% della banda dichiarata (mediante il comando bandwidth) su un’interfaccia fisica o su una sottointerfaccia virtuale, ma tale valore può essere modificato digitando:

Router(config-if)# ip bandwidth-percent eigrp 1 <percentuale>

dove <percentuale> può essere superiore al 100%, soprattutto se la banda dichiarata è inferiore all’effettiva capacità del canale.

Inoltre, per le reti Frame Relay, nel caso in cui la banda non venisse impostata in modo esplicito mediante l’apposito comando, essa verrà considerata uguale a quella tipica delle reti T1 (1544 Kbps).

Per quanto riguarda le topologie multipoint, la banda dichiarata deve essere suddivisa per il numero di vicini affinchè si possa calcolare la banda presente su ogni collegamento. Nel caso in cui vengano utilizzati link con capacità differente (CIR diversi tra loro), la banda da settare dovrà essere calcolata moltiplicando il CIR più basso per il numero di circuiti virtuali (VC).

NB: il CIR (Committed Information Rate) è un parametro usato nelle reti Frame Relay, il quale indica la banda minima garantita dal provider.

Autenticazione EIGRP

L’autenticazione EIGRP è disabilitata per default. Esistono, inoltre, due tipi di autenticazione:

Simple password authentication (detta anche plain text authentication);

– MD5 authentication.

L’MD5 calcola il digest della password (key) concatenata al suo ID, ovvero H(key || key ID). Mediante l’autenticazione sarà possibile riconoscere la sorgente dei messaggi ed il digest verrà inserito all’interno di tutti i pacchetti inviati nell’ambito del protocollo di routing in questione.

E’ possibile definire la durata (lifetime) relativa all’uso della password. Ciò conviene quando sono definite delle key-chains, le quali prevedono l’uso a rotazione delle password stesse. A tal proposito è necessario fare attenzione che non vi siano dei lassi di tempo in cui nessuna password risulta attiva (in questo caso i routing update falliranno sistematicamente). Inoltre, le password verranno utilizzate a partire da quella recante key ID più basso (a parità di lifetime).

NB: i router devono essere sincronizzati (mediante NTP – Network Time Protocol) affinchè usino la stessa password della key-chain per lo stesso lasso di tempo.

Per configurare l’autenticazione MD5 occorre digitare:

Router(config-if)# ip authentication mode eigrp <AS> md5

Creo dunque la key-chain:

Router(config-if)# ip authentication key-chain eigrp <as> <nome della chain>

Entro nella modalità di configurazione della chain:

Router(config)# key chain <nome della chain>

Router(config-key-chain)# key <key ID>

Setto la password vera a propria:

Router(config-key-chain)# key key-string <password>

(il primo carattere della password non deve essere un numero).

Posso definire opzionalmente il lasso di tempo durante il quale tale password viene accettata per gli update in ingresso:

Router(config-key-chain)# accept-lifetime <inizio> {infinite | <fine> | duration <secondi>}

Il formato di <inizio> e <fine> è il seguente:

hh:mm:ss giorno (1-31) mese (prime 3 lettere del mese in inglese) anno (4 cifre)

Per l’invio dei pacchetti contenenti il digest occorre digitare:

Router(config-key-chain)# send-lifetime <inizio> {infinite | <fine> | duration <secondi>}

NB: la key-string (password) viene salvata in chiaro se non viene digitato il comando service password-encryption.

Inoltre, se sia la key1 che la key2 per l’accept-lifetime hanno durata infinita, il router accetterà sempre sia i pacchetti contenenti il digest della key1 che quelli contenenti il digest della key2.

Viceversa, se il send-lifetime di una key è infinito (e tale chiave possiede l’ID più basso), verrà usata solo quella key durante l’invio dei pacchetti EIGRP.

Toubleshooting dell’autenticazione MD5

Il comando da utilizzare è il seguente:

Router# debug eigrp packets

l’output mostrerà il key ID e nel caso in cui le chiavi settate sui due router non coincidono, verrà visualizzata la dicitura “authentication mismatch”. In tal caso l’adiacenza verrà formata solo per un lasso di tempo molto breve. (“retry limit exceeded” e ” new-adjacency” come output).

Query EIGRP e stuck-in-active (SIA)

Se un router si accorge che la sua successor è down e che non esiste FSR, esso unvierà una query ai router vicini per individuare un percorso alternativo verso quella specifica destinazione. Se i router vicini non conoscono la risposta, propagheranno la query ai loro adiacenti e così via. Durante questo lasso di tempo la rotta rimarrà nello stato ACTIVE e non tornerà allo stato PASSIVE finchè alla query non seguirà una risposta (reply). Se tale risposta non viene ricevuta entro 3 minuti dall’invio della query, la rotta entra nello stato stuck-in-active (SIA).

NB: si può modificare il tempo limite oltre il quale viene dichiarato lo stuck-in-active della rotta digitando:

Router(config-router)# timers active-time <limite in minuti> oppure disabled

Appena il router identificherà lo stuck-in-active resetterà tutte le adiacenze con i vicini che non hanno risposto alla query.

Contromisure allo stuck-in-active

Esistono diverse contromisure allo stuck-in-active. Una di queste prende il nome di Active Process Enhancement. Per capire il funzionamento di tale meccanismo facciamo un esempio: il router A invia al router B una query che a sua volta verrà instradata verso il router C. Poichè vi è un problema relativo al collegamento tra il router B ed il router C, quest’ultimo non risponderà alla query, e di conseguenza B tarderà nell’invio della risposta ad A. Il router A crederà quindi che è il router B a presentare dei problemi e quindi rimuoverà l’adiacenza con lo stesso. Proprio per evitare una situazione del genere, a partire dalla IOS 12.1(5), è stato introdotto l’Active Process Enhancement. Grazie a tale meccanismo, il router B prima di inoltrare la query a C risponderà ad A attraverso un pacchetto SIA-reply, proprio per indicare il suo corretto funzionamento.

Un’altra contromisura allo stuck-in-active è rappresentata dal query range, detto anche query scoping. Esso limita la propagazione della query nell’ambito della rete, attraverso una route summarization oppure mediante l’uso di uno stub. Ad esempio, nel primo caso il router A invierà al router B una query richiedendo la rotta verso una specifica rete. Il router B, però, conosce la summarization di alcune rotte in cui è presente la rete cercata da A, ma non possiede nella propria tabella di routing l’indirizzo vero e proprio di quel network. Perciò, B risponderà ad A affermando che non conosce la rotta verso la rete che gli è stata richiesta.

Pe quanto riguarda lo stub, esso rappresenta un router che non può nè ricevere nè inviare le query EIGRP. Inoltre, a seconda dei casi, esso non può inviare alcuna rotta ai vicini, oppure può inoltrare solo le rotte direttamente connesse, le rotte statiche o le rotte aggregate. Per configurarlo occorre digitare:

Router(config-router)# eigrp stub [receive only | connected | static | summary]

Se invece viene specificato il comando:

Router(config-router)# eigrp stub

senza alcun parametro opzionale, lo stub inoltrerà solo le rotte direttamente connesse (previa loro esplicita dichiarazione mediante il comando network) e le summary route. Un altro modo per redistribuire le rotte direttamente connesse è quello di digitare il comando:

Router(config-router)# redistribuite connected

In questo modo, però, le rotte redistribuite verranno marcate come esterne dai router vicini che le hanno ricevute (flag EX) e quindi la loro distanza amministrativa non sarà 90 bensì 170.

Infine, è bene notare che uno stub deve essere necessariamente un router remoto ed in particolare, nelle topologie hub-n-spoke, uno stub è necessariamente uno spoke (per questo motivo può avere come vicini solo uno o più hub).

Graceful shutdown

Mediante il graceful shutdown un messaggio di disconnessione viene inviato dal router su cui non è più attivo il processo EIGRP. In questo modo si evita che l’adiacenza con i router vicini venga rimossa solo allo scadere dell’hold-timer, con conseguente spreco di banda.

Alcuni comandi utili

Di seguito riporto alcuni comandi utili per verificare il corretto funzionamento dell’EIGRP:

Router# sh eigrp neighbors

Router# sh ip route

Router# sh ip route eigrp

Router# sh ip protocols

Quest’ultimo mostra alcune informazioni riguardanti l’EIGRP quali il numero di AS, le summarization, l’hold-timer, il valore di K, la varianza, la distanza amministrativa, l’hop count e le filter list per il traffico in ingresso ed in uscita.

Abbiamo inoltre i seguenti comandi:

Router# sh ip eigrp int

che mostra le interfacce utilizzate dall’EIGRP

Router# sh ip eigrp topology

Router# sh ip eigrp topolgy all-links

Router# sh ip eigrp traffic

quest’ultimo mostra il numero di pacchetti EIGRP inviati e ricevuti. Inoltre, permette di visualizzare le statistiche relative a tutte e 5 le tipologie di pacchetti usati nell’ambito del protocollo in questione.

Router# debug ip eigrp

il cui output contiene informazioni sul calcolo della metrica

Router# debug ip eigrp summary

il quale mostra informazioni meno dispersive rispetto al comando debug ip eigrp

Router# debug eigrp neighbors

che permette di visualizzare il processo di individuazione dei vicini ed il contenuto dei pacchetti hello.

Router# debug ip eigrp packets

dove la dicitura nbr indica il vicino (neighbor), rely 1/0 indica che il pacchetto rappresenta la risposta ad un altro pacchetto che prevedeva la ricezione di un ACK (ad esempio un update), serno numero intero – numero intero indica il numero di cambiamenti che i due vicini hanno subito nell’ambito della loro tabella di routing, Seq 5/4 indica che il il vicino ha trasmesso un pacchetto con numero di sequenza pari a 5 e a tale pacchetto il router locale ha assegnato numero di sequenza pari a 4. La risposta al vicino dovrà contenere numero di sequenza pari a 5 (altrimenti il pacchetto verrà scartato). Inoltre, gli ACK avranno il primo valore del numero di sequenza uguale a 0 (ad esempio Seq 0/5), a testimonianza del fatto che essi non prevedono l’invio di un ulteriore ACK come conferma di avvenuta ricezione.

Cisco port-channel

Ora, premesso che il port-channeling NON E’ argomento CCNA come ho sentito spesso dire (almeno per quanto riguarda l’esame 640-801), il seguente post ha lo scopo di chiarire a cosa serve effettivamente la feature in questione.

Nella fattispecie, mediante il port-channeling è possibile fare in modo che più interfacce vengano coinvolte da un unico flusso logico di informazioni (in pratica è come se costituissero un’unica interfaccia), semplificando notevolmente la vita agli amministratori, soprattutto in caso di guasti o nel caso in cui si vogliano evitare i loop senza la necessità di utilizzare il protocollo STP.

Ora, le condizioni necessarie per garantire il corretto funzionamento del port-channeling sono le seguenti:

– Stessa velocità e duplex (half/full) delle porte coinvolte (è impensabile creare un port-channel tra una FastEthernet ed una GibabitEthernet);

– Le porte devono appartenere alla medesima VLAN (se il port-channeling non viene utilizzato per un trunk);

– Nel caso in cui il port-channeling riguardi un trunk, è indispensabile che tutte le porte coinvolte siano caratterizzate dallo stesso tipo di trunk, abbiano le stesse VLAN native e permettano il traffico proveniente dalle stesse VLAN (identificate con il termine VLAN-allowed);

– Nel caso in cui venga utilizzato l’STP per la gestione dei loop, le porte coinvolte devono avere il medesimo costo nell’ambito delle VLAN di appartenenza;

– Sulle interfacce coinvolte non deve essere implementato il port-mirroring (SPAN), il cui scopo è quello di mandare una replica dei frame ricevuti su una data porta dello switch verso un’altra porta dello stesso switch a cui è collegato un sistema di monitoring (ad esempio un IDS).

Detto questo, occorre fare alcune precisazioni:

1) quasi tutti gli switch marcati Cisco permettono la creazione di un numero massimo di port-channel pari a 64;

2) Ciascun canale può coinvolgere dalle 2 alle 8 interfacce, in modo tale da favorire le operazioni di bilanciamento del traffico (load-balancing).

Per ciò che concerne proprio il load-balancing, è possibile implementare un metodo di bilanciamento diverso per ogni port-channel. I metodi applicabili possono basarsi su alcuni parametri riguardanti i livelli 2, 3 e 4 della pila ISO/OSI. Nella fattispecie, le discriminanti possono essere:

1) Indirizzo MAC sorgente – src-mac;

2) Indirizzo MAC di destinazione dst-mac;

3) Entrambi gli indirizzi MAC (sia sorgente che di destinazione) src-dst-mac;

4) Indirizzo IP sorgente src-ip;

5) Indirizzo IP di destinazione dst-ip;

6) Entrambi gli indirizzi IP (sia sorgente che di destinazione) src-dst-ip;

7) Porta (UDP o TCP) sorgente src-port;

8) Porta (UDP O TCP) di destinazione dst-port;

9) Entrambe le porte UDP o TCP (sia sorgenti che di destinazione) src-dst-port.

Per scegliere il metodo pù adatto alle nostre esigenze ed implementarlo sullo switch basta digitare il comando:

Switch(config)# port-channel load-balance <opzione>

Per quanto riguarda, invece, la possibilità di formare i port-channel in modo dinamico, possono essere utilizzati i seguenti protocolli:

– PAgP (proprietario CISCO);

– LACP 802.1AD

Per mettere in piedi il port-channel vero e proprio è necessario digitare:

Switch(config-if)# channel-group <identificativo numerico> mode <modalità di funzionamento>

nell’ambito del sottomenù delle interfaccie che devono essere coinvolte durante formazione del port-channel stesso.

Le modalità di funzionamento sono le seguenti:

on (non fa uso nè di PAgP nè di LACP 802.1AD, disabilitando di fatto la formazione dinamica dei port-channel);

off (fa in modo che la porta non venga coinvolta nell’ambito del port-channel);

auto (fa uso del PAgP in modalità passiva);

desirable (fa uso del PAgP in modalità attiva);

passive (fa uso del protocollo LACP in modalità passiva);

active (fa uso del protocollo LACP in modalità attiva).

Ma qual è la differenza esistente tra la modalità attiva e quella passiva? Semplicemente nel primo caso l’interfaccia rimarrà in attesa di ricevere pacchetti appartenenti al protocollo utilizzato (PAgP  o LACP). Nel secondo caso sarà proprio l’interfaccia ad inviare i pacchetti necessari alla formazione dinamica del port-channel.

Ora, per risparmiare tempo e fatica, è stato implementato un utilissimo comando che consente di settare i parametri necessari per la creazione del port-channel su tutte le porte coinvolte (o su alcune di esse). Tale comando è il cosiddetto range:

Switch(config)# interface range fa0/0 - 4

E, successivamente, il prompt dei comandi apparirà nel seguente modo:

Switch(config-range-if)#

Possiamo dunque digitare (ad esempio):

Switch(config-range-if)# channel-group 1 mode on

Infine, alcuni comandi che possono tornare utili per eventuali operazioni di troubleshooting sono i seguenti:

Switch(config)# sh interfaces port-channel <identificativo del group-channel>

oppure:

Switch(config)# sh etherchannel <identificativo del group-channel> summary

e ancora:

Switch(config)# test etherchannel load-balance interface port-channel <identificativo> ip <IP sorgente> <IP di destinazione>

A presto.

EIGRP – Parte Prima

L’EIGRP (Enhanced Interior Gateway Routing Protocol) è un protocollo proprietario Cisco e rappresenta la naturale evoluzione dell’IGRP. Sostanzialmente, abbiamo a che fare con un protocollo di tipo ibrido, il quale prevede alcune caratteristiche tipiche dei protocolli distance vector ed altre comuni ai protocolli link-state. Infatti, l’EIGRP per individuare il cammino migliore verso una certa destinazione, oltre a considerare il costo del cammino stesso (chiamato metrica), tiene conto anche dell’hop count (come avviene per il RIP ed il RIPv2), il cui valore massimo è pari a 100. Inoltre, l’invio delle tabelle di routing viene effettuato solo verso i router vicini (neighbors).

Le caratteristiche dell’EIGRP tipiche dei protocolli link-state sono 2: l’invio di update ai router vicini solo nel caso in cui vi siano dei cambiamenti nell’ambito della topologia (i quali fungono da trigger) e la presenza, all’interno degli update stessi, delle sole rotte che hanno subito una variazione (partial update).

E’ bene notare che l’EIGRP supporta le VLSM (è quindi un protocollo classless), è indipendente dai protocolli di livello 2 utilizzati (ad esempio Frame Relay, Ethernet, ecc.) ed è compatibile con diversi protocolli di livello 3, quali IP, IPX ed Appletalk. Nella fattispecie, l’EIGRP prevede una gestione separata e contemporanea di quest’ultimi, ad esempio mediante i moduli IP-EIGRP, IPX-EIGRP, ecc. Inoltre, la sua distanza amministrativa è pari a 90 se viene utilizzato nell’ambito di un unico AS (Autonomous System), mentre è 170 se impiegato tra AS diversi.

Detto ciò, possiamo introdurre la terminologia tipica del protocollo in questione.

Successor: è il router adiacente (vicino) che possiede il cammino di minor costo verso una certa destinazione (network) e che non può essere coinvolto in routing loop. Tale cammino viene detto successor route (SR) e possono esisterne diversi contemporaneamente riguardanti un’unica destinazione (per default sono 4 ma il loro numero può essere aumentato manualmente fino a 16).

Feasible Successor: è il router adiacente che possiede il cammino con il secondo minor costo (subito dopo quello relativo al successor) verso una certa destinazione.  Tale cammino prende il nome di feasible successor route (FSR) e può essere inteso come backup della successor route. Anche le feasible successor route verso una stessa destinazione possono essere più di una.

Advertised Distance (AD): rappresenta il costo del cammino esistente tra il router adiacente ed una certa destinazione (network).

Feasible Distance (FD): costo del link che connette il router ad un suo adiacente + costo del link esistente tra il router adiacente considerato e la rete di destinazione.

Affinchè una data rotta venga eletta a feasible successor route è necessario che la sua AD sia strettamente minore dell’FD relativa alla successor route (AD FSR < FD SR). Ciò è necessario per evitare la formazione di routing loop.

L’algoritmo utilizzato per il calcolo delle SR e delle FSR prende il nome di DUAL (Diffusing Update Algorithm). Esso garantisce tempi molto bassi di convergenza della rete, poco spreco di risorse locali (ad esempio CPU e RAM) e l’assenza di routing loop.

Inoltre, l’EIGRP utilizza ben 3 tabelle per svolgere le proprie mansioni, ovvero:

Neighbor table: in cui sono salvate le informazioni relative ai router vicini (adiacenti). Per visualizzarla basta digitare:

Router# sh ip eigrp neighbors

Per completezza, di seguito riporto uno stralcio dell’output relativo al comando sopra citato:

IP-EIGRP Neighbors for process 77

H Address                 Interface     Holdtime Uptime   Q      Seq  SRTT  RTO

1  (secs)   (h:m:s)  Count  Num  (ms)  (ms)

2 160.89.81.28            Ethernet1     13       0:00:41  0      11   4     20

3 160.89.80.28            Ethernet0     14       0:02:01  0      10   12    24

4 160.89.80.31            Ethernet0     12       0:02:02  0      4    5     20

dove H (handle) è un numero utilizzato dalla IOS per identificare univocamente il router adiacente; Address rappresenta l’indirizzo di livello 3 del router adiacente; Interface è l’interfaccia locale a cui è connesso il router vicino; Uptime è tempo in ore, minuti e secondi trascorso da quando è stata formata l’adiacenza con il vicino; Smooth Round Trip Timer (SRTT) è il tempo medio in millisecondi impegato per l’invio di un pacchetto EIGRP ad un vicino e la successiva ricezione di un ACK. Viene usato per calcolare il tempo di ritrasmissione (RTO); RTO è l’intervallo di tempo in millisecondi durante il quale il router si aspetta di ricevere un ACK. Se allo scadere del suddetto intervallo l’ACK non viene ricevuto si procede con la ritrasmissione del pacchetto. La ristrasmissione può avvenire per un massimo di 16 volte (sempre entro i limiti dell’hold-time). Superati i 16 tentativi il router proverà a ricreare l’adiacenza. Occorre, inoltre, fare attenzione ai seguenti campi: Q Cnt (Queue Count), il quale rappresenta il numero di pacchetti in coda che devono essere trasmessi; Seq num, ovvero il numero di sequenza del pacchetto ricevuto dal vicino (solo se richiede ACK); Multicast flow timer, che indica il tempo massimo oltre al quale il pacchetto viene inviato in unicast anzichè in multicast. Potrebbe infatti accadere che uno dei vicini sia più lento a rispondere (con un ACK) rispetto agli altri. Quando ciò si verifica, per non posticipare troppo l’invio in multicast del pacchetto successivo, le informazioni vengono trasmesse nuovamente in unicast verso il router adiacente che ha ritardato nella risposta.

Topology table: in cui sono presenti tutte le rotte pubblicate dai router adiacenti (comprese le successor route e le feasible successor route). Per visualizzarla basta digitare:

Router# sh ip eigrp topology all-links

Digitando solo:

Router# sh ip eigrp topology

visualizzerei esclusivamente le successor route e le feasible successor route. In tal caso, avrei un output simile al seguente:

IP-EIGRP Topology Table for process 77

Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,

r - Reply status

P 172.16.90.0 255.255.255.0, 2 successors, FD is 46251776

via 172.16.80.28 (46251776/46226176), Ethernet0

via 172.16.81.28 (46251776/46226176), Ethernet1

via 172.16.80.31 (46277376/45251776), Serial0

P 172.16.81.0 255.255.255.0, 1 successors, FD is 307200

via Connected, Ethernet1

via 172.16.81.28 (307200/281600), Ethernet1

via 172.16.80.28 (317200/281600), Ethernet0

NB: La parola chiave Passive (rappresentata dalla lettera P) indica che l’algoritmo DUAL non è in esecuzione, ovvero SR ed FSR verso quella specifica destinazione sono ancora up e disponibili. Inoltre, per la rete 172.16.90.0 255.255.255.0 abbiamo 2 successor route, la cui feasible distance (FD) è pari a 46251776 (primo valore tra parentesi), mentre la loro advertised distance (AD) vale 46226176 (secondo valore tra parentesi). La terza entry, invece, rappresenta la feasible successor route.

Per la rete 172.16.81.0 255.255.255.0 abbiamo una sola successor route (via 172.16.81.28) ed una sola feasible successor route (via 172.16.80.28).

Routing table: in cui sono presenti esclusivamente le successor route verso ciascuna destinazione. Posso visualizzarle mediante il comando:

Router# sh ip route eigrp

Per visualizzare tutte le rotte indiscriminatamente (anche quelle che non sono state imparate mendiante EIGRP), basta scrivere:

Router# sh ip route

L’output sarà simile al seguente:

Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default

Gateway of last resort is not set

172.16.0.0/24 is subnetted, 6 subnets
D       172.16.252.0 [90/2681856] via 172.16.250.2, 00:18:54, Ethernet0/0
C       172.16.250.0 is directly connected, Ethernet0/0
C       172.16.251.0 is directly connected, Ethernet0/1
D       172.16.50.0 [90/2195456] via 172.16.250.2, 00:18:54, Ethernet0/0
C       172.16.1.0 is directly connected, Loopback0
D       172.16.100.0 [90/2707456] via 172.16.250.2, 00:18:54, Ethernet0/0
C    192.168.1.0/24 is directly connected, Loopback1

dove le rotte imparate mediante EIGRP sono precedute dalla lettera D. Tra le parentesi quadre sono presenti 2 valori, ovvero la distanza amministrativa e la metrica. Inoltre, è presente il tempo trascoro da quando il router ha imparato quella determinata rotta attraverso l’EIGRP, ad esempio 00:18:54. Infine, abbiamo l’interfaccia attraverso la quale vengono instradate le informazioni verso la destinazione (ad esempio Ethernet0/0 per la rete 172.16.252.0).

Tecnologie EIGRP

Le teconologie supportate dall’EIGRP sono le seguenti:

– Scoperta dinamica dei vicini (attraverso l’invio e la ricezione dei pacchetti hello);

– Uso dell’RTP (Reliable Transfer Protocol) per l’invio di informazioni critiche, quali update, query e reply. La corretta ricezione di tali informazioni viene garantita attraverso gli ACK ed i numeri di sequenza.

– Algoritmo DUAL per l’individuazone del cammino più efficiente senza loop verso ciascuna destinazione (già accennato in precedenza);

– Moduli per la gestione dei protocolli di livello 3 (già mensionati in precedenza).

Pacchetti EIGRP

Esistono 5 tipi di pacchetti EIGRP:

– Hello: usati per la creazione dinamica delle adiacenze. Vengono inviati in multicast all’indirizzo 224.0.0.10 e non richiedono ACK. L’intervallo di tempo esistente tra l’invio di un hello packet e quello immediatamente successivo prende il nome di hello interval. Per i collegamenti con banda elevata tale lasso di tempo è pari a 5 secondi (per default), invece per i link più lenti (con banda <= T1) ammonta a 60 secondi. Inoltre, l’adiancenza viene rimossa allo scadere del cosiddetto hold time (per default pari a 3 volte l’hello interval), ovvero il numero di secondi di attesa senza ricezione di hello prima che il router dichiari il vicino irraggiungibile.

Per impostare l’hello interval occorre digitare:

Router(config-if)# ip hello-interval eigrp <AS> <secondi>

dove AS rappresenta il numero che identifica l’Autonomous System.

Per ciò che concerne, invece, la configurazione dell’hold time, basta scrivere:

Router(config-if)# ip hold-time eigrp <AS> <secondi>

NB: l’hello-interval e l’hold-time tra due router vicini può non coincidere. Ciò non causerà la mancata formazione dell’adiacenza (come invece avviene nell’ambito dell’OSPF).

– Update: servono ad aggiornare le informazioni relative alle rotte. Vengono inviati solo ai router interessati dalla rotta che ha subito il cambiamento e nel caso in cui venga scoperta una nuova route vengono inoltrati in multicast. Richiedono ACK e numero di sequenza.

– Query: tale tipologia di pacchetto viene inviato ai router vicini nel caso in cui non si conosca nè successor route nè feasible successor route verso una data destinazione. Richiedono ACK e numero di sequenza.

– Reply: rappresentano la risposta alle query. Vengono instradati in unicast verso il router che ha generato la query stessa.

– ACK: sono sostanzialmente dei pacchetti hello inviati in unicast (poichè, a loro volta, gli hello non richiedono ACK).

Metrica

Il calcolo della metrica utilizzata dall’EIGRP può tener conto di 5 variabili (solo 2 per default), ovvero:

– Banda (Bandwidth);

– Ritardo (Delay);

– Affidabilità (Reliability – parametro basato sui Keepalive);

– Carico presente sul collegamento (Loading);

– MTU (Maximum Transfer Unit), parametro che rappresenta la dimensione massima dei pacchetti che possono attraversare una data interfaccia.

La formula per calcolare la metrica è la seguente (nel caso in cui K5 è pari a 0):

(K1 * banda) + [(K2 * banda) / (256 – carico)] + (K3 * ritardo).

Per K5 diverso da 0 la metrica si calcola come:

{(K1 * banda) + [(K2 * banda) / (256 – carico)] + (K3 * ritardo)} * [K5 / (affidabilità + K4)]

Per default K1=K3=1 e K2=K4=K5=0, perciò la formula si riduce a:

banda + ritardo.

NB: la banda utilizzata dall’EIGRP nell’ambito delle due formule sopra riportate è differente da quella dichiarata mediante il comando bandwidth. Infatti, il suo valore può essere calcolato nel modo seguente:

banda EIGRP = (10^7 / banda settata mediante il comando bandwidth) * 256

Discorso simile vale per il ritardo (delay):

ritardo EIGRP = (somma dei ritardi di ciascun collegamento) * 256

NB: la metrica EIGRP non è altro che la Feasible Distance (FD).

Attenzione: i valori associati a K sono contenuti all’interno dei pacchetti hello ed una loro errata configurazione potrebbe causare la rimozione dell’adiacenza.

Ultima nota: la metrica EIGRP viene rappresentata attraverso 32 bit, contro i 24 dell’IGRP. Quindi per passare dalla metrica EIGRP a quella IGRP devo moltiplicare per 256 (viceversa devo dividere per 256). Naturale conseguenza è che la prima parte di ciascuna formula è ereditata dall’IGRP ed il prodotto per 256 fà in modo che il valore risultante non sia più espresso mediante 24 bit bensì attraverso 32 bit.

Il post termina qui. Prossimamente vedremo in dettaglio come funziona l’algoritmo DUAL. A presto.

EIGRP – Parte Seconda

In questo post mi soffermerò sull’algoritmo DUAL, il quale sta alla base del funzionamento dell’EIGRP. In particolare, tale algoritmo entra in funzione se si verificano le seguenti situazioni:

– Viene creata una rete ex novo su cui è attivo l’EIGRP. In questo caso DUAL si occupa di far convergere il network, altrimenti i vari router non potrebbero comunicare tra loro.

– Viene aggiunto un nuovo router alla rete, anch’esso con EIGRP in esecuzione.

– Successor route e feasible successor route di uno o più router non sono più praticabili. In tal caso DUAL si occuperà di identificare le nuove SR e le nuove FSR.

Per capire bene come si articola il funzionamento dell’algoritmo in questione possiamo fare un esempio. Supponiamo che vi siano 4 router con EIGRP attivo e che tutti i collegamenti siano funzionanti. In tal caso DUAL non è in esecuzione e tutte le successor route (ma anche le feasible successor route) sono marcate con la lettera P (passive).

 

DUAL.JPG

 

Ipotizziamo ora che il link tra il router D ed il router B subisca un guasto. D si accorge di quanto avvenuto e marca la rotta verso il network 10.1.1.0/24 mediante il router B come irraggiungibile (proprio grazie a DUAL). Successivamente, DUAL invierà ai router adiacenti a D, ovvero C ed E, un aggiornamento in cui si dichiara l’impossibilità di raggiungere la rete 10.1.1.0/24 attraverso il router D. Inoltre, poichè L’EIGRP usa lo split-horizon, C ed E non inviaranno a D le loro rotte verso la rete 10.1.1.0/24 che coinvolgono quest’ultimo.

 

DUAL2.JPG

 

A questo punto DUAL si accorge che il cammino tra B e D rappresentava proprio la successor route per D e che tale router non possiede alcuna feasible successor route. Occorre dunque calcolare per il router D una nuova SR ed una nuova FSR. Quindi, DUAL invia una query ai router C ed E chiedendogli una nuova rotta verso la rete 10.1.1.0/24 e marca entrambi con una query flag (q).

C risponde a D affermando che la sua SR verso la rete 10.1.1.0/24 non ha subito alcun cambiamento (in quanto sfrutta il collegamento diretto col il router B) ed invia tale rotta a D.

D riceve la risposta di C, rimuove la query flag da C ma lascia attivo (Active) lo stato della rotta verso il network 10.1.1.0/24, in quanto sta ancora aspettando la reply di E.

E risponde a D proponendogli la propria SR verso la rete 10.1.1.0/24. A questo punto D rimuove la query flag da E, calcola la FD delle due rotte che gli sono state inviate rispettivamente da C e da E e quella avente FD minore verrà utilizzata da D come SR. L’altra, invece, se la sua AD è inferiore rispetto alla FD della SR, verrà utilizzata come feasible successor route.

A questo punto DUAL mercherà in D la rotta verso il network 10.1.1.0/24 con la lettera P (Passive). Ciò significa che finalmente si è raggiunta la convergenza.

Prossimamente vedremo come configurare correttamente l’EIGRP. A presto.

 

ODR (On-Demand Routing)

Poichè i protocolli di routing dinamici solitamente consumano parecchia banda, si è pensato di sviluppare un metodo alternativo per la propagazione delle rotte, attraverso il quale è possibile ridurre l’overhead. Tale metodo prende il nome di ODR (On-Demand Routing) e rappresenta una tecnologia proprietaria Cisco.

Nella fattispecie, l’ODR prevede l’uso del protocollo CDP (Cisco Discovery Protocol) per lo scambio delle informazioni tra i router appartenenti ad una topologia Hub-n-Spoke. Nella figura sottostante è possibile visualizzare la topologia in questione:

060308-1340-buildingdmv1.png

E’ bene notare che l’uso dell’ODR è previsto solo per questo genere di topologia, e proprio grazie ad esso l’Hub (ovvero il router a cui sono connessi tutti gli Spoke) riesce a propagare la default route, attraverso la quale sarà possibile raggiungerlo. Viceversa, gli spoke inviano all’Hub le informazioni relative alle loro reti (direttamente connesse). Tutte le rotte propagate mediante ODR avranno metrica pari a 1 e distanza amministrativa pari a 160. Inoltre, gli update verranno inviati in multicast ogni 60 secondi (per default).

Per una configurazione base dell’ODR occorre usare i seguenti comandi:

Router(config)# router odr

 

(abilita l’ODR);

Router(config)# cdp timer <secondi>

(per modificare l’intervallo di tempo relativo all’invio degli update);

Router# sh cdp int

(mostra su quale interfaccia è in esecuzione il CDP);

Router# sh ip route

(per visualizzare le rotte imparate attraverso l’ODR, identificate dalle lettera “o” scritta in minuscolo).

NB: L’On-Demand Rounting supporta il VLSM, ergo nell’ambito degli update vengono inviate anche informazioni relative alle subnet.

A presto.

Breve panoramica sul Frame Relay

Il Frame Relay rappresenta la naturale evoluzione del protocollo X.25. A differenza di quest’ultimo, infatti, prevede meccanismi di correzione degli errori, funzionalità non supportata dall’X.25.

Inoltre, è bene notare che il protocollo Frame Relay fa parte del livello 2 della pila ISO/OSI ed in particolare utilizza il DLCI per identificare il percorso tra la sorgente e la destinazione. Ogni DLCI ha significato solo localmente (ovvero solo sul dispositivo in cui è stato settato) e ad ogni DLCI corrisponde generalmente un undirizzo IP (quello del router di destinazione), quindi è come se effettuassimo una vera e propria mappatura tra livello 2 e livello 3. Nella fattispecie, il collegamento che si viene a creare tra sorgente e destinazione viene chiamato circuto virtuale e può essere di tipo statico (PVC – tipico dei collegamenti router-to-router) o dinamico (SVC – tipico dei collegamenti router-to-switch frame relay).

Frame Relay Network pic.jpg

 

La banda disponibile può essere definita dall’utente, ma solitamente è compresa tra i 64 Kbps e i 2 Mbps, mentre le topologie di rete maggiormente utilizzate nell’ambito di questa tecnologia sono la full mesh, la partial mesh e la cosiddetta hub-n-spoke. Nel primo caso, come si può facilmente intuire, abbiamo una rete completamente magliata, in cui ogni nodo è direttamente collegato a tutti gli altri (per identificare il numero di collegamenti necessari nell’ambito di tale topologia occorre applicare la formula N*(N-1)/2, dove N rappresenta il numero di nodi). Nel secondo caso, invece, abbiamo una magliatura parziale, mentre nel terzo, ad un router sono collegati più router contemporaneamente. Ciò viene realizzato configurando delle interfacce virtuali, ciascuna con il proprio DLCI, in modo da consentire la creazione di più circuiti virtuali sfruttando un unico collegamento fisico, rappresentato dal classico cavo seriale.

Nell’ambito dei dispositivi Cisco, la creazione di un Virtual Circuit può essere effettuata manualmente, ovvero creando una mappatura statica tra DLCI ed indirizzo IP, oppure in modo dinamico. Quest’ultima opzione prevede l’uso della cosiddetta LMI (Local Management Interface), la quale, sfruttando gli Inverse ARP, riesce a ricavare automaticamente l’indirizzo IP dei router direttamente connessi ed associarli ad uno dei DLCI disponibili. Le tipologie di LMI supportate dalle apparecchiature Cisco sono le seguenti:

– Cisco (proprietario);

– ANSI (detto anche AnnexD);

– Q933a;

Ovviemente, affinchè due router possano comunicare tra loro, devono utilizzare necessariamente lo stesso tipo di LMI. Inoltre, una volta creato il VC, esso viene mantenuto attivo grazie all’invio di keepalive effettuato proprio tramite LMI.

Sempre per ciò che concerne i dispositivi Cisco, è possibile utilizzare due tipologie di encapsulation Frame Relay, ovvero Cisco (proprietaria) oppure IETF. Nella fattispecie, per configurare un PVC occorre digitare i seguenti comandi:

Router(config-if)# encapsulation frame-relay ietf

oppure

Router(config-if)# encapsulation frame-relay cisco

Inoltre:

Router(config-if)# ip address 192.168.1.1 255.255.255.252

(dove 192.168.1.1 rappresenta l’indirizzo IP dell’interfaccia locale)

Router(config-if)# bandwidth 64

(dove 64 sono i Kbps)

Per la mappatura statica abbiamo:

Router(config-if)# frame-relay map ip 192.168.1.2 100

oppure, per settare il DLCI localmente posso usare il seguente comando:

Router(config-if)# frame-relay interface-dlci 100

Per la mappatura dinamica, invece, occorre digitare:

Router(config-if)# frame-relay lmi-type ansi

(oppure cisco o q933a – quest’ultimo rappresenta il tipo di lmi impostato di default nell’ambito delle IOS superiori alla 11.2)

Come già accennato in precedenza, spesso il Frame Relay fa uso di interfacce virtuali. Prima di definire una o più interfacce di questo tipo occorre andare ad abilitare l’interfaccia seriale di riferimento mediante il comando no shutdown, rimuovere eventuali indirizzi IP ad essa precedentemente assegnati e creare successivamente l’interfaccia virtuale vera e propria. Ad esempio:

Router(config-if)# no shutdown

Router(config-if)# interface serial 0/0.1 point-to-point (oppure multipoint)

Router(config-subif)# ip address 192.168.1.1 255.255.255.0

Router(config-if)# interface serial 0/0.2 point-to-point

Router(config-subif)# ip address 192.168.2.1 255.255.255.0

e così via. Ovviamente, per creare VC diversi per ogni sottointerfaccia, occorre utilizzare indirizzi IP appartenenti a reti diverse (come riportato nell’esempio).

E’ possibile, inoltre, consentire il traffico broadcast (come i RIP update) lungo i circuiti virtuali, digitando il comando:

Router(config-if)# frame-relay map ip 192.168.1.2 100 broadcast

Un problema tipico delle reti frame-relay è quello relativo all’uso errato dello split horizon. Nella fattispecie, tale tecnica ha come scopo quello di prevenire i routing loop non consentendo l’invio di routing update mediante la stessa interfaccia che li ha ricevuti. Ovviemente, se si utilizzasse lo split horizon nell’ambito di una topologia point-to-multipoint, i routing update ricevuti da un dato router non potrebbero essere inoltrati verso gli altri router della rete. Ecco allora che si può procedere con il disabilitare lo split horizon in modo manuale oppure attraverso la creazione di più sottointerfacce virtuali a sè stanti.

Vediamo adesso alcuni comandi utili alla diagnostica della rete Frame Relay:

Router# show frame-relay map

(mostra le mappature layer 2-to-layer 3)

Router# show frame-relay pvc <numero pvc>

 

(consente di vedere il numero di BECN e FECN, campi del frame che segnalano rispettivamente alla sorgente ed alla destinazione uno stato di congestione della rete)

Router# show frame-relay lmi
Router# clear frane-relay-inarp

(pulisce le mappature dinamiche).

NB: affinchè tale protocollo possa funzionare correttamente è necessario che vi sia un clockrate, solitamente fornito dagli switch Frame-Relay. Nel caso in cui il collegamento viene realizzato tra due router, nell’ambito della seriale relativa al DCE occorre digitare:

Router(config-if)# frame-relay intf-type dce

(comando non supportato da Packet Tracer 5.1).

Inoltre, per disabilitare la mappatura dinamica ed utilizzare solo quella statica si può scrivere:

Router(config-if)# no frame-relay inverse-arp

(anche questo comando non è supportato da Packet Tracer 5.1).

Nei prossimi post esamineremo le caratteristiche di un altro protocollo di livello 2 ampiamente utilizzato, ovvero il PPP. A presto.

Aggiornare IOS e PDM su Cisco PIX 501

Data la scarsa documentazione presente in rete, ho pensato di pubblicare una piccola guida su come aggiornare la IOS (che in realtà si chiama Finesse) ed il PDM (PIX Device Manager) del Cisco PIX 501.

Tale modifica si rende necessaria in quanto non è possibile utilizzare il PDM con sistemi operativi abbastanza recenti, quali Windows XP e Windows Vista. Inoltre, il file associato alla IOS e quello relativo al PDM devono sempre essere allineati, dunque è fortemente sconsigliato effettuare l’upgrade del PDM lasciando invariata la versione di IOS.

Fatte queste premesse, veniamo a noi. Per prima cosa occorre utilizzare un programmino che permetta di lanciare un servizio di server TFTP sulla nostra macchina. Personalmente vi consiglio di usare tftp32, programmino semplice, veloce ed affidabile. Potete scaricarlo da qui, è gratuito.

Ora scarichiamo l’ultima versione di IOS disponibile per il nostro firewall, ovvero la 6.3(5), e la relativa versione di PDM (la 3.0(4)). Entrambi i file li potete scaricare direttamente da qui (è necessario un account CCO).

Avviamo il server TFTP sulla nostra macchina, facendo attenzione che sia la IOS che il PDM si trovino nella stessa directory dell’eseguibile. Colleghiamo il nostro PC al firewall con il classico cavo di rete (straight), allacciato ad una delle interfacce “inside”. Fatto ciò, utilizziamo un cavo rollover per connettere la porta COM del nostro PC con la porta console del firewall, apriamo Hyperterminal (oppure Putty) e settiamo i seguenti parametri di configurazione:

1) Bit per secondo: 9600

2) Bit di dati: 8

3) Parità: nessuno

4) Bit di stop: 1

5) Controllo del flusso: Hardware

Premiamo invio e dovremmo visualizzare il prompt del nostro firewall.

Digitiamo adesso i seguenti comandi:

pixfirewall# copy tftp flash:image

Address or name of remote host [0.0.0.0]? 192.168.2.2

Source file name [cdisk]? pix635.bin

copying tftp://192.168.2.2/pix635.bin to flash:image

[yes|no|again]? yes

Dove 192.168.2.2 è l’indirizzo IP del nostro PC, sul quale è in esecuzione il server TFTP.

Se tutto è andato a buon fine dovremmo vedere in output il seguente risultato:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!
Received 2101248 bytes
Erasing current image
Writing 1978424 bytes of image
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Image installed

Passiamo adesso al PDM. Digitiamo i comandi:

pixfirewall# copy tftp flash:pdm

Address or name of remote host [0.0.0.0]? 192.168.2.2

Source file name [cdisk]? pdm-304.bin

copying tftp://172.16.3.2/pdm-304.bin to flash:pdm

[yes|no|again]? yes

e successivamente verrà stampato a video il seguente risultato:

Erasing current PDM file
Writing new PDM file
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
PDM file installed.

Bene, il gioco è fatto. Non ci resta che installare sul PC che useremo per gestire il nostro PIX una versione di JVM (Java Virtual Machine) <= 1.4.3, poichè con le versioni successive il corretto funzionamento del PDM non è garantito. Potete scaricare la JVM versione 1.4.2 da qui.

Personalmente, prima di installare tale versione di JVM ho disinstallato tutte le altre versioni (più recenti) che si trovavano sul mio sistema, in modo da prevenire eventuali problemi di funzionamento futuri associati al PDM.

Una volta completata l’installazione della JVM apriamo il nostro browser e digitiamo:

https://192.168.2.1

dove 192.168.2.1 è l’indirizzo IP dell’interfaccia “inside” a cui è connessa la nostra LAN.

Appena vi comprarirà la finestra per l’inserimento di username e password, lasciate vuoto il campo username mentre nel campo password inserite la stessa parola chiave scelta per accedere alla modalità enable dal prompt del firewall.

Sicuramente il browser segnalerà che il certificato di autenticità è scaduto. Non preoccupatevi e accettatelo in modo permanente.

Dopo un ulteriore inserimento delle opportune credenziali di accesso e dopo che il PDM avrà caricato in locale tutte le impostazioni relative al nostro firewall, sarà finalmente possibile utilizzare questa GUI per customizzare completamente il nostro piccolo, ma utilissimo, dispositivo.

La guida termina qui, a presto.