Le NAT est l’un des points clés de la configuration d’un ASA Cisco. Sa configuration n’est pas particulièrement difficile, du moment que la théorie du NAT est bien maitrisée. Nous verrons notamment comment mettre en place du Dynamic PAT (utile pour l’accès internet), du Static NAT (utile pour rendre des serveurs accessibles depuis internet), ou encore du Dynamic NAT.
Théorie sur le NAT
Avant d’évoquer la configuration du NAT, je vous propose quelques rappels sur le fonctionnement du NAT et notamment les différents types de NAT qui existent.
Tout d’abord, le NAT – Network Address Translation permet de faire la translation entre les IP publiques et privées. Il a été développé pour pallier au manque d’IPv4. En IPv6 le NAT devient obsolète.
Il existe différents types de NAT.
Static NAT
Mappe une unique adresse IP privée à une unique adresse IP publique de manière permanente.
On parle de translation One-to-One. Il faut une adresse IP publique par adresse IP privée.
Ce type de NAT est tout indiqué pour rendre un serveur local accessible depuis internet.
Dynamic NAT
Mappe plusieurs adresses IP privées non-enregistrées à un pool d’adresses IP publiques enregistrées.
On parle de translation Many-to-Many.
Un pool d’adresses IP privées concernées par le NAT est défini. Par exemple le range 10.0.1.100 à 10.0.1.200.
Un pool d’adresses IP publiques est défini. Par exemple 198.51.100.31 à 198.51.100.33.
Quand une machine locale (donc avec une IP interne de .100 à .200) veut accéder à internet, le routeur lui assigne dynamiquement une IP du Pool d’IP publiques.
Une fois le Pool épuisé, il faut attendre qu’une IP publique se libère. L’IP publique est assignée à la machine locale tant que cette dernière envoie du trafic vers internet régulièrement.
Voici un exemple de fonctionnement dans le temps.
Un paquet avec pour IP source 10.0.1.101 veut sortir. L’IP est convertie en 198.51.100.31
Un paquet avec pour IP source 10.0.1.102 veut sortir. L’IP est convertie en 198.51.100.32
Un paquet avec pour IP source 10.0.1.103 veut sortir. L’IP est convertie en 198.51.100.33
Un paquet avec pour IP source 10.0.1.104 veut sortir. Le pool est épuisé, l’adresse ne peut être translatée. Seuls les paquets ayant pour source 10.0.1.101 .102 ou .103 peuvent sortir.
Si par la suite la machine 10.0.1.101 n’envoie plus de trafic vers internet, l’IP publique 198.51.100.31 sera libérée. Elle pourra alors être assignée à une nouvelle machine.
PAT ou Dynamic NAT Overloading ou Dynamic PAT (Hide)
Plusieurs termes sont couramment utilisés pour définir ce type de NAT.
Il mappe plusieurs adresses IP privées à une adresse IP publique.
On parle de translation Many-to-One.
C’est grâce à ce type de NAT qu’un ensemble de machines sur un réseau privé peuvent accéder en simultané à internet à l’aide d’une seule IP publique.
Si vous souhaitez allez plus loin, voici le fonctionnement plus en détail. Attention le fonctionnement peut différer selon le routeur, notamment la façon dont le port source est manipulé (voir plus bas).
Un pool d’adresses IP privées concernées par le NAT est défini. Par exemple le range 10.0.1.100 à 10.0.1.200.
Une IP publique est définie. Par exemple 198.51.100.30.
Quand un paquet ayant comme IP source une IP privée (comprise dans le Pool d’adresses IP privées) veut sortir sur internet, le routeur remplace son IP source par l’IP publique définie et retient le port source (il enregistre la correspondance IP privé / port source dans une table).
Lors-ce-que le paquet réponse arrive sur l’interface publique, le routeur regarde le port de destination (et consulte la table) pour savoir à quelle machine envoyer le paquet.
Voici un exemple pour une requête http d’une machine sur le LAN vers une machine sur internet.
Paquet sortant avant le NAT
- IP source : 10.0.1.100
- Port source 1050
- IP destination : 1.1.1.1
- Port destination : 80
Le routeur doit remplacer l’IP source (qui est actuellement l’IP privée de la machine qui initie la requête) par l’IP de son interface publique. Il note dans la table NAT que le port 1050 correspond à l’IP privée 10.0.1.100.
Paquet sortant après le NAT
- IP source : 198.51.100.30
- Port source 1050
- IP destination : 1.1.1.1
- Port destination : 80
Paquet réponse avant le NAT :
- IP source : 1.1.1.1
- Port source 80
- IP Destination : 198.51.100.30
- Port destination : 1050
Le routeur doit maintenant remplacer l’IP de destination (qui est pour le moment celle de son interface publique) par l’IP de la machine locale qui a initié la requête. Pour cela il regarde dans la table NAT pour trouver l’IP correspondant au port 1050.
Paquet réponse après le NAT :
- IP source : 1.1.1.1
- Port Source 80
- IP Destination : 10.0.1.100
- Port destination : 1050
Si en parallèle une machine ayant pour IP source 10.0.1.101 envoie elle aussi une requête http avec comme port source 1051, le routeur va noter dans sa table NAT que le port 1051 correspond à l’IP 10.0.1.101. Et ainsi de suite.
C’est donc grâce au port source que le PAT permet à plusieurs IP privées d’utiliser la même IP publique.
Mais que se passe-t-il si deux machines locales envoient chacune un paquet avec le même port source ? Pour la première machine qui envoie son paquet au routeur, rien ne change par rapport au scénario précédent. Pour la deuxième machine, le port source sera remplacé le temps du voyage sur internet et sera restauré lors de la réponse.
Reprenons le scénario précédent.
10.0.1.100 a envoyé son paquet comme précédemment, avec comme port source 1050.
10.0.1.101 envoie à présent un paquet avec comme port source 1050.
Le scénario sera alors le suivant.
Paquet sortant avant le NAT
- IP source : 10.0.1.101
- Port Source 1050
- IP Destination : 1.1.1.1
- Port destination : 80
Paquet sortant après le NAT
- IP source : 10.0.1.101
- Port Source 1051 (ou un autre port choisi aléatoirement)
- IP Destination : 1.1.1.1
- Port destination : 80
Paquet réponse avant le NAT :
- IP source : 1.1.1.1
- Port Source 80
- IP Destination : 198.51.100.30
- Port destination : 1051
Paquet réponse après le NAT :
- IP source : 1.1.1.1
- Port Source 80
- IP Destination : 10.0.1.101
- Port destination : 1050
Tous les routeurs n’implémentent pas le PAT de la même manière. Certains tentent de conserver le port source si il est disponible (cas exposé ci-avant). Certains le change dans tous les cas par un port choisi aléatoirement.
Dans tous les cas, les entrées dans la table NAT sont supprimées après un certain temps si elles ne sont plus utilisées (par exemple après 30 secondes).
Pour l’ASA, il tente de conserver le port source s’il est disponible. Si il n’est pas disponible, l’ASA choisi aléatoirement un port dans le même range que le port source.
Les ranges sont les suivants :
- 0 – 511
- 512 – 1023
- 1024 – 65 535
Il est aussi possible d’activer une option appelée Flate Range qui permet l’utilisation d’un seul range allant de 1024 à 65 535 ou 1 à 65 535 au lieu des trois ranges. Cela est utile s’il y a beaucoup de trafic utilisant les ports sources allant de 1 à 1023.
Enfin, notons qu’il est possible de faire exactement la même chose avec un Pool d’IP publiques. Le principe reste le même, mais plusieurs IP publiques peuvent être utilisées. Le PAT se fait équitablement avec les deux IP publiques.
Static PAT
Il mappe un port d’une IP publique à un couple IP port d’une machine locale.
Il est alors possible de rendre plusieurs serveurs locaux accessibles à travers internet à l’aide d’une seule IP publique, à condition que les ports soient différents.
Nous pourrions par exemple définir les translations suivantes :
IP publique 198.51.100.30 et port 80 -> IP privé 10.0.1.10 port 80
IP publique 198.51.100.30 et port 22 -> IP privé 10.0.1.20 port 22
IP publique 198.51.100.30 et port 25 -> IP privé 10.0.1.30 port 25
De cette manière, si un paquet arrive sur l’interface publique avec le port 80 comme port de destination, il sera transmis à la machine 10.0.1.10 sur le port 80.
Si un paquet arrive sur le port 22, il est transmis à la machine 10.0.1.20.
Il est même possible de changer le port dans l’opération.
IP publique 198.51.100.30 et port 110 -> IP privée 10.0.1.40 port 80
Dynamic PAT (Hide)
Le Startup Wizard propose de mettre en place du Dynamic PAT.
Sinon, la configuration manuelle se fait comme ceci.
Si toutes les machines locales doivent avoir accès à internet, vous pouvez utiliser any comme source address dans Match Criteria : Original Packet.
Sinon, il est préférable d’utiliser un Network Object ou un Network Group faisant référence aux réseaux locaux concernés par la règle NAT.
Static NAT / PAT
La configuration est sensiblement la même pour le NAT statique et le PAT statique. Cela dépend des ports spécifiés dans la configuration. Les configurations ci-dessous sont des configurations Static PAT. Pour réaliser du Static NAT, il ne faut pas spécifier de port et choisir une adresse qui sera dédiée à l’IP locale.
Pour mettre en place ce type de règle NAT il faut utiliser des Network Objects. Par exemple, pour rendre accessible un serveur depuis internet, il convient tout d’abord de créer un objet pointant vers l’IP locale du serveur. Puis de créer un deuxième objet pointant vers l’IP publique du serveur. Si l’IP publique utilisée est celle de l’interface outside de l’ASA, il est possible de se passer du deuxième objet.
Voici comment réaliser une règle de NAT statique permettant d’exposer un serveur local sur internet.
La configuration se fait directement dans l’objet représentant le serveur local.
Il faut pour cela activer l’option NAT, et remplir les champs.
Voici les explications des champs :
- Type: type de NAT, ici nous utilisons du NAT statique
- Translated Addr: adresse de translation, ici l’adresse de l’interface outside, donc l’IP publique de l’ASA. Pour utiliser une autre IP que l’IP publique de l’ASA, choisir un autre objet
- Source interface: interface source, ici l’interface inside car nous définissons la règle sur l’objet local
- Destination Interface: l’inverse de ci-dessus
- Protocole: TCP / UDP
- Real Port: port à exposer en local
- Mapped Port: port à exposer sur internet
Si le serveur WEB utilise le port 8080, mais que nous voulons exposer le port 80 sur internet, il faut mettre Real Port à 8080 et Mapped Port à 80. La règle fera la translation.
Pour rendre un serveur accessible depuis Internet, les versions « récentes » de l’ASDM proposent un menu spécifique facilitant la configuration. Cela permet de faire plus ou moins la même chose que précédemment.
Avec cette méthode il est possible de spécifier plusieurs services ou de faire appel à un Service Group.
En revanche, l’outil de création refuse d’utiliser l’IP publique de l’ASA comme IP publique (du moins dans la version de l’ASDM que je possède).
Dans tous les cas, cela créé une configuration NAT dans l’objet concerné, à la manière de la méthode précédente. Il faut toutefois noter que les services concernés ne sont visibles que depuis l’interface Public Servers et non depuis Object -> Network Object.
Cela a pour effet de créer automatiquement la règle NAT adéquate.
L’option Specify Public Service if different… permet modifier le port durant la translation. De cette manière, le service public peut être diffèrent du service privé. Par exemple, il est possible de faire en sorte qu’un accès sur le port 2000 de l’IP public, redirige vers le port 80 de l’IP privé du serveur.
Il est aussi possible de configurer du NAT statique depuis l’onglet NAT Rules, comme les autres règles NAT. Il faut alors créer une Network Object NAT Rule. Il est alors demandé de créer un objet et la configuration se fait de la même manière que pour la création d’une règle NAT à partir d’un objet existant.
Donc si l’objet local existe déjà, vous pouvez créer la règle NAT en éditant ce dernier. S’il n’existe pas, vous pouvez le créer en même temps que la règle NAT depuis l’onglet NAT Rules.
Voici ce que donne la création et / ou l’édition d’une règle de NAT statique depuis l’onglet NAT Rules.
Enfin, quel que soit la méthode retenue, la règle NAT créée est visible depuis l’interface NAT Rules.
Pour rendre accessible le serveur depuis internet, la règle NAT n’est pas suffisante. En effet, par défaut le trafic sera bloqué par l’ASA. Il faut donc créer une règle qui autorise le trafic voulu à rentrer.
Voici un exemple de configuration.
L’adresse de destination se doit d’être l’adresse locale du serveur.
Dynamic NAT
Le Nat dynamique permet d’utiliser un Pool d’adresses publiques pour l’accès à internet.
La première étape est donc de créer un pool d’adresses publiques. Ce pool ne doit pas contenir l’IP publique de l’ASA.
Il est ensuite possible de créer la règle de NAT dynamique en utilisant l’option Dynamic dans Source NAT Type.
Avec cette configuration, le pool sera utilisé pour remplacer l’IP sources des paquets sortant. Une fois le pool épuisé, il faudra attendre qu’une IP du pool se libère avant de pouvoir translater des nouvelles adresses internes.
Voici un exemple de fonctionnement dans le temps.
Un paquet avec pour IP source 10.0.1.10 veut sortir. L’IP est convertie en 10.0.2.250
Un paquet avec pour IP source 10.0.1.11 veut sortir. L’IP est convertie en 10.0.2.251
Un paquet avec pour IP source 10.0.1.12 veut sortir. L’IP est convertie en 10.0.2.252
Un paquet avec pour IP source 10.0.1.13 veut sortir. Le pool est épuisé, l’adresse ne peut être translatée. Seuls les paquets ayant pour source 10.0.1.10 .11 ou .12 peuvent sortir.
Pour pallier à ce problème, il est possible d’activer l’option Fall Through to interface PAT. Cela a pour effet d’utiliser l’IP publique de l’interface de sortie (outside) comme IP source si le pool est épuisé.
L’exemple précédent devient alors :
Un paquet avec pour IP source 10.0.1.10 veut sortir. L’IP est convertie en 10.0.2.250
Un paquet avec pour IP source 10.0.1.11 veut sortir. L’IP est convertie en 10.0.2.251
Un paquet avec pour IP source 10.0.1.12 veut sortir. L’IP est convertie en 10.0.2.252
Un paquet avec pour IP source 10.0.1.13 veut sortir. L’IP est convertie en 10.0.2.254
Un paquet avec pour IP source 10.0.1.14 veut sortir. L’IP est convertie en 10.0.2.254
Etc…
Il est aussi possible d’utiliser l’option PAT Pool Translated Address. Cela permet de réaliser du NAT dynamique avec PAT.
La configuration se fait comme ceci.
Il est important de cocher l’option Round Robin, sinon seule la première IP du pool sera utilisée.
Le scénario précédent devient alors :
Un paquet avec pour IP source 10.0.1.10 veut sortir. L’IP est convertie en 10.0.2.250
Un paquet avec pour IP source 10.0.1.11 veut sortir. L’IP est convertie en 10.0.2.251
Un paquet avec pour IP source 10.0.1.12 veut sortir. L’IP est convertie en 10.0.2.252
Un paquet avec pour IP source 10.0.1.13 veut sortir. L’IP est convertie en 10.0.2.250
Un paquet avec pour IP source 10.0.1.14 veut sortir. L’IP est convertie en 10.0.2.251
Aucun commentaire:
Enregistrer un commentaire