Recently I've got vsftpd running from behind my BEFSX41 both in PORT and PASV modes so I thought that I share my set-up since FTP servers are quite a hot topic here ;)
My config: BEFSX41 1.43.4 (any BEFSx should be OK) vsftpd 1.1.1 (1.1.0 and up supports PASV from behind NAT, get it here: vsftpd.beasts.org ) RedHat 7.3 (any linux should be fine)
Router set-up: Forward port 21 TCP on UPnP Forwarding page Forward ports 65000~65534 TCP on Port Range Forwarding Page (any range, it's up to you)
vsftpd.conf set-up: pasv_enable=YES pasv_min_port=65000 (same range as on router) pasv_max_port=65534 pasv_address=100.100.100.100 (here comes your WAN IP) ...all other variables are set to default values
And since I have dynamic WAN IP from my ISP here's a little script running from cron to update vsftpd.conf with current IP (I use free dynamic DNS service www.dynu.com )
code:
#!/bin/sh #vsftpd.conf IP update by Brano vsftpd_conf=/etc/vsftpd.conf vsftpd_log=/var/log/vsftpd.log #change to your domain name in next line my_ip=`host your_host.dynu.com | cut -f4 -d" "` vsftpd_ip=`grep pasv_address $vsftpd_conf | cut -f2 -d=`
if [ "$my_ip" != "$vsftpd_ip" ] ; then ( echo ",s/$vsftpd_ip/$my_ip/g" && echo w ) | ed - $vsftpd_conf echo `date` "$vsftpd_conf updated with $my_ip IP address" >> $vsftpd_log fi