Problema ricezione ICMP unreachable df

Tutto ciò che ha a che fare con la configurazione di apparati Cisco (e non rientra nelle altre categorie)

Moderatore: Federico.Lagni

Rispondi
nightfly83
n00b
Messaggi: 21
Iscritto il: sab 09 mag , 2009 3:58 pm

Ciao a tutti,
ultimamente ho dovuto configurare una coppia di router 2900 connessi tra di loro mediante tunnel GRE + IPsec.
L'interfaccia gi0/2 di entrambi i router è quella su cui sono attestati i client delle rispettive LAN, mentre le interfacce gi0/1 di entrambi sono direttamente collegate ai router WAN che fungono da "trasporto" per il tunnel GRE + IPsec. Poichè la mia intenzione sarebbe quella di abilitare la PMTUD sulle interfacce tun di entrambi i router (per consentire l'autonegoziazione della MTU), ho fatto in modo che i router coinvolti fossero in grado di inoltrare i messaggi ICMP unreachable df (type 3 code 4, per essere più precisi). Ho quindi deciso di testare il tutto ponendomi nel caso più semplice: abilitare i messaggi ICMP unreachable sull'interfaccia LAN di un router e provare ad inoltrare una serie di pacchetti ICMP con il bit DF a 1 da un client direttamente attestato su di essa (per "direttamente" intendo senza switch o altri dispositivi L2 in mezzo), puntando proprio all'IP dell'interfaccia LAN del router.

Alcune info:

1) L'IP del client è 192.168.1.12 mentre l'IP dell'interfaccia LAN del router è 192.168.1.61;
2) la MTU dell'interfaccia eth del PC client è pari a 1500 byte;
3) sull'interfaccia eth gi0/2 (LAN) del router a cui era collegato il client ho artificiosamente abbassato la MTU nativa (1500 byte) portandola a 1476 byte (ip mtu 1476);
4) sempre sulla eth gi0/2 (LAN) dello stesso router ho abilitato l'invio dei messaggi ICMP unreachable digitando il comando "ip unreachable";
5) ho abilitato il debug dell'ICMP (debug ip icmp) per appurare che i pacchetti in oggetto venissero effettivamente generati ed inoltrati;
6) sul router ho disabilitato a livello globale l'ICMP unreachable rate limit (no ip icmp rate-limit unreachable). So che tale configurazione è KO per quanto riguarda la sicurezza, ma essa è stata impiegata solo durante i test e su dei sistemi non ancora in produzione;
7) sul router non esistevano ACL di alcun genere;
8) le IOS che ho utilizzato per i test sono, rispettivamente, la 15.2(4)M3 e la 15.5(1)T. Ho utilizzato due versioni differenti di IOS per scongiurare eventuali bachi a livello di SO del router;
9) il "display filter" utilizzato su Wireshark è semplicemente "icmp".

Test svolti

Come test ho semplicemente pingato l'interfaccia LAN del router (quella su cui avevo ridotto la MTU):

C:\Users\nightfly>ping 192.168.1.61 -l 1473 -f

ricevendo come risposta "Richiesta scaduta" anzichè "E' necessario frammentare il pacchetto ma DF è attivo" (sniffando il traffico con Wireshark ero in grado di vedere solo le echo request e nessun tipo di risposta da parte del router). Ovviamente, riducendo il payload del pacchetto ICMP (flag -l) e portandolo a 1448 byte ho ricevuto ICMP echo reply (come c'era da aspettarsi, poichè 1448 byte è l'ultimo valore utile - al payload di 1448 byte vanno sommati 20 byte di intestazione IP e 8 byte di intestazione ICMP, per un totale di 1476 byte che è la MTU dell'interfaccia LAN, dimensione oltre la quale si ha frammentazione).

Inoltre, sempre mediante Wireshark, mi sono accorto che il router era in grado di inoltrare correttamente altre tipologie di messaggi ICMP unreachable, quali host unreachable e port unreachable, ma non i DF.

Guardando l'output del "debug ip icmp" ho notato che le risposte venivano correttamente generate:

Codice: Seleziona tutto

*Dec 17 07:40:26.735: ICMP: echo reply sent, src 192.168.1.61, dst 192.168.1.12, topology BASE, dscp 0 topoid 0
*Dec 17 07:40:26.735: ICMP: dst (192.168.1.12): frag. needed and DF set
*Dec 17 07:40:31.727: ICMP: echo reply sent, src 192.168.1.61, dst 192.168.1.12, topology BASE, dscp 0 topoid 0
*Dec 17 07:40:31.727: ICMP: dst (192.168.1.12): frag. needed and DF set
*Dec 17 07:40:36.735: ICMP: echo reply sent, src 192.168.1.61, dst 192.168.1.12, topology BASE, dscp 0 topoid 0
*Dec 17 07:40:36.735: ICMP: dst (192.168.1.12): frag. needed and DF set
Considerazioni finali

Apparentemente sembra che si tratti di un baco, ma consultando la buglist della Cisco non vi è alcuna segnalazione di questo tipo (per entrambe le IOS utilizzate, le quali presentano entrambe tale anomalia).

Qualcuno di voi ci è già passato prima? Sapreste dirmi se si tratta di un baco?

Grazie :)

