[15:24:52] UPNP: Added port mapping: Router: 2343 -> 192.168.0.2:2343
[15:24:52] UPNP: GetExternalIPAddress returned: "18.104.22.168"
[15:24:52] PORT 158,64,124,39,9,39
[15:24:53] 200 PORT command successful. Consider using PASV.
Here's the answer to your first question: PORT mode works because your friend has a router that supports UPNP, which allows SmartFTP to dynamically configure port forwarding on the client side.
[15:25:10] 227 Entering Passive Mode (192,168,1,50,199,55)
Here's the answer to your second question: PASV does not work because you have configured your server (vsftpd in your case) to return the private LAN IP of your server, not it's Internet WAN IP. This is kind of tricky to fix as you're running the server on a dynamic IP. Usually, you would need to enter the IP which "golfhotel.dyndns.info" resolves to as the "pasv_address" in your "vsftpd.conf". However, as your IP may change, you would need to write a cron-job that resolves "golfhotel.dyndns.info" for you, writes the IP to "vsftpd.conf", and restarts the server if the IP changed compared to the last resolve attempt. That was until recently. Luckily, the new vsftpd 2.0.4 adds a "pasv_address_resolve" option, which you need to set to "YES". Then just specify your hostname ("golfhotel.dyndns.info") instead of the IP for "pasv_address" and you're set.