In questo documento viene descritto come risolvere i problemi che possono verificarsi quando un pacchetto viene frammentato. Un esempio di problema di frammentazione è la capacità di eseguire il ping di una risorsa di rete, ma l'impossibilità di connettersi alla stessa risorsa con un'applicazione specifica, ad esempio un database o una posta elettronica.
Prima di provare questa configurazione, accertarsi di soddisfare i seguenti requisiti:
Connettività tra peer VPN
Il documento può essere consultato per tutte le versioni software o hardware.
Il documento usa la seguente configurazione di rete:
La configurazione illustrata in questo documento può essere utilizzata nelle seguenti versioni hardware e software:
Router IOS
Dispositivi di sicurezza PIX/ASA
Fare riferimento a Cisco Technical Tips Conventions per ulteriori informazioni sulle convenzioni dei documenti.
L'IP supporta una lunghezza massima di 65.536 byte per un pacchetto IP, ma la maggior parte dei protocolli del livello di collegamento dati supporta una lunghezza molto più piccola, chiamata MTU (Maximum Transmission Unit). In base all'MTU supportata, può essere necessario frammentare un pacchetto IP per trasmetterlo su un particolare tipo di supporto a livello di collegamento dati. Quindi, la destinazione deve ricomporre i frammenti nel pacchetto IP completo originale.
Quando si utilizza una VPN per proteggere i dati tra due peer VPN, viene aggiunto un sovraccarico aggiuntivo ai dati originali, che può richiedere la frammentazione. In questa tabella sono elencati i campi che potrebbero essere aggiunti ai dati protetti per supportare una connessione VPN. Si noti che possono essere necessari più protocolli, il che aumenta le dimensioni del pacchetto originale. Ad esempio, se si usa una connessione IPSEC DMVPN L2L tra due router Cisco, in cui è stato implementato un tunnel GRE, è necessario questo sovraccarico aggiuntivo: ESP, GRE e l'intestazione IP esterna. Se si dispone di una connessione client IPSec a un gateway VPN quando il traffico attraversa un dispositivo indirizzo, è necessario questo sovraccarico aggiuntivo per NAT-T (Network Address Translation- Traversal), nonché l'intestazione IP esterna per la connessione in modalità tunnel.
Quando l'origine invia un pacchetto a una destinazione, inserisce un valore nel campo dei flag di controllo delle intestazioni IP che influisce sulla frammentazione del pacchetto da parte dei dispositivi intermedi. Il flag di controllo è lungo tre bit, ma solo i primi due vengono utilizzati nella frammentazione. Se il secondo bit è impostato su 0, il pacchetto può essere frammentato; se è impostato su 1, il pacchetto non può essere frammentato. Il secondo bit è in genere denominato bit non frammentare (DF, Don't Fragment). Il terzo bit specifica quando si verifica la frammentazione, se il pacchetto frammentato è l'ultimo (impostato su 0) o se vi sono altri frammenti (impostato su 1) che costituiscono il pacchetto.
Quando è richiesta la frammentazione, le aree che possono creare problemi sono quattro:
I due dispositivi che eseguono la frammentazione e il riassemblaggio richiedono un ulteriore sovraccarico nei cicli della CPU e nella memoria.
Se un frammento viene scartato durante il percorso verso la destinazione, il pacchetto non può essere ricomposto e l'intero pacchetto deve essere frammentato e inviato di nuovo. Ciò crea ulteriori problemi di velocità di trasmissione, specialmente in situazioni in cui il traffico in questione è limitato dalla velocità e l'origine invia il traffico oltre il limite consentito.
Il filtro dei pacchetti e i firewall con stato possono avere difficoltà nell'elaborare i frammenti. In caso di frammentazione, il primo frammento contiene un'intestazione IP esterna, l'intestazione interna, ad esempio TCP, UDP, ESP e altri, e parte del payload. I frammenti successivi del pacchetto originale stipulano un'intestazione IP esterna e la continuazione del payload. Il problema di questo processo è che alcuni firewall devono visualizzare le informazioni dell'intestazione interna in ogni pacchetto per poter prendere decisioni intelligenti sul filtro. Se tali informazioni non sono disponibili, possono involontariamente eliminare tutti i frammenti, ad eccezione del primo.
L'origine nell'intestazione IP del pacchetto può impostare il terzo bit di controllo in modo che non frammenti, il che significa che se un dispositivo intermedio riceve il pacchetto e deve frammentarlo, il dispositivo intermedio non può frammentarlo. Il dispositivo intermedio scarta il pacchetto.
La maggior parte delle reti utilizza Ethernet, con un valore MTU predefinito di 1.500 byte, che è in genere utilizzato per i pacchetti IP. Per scoprire se la frammentazione si verifica o è necessaria, ma non può essere eseguita (il bit DF è impostato), avviare prima la sessione VPN. È quindi possibile utilizzare una di queste quattro procedure per individuare la frammentazione.
Eseguire il ping di una periferica situata all'altra estremità. In questo caso, si presume che il ping sia consentito attraverso il tunnel. Se l'operazione ha esito positivo, provare ad accedere a un'applicazione nello stesso dispositivo. Se ad esempio un server di posta elettronica o Desktop remoto Microsoft si trova all'interno del tunnel, aprire Outlook e provare a scaricare la posta elettronica oppure provare a utilizzare Desktop remoto nel server. Se questo non funziona, e si dispone della risoluzione corretta dei nomi, è molto probabile che il problema sia la frammentazione.
Da un dispositivo Windows utilizzare il seguente comando: C:\> ping -f -l packet_size_in_bytes indirizzo_IP_destinazione.
L'opzione -f viene usata per specificare che il pacchetto non può essere frammentato. L'opzione -l viene usata per specificare la lunghezza del pacchetto. Provate prima questo con una dimensione del pacchetto di 1.500. Ad esempio, ping -f -l 1500 192.168.100. Se è richiesta la frammentazione ma non può essere eseguita, viene visualizzato un messaggio del tipo: È necessario frammentare i pacchetti, ma DF è impostato.
Sui router Cisco, eseguire il comando debug ip icmp e usare il comando ping esteso. Se si vede ICMP:dst (x.x.x.x) frammentazione richiesta e DF impostato, unreachable inviato a y.y.y, dove x.x.x.x è un dispositivo di destinazione e y.y.y è il router, un dispositivo intermedio indica che è necessaria la frammentazione, ma poiché il bit DF è stato impostato nella richiesta echo, un dispositivo intermedio non può frammentarlo per inoltrarlo all'hop successivo. In questo caso, diminuire gradualmente le dimensioni MTU dei ping finché non ne trovi una che funzioni.
Sulle appliance di sicurezza Cisco, utilizzare un filtro di acquisizione.
cisco(config)#access-list outside_test allow tcp any host 172.22.1.1 eq 80
Nota: se si lascia invariata l'origine, l'amministratore potrà monitorare qualsiasi NAT (Network Address Translation).
cisco(config)#access-list outside_test allow tcp host 172.22.1.1 eq 80 any
Nota: quando si inverte le informazioni di origine e destinazione, consente l'acquisizione del traffico di ritorno.
cisco asa(config)# capture outside_interface access-list outside_test interface outside
L'utente deve avviare una nuova sessione con l'applicazione X. Dopo che l'utente ha avviato una nuova sessione X dell'applicazione, l'amministratore ASA deve usare il comando show capture outside_interface.
I problemi di frammentazione possono essere risolti in diversi modi. Tali argomenti sono trattati in questa sezione.
L'impostazione MTU statica può risolvere i problemi di frammentazione.
Modifica MTU sul router:
Notare che se si imposta manualmente l'MTU sul dispositivo, questo indica al dispositivo, che agisce come gateway VPN, di frammentare i pacchetti ricevuti prima di proteggerli e di inviarli attraverso il tunnel. È preferibile che il router protegga il traffico e quindi lo frammenti, ma il dispositivo lo frammenta.
Avviso: se si modificano le dimensioni dell'MTU su una qualsiasi interfaccia del dispositivo, tutti i tunnel terminati su quell'interfaccia vengono eliminati e ricostruiti.
Sui router Cisco, usare il comando ip mtu per regolare le dimensioni MTU sull'interfaccia su cui si termina la VPN:
router (config)# interface type [slot_#/] port_# router (config-if)# ip mtu MTU_size_in_bytes
Modifica MTU su ASA/PIX:
Sui dispositivi ASA/PIX, usare il comando mtu per regolare le dimensioni dell'MTU nella modalità di configurazione globale. Per impostazione predefinita, l'MTU è impostata su 1500. Ad esempio, se sull'appliance di sicurezza dell'utente è presente un'interfaccia denominata Outside (dove la VPN è terminata) e si è stabilito (tramite le misure elencate nella sezione Discover Fragmentation) che si desidera utilizzare 1380 come dimensioni del frammento, utilizzare questo comando:
security appliance (config)# mtu Outside 1380
Le dimensioni massime del segmento TCP possono risolvere i problemi di frammentazione.
Nota: questa funzione funziona solo con il protocollo TCP; gli altri protocolli IP devono usare un'altra soluzione per risolvere i problemi di frammentazione IP. Anche se si imposta l'mtu ip sul router, ciò non influisce su ciò che i due host terminali negoziano nell'handshake a tre vie TCP con il valore TCP MSS.
Modifica MSS sul router:
La frammentazione del traffico TCP viene effettuata perché il traffico TCP viene usato normalmente per trasportare grandi quantità di dati. Il protocollo TCP supporta una funzione denominata TCP maximum segment size (MSS) che consente ai due dispositivi di negoziare una dimensione adatta al traffico TCP. Il valore MSS viene configurato in modo statico su ciascun dispositivo e rappresenta le dimensioni del buffer da utilizzare per un pacchetto previsto. Quando due dispositivi stabiliscono connessioni TCP, confrontano il valore MSS locale con il valore MTU locale nell'handshake a tre vie. Il valore più basso viene inviato al peer remoto. I due peer utilizzano quindi il valore più basso tra i due valori scambiati. Per configurare questa funzionalità, eseguire la procedura seguente:
Sui router Cisco, usare il comando tcp adjust-mss sull'interfaccia su cui si termina la VPN.
router (config)# interface type [slot_#/] port_# router (config-if)# ip tcp adjust-mss MSS_Size_in_bytes
Modifica MSS sull'appliance ASA/PIX:
Per assicurarsi che le dimensioni massime del segmento TCP non superino il valore impostato e che non siano inferiori a una dimensione specificata, usare il comando syspot connection in modalità di configurazione globale. Per ripristinare l'impostazione predefinita, non utilizzare la forma appropriata per questo comando. Il valore massimo predefinito è 1380 byte. La funzionalità minima è disabilitata per impostazione predefinita (impostata su 0).
Per modificare il limite massimo predefinito di MSS, procedere come segue:
security appliance (config)# sysopt connection tcp-mss MSS_size_in_bytes
Nota: se si imposta una dimensione massima superiore a 1380, i pacchetti possono essere frammentati, a seconda della dimensione MTU (che per impostazione predefinita è 1500). Quando si utilizza la funzione Protezione contro frodi, un numero elevato di frammenti può influire sulle prestazioni dell'appliance di sicurezza. Se si impostano le dimensioni minime, il server TCP non potrà inviare molti pacchetti di dati TCP di piccole dimensioni al client e ciò avrà un impatto sulle prestazioni del server e della rete.
Per modificare il limite minimo di MSS, attenersi alla seguente procedura:
security appliance (config)# sysopt connection tcp-mss minimum MSS_size_in_bytes
appliance di sicurezza (config)# connessione di sistema tcp-mss valore minimo MSS_size_in_bytes
Nota: fare riferimento alla sezione Configurazione MPF per consentire i pacchetti che superano MSS del documento PIX/ASA 7.X Problema: MSS superato - I client HTTP non possono cercare in alcuni siti Web ulteriori informazioni per consentire i pacchetti MSS superati con un altro metodo.
La funzionalità PMTUD può risolvere i problemi di frammentazione.
Il problema principale del parametro TCP MSS è che l'amministratore deve sapere quale valore configurare sul router in modo da evitare la frammentazione. Questo può essere un problema se tra l'utente e la posizione della VPN remota esistono più percorsi oppure, quando si esegue la query iniziale, si rileva che la seconda o la terza MTU più piccola, anziché la più piccola, è basata sulla decisione di routing utilizzata nella query iniziale. La funzionalità PMTUD permette di determinare un valore MTU per i pacchetti IP e di evitare la frammentazione. Se i messaggi ICMP sono bloccati da un router, l'MTU del percorso viene interrotta e i pacchetti con bit DF impostato vengono scartati. Usare il comando set ip df per annullare il bit DF e consentire la frammentazione e l'invio del pacchetto. La frammentazione può rallentare la velocità di inoltro dei pacchetti sulla rete, ma gli elenchi degli accessi possono essere utilizzati per limitare il numero di pacchetti su cui il bit DF viene annullato.
Il processo PMTUD può non funzionare per tre motivi:
Un router intermedio può eliminare il pacchetto e non rispondere con un messaggio ICMP. Questa condizione non è molto comune su Internet, ma può essere comune all'interno di una rete in cui i router sono configurati in modo da non rispondere con messaggi ICMP "destinazione irraggiungibile".
Un router intermedio può rispondere con un messaggio ICMP "destinazione irraggiungibile" ma, nel flusso di ritorno, un firewall blocca questo messaggio. Si tratta di un evento più comune.
Il messaggio ICMP "destinazione irraggiungibile" torna all'origine, ma l'origine ignora il messaggio di frammentazione. Questa è la più insolita delle tre questioni.
Se si verifica il primo problema, è possibile annullare il bit DF nell'intestazione IP inserita dall'origine oppure regolare manualmente le dimensioni del valore TCP MSS. Per annullare il bit DF, un router intermedio deve modificare il valore da 1 a 0. In genere, questa operazione viene eseguita da un router della rete prima che il pacchetto esca dalla rete. Questa è una semplice configurazione di codice che esegue questa operazione su un router basato su IOS:
Router (config) # access-list ACL_# permit tcp any any Router (config) # route-map route_map_name permit seq# Router (config-route-map) # match ip address ACL_# Router (config-route-map) # set ip df 0 Router (config-route-map) # exit Router (config) # interface type [slot#/]port # Router (config-if) # ip policy router-map route_map_name
Tunnel PMTUD e GRE
per impostazione predefinita, un router non esegue il PMTUD sui pacchetti del tunnel GRE che ha generato. Per abilitare il PMTUD sulle interfacce del tunnel GRE e fare in modo che il router partecipi al processo di tuning MTU per i dispositivi di origine/destinazione per il traffico che attraversa il tunnel, utilizzare questa configurazione:
Router (config) # interface tunnel tunnel_#
Router (config-if) # tunnel path-mtu-discovery
Il comando tunnel path-mtu-discovery abilita il PMTUD sull'interfaccia del tunnel GRE di un router. Il parametro opzionale age-timer specifica il numero di minuti dopo il quale l'interfaccia del tunnel reimposta le dimensioni MTU massime rilevate, meno 24 byte per l'intestazione GRE. Se si specifica infinite per il timer, il timer non viene utilizzato. Il parametro min-mtu specifica il numero minimo di byte che costituiscono il valore MTU.
PIX/ASA 7.x - Clear Don't Fragment (DF) (Non frammentare) o gestire pacchetti o file di grandi dimensioni.
Non è ancora possibile accedere correttamente a Internet, ai file di grandi dimensioni o alle applicazioni tramite il tunnel perché viene visualizzato questo messaggio di errore MTU delle dimensioni:
PMTU-D packet 1440 bytes greater than effective mtu 1434, dest_addr=10.70.25.1, src_addr=10.10.97.55, prot=TCP
Per risolvere questo problema, accertarsi di annullare il bit DF dell'interfaccia esterna del dispositivo. Configurare il criterio DF-bit per i pacchetti IPSec con il comando crypto ipsec df-bit in modalità di configurazione globale.
pix(config)# crypto ipsec df-bit clear-df outside
Il bit DF con la funzione dei tunnel IPSec permette di specificare se l'appliance di sicurezza può cancellare, impostare o copiare il bit DF (Don't Fragment) dall'intestazione incapsulata. Il bit DF nell'intestazione IP determina se un dispositivo può frammentare un pacchetto.
Utilizzare il comando crypto ipsec df-bit in modalità di configurazione globale per configurare l'appliance di sicurezza in modo che specifichi il bit DF in un'intestazione incapsulata.
quando si incapsula il traffico IPSec in modalità tunnel, usare l'impostazione clear-df per il bit DF. Questa impostazione consente al dispositivo di inviare pacchetti più grandi delle dimensioni MTU disponibili. Inoltre, questa impostazione è appropriata se non si conoscono le dimensioni MTU disponibili.
Nota: se si verificano ancora problemi di frammentazione e pacchetti scartati, facoltativamente, è possibile modificare manualmente le dimensioni dell'MTU con il comando ip mtu tunnel interface. In questo caso, il router frammenta il pacchetto prima di proteggerlo. Questo comando può essere usato in combinazione con PMTUD e/o TCP MSS.
Attualmente non è disponibile una procedura di verifica per questa configurazione.
Lo strumento Output Interpreter (solo utenti registrati) (OIT) supporta alcuni comandi show. Usare OIT per visualizzare un'analisi dell'output del comando show.
Si supponga che il tunnel IPSec sia stato stabilito tra il router e il PIX. Se vengono visualizzati messaggi di errore di crittografia che indicano che i pacchetti sono stati scartati, attenersi alla seguente procedura per risolvere il problema:
Eseguire una traccia dello sniffer dal client al server per individuare l'MTU migliore da utilizzare.
È possibile anche utilizzare il test ping:
ping -l 1400 192.168.1.1 -f
192.168.1.1 è l'indirizzo IP del computer remoto.
Continuare a ridurre il valore di 1400 di 20 fino a quando non viene fornita una risposta.
Nota: il valore magico, che nella maggior parte dei casi funziona, è 1300.
Una volta raggiunta la dimensione massima appropriata del segmento, regolarla in modo appropriato per i dispositivi in uso:
Sul firewall PIX:
sysopt connection tcpmss 1300
Sul router:
ip tcp adjust-mss 1300
Problema:
È possibile eseguire il ping tra le reti VPN, ma non è possibile stabilire connessioni RDP (Remote Desktop Protocol) e Citrix attraverso il tunnel.
Soluzione:
Il problema può essere dovuto alle dimensioni dell'MTU sul PC dietro l'appliance PIX/ASA. Impostare le dimensioni dell'MTU su 1300 per il computer client e provare a stabilire la connessione Citrix sul tunnel VPN.
Revisione | Data di pubblicazione | Commenti |
---|---|---|
1.0 |
19-Feb-2009 |
Versione iniziale |