Comment fonctionne NAT / PortForwarding / TCP / IP?

11

J'ai récemment lu un article intitulé comment fonctionne NAT . Certaines choses ne sont toujours pas claires pour moi. Je serais reconnaissant si quelqu'un pouvait expliquer.

Ci-dessous, la partie de l'article concernant DynamicNAT qui est le plus déroutant:

Un ordinateur du domaine stub tente de se connecter à un ordinateur en dehors du réseau, tel qu'un serveur Web.

Le routeur reçoit le paquet de l'ordinateur sur le domaine de stub. Le routeur enregistre l'adresse IP non routable de l'ordinateur dans une table de traduction d'adresses. Le routeur remplace l'adresse IP non routable de l'ordinateur expéditeur par la première adresse IP disponible hors de la plage des adresses IP uniques. La table de traduction dispose désormais d'un mappage de l'adresse IP non routable de l'ordinateur correspondant à l'une des adresses IP uniques.

Lorsqu'un paquet revient de l'ordinateur de destination, le routeur vérifie l'adresse de destination sur le paquet. Il regarde ensuite dans la table de traduction d'adresses pour voir à quel ordinateur du domaine de stub le paquet appartient.

1) Comment NAT sait-il que le paquet "revient" sur l'ordinateur de destination?

2) Que se passe-t-il si d'autres ordinateurs du LAN sont connectés au même serveur? Comment le NAT sait-il quel paquet doit "revenir" où?

3) La modification de l'en-tête du paquet permet-elle de réaliser une attaque Internet, dans laquelle "l'IP source" est remplacée par l'IP de la victime, et le serveur répondeur inondera la victime de paquets indésirables?

Je suppose que plusieurs attaquants devraient être impliqués ...

4) StaticNAT est-il équivalent à la redirection de port de tous les ports?

user2449761
la source

Réponses:

10

Il y a une idée fausse générale entre NAT (traduction d'adresse réseau) et PAT (traduction d'adresse de port), qui est ce que nous utilisons principalement dans nos routeurs domestiques.

NAT
Supposons que nous avons un réseau avec la topologie suivante:

Private_Network <-------> Routeur <-------> The_Internet

L'interface du routeur connecté au réseau privé a une adresse IP privée , c'est-à-dire qui n'est pas unique dans The_Internet . D'un autre côté, dans le cas de NAT , le routeur a plusieurs interfaces connectées à The_Internet . Chaque interface possède une adresse IP unique dans The_Internet . Supposons maintenant que Host_A et Host_B sont dans le Private_Network et qu'ils veulent tous les deux accéder à Website_X dans The_Internet en même temps. Les adresses IP et les ports de Host_ALe paquet sera:

Source IP: Host_A 'IP privé s
Source Port: Port A sur Host_A
IP de destination: Website_X ' public / IP unique du
port de destination: Un port où Website_X serveur d » écoute

et de la même manière pour un paquet provenant de Host_B .
Si l'adresse IP source reste inchangée, Website_X répondra à une adresse IP qui est privée, c'est-à-dire non unique, et donc le paquet ne pourra jamais retrouver son chemin. Afin de résoudre ce problème, le routeur vérifie si l'une de ses adresses IP uniques connectées à The_Internet n'est pas utilisée. Si tel est le cas, il effectue le mappage suivant:

Host_A ======= IP privée » Router's_unique_IP_K

et maintenant le paquet qui a commencé à partir de Host_A va vers Website_X et qui quitte maintenant l'interface du routeur connecté à The_Internet aura la forme:

Source IP: Router's_unique_IP_K
Source Port: port A sur Host_A
IP de destination: Website_X 'public / IP unique du
port de destination: Un port où Website_X ' s serveur écoute

Ainsi, vous pouvez comprendre qu'il existe une association un à un des adresses IP privées aux adresses IP publiques. Par conséquent, lorsqu'un paquet arrive de Website_X au routeur , cette association est vérifiée et l'adresse IP de destination est redéfinie sur l' adresse privée et remise avec succès à l'hôte approprié.
Comme vous pouvez le voir, cette méthode est assez simple, mais elle a un gros inconvénient: chaque hôte privé doit avoir une adresse IP unique réservée, ce qui est cher, nous choisissons donc d'avoir moins d'adresses IP uniques que les hôtes du réseau privé. Par conséquent, si tous les hôtes privés tentent d'accéder à The_Internet en même temps, seul un sous-ensemble d'entre eux, égal au nombre d'adresses IP publiques disponibles que le routeura, aura accès et le reste sera refusé.
Afin de contrer cela, nous avons créé PAT .

