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 もサポートしています。