Setting up your Router to Fix the "425 code"
This is a How-to guide on how to set up your router with FileZilla Server (FZS) in order to fix the error code 425. There is a Wiki on Network Configuration that covers this information, however, it is written in such a way that the “layman” may have difficulty understanding what’s going on—and it doesn’t show exactly how to fix the 425 error code—so this Wiki will give instructions on how to set up your specific router.
This Wiki will go over the common technical reason(s) for error 425 being given after the FZS sends the 227 Passive command to the FTP client—regardless of what client is being used. This Wiki is written for the common user in a narrative tone—if a more in-depth technical Wiki is desired refer to the Network Configuration article.
So, you've set up your FZS and it works for a local connection in your home, BUT you want to make your Local FTP Server accessible when you’re away—and you want to use encryption (FTP over TLS) to do so. You set up a Dynamic DNS (DynDNS) service to point to your FZS via your external IP address (don’t worry I’ll explain later in the Wiki). You’ve followed a how-to on setting up FZS to use TLS, but you've run into an issue—and after looking at the FZS Log you see the problem—right after the "227 Passive command" is given and acknowledged you see a 425 error. But even after summoning a Warlock, a Witch, and a Unicorn—you can’t fix it and wind up here reading this Wiki.
More than likely the problem is that your FZS is requesting the FTP Client to use the Passive Ports defined in the FZS settings. And even though you’ve changed the settings in your Windows 7 or 8 Firewall you still can’t get your FTP Client to connect. Why? Well it’s complicated; the type of encryption that FZS uses doesn’t allow the router to “see” that you’d like to allow this communication, and thus the router blocks the data from being transferred. There are other programs you can use that would allow the router to see that a computer requested the information to come in, but you’ve configured FZS thus far, and in many ways it’s better that no one knows what this data is at all—it is your private information after all.
Why the Router?
OK, so I know that this Wiki isn’t supposed to get too technical, but some of you might be curious as to how the router works, and why it’s doing what it is.
The Router is an important part in your Network security. Some say it’s the first line of defence against hacking and the last line of defence against Trojans/Viruses leaving with your private data—others say it’s a magic box connecting you to the world using sorcery—all of these are true.
The router takes one IP address and allows many devices to connect to the Internet using a complex protocol called Network Address Translation (NAT). Each time a computer requests information, such as going to “Google,” it puts it in a “packet” (think of an envelope) that the router opens, looks for an address, and then sends it to the Google web page, and in turn the Google web page sends a packet back with the information that opens up in your browser—only first the Router again opens the return packet to make sure that someone inside your private network requested it, and then sends it to the appropriate computer.
What if a packet comes in that no one requested? The Router puts it in the “trash”—in technical terms, the Router “drops” the packet. This keeps bad stuff out, and allows only what you’ve asked for to come in.
So what does this mean for this application? As stated above FZS uses an encrypted protocol to receive data. The Router can’t see that the encrypted data “packets” are “OK” to let in on the ports they are coming in on, and thus thinks that a hacker is trying to break in because those ports are closed.
At this point you can think whatever you want, like "well when I shut off the TLS portion of the service it works, so why don’t we change the type of encryption?" or whatever else you might come up with—but after all the work you’ve done so far, why give up now when there’s an easy fix? And there’s the pesky fact that you can’t change the type of encryption that FZS uses (what a drag…).
“So how do we know it’s the router?” You might ask. Take a look at the following Log, and the explanation below it.
Sample 425 error Log
According to your logs (Logs WILL vary so keep reading) you see:
- (000015)12/28/2013 20:43:55 PM - (not logged in) (188.8.131.52)> Connected, sending welcome message...
- (000015)12/28/2013 20:43:55 PM - (not logged in) (184.108.40.206)> TLS connection established
- (000015)12/28/2013 20:43:55 PM - (not logged in) (220.127.116.11)> HOST **********.mooo.com
- (000015)12/28/2013 20:43:55 PM - (not logged in) (18.104.22.168)> 500 Syntax error, command unrecognized.
- (000015)12/28/2013 20:43:55 PM - (not logged in) (22.214.171.124)> USER RCSTEST
- (000015)12/28/2013 20:43:55 PM - (not logged in) (126.96.36.199)> 331 Password required for rcstest
- (000015)12/28/2013 20:43:55 PM - (not logged in) (188.8.131.52)> PASS *********
- (000015)12/28/2013 20:43:55 PM - rcstest (184.108.40.206)> 230 Logged on
- *Output Omitted*
- (000015)12/28/2013 20:43:55 PM - rcstest (220.127.116.11)> AUTH TLS
- *Output Omitted*
- (000015)12/28/2013 20:43:55 PM - rcstest (18.104.22.168)> MKD Cobian Backup 11 test directory-2013-12-28 20;43;42
- (000015)12/28/2013 20:43:55 PM - rcstest (22.214.171.124)> 257 "/Cobian Backup 11 test directory-2013-12-28 20;43;42" created successfully
- (000015)12/28/2013 20:43:55 PM - rcstest (126.96.36.199)> CWD Cobian Backup 11 test directory-2013-12-28 20;43;42
- (000015)12/28/2013 20:43:55 PM - rcstest (188.8.131.52)> 250 CWD successful. "/Cobian Backup 11 test directory-2013-12-28 20;43;42" is current directory.
- (000015)12/28/2013 20:43:55 PM - rcstest (184.108.40.206)> PWD
- (000015)12/28/2013 20:43:55 PM - rcstest (220.127.116.11)> 257 "/Cobian Backup 11 test directory-2013-12-28 20;43;42" is current directory.
- *Output Omitted*
- (000015)12/28/2013 20:43:55 PM - rcstest (18.104.22.168)> PROT P
- (000015)12/28/2013 20:43:55 PM - rcstest (22.214.171.124)> 200 Protection level set to P
- (000015)12/28/2013 20:43:56 PM - rcstest (126.96.36.199)> PASV
- (000015)12/28/2013 20:43:56 PM - rcstest (188.8.131.52)> 227 Entering Passive Mode (84,25,240,74,206,88)
- (000015)12/28/2013 20:43:56 PM - rcstest (184.108.40.206)> STOR Test file.txt
- (000015)12/28/2013 20:44:06 PM - rcstest (220.127.116.11)> 425 Can't open data connection for transfer of ""
- (000015)12/28/2013 20:44:17 PM - rcstest (18.104.22.168)> QUIT
- (000015)12/28/2013 20:44:17 PM - rcstest (22.214.171.124)> 221 Goodbye
- (000015)12/28/2013 20:44:17 PM - rcstest (126.96.36.199)> disconnected.
So here's what's going on:
- The FTP Client (Cobian Backup 11 in this case) is establishing a connection with the FZS using standard ports 21 (non-encrypted) or 990 (encrypted) depending on your setup.
- The FTP Client is now providing the FZS with a username and password.
- The Server and client now establish that TLS must be used for further communication.
- The FTP Client is requesting that a folder be created. FZS creates the folder, etc. (boring stuff).
- Now FZS and the FTP Client enter Passive Mode (code 227)
- The FZS tells the FTP Client that the passive ports are located at "(84,25,240,74,206,88)."
- Decoded this translates to IP address 188.8.131.52 (the first four set of numbers) port number 52824 (the last two sets of numbers equated as: 206*256=52736, and 52736+88=52824 #Mathisfun).
- Here's where the 425 "error" is given
- This last bit is what’s frustrating you, the connection is ending without any data being transferred…
Again, your output will vary in all aspects.
We Found the Problem, Now What?
The Fix: In the router you'll need to open these ports for the encrypted traffic. Now on to the exciting part if you have no idea how to do this! Look for your brand of router below, if it's not listed ask me to list it, and I'll do my best!
- Note: You’ll want to pay close attention here.
So what about this whole “DYNDNS” thing? For those of you who don’t know what this is, it’s a service that you can set up to point internet traffic to your computer when your external IP address is “Dynamic” or changes from time to time—as is the case with most public IP Addresses given by your Internet Service Provider (ISP). The set-up of such service “can” be free with a little work, but this falls outside the scope of this article at this time, another article will explain this in the future.
External IP Address
Your external IP address is the address given to you by your ISP. It should not in any way resemble your server’s IP address, or the IP address of any computer on your network. For the purpose of this Wiki we will not address the Subnet Masks, as it’s not relevant to this topic.
Internal vs. External IP Address
The internal “Private” IP address of a Network “usually” starts with 192.168.X.X (where “X” can vary), and is assigned to your computer(s) so they can talk to the Internet via the external “Public” IP address. The external address can be anything in all reality, for this Wiki we’ll pretend the outside address is 184.108.40.206.
Device Specific Instructions
Please send a request for your device to be added if you don’t see it, and we’ll do our best to add it.
Apple Airport Extreme
- Under the Network tab of the Airport Utility there’s a section titled "port settings."
- Click the "+" button to add a setting, either select "FTP access" from the dropdown, or add it.
- Under both "Private TCP ports" and "Public TCP Ports" put in 21 (standard FTP Port).
- Note: You do NOT need to allow UDP ports as they are not used for FTP.
- Under Private IP address type the IP address of the destination computer (FTP server).
- Note: setting a static IP address on the FTP server is strongly suggested.
- Repeat step 3 and allow port 990 (standard TLS port).
- Repeat step 3 one last time and
- Under the TCP ports fill in the range of the FZS passive ports: i.e. "60000-65000" just like that.
- Use your FZS ports. No spaces, no other characters.
- Apply the settings to the router, and allow it to reset.
- Test the connection.