NAT per IPv4 (seconda parte)

Last updated on December 10, 2021

Blog ITA - Post 3

Complexity [ scale of 1 to 5 ]
2.5/5

Questo laboratorio – attraverso l’uso contestuale dei comandi ip nat inside source e ip nat outside source – verra’ utilizzato per discutere il NAT order of operation, ovvero l’ordine con cui un NAT router processa i pacchetti che viaggiano in direzione:

  • inside-to-outside
  • outside-to-inside

Nel caso in cui non abbiate avuto modo di leggere la prima parte del post, vi invito a farlo utilizzando il seguente linkNAT per IPv4 (prima parte)

Scenario

David (Site A) ha la necessita’ di collaborare con un nuovo partner – l’azienda Masaryk sro (Site B) – per lo sviluppo di un gestionale di contabilita’ e fatturazione elettronica.

Tale esigenza richiede che vi sia connnettivita’ tra Site A e Site B. Sfortuna vuole che i due siti adottino lo stesso piano di indirizzamento IPv4: 10.10.0.0/16.

David decide di adottare il NAT sul suo border router (R1) e, non avendo a disposizione un network engineer in azienda, sceglie di muoversi in assoluta autonomia (dopo una notte insonne spesa sul web). 

Ecco un estratto della configurazione di R1:

R1#sh run | i source
ip nat inside source static 10.10.11.1 192.0.2.254
ip nat outside source static 10.10.7.1 203.0.113.254

R1#show ip route | b Gate
Gateway of last resort is 192.0.2.2 to network 0.0.0.0

S* 0.0.0.0/0 [1/0] via 192.0.2.2, GigabitEthernet0/1
    10.0.0.0/8 is variably subnetted, 4 subnets, 2 masks
C       10.10.1.0/24 is directly connected, GigabitEthernet0/0
L       10.10.1.1/32 is directly connected, GigabitEthernet0/0
S       10.10.11.0/24 [1/0] via 10.10.1.2, GigabitEthernet0/0
  192.0.2.0/24 is variably subnetted, 5 subnets, 3 masks
C       192.0.2.0/30 is directly connected, GigabitEthernet0/1
L       192.0.2.1/32 is directly connected, GigabitEthernet0/1
C       192.0.2.32/29 is directly connected, GigabitEthernet0/3
L       192.0.2.33/32 is directly connected, GigabitEthernet0/3

L’esigenza di David e’ di fare in modo che:

  • PC1 [10.10.11.1] venga visto come 192.0.2.254 all’interno del Site B
  • PC7 [10.10.7.1] venga visto come 203.0.113.254 all’interno del Site A
  • vi sia connettivita’ tra PC1 e PC7

Problema

David ed il suo partner riscontrano un problema di connettivita’ tra R2 ed R8.

Quando PC7 [10.10.7.1] prova ad effettuare un ping test verso PC1 [192.0.2.254], David ha modo di osservare quanto segue:

R1#sh run | i source
ip nat inside source static 10.10.11.1 192.0.2.254
ip nat outside source static 10.10.7.1 203.0.113.254

R1#debug ip packet detail
IP packet debugging is on (detailed)

R1#debug ip nat detailed
IP NAT detailed debugging is on

R1#
*Nov 29 16:12:55.317: NAT*: o: icmp (10.10.7.1, 2) -> (192.0.2.254, 2) [2]
*Nov 29 16:12:55.317: NAT*: s=10.10.7.1->203.0.113.254, d=192.0.2.254 [2]
*Nov 29 16:12:55.317: NAT*: s=203.0.113.254, d=192.0.2.254->10.10.11.1 [2]
*Nov 29 16:12:55.319: NAT*: i: icmp (10.10.11.1, 2) -> (203.0.113.254, 2) [2]
*Nov 29 16:12:55.319: NAT*: s=10.10.11.1->192.0.2.254, d=203.0.113.254 [2]
*Nov 29 16:12:55.319: NAT*: s=192.0.2.254, d=203.0.113.254->10.10.7.1 [2]
*Nov 29 16:12:55.404: IP: s=192.0.2.254 (GigabitEthernet0/1), d=10.10.7.1, len 100, input feature
< output omitted >
*Nov 29 16:12:55.407: FIBipv4-packet-proc: route packet from GigabitEthernet0/1 src 192.0.2.254 dst 10.10.7.1
*Nov 29 16:12:55.408: FIBfwd-proc: packet routed by adj to GigabitEthernet0/1 192.0.2.2
*Nov 29 16:12:55.408: FIBipv4-packet-proc: packet routing succeeded
< output omitted >