PAT
PAT est ce que la grande majorité de nos routeurs domestiques utilise. La limitation de base est que le routeur a une seule adresse IP unique avec laquelle il se connecte à The_Internet , mais nous voulons toujours autoriser plusieurs hôtes du réseau privé à accéder à The_Internet en même temps.
La façon dont nous le faisons est "similaire" à la façon dont NAT le fait avec une différence clé: au lieu que le routeur détienne un pool d'adresses IP, il détient un pool de numéros de port. Plus précisément, un paquet arrivant au Routeur depuis Host_A dans le Private_Network destiné à Website_X dansThe_Internet aura le format suivant:

Source IP: Host_A 'IP privé s
Source Port: Port A sur Host_A
IP de destination: Website_X ' public / IP unique du
port de destination: Un port où Website_X serveur d » écoute

Maintenant, le routeur effectuera deux tâches:

  1. Il changera l'IP source en IP publique unique du routeur ET
  2. Il changera le port source en un port d'un pool que le routeur gère et n'est pas déjà utilisé, par exemple Port_Z

et maintenant le paquet qui a commencé à partir de Host_A va vers Website_X et qui quitte maintenant l'interface du routeur connecté à The_Internet aura la forme:

Source IP: Router's_unique_IP_K
Source Port: Port_Z
Destination IP: Website_X 's public / IP unique
port de destination: Un port où Website_X ' s serveur écoute

et le routeur conservera le mappage suivant:

IP privée de Host_A ET un port sur Host_A ======= Port_Z

Pourquoi ça marche?
Maintenant, quand un paquet revient, le routeur vérifie simplement le numéro de port de destination et modifie l'adresse IP de destination et le numéro de port de destination en fonction du mappage précité et le paquet est livré avec succès.

Que faire si j'exécute plusieurs applications sur le même hôte?
Différentes applications auront des ports différents, par définition, donc elles seront mappées à un port différent du routeur .

Que faire si plusieurs hôtes tentent d'accéder à The_Internet en même temps et utilisent tous la même application?
Différents hôtes auront différentes adresses IP privées, par définition, ils seront donc mappés sur un port différent du routeur .

PAT s'équilibre dangereusement dans un espace gris de couches croisées. Les numéros de port font partie du protocole de transport tandis que les routeurs sont autorisés à fonctionner jusqu'au protocole Internet. Donc, techniquement parlant, c'est quelque chose qui n'est pas autorisé par les protocoles. Il existe donc, au moins théoriquement, des dangers potentiels: le pool de ports est limité. Par conséquent, si mon réseau privé se compose de 1 000 hôtes et que chacun exécute des applications port_pool / 10, la table de mappage sur le routeur sera à court d'entrées disponibles et l'accès aux applications sera refusé.

Cette réponse a largement dépassé ma longueur prévue, mais j'espère que cela a été utile.

George
la source
2
Quelques notes. Premièrement, vous utilisez le terme "NAT" pour désigner ce que les RFC appellent "Basic NAT" et "PAT" pour vous référer à ce que les RFC appellent "NAPT". Les RFC utilisent généralement "NAT" comme un terme générique couvrant à la fois "Basic NAT" et "NAPT". Deuxièmement, même "Basic NAT" doit modifier l'en-tête TCP / UDP car l'en-tête TCP / UDP contient une somme de contrôle qui couvre les adresses IP.
Peter Green
@PeterGreen mais l'essentiel de la réponse est-il exact?
lpydawa
6

Le routeur sait où appartiennent les paquets car The router saves ... an address translation table.il se souvient des traductions d'adresse interne-externe qu'il a faites. En tant que tel, une adresse intérieure équivaut à une adresse extérieure, et la destination hors Internet n'est pas pertinente. Ceci, bien sûr, ignore le pare-feu présent dans pratiquement tous les routeurs NAT, qui suit les connexions complètes:

(inside) src:ip+port,dst:ip+port <-> (outside) src:ip+port,dst:ip+port

NAT peut changer n'importe quelle combinaison d'ip et / ou de port.

# 3 est un sujet entièrement différent: l' usurpation d'identité

# 4 "NAT statique", ou "1 à 1", est une carte d'adresse uniquement. Ainsi, le port (et même le protocole: tcp, udp, gre, etc.) n'est pas pertinent.

Ricky Beam
la source
2) Que se passe-t-il si d'autres ordinateurs du LAN sont connectés au même serveur? Comment le NAT sait-il quel paquet doit "revenir" où?
user2449761
1 & 2 sont la même réponse: car c'est le suivi des connexions / traductions. Deux hôtes internes ne seront pas mappés à la même adresse externe; ainsi, tout paquet arrivant à une adresse extérieure mappée n'a automatiquement qu'une seule destination intérieure. Si vous n'avez qu'une seule adresse extérieure (publique), ce n'est pas "NAT", mais PAT (traduction de port)
Ricky Beam