Classically, if you can connect to a FTP server but you cannot do a 'dir', your command channel (port 21 classically) is fine but you're having problems with the
data channel (port 20). That your data channel hangs unless people go passive suggests it could be a firewall/networking issue.
Update: As an example of the kinds of issues FTP generates, you cannot pass FTP traffic through an
iptables filter unless you turn on
ftp connection tracking.
More info:
http://www.proftpd.org/localsite/Userguide/linked/x117.html