# Port Address Translation

Port Address Translation (PAT) oder Network Address Port Translation (NAPT) ist eine Technik, die in Computernetzwerken verwendet wird. Sie ist eine spezielle Form von Source NAT (1-zu-n-NAT). Dabei werden im Gegensatz zu NAT nicht nur die IP-Adressen, sondern auch Port-Nummern umgeschrieben. PAT wird benötigt, wenn sich z. B. mehrere Rechner aus einem LAN (mit privaten IP-Adressen) zu einem öffentlichen Webserver (z. B. via HTTP) verbinden und dabei alle Verbindungen zu einer öffentlichen IP-Adresse maskiert (Masquerading) werden müssen. Sollte zufällig von mehreren Rechnern der gleiche Source-Port (aus der Range der dynamischen Ports) gewählt worden sein, käme es zu einem Konflikt bei der Zustellung der Antwortpakete an den richtigen Rechner aus dem LAN. Um dieses Problem zu lösen, wird bei Bedarf der Source-Port auf der WAN-Seite um eins erhöht, damit der Webserver seine Antwort eindeutig zurücksenden kann.

## Beispiel

Angenommen für das lokale Netz 192.168.0.0/24 steht die öffentliche WAN-IP-Adresse 203.0.113.2 zur Verfügung, so könnte folgendes passieren:

### Ausgehende Pakete (LAN → WAN)

| lokales Netz (LAN) | lokales Netz (LAN) | | öffentliches Netz (WAN) | öffentliches Netz (WAN) |
| Quell IP:Port | Ziel IP:Port | Router ===========> Port Translation | Quell IP:Port | Ziel IP:Port |
| 192.168.0.2:50000 | 198.51.100.1:80 | Router ===========> Port Translation | 203.0.113.2:50000 | 198.51.100.1:80 |
| 192.168.0.3:50000 | 198.51.100.1:80 | Router ===========> Port Translation | 203.0.113.2:50001 | 198.51.100.1:80 |
| 192.168.0.5:50002 | 198.51.100.1:80 | Router ===========> Port Translation | 203.0.113.2:50002 | 198.51.100.1:80 |
Die LAN-IP-Adressen werden durch die (einzige) öffentliche IP-Adresse ersetzt. Die Quell-Ports der LAN-Rechner werden eindeutig auf die öffentliche WAN-IP mit Quell-Port übersetzt. Mittels einer Tabelle kann der Router die jeweiligen Verbindungen den LAN-Rechnern wieder eindeutig zuordnen:
* 192.168.0.2:50000 ⇔ 50000
* 192.168.0.3:50000 ⇔ 50001
* 192.168.0.5:50002 ⇔ 50002
Wie im Beispiel ersichtlich, wird dies benötigt, wenn mehrere Geräte gleichzeitig dieselbe IP mit demselben Ziel-Port aufrufen. So haben die Datenpakete alle die gleiche Ziel-IP und den gleichen Ziel-Port, jedoch unterschiedliche Quell-Ports, so dass die Antworten des Servers an dieselbe Quell-IP gesendet werden, aber jeweils mit unterschiedlichen Ziel-Ports (dem ursprünglichen Quell-Port).

### Eingehende Pakete (LAN ← WAN)

| lokales Netz (LAN) | lokales Netz (LAN) | | öffentliches Netz (WAN) | öffentliches Netz (WAN) |
| Quell IP:Port | Ziel IP:Port | Router <=========== Port Translation | Quell IP:Port | Ziel IP:Port |
| 198.51.100.1:80 | 192.168.0.2:50000 | Router <=========== Port Translation | 198.51.100.1:80 | 203.0.113.2:50000 |
| 198.51.100.1:80 | 192.168.0.3:50000 | Router <=========== Port Translation | 198.51.100.1:80 | 203.0.113.2:50001 |
| 198.51.100.1:80 | 192.168.0.5:50002 | Router <=========== Port Translation | 198.51.100.1:80 | 203.0.113.2:50002 |
Bei eingehenden Paketen kann anhand der Ziel- / Quell-Port-Nummer und der Ziel- / Quell-IP und der Tabelleneinträge (connection tracking) festgestellt werden, welcher lokaler Computer die Pakete angefordert hatte (hier: 192.168.0.2, 192.168.0.3 und 192.168.0.5). Der Router kann dadurch die Ziel-IP durch die ursprüngliche Quell-IP 192.168.0.2, 192.168.0.3 bzw. 192.168.0.5 und die öffentliche Port-Nummer durch die ursprüngliche interne Port-Nummer austauschen.
Da hier jede IP-Adresse zu einer einzigen IP-Adresse übersetzt wird, spricht man von einer N:1-Übersetzung. Werden mehrere IP-Adressen zu weniger IP-Adressen abgebildet, dann handelt es sich um eine N:M-Übersetzung.