Verwendest Du beim Verbinden aktives oder passives FTP? Passives FTP wird nämlich, wenn Du nur die Ports 20 und 21 weiterleitest, so nicht funktionieren.
Aktives FTP wird so (wie sonst auch immer) auch nur funktionieren, wenn die Firewall des Clients es zuläßt, was oft - vor allem, wenn der Client selber in einem LAN ist und über ein NAT-Gateway ins Internet geht - nicht der Fall ist.
Erklärungen zu aktivem/passivem FTP: http://slacksite.com/other/ftp.html
Schau mal, ob Du bei Deinem FTP-Server den Bereich für passive Ports einstellen kannst (z. B. auf 50000-50100), dann könntest Du diese Ports auch noch forwarden und passives FTP sollte funktionieren.