我一直在尝试配置位于 NAT 后面的 FTPS 服务器。因此,我在 NAT (TCP+UDP) 中打开了端口 20、21 以及 2120-2180,并将 proftpd 配置为使用此端口进行被动通信。
然而,尝试使用 FileZilla 连接会导致以下日志:(法语,但实际上很清楚)
Statut : Résolution de l'adresse de heardrones.com
Statut : Connexion à 93.30.208.56:21...
Statut : Connexion établie, attente du message d'accueil...
Réponse : 220 ProFTPD 1.3.5 Server (HEAR Server) [93.30.208.56]
Commande : USER hear_downloader
Réponse : 331 Mot de passe requis pour hear_downloader
Commande : PASS ********
Réponse : 230 Utilisateur hear_downloader authentifié
Commande : OPTS UTF8 ON
Réponse : 200 UTF-8 activé
Statut : Connecté
Statut : Récupération du contenu du dossier...
Commande : PWD
Réponse : 257 "/" est le répertoire courant
Commande : TYPE I
Réponse : 200 Type paramétré à I
Commande : PASV
Erreur : Délai d'attente expiré
Erreur : Impossible de récupérer le contenu du dossier
它甚至在能够发送“PASV”答案之前就超时了!什么可能导致这种情况? PASV 命令的答案使用与所有其他命令(PWD、TYPE ...)相同的端口,那么它来自哪里?
这是网络设计:
Server
Proftpd, no iptables, fix IP 192.168.0.13
-> (Wifi)
ISP Box - French ISP (SFR)
port transfer 20,21,22,2120-2180 to 192.168.0.13
-> (optic fiber !)
Internet
如果需要,我可以提供 Box 设置屏幕截图和 proftpd 配置文件。从 LAN/本地主机连接工作正常。
答案1
FTP 是一个可怕的协议。它使用两个端口——一个用于命令,一个用于数据。这使得 NAT 变得非常困难,因为路由器需要解析命令通道并找出该 FTP 会话需要第二个连接。这样做是丑陋的,但也是使 NAT 与 FTP 一起工作的唯一方法。
FTPS加密命令通道,从而使任何路由器都无法检查数据包并找出数据通道的位置。显然,这意味着它将无法解释这一点;因此,当您的数据通道由客户端启动(根据 PASV 的要求)时,您的 NATting 路由器将不知道如何处理它。由于 FTP 的工作方式,无法修复此问题。
只要对 FTP 说“不”,而使用 SFTP 或类似的东西(它通过 SSH 隧道传输文件,因此只需要一个 TCP 连接)。如今,大多数图形 FTP 客户端也支持 SFTP。