"Port Address Translation (PAT) löst Konflikte, die entstehen, wenn mehrere Hosts dieselbe Quellportnummer verwenden, um gleichzeitig verschiedene externe Verbindungen herzustellen. PAT kann der Verbindung dann eine Portnummer aus einemPool verfügbarer Ports, indem Sie diese Portnummer in das Quellportfeld einfügen."
https://en.wikipedia.org/wiki/Netzwerkadressenübersetzung
Was wäre, wenn wir Dutzende hochgradig skalierbare Server hätten, die Tausende von Anfragen akzeptieren? Die Port-Erschöpfung scheint eine sehr grundlegende Grenze (64k) zu sein, die wir leicht erreichen werden.
Wie geht die Industrie mit solchen Szenarien um?
Antwort1
Letztendlich läuft NAT wirklich nur auf eine Nachschlagetabelle auf dem NAT-Gerät hinaus, die die Zuordnungen dafür enthält, welche Verbindungen wohin gehen. Diese Tabelleneinträge werden jedoch auf einempro SitzungBasis.
Beispiel: Wenn ich einen Host habe bei10.10.10.10, die mit einem Server im Internet kommunizieren möchten unter8.8.8.8, über mein Internet-Gateway, dessen öffentliche IP ist1.1.1.1, wenn diese Kommunikation stattfindet, erstellt mein Internet-Gateway möglicherweise ein Eintragspaar, das ungefähr so aussieht:
Quelle | Sport | Ziel | Dport | Aktionen |
---|---|---|---|---|
10.10.10.10 | 20000 | 8.8.8.8 | 80 | SNAT 10.10.10.10:20000 --> 1.1.1.1:40000 |
8.8.8.8 | 80 | 1.1.1.1 | 40000 | DNAT 1.1.1.1:40000 --> 10.10.10.10:20000 |
Auch wenn es den Anschein haben mag,1.1.1.1:40000ist jetzt für diese Sitzung belegt und lässt jetzt ~63999 Ports übrig. Das ist nicht ganz richtig. Da diese Einträge pro Sitzung erfolgen, wäre es vollkommen vernünftig, wenn nachfolgende Kommunikationen stattfinden und die Tabelle wie folgt aufgebaut wäre:
Quelle | Sport | Ziel | Dport | Aktionen |
---|---|---|---|---|
10.10.10.10 | 20000 | 8.8.8.8 | 80 | SNAT 10.10.10.10:20000 --> 1.1.1.1:40000 |
8.8.8.8 | 80 | 1.1.1.1 | 40000 | DNAT 1.1.1.1:40000 --> 10.10.10.10:20000 |
10.10.10.10 | 20001 | 8.8.8.8 | 81 | SNAT 10.10.10.10:20001 --> 1.1.1.1:40000 |
8.8.8.8 | 81 | 1.1.1.1 | 40000 | DNAT 1.1.1.1:40000 --> 10.10.10.10:20001 |
10.10.10.10 | 20002 | 8.8.4.4 | 80 | SNAT 10.10.10.10:20002 --> 1.1.1.1:40000 |
8.8.4.4 | 80 | 1.1.1.1 | 40000 | DNAT 1.1.1.1:40000 --> 10.10.10.10:20002 |
10.10.10.10 | 20003 | 8.8.4.4 | 81 | SNAT 10.10.10.10:20003 --> 1.1.1.1:40000 |
8.8.4.4 | 81 | 1.1.1.1 | 40000 | DNAT 1.1.1.1:40000 --> 10.10.10.10:20003 |
Auf der öffentlichen Schnittstelle (wo Sie sich normalerweise über eine NAT-Erschöpfung Sorgen machen würden) können wir sehen, dass es effektiv 4 Sitzungen gibt:
1.1.1.1:40000 --> 8.8.8.8:80
1.1.1.1:40000 --> 8.8.8.8:81
1.1.1.1:40000 --> 8.8.4.4:80
1.1.1.1:40000 --> 8.8.4.4:81
Diese 4 Sitzungen belegen jedoch nicht insgesamt 4 Ports, und das NAT-Gerät weiß genau, wohin der Datenverkehr dieser 4 Sitzungen geleitet werden soll.
Obwohl es so aussieht, als gäbe es ein Portlimit von 64 KB, sind es in Wirklichkeit eher 64 KB pro Ziel-Socket (mit einigen Einschränkungen). Nicht unerschöpflich, aber sicherlich skalierbarer als flache 64 KB.