R1#sh ip nat translations
Pro Inside global Inside local Outside local Outside global
--- --- --- 203.0.113.254 10.10.7.1
icmp 192.0.2.254:3 10.10.11.1:3 203.0.113.254:3 10.10.7.1:3
--- 192.0.2.254 10.10.11.1 --- ---

NAT Order of Operations

Condivido con voi una domanda che spesso mi viene rivolta:

Cosa avviene prima, il NAT oppure il Routing ?

Sfortunatamente, la risposta propinata dal sottoscritto e’ sempre la stessa:

DIPENDE !!!

Ebbene si, cari lettori,  dipende dalla direzione del flusso dati:

  • CASO inside-to-outside:
    • I step: Routing 
    • II step: NAT (traduzione local-to-global)
  • CASO outside-to-inside:
    • I step: NAT (traduzione global-to-local)
    • II step: Routing

Per chi fosse alla ricerca di una classificazione piu’ specifica, eccovi serviti:

Significato dei comandi "ip nat inside source" e "ip nat outside source"

Prima di procedere con la disamina del debug e la risoluzione del problema, ritengo utile richiamare il significato dei comandi NAT implementati su R1:

  • ip nat inside source
    • Traduce il SOURCE IP address dei pacchetti che viaggiano in direzione inside-to-outside (pacchetti in inbound sulla inside interface)
    • Traduce il DESTINATION IP address dei pacchetti che viaggiano in direzione outside-to-inside (pacchetti in inbound sulla outside interface)
  • ip nat outside source
    • Traduce il SOURCE IP address dei pacchetti che viaggiano in direzione outside-to-inside (pacchetti in inbound sulla outside interface)
    • Traduce il DESTINATION IP address dei pacchetti che viaggiano in direzione inside-to-outside (pacchetti in inbound sulla inside interface)

Analisi del debug eseguito su R1

Ricordiamo i due NAT statici configurati:

  • PC1 [10.10.11.1] viene visto come 192.0.2.254 nel Site B
  • PC7 [10.10.7.1] viene visto come 203.0.113.254 nel Site A

Da una disamina accurata del debug eseguito su R1, e’ possibile concludere quanto segue:

  • flusso dati ricevuto sulla outside interface (Gi0/3)
    • l’ICMP packet giunge con source IP 10.10.7.1 e destination IP 192.0.2.254
    • il NAT viene eseguito PRIMA del routing:
      • il source IP viene correttamente tradotto: s=10.10.7.1->203.0.113.254
      • il destination IP viene correttamente tradotto: d=192.0.2.254->10.10.11.1
      • R1 fa routing sulla base del destination IP 10.10.11.1
      • R1 fa forwarding del pacchetto sulla interfaccia Gi0/0
  • flusso dati ricevuto sulla inside interface (Gi0/0)
    • l’ICMP packet giunge con source IP 10.10.11.1 e destination IP 203.0.113.254
    • il routing viene eseguito PRIMA del NAT:
      • R1 fa routing sulla base del destination IP 203.0.113.254
      • R1, a seguito della traduzione NAT, fa forwarding del pacchetto sulla interfaccia Gi0/1 (mentre PC7 e’ raggiungibile attraverso l’interfaccia Gi0/3)

Effettuando un packet capture sulla interfaccia Gi0/1 di R1, e’ possibile verificare la presenza di echo reply erroneamente inviati verso il router ISP:

Il debug, del resto, lo aveva evidenziato:

*Nov 29 16:12:55.407: FIBipv4-packet-proc: route packet from GigabitEthernet0/1 src 192.0.2.254 dst 10.10.7.1

L’errore commesso da David non sta nell’implementazione del NAT, bensi’ nella mancanza di competenza sul tema NAT order of operation !

Soluzione

David si rivolge ad un vecchio compagno di baldoria – Alex, conosciuto come Papuf – giovane vizioso e scapestrato, un network engineer di talento.

Papuf, ho un problema in azienda. Mi serve il tuo aiuto ! “.

Il buon Alex decide di aiutare l’amico in difficolta’.

Dopo un attenta analisi, Alex comprende che e’ sufficiente modificare il routing su R1, cosi’ da consentire una corretta connettivita’ tra PC1 e PC7.

R1(config)#ip route 203.0.113.254 255.255.255.255 gi0/3 192.0.2.34

Ne deriva che:

Punto 1
Il ping test effettuato da PC7 verso l’indirizzo 192.0.2.254 va a buon fine. Il packet capture sul link R1-R7 conferma quanto appena asserito:

Punto 2
il ping test effettuato da PC1 verso l’indirizzo 203.0.113.254 va a buon fine. Il packet capture sul link R1-R7 conferma quanto appena asserito:

 

 

David ha capito che un network engineer puo’ sempre essere d’aiuto !!!