Pour créer des séparations fonctionnelles de type enseignants, étudiants, administration, nous avions organisé les 3 classes C en sous-réseaux. Nous approchions de la limite de plusieurs des sous-réseaux définis et nous prévoyions de faire une nouvelle demande de classe C.
L'introduction d'une adresse de classe C allait nous obliger à jongler avec l'adressage du site et ceci pour une durée indéterminée. Pour nous aider dans le choix de la marche à suivre, nous avons réalisé une étude statistique de l'utilisation des adresses du campus et nous avons essayé d'évaluer le nombre de raccordements à venir.
Nous avons donc écrit un script qui testait cycliquement la présence des machines sur le réseau (à l'aide de simples ping). Ce script a démontré qu'en moyenne seules 40% des machines déclarées étaient en fonctionnement, donc 60% des adresses IP étaient inutilisées. Par ailleurs, le taux de raccordement au réseau, observé sur les derniers mois était d'environ 13 nouvelles machines par semaine. Le nombre de salles qui n'étaient pas encore raccordées au réseau était important, nous savions donc que nous aurions besoin d'une nouvelle adresse de classe C au bout de 4 mois environ.
Routeur NAT | Routeur sur lequel NAT a été activé | |
Site NAT | Site ayant mis en place un routeur NAT au point de connexion de son réseau avec l'Internet | |
La terminologie suivante est celle présentée par le groupe de travail sur NAT mis en place conjointement par le CRU4 et l'UREC5 sur le mécanisme NAT en février 19986. Cette terminologie est directement issue de celle employée par Cisco : | ||
Espace d'adressage public | L'espace des adresses gérées par l'IANA7. Ces adresses sont globalement uniques, elles sont routées sur l'Internet. | |
Espace d'adressage privé | L'espace des adresses utilisées en interne par un site NAT. Ces adresses sont généralement celles définies par le RFC19188, mais pas obligatoirement. | |
Dans les termes suivants, les mots interne et externe désignent l'origine d'une adresse par rapport au routeur NAT. Les mots local et globaldésignent le côté du routeur où cette adresse évolue. | ||
Adresse IP locale interne : ALI | Adresse IP attribuée dans l'espace d'adressage privé, il s'agit de l'adresse IP d'une machine sur un site NAT | |
Adresse IP globale interne : AGI | Adresse IP attribuée dans l'espace d'adressage public. Vu de l'extérieur, il s'agit de l'adresse IP d'une machine située à l'intérieur d'un site NAT. | |
Adresse IP globale externe : AGE | Adresse IP attribuée dans l'espace d'adressage public. C'est celle d'une machine sur Internet, en dehors du site NAT | |
Adresse IP locale externe ALE | Il s'agit de l'adresse IP d'une machine externe au site telle qu'elle est vue par les machines à l'intérieur. Il s'agit normalement de la même adresse que l'adresse IP globale externe de cette machine, sauf dans le cas de sites ayant mis en oeuvre l'overlapping. |
L'université dispose d'un routeur de site Cisco 4500. Pour mettre NAT en oeuvre, nous avons dû modifier 2 fois sa configuration mémoire. Une fois pour passer de 8 Mo à 16 Mo, il y a deux ans, modification nécessaire pour faire tourner la version de l'IOS implémentant NAT, une autre fois pour passer à 32 Mo il y a quelque mois pour mettre en oeuvre une version 12.0(4)T.
Si une traduction statique a été définie pour une ALI, une AGI unique lui est associée. Cela est particulièrement utile pour les machines qui hébergent des services Internet qui doivent être accessibles de l'extérieur avec une adresse fixe. Ça l'est aussi pour les machines faisant des accès à des bases de données payantes pratiquant une authentification sur l'adresse IP.
Si une machine n'est pas destinée à recevoir des connexions, il n'est pas nécessaire qu'elle ait une AGI fixe. Lorsqu'elle voudra se connecter à l'extérieur, son ALI sera associée à une AGI prise dans un pool. Dans ce cas, il s'agit d'une traduction dynamique. Le pool est parcouru dans le sens croissant par le routeur jusqu'à ce qu'il trouve une adresse libre de toute association. Lorsqu'il l'a trouvée, il ajoute une entrée à la table des traductions sous la forme d'une paire (@IP locale interne, @IP globale interne). Un délai (timeout) est associé à cette entrée. L'association sera détruite de la table si au-delà de ce timeout la machine à laquelle elle a été attribuée n'a plus fait d'accès à l'extérieur. Lorsqu'un paquet arrive sur l'interface interne du routeur avec une @ IP source le routeur cherche cette adresse dans sa table des traductions. S'il la trouve, le routeur remplace cette adresse par l'AGI qui lui est associée, s'il ne la trouve pas, il créé l'association avant de faire le remplacement. Il fait l'opération inverse lorsqu'il voit arriver sur une interface externe un paquet à destination d'une AGI associée dans sa table.
Admettons que la machine avec l'ALI 10.1.1.1 se connecte sur le serveur
WEB ayant l'adresse IP 128.5.3.9. Le routeur réécrit le paquet
en changeant l'adresse source. Pour cela, il prend la première adresse
libre dans le pool des AGI, disons l'adresse 193.49.96.64. Il ajoute à
la table des traductions dynamiques la paire (10.1.1.1, 193.49.96.64).
Le paquet sortant du site a maintenant pour adresse source, l'AGI 193.49.96.64,
elle atteint le serveur WEB qui répond à la requête.
Le routeur voyant arriver un paquet à destination de la machine
193.49.96.64 lit la table de correspondance, trouve l'ALI associée,
il réécrit le paquet et envoie le paquet modifié à
la machine 10.1.1.1.
Dans ce mode, ce n'est plus seulement l'ALI qui est traduite, mais aussi le port source de la connexion. La table des traductions s'enrichit, elle ne reflète plus des paires d'adresses mais des quadruplets (@IP locale interne, port 1, @ IP globale interne, port 2). Le numéro de port avant traduction n'est pas forcément celui utilisé après traduction.
Pour reprendre notre exemple, si la machine ayant l'ALI 10.1.1.1 établit une connexion http (80) vers le serveur WEB 128.5.3.9 à partir du port 1503,le routeur va associer la paire (10.1.1.1, 1503) à la paire (193.49.96.64, 1503). Lorsque le serveur renvoie un paquet en retour, le routeur réécrit ce paquet en remplaçant l'adresse destination et le port destination (193.49.96.64, 1503) en (10.1.1.1, 1503).
Une fois PAT mis en oeuvre et en excluant les ports réservés,
un routeur Cisco peut associer environ 4000 ALI à une même
AGI prise dans le pool.
Une autre table de traduction est rendue nécessaire qui lie les adresses locales externes (ALE) aux adresses globales externes (AGE). En effet, dans le cas où une machine du site se connecte vers un serveur distant dont l'AGE fait partie de la plage d'adresse usurpée par le site, une traduction de cette adresse est nécessaire. En effet, une machine du site NAT ne saurait pas l'interpréter comme externe et n'enverrait pas ses paquets au routeur de site mais à la machine du site ayant la même adresse.
Prenons un autre exemple dans lequel nous éliminerons la traduction des adresses internes pour nous intéresser exclusivement aux adresses externes. Un site NAT a adressé les machines de son site avec des adresses IP publiques attribuées par l'IANA au domaine titi.com. L'utilisateur de la machine ayant l'ALI 128.2.1.3 désire se connecter sur le serveur WEB du domaine titi.com. Il tape l'url http://www.titi.com/. Son navigateur fait une demande de résolution DNS au serveur DNS interne du site. Celui-ci retransmet la demande à un serveur externe qui lui renvoie l'AGE 128.2.1.5. Lorsque cette réponse arrive au routeur, celui-ci modifie la partie données de la réponse DNS, il remplace l'adresse 128.2.1.5 par la première adresse libre du pool des ALE, disons l'adresse 192.2.2.3. Il envoie la réponse DNS modifiée au serveur DNS interne ayant fait la requête. Le serveur renvoie la réponse DNS à la machine cliente. Celle-ci initie la connexion http vers le serveur www.titi.com en se connectant à l'adresse 192.2.2.3. Lorsque le routeur voit arriver des paquets de cette connexion, il change l'ALE 192.2.2.3 en l'AGE 128.2.1.5.
Bien sûr, il réécrit aussi l'ALI de la station,
128.2.1.3 en une AGI, disons l'adresse 193.49.96.64.
ip nat inside source static 10.1.1.1 193.49.96.1Cette commande définit une traduction statique simple entre l'ALI 10.1.1.1 et l'AGI 193.49.96.1
ip nat inside source static tcp 10.1.65.1 80 193.49.96.30 3000Définit une traduction statique étendue (10.1.65.1, 80, 193.49.96.30, 3000)
ip nat pool adrpub 193.49.96.64 193.49.96.191 netmask 255.255.255.0Cette commande définit un pool d'adresses dynamiques commençant à l'adresse 193.49.96.64 et se terminant à l'adresse 193.49.96.191. Le pool par défaut attribue les adresses dans le sens croissant en choisissant toujours la plus petite adresse libre. On peut sélectionner deux autres types de pool en ajoutant à la commande précédente le mot type suivi d'un des mots suivants :
access-list 2 deny 10.1.1.1L'access-list qui précède sélectionne toutes les adresses du réseau de classe A 10.0.0.0/8. Ces ALI seront traduites en des AGI. L'adresse 10.1.1.1 est exclue de l'access-list de sélection car une traduction statique a déjà été définie pour elle.
access-list 2 permit 10.0.0.0 0.255.255.255
ip nat inside source list 2 pool adrpubCette commande active la traduction d'adresse sur le routeur. Elle lie le pool d'AGI adrpub à l'access-list de sélection 2. La traduction mise en oeuvre dans ce cas est une traduction simple. Pour mettre en oeuvre la traduction étendue (PAT), il suffit d'ajouter le mot overload :
ip nat inside source list 2 pool adrpub overloadDéfinition des interfaces internes et externes du routeur, c'est entre ces interfaces que NAT entre en fonction.
ip nat insideMarque une interface comme étant interne.
ip nat outsideMarque une interface comme étant externe.
ip nat pool adrext 192.2.2.3 192.2.2.254 netmask 255.255.255.0Les commandes précédentes mettent en place l'exemple que nous avons pris plus tôt pour illustrer l'overlapping. Nous établissons un pool d'ALE de 192.2.2.3 à 192.2.2.254. Nous sélectionnons les AGE 128.2.0.0/16 pour les transformer en leur correspondance locale interne.
ip nat outside source list 1 pool adrext
access-list 1 permit 128.2.0.0 0.0.255.255
Dans le résultat de la commande, nous voyons 3 traductions dynamiques étendues (PAT) dont une connexion http et une connexion FTP. On voit aussi une traduction statique simple associant l'ALI 10.1.65.14 à l'AGI 193.49.96.14 et une traduction statique étendue associant le port tcp 3000 de l'AGI 193.49.96.30 au port tcp 80 de l'ALI 10.1.65.1.
#show ip nat translations Pro Inside global Inside local Outside local Outside global udp 193.49.96.64:1555 10.1.65.41:1555 205.188.179.42:4000 205.188.179.42:4000 tcp 193.49.96.64:1431 10.65.1.30:1329 207.137.153.46:80 207.137.153.46:80 tcp 193.49.96.14:2527 10.1.65.14:2527 147.215.1.5:21 147.215.1.5:21 --- 193.49.96.14 10.1.65.14 --- --- tcp 193.49.96.30:3000 10.1.65.1:80 --- ---
Cette commande peut donner plus de renseignements sur les traductions en cours avec le mot clef verbose :
#show ip nat translations verbose Pro Inside global Inside local Outside local Outside global udp 193.49.96.64:1555 10.1.65.41:1555 205.188.179.42:4000 205.188.179.42:4000 create 00:20:16, use 00:00:05, left 00:04:54,
flags:
extended, use_count: 0
#show ip nat statisticsCes statistiques montrent que 159 traductions sont en cours sur le routeur, 20 sont des traductions statiques alors que 139 sont des traductions dynamiques. L'une d'entre elle est une traduction simple alors que le routeur est paramétré pour allouer des traductions étendues. Ceci est dû au traitement de certains protocoles par le routeur, tels que H 323, qui nécessitent qu'une traduction simple soit effectuée au lieu d'une traduction étendue. Il y a 2 interfaces externes et 5 interfaces internes définies. Hits indique le nombre de fois où le routeur à parcouru la table des traductions et a trouvé une association existante, misses indique le nombre d'échecs débouchant sur la création d'une nouvelle traduction. Expired translations indique le nombre de traductions ayant été détruites depuis le dernier démarrage du routeur.
Total active translations: 159 (20 static, 139 dynamic; 138 extended)
Outside interfaces :
Ethernet3, Tunnel1
Inside interfaces:
Ethernet0, Ethernet1, Serial0, Serial1, Serial2
Hits: 236911482 Misses: 1382867
Expired translations: 1503247
Dynamic mappings:
-- Inside Source
access-list 1 pool adrpub refcount 120
pool adrpub: netmask 255.255.255.0
start 193.49.96.64 end 193.49.96.191
type generic, total addresses 128, allocated 1 (0%), misses 0
clear ip nat translation tcp 193.49.96.64 1431 10.65.1.30 1329 207.137.153.46 80 207.137.153.46 80Cette commande efface la deuxième traduction affichée par la commande show ip nat translations ci-dessus.
network 193.49.96.0Si la plage d'adresse utilisée pour les traductions est complètement virtuelle, c'est à dire si aucune interface du routeur n'utilise cette adresse, elle ne sera pas redistribuée à l'extérieur. Pour éviter ce problème, il faut la raccorder à l'interface Null0 et il faut la redistribuer.
ip route 193.49.96.0 255.255.255.0 Null0 permanent
Entrer la commande ip nat source static adéquate
Exclure l'ALI de l'access-list de sélection des traductions dynamiques
Lorsqu'une traduction doit être détruite, il suffit d'accomplir les tâches inverses en annulant la traduction et en sélectionnant de nouveau la machine pour les traductions dynamiques.
Pour modifier les règles des traductions dynamiques ou recharger la configuration du routeur, il est nécessaire d'entrer une commande clear ip nat translations * car sinon le routeur n'accepte pas les modifications. Cette commande a pour effet de supprimer toutes les traductions en cours. Pour éviter que de nouvelles traductions ne soient immédiatement créées, il faut aussi enlever les commandes ip nat inside sur les interfaces internes. Evidemment ces commandes coupent les connexions en cours. Pour éviter ce désagrément aux utilisateurs, il est utile de prendre l'habitude de modifier la configuration par morceaux et de ne plus faire un configure network pour changer une simple access-list.
Les protocoles suivants transportent des adresses IP dans la partie données mais sont supportés par NAT sur les routeurs Cisco car ceux-ci traitent la partie données des paquets : ICMP, FTP, NetBios, RealAudio, CuSeeMe, StreamWorks, les requêtes A et PTR du DNS, H 323, Netmeeting, VDOLive, Vxtreme.
Les protocoles suivants ne sont pas supportés : Mise à jour des tables de routage, transferts de zones DNS, BOOTP, talk & ntalk, SNMP, Netshow.
Le multicast IP est supporté depuis peu. Nous avons pu tester une version d'un IOS permettant le multicast à l'université de Toulon, ce qui explique que dans le résultat de la commande show ip nat statistics une des interface externes soit Tunnel1 qui est une interface vers le Mbone9.
Dans les faits, seul le DNS doit être profondément modifié
par la mise en place de NAT. Avant la mise en place de NAT sur un site,
des noms ont été attribués aux machines du site, des
montages NFS, des applications client-serveurs ont été paramétrées,
etc Après la mise en oeuvre, tout doit continuer à fonctionner
de la même façon, les ALI doivent donc être gérées
par un serveur DNS interne. Par ailleurs, les noms des serveurs Internet
du site doivent toujours être résolus et la résolution
inverse des AGI doit continuer à fonctionner, il faut donc un serveur
DNS externe. Les routeurs NAT Cisco en traduisant les requêtes A
et PTR du DNS permettent à certains sites de ne mettre en oeuvre
qu'un seul serveur. En effet, si le routeur voit arriver sur son interface
interne une réponse à une requête DNS contenant une
ALI pour laquelle il a une traduction en cours, il remplace dans la réponse
l'ALI par l'AGI associée.
A contrario, s'il reçoit sur une interface externe une requête
PTR pour une AGI pour laquelle il a une traduction en cours, il la remplace
par l'ALI associée.
Dans notre communauté, nous utilisons des serveurs DNS secondaires à l'extérieur de nos sites pour éviter des ruptures de services. Les serveurs primaires et secondaires communiquent par des transferts de zones10. Or NAT ne traite pas ce type de transfert, ce qui nous interdit de n'utiliser qu'un seul serveur.
Nous devons donc mettre en oeuvre 2 serveurs DNS, l'un interne, l'autre avec une adresse IP publique, généralement dans une DMZ. Les machines à l'intérieur du site NAT n'utilisent que le serveur DNS interne, elles n'ont pas à utiliser ni connaître l'existence du serveur externe. Les machines externes n'ont pas à connaître l'existence et à utiliser le serveur DNS interne, elles n'utilisent que le serveur DNS externe.
La technologie offre un réel avantage, puisque l'administrateur peut avoir a un instant donné la liste de toutes les connexions en cours. Cela lui permet de détecter des attques en cours. Si d'habitude le routeur d'un site donné n'alloue en moyenne qu'une centaine de traductions simultanées, en détectant qu'il y a à un moment donné plus de 1000 traductions, cela peut être le signe d'une attaque en cours de l'intérieur vers l'extérieur.
Mais NAT pose des problèmes réels de sécurité. Il est impossible à l'administrateur d'un site NAT de remonter à l'origine d'une attaque venant de son site. En effet, sauf traduction statique, ce qui par définition est rare, l'adresse IP que l'administrateur extérieur aura détectée comme posant un problème ne permettra pas de remonter jusqu'à la machine à l'origine du problème. La seule commande permettant de tracer les traductions effectuées par le routeur est la commande debug ip nat qui produit beaucoup trop de résultats pour pouvoir être utilisée et logguée. Cela écroulerait le routeur.
Il est donc nécessaire de prendre des mesures pour éviter ces problèmes. La plupart des conseils suivants sont déjà mis en oeuvre sur des sites n'ayant pas de routeur NAT.
Il faut interdire en sortie de son site ce qui n'est pas strictement nécessaire en accordant une attention particulière aux protocoles dangereux comme les rcommands telles rsh, rlogin, etc
Les messages d'insultes que peuvent envoyer les utilisateurs d'un site par mail ou par formulaire sur le WEB peuvent aussi poser des problèmes, accentués par la mise en place de NAT. Pour pouvoir toujours remonter à la machine à l'origine de tels messages, les précautions suivantes sont nécessaires :
Interdire les connexions SMTP sortantes sauf à partir des MX officiels sur lesquels doivent être installés des versions de sendmail écrivant dans les logs et dans les en-têtes des messages l'adresse IP de la machine émettrice lorsque celle-ci se fait passer pour une autre :
Received: from mail.univ-tln.fr (mail.univ-tln.fr [193.49.96.2])Les informations qui sont dans cet en-tête permettent de remonter à la véritable machine expéditrice du message mais il suffit qu'un des serveurs SMTP du site accepte des messages sans logguer ces informations pour qu'il soit impossible de remonter à l'expéditeur.
by mailimailo.univ-rennes1.fr (8.9.3/jtpda-5.3.1) with ESMTP id QAA22893
for <echo@univ-rennes1.fr>; Wed, 15 Sep 1999 16:53:02 +0200 (MET DST)
Received: from jenexistepas.univ-tln.fr (pc-benza.univ-tln.fr [10.1.65.216])
by mail.univ-tln.fr (8.9.3/Universite de Toulon et du Var) with SMTP id QAA06751
for echo@univ-rennes1.fr; Wed, 15 Sep 1999 16:52:39 +0200 (MET DST)
Installer un serveur cache WEB qui loggue les accès au WEB pour pouvoir remonter à une machine postant des insultes sur des formulaires. Nous avons eu le cas 2 fois en deux ans à l'université de Toulon et nous avons pu remonter une fois au coupable. Dans le second cas nous avons retrouvé la machine mais elle était en accès libre.
Ajouter aux règles de mascarade IP classiques qui filtrent les AGI, un filtre contre les ALI, si votre adressage interne est conforme au RFC1918, dans le cas contraire, ce problème est réglé par la mise en place de l'overlapping
En cassant la connectivité de bout de bout, NAT empêche la mise en place de protocoles de type IPSec.
Les versions actuelles de l'IOS, notamment les versions 12.0(5)T corrigent ce problème11. Avec ces versions, si le routeur détecte une machine avec une ALI qui s'abonne à un groupe multicast, il lui attribue dynamiquement une AGI par une traduction simple. C'est à dire qu'il faut une adresse du pool pour chaque machine abonnée à un groupe du Mbone sur le site.
Les traductions suivantes sont supportées :
En éliminant les limites liées à la dépendance par rapport aux adresses Ipv4 distribuées au compte-gouttes par un ISP, NAT offre à l'administrateur réseau la possibilité de créer un design correspondant aux besoins de son organisation.
Pour un nouveau site, il est probablement préférable d'adopter immédiatement un schéma Ipv6 et de mettre en oeuvre un boîtier de type NAT-PT12 (encore à l'état de draft) pour un résultat et un effort de mise en oeuvre quasiment identique à NAT v4. De telles solutions devraient être disponibles bientôt au catalogue des grands constructeurs. NAT-PT permet la communication des mondes Ipv6 et Ipv4 en réalisant la traduction des adresses v6 & v4 et en ajoutant une traduction de protocole. Par exemple, les nouvelles commandes EPRT et EPSV de FTP-IPv6 sont traduites en des commandes correspondantes PORT et PASV et réciproquement. De la même façon, les requêtes DNS A IPv4 sont traduites en leurs équivalents IPv6, AAAA ou A6 et réciproquement.
Pour un site ancien dont le réseau est devenu, au fil du temps, un véritable casse-tête et dans lequel chaque introduction d'une nouvelle plage d'adresse oblige à la renumérotation d'une partie de ses machines; il est certain que la mise en oeuvre de NAT permet d'augmenter les performances en laissant l'administrateur introduire de la commutation de niveau 3 sans craindre la pénurie d'adresses IP.
NAT sera probablement mis en oeuvre sur de nombreux sites et pendant longtemps encore. Soit sous sa forme actuelle, soit sous la forme d'un routeur implémentant NAT-PT pendant la période transitoire entre Ipv4 et Ipv6. Au début de cette période, ce mécanisme permettra à des sites ayant adopté Ipv6 pour leur adressage interne de conserver la connectivité avec le monde Ipv4. Plus tard, il permettra à des sites restés Ipv4 de bavarder avec un monde Ipv6.
Donc loin d'être concurrents, ces protocoles sont complémentaires l'un de l'autre, NAT permettant une transition en douceur vers Ipv6.
2.RFC1631
: The IP Network Address Translator (NAT)
ftp://ftp.imag.fr/pub/archive/IETF/rfc/rfc1631.txt
Kjeld Borch Egevang, Paul Francis, Mai 1994
3.Cisco
IOS Software
http://www.cisco.com/public/sw-center/sw-ios.shtml
4.Comité
Réseau des Universités
http://www.cru.fr/
5.Unité
Réseau du CNRS
http://www.urec.fr/
6.NAT
ou Network Address Translation, compte-rendu du groupe de travail
http://www.urec.fr/nat/
Claudine Chassagne, Août 1998
7.Internet
Assigned Number Authorithy
http://www.iana.org/
8.RFC1918
: Address Allocation for Private Internets
ftp://ftp.imag.fr/pub/archive/IETF/rfc/rfc1918.txt
Yakov Rekhter, Robert G Moskowitz, Daniel Karrenberg, Geert Jan de
Groot, Eliot Lear, Février 1996
9.La
diffusion multipoint, le Mbone
http://www.cru.fr/multicast/
C. Claveilera, Septembre 1999
10.RFC2182
: Selection and Operation of Secondary DNS Servers
ftp://ftp.imag.fr/pub/archive/IETF/rfc/rfc2182.txt
Robert Elz, Randy Bush, Scott Bradner, Michael A. Patton, Juillet 1997
11.Brief
Overview on Multicast NAT (12.0T)
ftp://ftpeng.cisco.com/ipmulticast/Multicast-NAT.txt
Cisco Systems
12.Network
Address Translation - Protocol Translation (NAT-PT)
ftp://ftp.imag.fr/pub/archive/IETF/internet-drafts/draft-ietf-ngtrans-natpt-06.txt
George Tsirtsis, Pyda Srisuresh, Juin 1999
Devenu un RFC depuis : RFC 2766