I only port forward port 21 to run the FTP server on my DNS-323 externally, so I have no idea what you guys are doing to break it.
There seems to be a lot of misunderstanding here and where and blind attempts to make things work :-).
First of all, as it has already been said there should be clear understanding how ftp works, what is active and passive mode and which ports are used.
1. FTP uses 2 channels at the same time for its work and needs 2 independent connections - command-and-control and data-transfer. Using c&c connection ftp client gives instructions to server and listens to replies, while using data connection server sends (or receives) actual data. TCP port 21 is a standard (well known) port used for command-control. If this is the only port opened both directions on firewall then to actual data transfer can take place.
2. Term active or passive FTP determines FTP SERVER behavior - who initiates data-transfer channel. If it is client, then this is passive mode, if this is server - active one.
In active mode client connects to the server on port TCP/21 using some random source TCP port above well-known range (1024 and up). For example TCP/2000. This is how it establishes c&c connection.
Then the client sends to the server its data port which is =current_port+1. In our case TCP/2000+1=TCP/2001.
After that FTP server initiates the data connection to the client using TCP/20 as source port and TCP/2001 (in our case) as a destination port and transfers the data.
In passive mode both connections are initiated by the client. Instead of sending port number to the server the client sends PASV command. In response the FTP server itself opens random TCP port (say TCP/3000) and sends it back to the client. After that the client connects to this port using again c&c port + 1 (TCP/2001 in our case) to received server port (TCP/3000) in our case and the server uses this established connection to send data to the client (or receive from it).
Now what happens if we put one way firewall between client and server which allows all the traffic in one direction and only returning traffic from the opposite side?
1. FTP server is outside and the client is inside.
In case of passive FTP we are fine and no ports are needed to be opened, as all outgoing (and returning) traffic is permitted. FTP clients first establishes c&c connection from inside to outside (client:2000 -> server:21), receives port number from the server and establishes data connection (client:2001 -> server:3000).
In case of active FTP we are in big trouble, because we need to allow data connection initiated from server using port 20 AS A SOURCE PORT to the client using random port + 1 (TCP/2001 in our case, i.e. server:20 -> client:2001). Unless we have some sophisticated firewall which can preform deep inspection of packets, detect FTP connection, derive dynamic port from it and dynamically open it, we have to wide open traffic from any source using port 20 to the client on port range 1024 - 65535, which is a big security hole.
That is why passive mode is mostly used to access FTP servers on the internet from behind firewalls.
Now if we put the FTP server behind firewall and FTP client on the outside network, we get completely different picture.
First we need to open (forward) port TCP/21 to the FTP server. Otherwise there will be no ftp connection established.
Now if the ftp client uses ACTIVE mode to connect to FTP server, we are fine:
1) The client connects to the FTP server and tells it which port to use for data (TCP/2001 in our example). This c&c connection works, if port forwarding was configured properly.
2) The server initiates data connection from inside firewall (all traffic is allowed!) using obtained port number as a destination and TCP/20 as a source - server:20 -> client:2001 (in our case)
But if the FTP client tries to use Active mode it will fail (if our firewall is not capable for deep packet inspection) because the client will try to establish connection from outside to inside using dynamic destination port supplied by the FTP server - client:2001 -> server:3000.
To make the long story short - in case of "simple" one way firewall passive ftp mode should be used to connect to FTP servers on the internet and active mode should be used to connect from the internet to the servers behind such firewalls with only port 21 permitted in inbound direction.
Do you see a bit of a problem here? If we have a client behind such a firewall trying to connect to the FTP server behind such a firewall IT WILL NEVER WORK as they need different FTP modes to operate!
At least one of firewalls should be smart enough to support both FTP modes, or there should be one-to-one NAT translation to the FTP server with all ports allowed (which is not good, as all ports on the server are exposed to the internet). Check your router documetation regarding FTP processing capabilities.
One more hint how to check if port forwarding is actually working. Forget about any FTP clients. Just go to command prompt and use 'telnet x.x.x.x 21' where x.x.x.x is IP of your FTP server.
If FTP server works and port forwarding is configured properly you should see FTP server response on your screen like: 220 blah blah blah FTP server is ready.
If you see 'connection failed' it means something is wrong.