PS: so che potrei settare il tcp adjust-mss sull'interfaccia LAN, utilizzando una dimensione pari a 1436 byte (1476 MTU nativa dell'interfaccia tunnel GRE - 20 byte di intestazione IP - 20 byte di intestazione TCP), ma preferirei optare per la PMTUD.
Dott. in Ingegneria delle Telecomunicazioni
CCNA R&S
CCNA Security
CompTIA Network+
CompTIA Security+
EUCIP Core
EUCIP IT Administrator Fundamentals
MCP Windows Server 2012
MCSA Windows Server 2008
MCITP
MCTS
nightfly83
n00b
Messaggi: 21
Iscritto il: sab 09 mag , 2009 3:58 pm

fragmentation_needed.png
Ciao a tutti,
ho modificato le condizioni al contorno, in particolare:

1) ho configurato entrambe le interfacce del router, quella su cui è attestato il client è sempre la gi0/2 con IP 192.168.1.61, mentre all'interfaccia che funge da interlink verso i router WAN ho assegnato l'IP 172.16.1.61;
2) ho ripotrato la MTU dell'interfaccia gi0/2 a 1500 byte (quella di default) ed ho abbassato la MTU dell'interfaccia gi0/1, portandola a 1476 byte;
3) sull'interfaccia gi0/1 ho abilitato l'inoltro dei pacchetti ICMP unreachable (ip unreachables), come era già stato fatto per l'interfaccia gi0/2;
4) all'interfaccia gi0/1 ho collegato un altro PC (server) a cui ho assegnato l'IP 172.21.1.12, utilizzando quest'ultimo come indirizzo di destinazione dei ping.

Lanciando il comando:

C:\Users\nightfly> ping -f -l 1449 172.21.1.12 -t

ho ricevuto correttamente i pacchetti ICMP type 3 code 4 come risposta (vedi allegato).

Lanciando un debug ip packet ho ottenuto il seguente output:

Codice: Seleziona tutto

*Dec 22 14:25:12.975: IP: s=192.168.1.12 (FastEthernet0/1), d=172.21.1.12 (FastEthernet0/0), g=172.21.1.12, len 1477, forward
*Dec 22 14:25:12.975: IP: tableid=0, s=192.168.1.61 (local), d=192.168.1.12 (FastEthernet0/1), routed via FIB
*Dec 22 14:25:12.975: IP: s=192.168.1.61 (local), d=192.168.1.12 (FastEthernet0/1), len 56, sending
mentre un debug ip icmp mi ha restituito tale risultato:

Codice: Seleziona tutto

*Dec 22 14:13:36.127: ICMP: dst (172.21.1.12) frag. needed and DF set unreachable sent to 192.168.1.12
*Dec 22 14:14:03.895: ICMP: dst (172.21.1.12) frag. needed and DF set unreachable sent to 192.168.1.12
*Dec 22 14:15:19.823: ICMP: dst (172.21.1.12) frag. needed and DF set unreachable sent to 192.168.1.12
In soldoni, i test da me effettuati sono validi solo ed esclusivamente quando il pacchetto ICMP attraversa "fisicamente" le 2 interfacce, passando dalla gi0/2 alla gi0/1.
Viceversa, dopo aver riportato la MTU dell'interfaccia gi0/2 a 1476 byte, effettuando un ping (con payload di 1472 byte + 20 byte di header IP + 8 byte di header ICMP) dal client verso l'IP di quest'ultima (192.168.1.61), il pacchetto viene correttamente ricevuto dal router, ma la successiva risposta (ICMP echo reply) presenta una dimensione eccessiva (1500 byte):

Codice: Seleziona tutto

*Dec 22 14:54:32.591: IP: s=192.168.1.61 (local), d=192.168.1.12 (GigabitEthernet0/2), len 1500, sending
che è superiore alla MTU configurata sull'interfaccia (1476 byte), ergo viene scartato dalla stessa in fase di TX (in generale, la MTU viene presa in considerazione in fase di TX e non di RX) e non giungerà mai al client.

In particolare, secondo quanto specificato nell'RFC 1812, i messaggi ICMP echo reply devono avere lo stesso payload della echo request a cui si riferiscono (ecco il perchè della loro dimensione eccessiva). Cito testualmente:
Data received in an ICMP Echo Request MUST be entirely included in the resulting Echo Reply
Successivamente, il router genera un messaggio ICMP type 3 code 4 rivolto a se stesso, proprio per segnalare la dimensione eccessiva della echo reply:

Codice: Seleziona tutto

*Dec 22 14:54:32.592: ICMP: dst (192.168.1.12): frag. needed and DF set
ed ecco perchè pingando direttamente l'interfaccia del router su cui è attestato il client non ottengo nessuna risposta.

Ciao.
Non hai i permessi necessari per visualizzare i file allegati in questo messaggio.
Dott. in Ingegneria delle Telecomunicazioni
CCNA R&S
CCNA Security
CompTIA Network+
CompTIA Security+
EUCIP Core
EUCIP IT Administrator Fundamentals
MCP Windows Server 2012
MCSA Windows Server 2008
MCITP
MCTS
Rispondi