Proftpd が「PASV」コマンドに応答しない

Proftpd が「PASV」コマンドに応答しない

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 はひどいプロトコルです。2 つのポートを使用します。1 つはコマンド用、もう 1 つはデータ用です。このため、ルータはコマンド チャネルを解析し、この FTP 会話には 2 番目の接続が必要であると判断する必要があるため、NAT が非常に困難になります。これは見苦しいですが、NAT を FTP で動作させる唯一の方法でもあります。

FTPS暗号化するコマンド チャネルが無効になり、どのルータもパケットを検査してデータ チャネルがどこにあるかを把握できなくなります。当然、その場合、ルータはそれを考慮できなくなります。そのため、データ チャネルがクライアントによって開始されると (PASV で要求されているように)、NAT ルータはそれをどう処理すればよいかわかりません。FTP の動作方法により、これを修正することはできません。

FTP は使用せず、代わりに SFTP または類似のものを使用してください (SSH トンネル経由でファイルを転送するため、1 つの TCP 接続のみが必要です)。最近では、ほとんどのグラフィカル FTP クライアントが SFTP もサポートしています。

関連情報