This is happening because the EX2’s ftp server settings have a limitation…if in ftp configuration from the dashboard you enable the “Report external IP in PASV mode” checkbox (and you currently do have it enabled), then you’ll be able to connect fine from outside but you cannot connect to the ftp server from inside using internal IP. On the other hand, if you disable (uncheck) that checkbox, your ftp connections will work fine inside the network but you won’t be able to connect from outside. This is because once you enable that setting, and are connecting from outside using a passive connection, the ftp server tells the client after initial connection on port 21 to make the subsequent data connection at the specified external IP address (specified in that ftp setting) and at a certain port that the server randomly picks from a range of port numbers (that range is also specified on that setting screen). Because that external IP is not valid in your local (internal) network, the client is unable to find that IP and therefore unable to make the data connection after the initial login connection…so it hangs.
So, the only and simple way to get around this issue is to simply leave that setting enabled so you can connect from outside, but while you are inside just connect to your ftp server NOT using the internal IP but using the external IP. This causes the client to make a connection from outside. Then, just like clients that are connecting from outside, this connection too is able to make the data connection. For a more in depth understanding google for active vs passive connection, and then read up on how two-stage passive ftp connections work (basically first a control connection is made by the client on port 21 and then a data connection is made by the client to whatever IP and port the ftp server tells the client to make the data connection on).
Other ftp servers like Filezilla ftp server has settings to detect when a connection is being made internally and for those connections it does not send the external IP but instead sends the internal IP to the client. The ftp server in the EX2 unfortunately doesn’t have that capability, so you’re always forced to pick between either external connection working or internal connection working, but never both simultaneously.
If this helps you, please click the star on the left under my username to give me a kudo. Also, mark my post as the solution, so that others can benefit from this in future.