Continue with my previous post. Now my friend should understand why the solution I gave to him fixed the FTP issue.
I illustrated how FTP protocal works in both active and passive mode as below. The biggest difference is which side initiates the data transfer session: In active mode, FTP server initiates the data transfer session. While working in passive mode, the FTP client initiates the data transfer session.
If you know how firewall works, you will understand why the FTP should work in passive mode while the FTP client is behind a firewall.
The basic function of a firewall is to block the connection requests initiated from outside (generally it means from Internet) unless the ports have been published to the outside on the firewall. Assume the FTP server is working in active mode, and the FTP client initiates a connection request to TCP port 21 from a random port N. In the step 3), the FTP server will fail to send the data to client, as the firewall in front of the FTP client will block the request by default. Make sense?
FTP Active Mode
FTP Passive Mode