Reti di Accesso e di Trasporto Introduzione al NAT Network Address Translation Ing. Stefano Salsano e-mail: [email protected] AA2010/11 - Blocco nat Le slides di questo blocco sono quasi integralmente tratte da un seminario dell’Ing. Vito Ammirata, cui vanno i miei ringraziamenti O meglio… CERCA di non modificare SIP: Source IP address, DIP: Destination IP, Sport: Source Port O meglio… non dovrebbe risentire Classificazione dei NAT relativamente alla “apertura” • I Nat si differenziano a secondo delle possibilità di accesso che offrono alle connessioni “entranti” • È in realtà difficile fornire una classificazione semplice e completa di tutti i possibili NAT • Nella RFC 3489 “STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)” i NAT vengono classificati in: – – – – Full cone Restricted Cone Port restricted Cone Symmetric Classificazione dei NAT relativamente alla “apertura” • Full Cone: A full cone NAT is one where all requests from the same internal IP address and port are mapped to the same external IP address and port. Furthermore, any external host can send a packet to the internal host, by sending a packet to the mapped external address. • Restricted Cone: A restricted cone NAT is one where all requests from the same internal IP address and port are mapped to the same external IP address and port. Unlike a full cone NAT, an external host (with IP address X) can send a packet to the internal host only if the internal host had previously sent a packet to IP address X. • Port Restricted Cone: A port restricted cone NAT is like a restricted cone NAT, but the restriction includes port numbers. Specifically, an external host can send a packet, with source IP address X and source port P, to the internal host only if the internal host had previously sent a packet to IP address X and port P. • Symmetric: A symmetric NAT is one where all requests from the same internal IP address and port, to a specific destination IP address and port, are mapped to the same external IP address and port. If the same host sends a packet with the same source address and port, but to a different destination, a different mapping is used. Furthermore, only the external host that receives a packet can send a UDP packet back to the internal host. Classificazione dei NAT relativamente alla “apertura” • La classificazione contenuta nella RFC 3489 non riesce a tener conto di tutte le possibilità. La RFC 4787 (Network Address Translation (NAT) Behavioral Requirements for Unicast UDP) ne propone una più complicata • Tra l’altro la RFC 3489 è stata sostituita dalla RFC 5389 “Session Traversal Utilities for NAT (STUN” Comunicazioni attraverso i NAT • L’apertura o meno di un NAT influenza le possibilità di comunicazione degli host che stanno dietro ad un NAT. • Nelle comunicazioni client-server, quando il server si trova su IP pubblico e il client dietro un NAT, non ci sono problemi particolari (specialmente con TCP). • Il problema riguarda le comunicazioni “end-to-end” (ad esempio per flussi UDP multimediali) che coinvolgono host dietro ai NAT. Se entrambi gli host sono dietro ai NAT, in certi casi non è possibile stabilire delle comunicazioni dirette. Esercizio • Da svolgere possibilmente in gruppi di 4/5 persone • Realizzare una comunicazione client server simmetrica su UDP attraverso NAT • Ossia il client (su rete privata) deve inviare un pacchetto UDP contenente la stringa “Echo request”, con porta UDP sorgente X (X a piacere) e mettersi in ascolto sulla stessa porta UDP X • Il server è in ascolto sulla porta UDP 30000 e risponde con un pacchetto UDP contenente la stringa “Echo reply” con porta UDP di destinazione uguale alla porta UDP sorgente del pacchetto “Echo request ricevuto” • Verificare con TCP dump / Wireshark la conversione NAPT tra il dominio interno e quello esterno Esercizio UDP DPort: 30000 S Echo request Internal Address Realm External Address Realm Echo request NAT UDP SPort: X C Echo reply Private IP addresses: 192.168.1.x Echo reply You can use public IP addresses or other private IP addresses: 10.0.1.x Esercizio • Potete scegliere la piattaforma su cui realizzare l’esercizio, ad esempio (ma senza voler limitare la vostra fantasia): – Netkit, con realizzazione dei client e dei server in C o in Pyton – 3 PC di cui uno linux fa da NAT e due implementano client e server in JAVA (quindi possono essere windows o linux) – 3 PC come sopra e il PC che fa da NAT è un PC windows su cui è abilitata la condivisione della connessione (ad esempio potete condividere una connessione wifi sul lato “esterno” con uno o più PC “interni” collegati alla scheda ethernet Esercizio • Estensioni opzionali: – Verificare che di tipo di NAT si tratta, provando dal server a rispondere con pacchetti verso la stessa coppia IP dest / UDP dest, ma con porta sorgente UDP diversa. – Verificare dopo quanto tempo scade il timeout nel NAT, rispondendo al client con un tempo di ritardo crescente