# Port forwarding

Port forwarding of port mapping is het doorsturen van een TCP- of UDP-pakket in een NAT-gateway om een intern netwerk aan een extern netwerk (bijvoorbeeld internet) te koppelen door middel van poortnummers. Deze techniek wordt gebruikt om communicatie mogelijk te maken tussen externe hosts en andere diensten binnen een LAN.

## Doel

Port forwarding maakt het mogelijk externe computers (bijvoorbeeld openbare machines op het internet) te verbinden met een bepaalde computer binnen een privénetwerk (LAN).
Bijvoorbeeld:
* Draaien van een openbare HTTP-webserver binnen een privé-LAN (poort 80)
* Het toestaan van Secure Shell-toegang (SSH-toegang) op het privénetwerk vanuit het internet (poort 22)
* Het toestaan van FTP-toegang op een privénetwerk vanuit het internet (poort 21)
In de Linuxkernel is dit mogelijk door de iptables- of netfilter-modules aan te passen. BSD- en Mac OS X-besturingssystemen gebruiken een soortgelijke tool genaamd Ipfirewall (ipfw).

## Voorwaarden

Enkele algemene voorwaarden voor port forwarding zijn:
* De router herschrijft het pakket, zodat het antwoord op de request door de server niet wordt teruggestuurd naar de client maar naar de router. Die stuurt op zijn beurt het antwoord wel terug naar de client. Hiermee wordt het gevaar voorkomen dat een client rechtstreeks bij de server kan komen, wat een beveiligingsprobleem kan veroorzaken.
* Elke open port kan maar door één computer in het LAN-netwerk worden gebruikt.
* Traditionele port forwarding geeft de hele wereld toegang tot de port, mits de client niet wordt tegengehouden door een beveiliging of firewall.
Port forwarding kan ook worden gebruikt binnen één enkele computer. Port forwarding is nodig voor een stand-alone-computer als een van de volgende voorwaarden van toepassing zijn:
* De computer heeft een gedeeld IP-adres.
* Wanneer de internetverbinding wordt verdeeld. Dit is niet hetzelfde als de vorige voorwaarden, wanneer een internetverbinding wordt gedeeld kan dit ook op basis van een MAC-adres, zoals bijvoorbeeld het geval is met een switch.
* Als de router gebruikmaakt van NAT.

## Werking

Een standaardthuisnetwerk heeft toegang tot internet via een DSL of kabelmodem. De modem kan worden aangesloten op een router, of in de meeste gevallen zit de modem al in de router. De router wordt vervolgens aangesloten op het lokale netwerk door middel van een ethernetkabel of Wi-Fi. Alleen de router heeft directe toegang tot het internet. Het IP-adres is dus gekoppeld aan de router en niet aan de achterliggende computers. De computers in het lokale netwerk zijn onzichtbaar voor het internet als ze beschikken over een lokaal IP-adres. Dit gaat meestal via DHCP. Port forwarding is nodig in de router om computers met een intern IP-adres te verbinden met het externe IP-adres van de router.

## Unix-poortnummers

Port forwarding wordt gewoonlijk gedaan op Unixcomputers waar poortnummers genummerd onder 1024 alleen geopend kunnen worden door software die draait als rootgebruiker. Programma's starten als root kan een beveiligingsprobleem opleveren. Een veelvoorkomende oplossing is om een server te laten luisteren (listen) naar een hoger poortnummer en die via de router om te leiden naar een lager poortnummer. Als men een webserver opzet, gebeurt dat standaard op poort 80. Wanneer de webserver wordt gestart als root kan dit een probleem opleveren voor de veiligheid. Daarom laat men de webserver luisteren op poort 8080. Vervolgens wordt de router zo ingesteld dat al het verkeer dat een request doet op poort 80 omgeleid wordt naar poort 8080. Dit noemt men port triggering en is mogelijk op TCP, UDP of beide.

## Omgekeerde port forwarding

Reverseport forwarding, of omgekeerde port tunneling, wordt gedaan door twee componenten die aan elkaar gekoppeld worden met als doel een port forwarding. Dit wordt meestal gerealiseerd door software.
Component 1 is de server die luistert op een vooraf ingestelde poort. Component 2 is de client die een verbinding maakt met component 1 (de server). Als de server de client heeft goedgekeurd, wordt er een sessie opgezet. Nu is het mogelijk om al het verkeer dat een request doet op component 1 (de server) om te leiden naar een andere poort, namelijk component 2 (de client). Op deze manier is het mogelijk om een soort server op te zetten zonder de router te configureren. Men kan stellen dat de server en de client zijn omgewisseld. Deze methode wordt vaak gebruikt bij remote-desktopprogramma's en bij SSH.