我一直在嘗試配置位於 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。