Nat et uPnP
- Le NAT
- Pourquoi le NAT ?
Pour communiquer, deux machines doivent avoir une adresse IP bien définie. Avec l’explosion des réseaux privés et le gaspillage des ressources, on est vite limité, d’autant plus que tous les foyers ne peuvent pas se payer des adresses IP distinctes et leurs FAI ne peuvent pas leur en offrir. On a donc recours à l’adressage privé et au NAT (avant l’arrivée de l’IPv6). - Un peu de terminologie
Le domaine local (LAN) s’appelle le stub. Il a un adressage privé le plus souvent et les ordinateurs du stub communiquent via cet adressage. Ces adresses ne peuvent pas sortir de leur stub sous peine de générer beaucoup de conflits. Adresses privées :- 10.0.0.0 – 10.255.255.255 (classe A)
- 172.16.0.0 – 172.31.255.255 (classe B)
- 192.168.0.0 – 192.168.255.255 (classe C)
- Comment il fonctionne ?
Un périphérique (pare-feu, routeur, ordinateur) NAT agit comme une sorte de réceptionniste qui ne laisserait passer que les gens dont vous attendez la venue. Le NAT associe une communication entre un réseau extérieur et lui à une connexion entre lui et une machine du réseau interne et ce, grâce à un identifiant. On a du NAT statique : une adresse IP en entrée correspond à une IP en sortie (ne résout pas le problème du nombre d’adresses disponibles) et ce de façon permanente. On a aussi du NAT dynamique : même idée que ci-dessus mais les couples IP entrée / IP sortie ne sont pas fixés. Et du NAT à overloading ? : à un couple TCP/IP (Port/adresse) en entrée correspond un couple TCP/IP en sortie (entrée = extérieur => NAT, sortie = NAT => interne). On le voit donc, au niveau du NAT, une traduction est faite, car les machines extérieures pensent ne parler qu’à un seul ordinateur (dont l’ip est celle du périphérique gérant le NAT). Cela suppose que le NAT garde des tables de correspondance pour qu’au retour, il transmette le paquet au bon ordinateur. - Petit scénario
- 192.168.0.1 et 228.9.12.78 -> routeur nat
- 192.18.0.2 -> ordinateur A
- www.google.fr -> site quelconque
L’ordinateur A veut naviguer sur google : il demande à ouvrir une connexion avec l’IP de google (port 80) depuis son IP sur le port 5124 (par exemple). Le routeur intercepte le message, change IP source en 228.9.12.78 et port source en 1001 (par exemple) et il enregistre dans sa table le rapport IP/port. Quand google répond au routeur sur ce port, le routeur change IP destination en 192.168.0.2 et le port destination en 5124. Si jamais une autre machine envoie un paquet à l’IP externe du routeur sur le port 1001, il ira lui aussi vers l’ordinateur A. Si un ordinateur B veut ouvrir une connexion avec google lui aussi, entre son port 5124 (ou un autre) et le port 80, il sera enregistré dans la table avec le port associé 1002 par exemple et ainsi on pourra établir les deux connexions sans problème.
- Avantages
- En effet, seules les connexions initialisées par le stub sont acceptées en entrée
- Les machines extérieures pensent que le stub n’est constitué que d’une seule machine
- Gain en nombre et en cohérence au niveau des adresses IP
- Protection du stub
- Inconvénients
- Impossibilité dans le cas où les données sont chiffrées
- Pour rendre le routeur NAT et le logiciel local “aware” l’un de l’autre, on utilise l’IGD du protocole uPnP
- On peut surveiller les connexions TCP pour savoir quand elles sont fermées, mais pas les UDP
- On peut mettre un timeout
- Le routeur NAT doit modifier l’en-tête des paquets TCP/UDP en entrée comme en sortie pour garder la cohérence du trafic (et recalculer les checksums)
- Certains protocoles écrivent les adresses à l’intérieur de leurs données transmises (FTP, jeux vidéos, p2p) il faut donc savoir modifier ces champs (facile pour FTP mais dur pour les jeux ou le p2p qui sont moins standardisés)
- Il ne faut pas engorger les tables de correspondance du NAT et donc nettoyer les tables
- Pourquoi le NAT ?
- uPnP
- Idée de base
uPnP est un standard Microsoft qui étend le pnp (périphérique standard) au cas des réseaux. Il offre aux différents périphériques une sorte d’intelligence leur permettant de se reconnaître les uns les autres et d’agir en conséquence. uPnP offre du contrôle. On peut trouver de l’upnp dans des logiciels (MSN, P2P, jeux) ou dans des périphériques : routeurs, passerelles, imprimantes … (ça sera également utile pour communiquer dans le cadre de la maison intelligente) - Implémentation
Protocole indépendant de l’OS, du medium physique et du périphérique ainsi que du langage utilisé pour la programmation. Les technologies mises en œuvre sont : IP, TCP et UDP pour la communication, HTML pour que l’utilisateur puisse accéder au logiciel du périphérique uPnP permet toutefois d’utiliser normalement des applications clients pour le contrôle du réseau. Les périphériques compatibles uPnP doivent avoir un client DHCP et pouvoir s’attribuer une adresse ou un nom conforme au nom de domaine fourni par le DNS le cas échéant. Les différents aspects du protocole sont :- Discovery : une fois qu’il a une IP, le périphérique annonce ses services en broadcast sur le réseau et s’enquière des services qui peuvent l’intéresser
- Description : une fois un service identifié, il y a échange d’informations plus précises (en XML)
- Control : pour effectuer une action sur un service du réseau
- Event notification : indique quand une action a été effectuée ou quand une mise à jour quelconque est survenue
- Presentation : permet (via interface web le plus souvent) à l’utilisateur de contrôle manuellement le périphérique et ses options
- IGD et rapport au NAT
On l’a vu, il arrive que les logiciels ne soient pas “aware” du NATtage que leurs paquets subissent. L’uPnP résout ce problème en faisant communiquer intelligemment le périphérique NAT et les logiciels. Ainsi ils peuvent modifier directement leurs paquets avec les bonnes IP (notamment dans la partie données dans le cas des protocoles exotiques (jeux)) et ils peuvent prévenir explicitement le service NAT d’oublier la ligne qui leur correspond dans sa table de correspondance une fois la connexion terminée. L’IGD, Internet Gateway Device est intégré aux routeurs (à certains) pour permettre aux logiciels d’utiliser le NAT en symbiose avec le routeur et non plus de façon transparente. Ainsi, grâce à IGD, un logiciel peut apprendre l’IP publique du routeur, connaître l’état de la table de correspondance des ports, ajouter ou enlever des lignes à cette table et assigner un temps de survie à une connexion qu’ils ont demandée avec l’extérieur. - Inconvénients de l’uPnP
Aucune méthode d’identification donc souvent l’uPnP est désactivé.
- Idée de base
- Complément
Il y a d’autres méthodes, comme le STUN (Simple Transversal of UDP over NAT) pour rendre le NAT plus amical.


