Veel NAT routertjes zijn op de hoogte van het FTP protocol. Ze herkennen dit aan het poort nummer (tcp 21), en kijken vervolgens in de datastroom naar de uitgaande PORT commando's, en interpreteren dit, en wijzigen waar nodig. Hierdoor hoeft een FTP client achter een fatsoenlijke NAT router geen PASV mode te gebruiken. Andersom werkt eea hetzelfde (voor een FTP server), alleen zijn het dan de uitgaande(!) PASV commando's die vertaalt moeten worden.
Ga je met FTP naar een andere poort dan 21, loop je kans dat de router dit niet meer als FTP herkent, en de interpretatie/vertaling dus niet meer werkt. Voor een client betekent dit alleen maar passive mode, voor een server alleen maar active mode. Zitten beiden achter NAT, heb je een potentieel probleem.
Overigens is poort 21 de enige die echt vaststaat. In de praktijk neemt met deze vaak -1, maar dat hoeft niet(!).
Normaal werkt FTP als volgt: een client maakt connectie met een server, over poort 21. Bij het ophalen van data stuurt de client een PORT commando, bijvoorbeeld PORT 1,2,3,4,11,23. Dit betekent 'stuur mij de data op IP 1.2.3.4 poort 2839'. De client luistert dan op poort 2839. NAT gaat hier dubbel de fout in: ten eerste stuurt de client zijn interne IP adres, ten tweede weet de NAT router niet dat hij moet luisteren naar poort 2839. Een goede router zal het PORT commando dus wijzigen naar het externe IP adres, en een vrije poort om naar te luisteren.
PASV is gemaakt om bovenstaande te omzeilen. Bij NAT zijn (in principe) uitgaande verbindingen altijd mogelijk, dus hier stuurt de client het PASV commando, waar de server een antwoordt geeft wat zijn IP is, en op welke poort hij luistert. De client opent vervolgens een sessie naar dat IP adres, op die poort. Problemen onstaan nu aan de serverkant als deze achter NAT zit. De server stuurt in principe zijn interne IP adres, en de router weet niet welke poort er open moet. Een goede router wijzigt dit dus weer zodat eea wel werkt.
[
Voor 5% gewijzigd door
ijdod op 18-05-2003 11:36
]
Root don't mean a thing, if you ain't got that ping...