proFTPd w/ MySQL Auth, behind NAT - Failed to retrieve directory listing

Solution 1:

You get the "Failed to retrieve directory listing" error message because the FTP client does not get the directory listing from the server, most likely due to a firewall or network issue.

The FTP protocol was invented long before network firewalls and Network Address Translation, and it uses a separate command channel and data channel for the communication.

When you log in, only the command channel is in use.

When you perform a directory listing, the client and server tell each other on the command channel on what IP address and port (60746 in your example) the data channel should be dynamically set up on for the transfer of the directory listing data.

This is done with the FTP command PORT or PASV.

In your case, the client issue the PASV command, and the server replies with: 227 Entering Passive Mode (109,xxx,xx,xxx,237,74).

The first 4 octets within the parenthesis make the IP address, and the last two the port number (256*237 + 74 = 60746).

Are you running the FTP server inside a virtual machine with a NAT-style network adapter configured for the virtual machine (as opposed to Bridged)? Then this is most likely the cause of your problems, because those kinds of VM:s are usually not reachable from "the outside", since they share the physical host's IP address.

Are ports 60000-65535 open on the server? Your config specifies that range to be used for passive connections. You can narrow it down to a shorter range to require fewer open ports in the firewall.