コンピューティングエンジンのVMにsshし、そこから別のサーバーにFTPで接続したい。ユーザー名とパスワードを尋ねたら、問題なくログインできた。しかし、ls
またはget
、次のエラーが表示されます。
500 I won't open a connection to 10.240.XX.XX (only to XX.XX.XX.XX)
ftp: bind: Address already in use
その10.240.XX.XXは、ifconfig
の結果で見た私の内部IPアドレスです。
FTPを使用して別のサーバーからファイルを転送するにはどうすればよいですか?システム:Debian7
FTPのアクティブモードを使用して、Pure-FTPdを実行しているサーバーに接続しています。アクティブモードでは、サーバーはクライアントに接続してデータ転送接続を開く必要があります(ファイル転送またはディレクトリリスト用)。そのために、クライアントはPORT
コマンドでIPアドレスをFTPサーバーに送信します。
FTPサーバーがGCEプライベートネットワークの外部にある場合、クライアントマシンはファイアウォールとNATの背後にあるため、明らかにクライアントマシンに接続できません。
実際、Pure-FTPdはPORT
コマンドのIPアドレスがFTP制御接続のクライアントIPアドレスと一致することを明示的にチェックします。クライアントがGCEネットワーク内で内部IPアドレスを送信する場合、一致しません。この場合、Pure-FTPdサーバーが転送メッセージを(接続しようとさえせずに)エラーメッセージで拒否すると、次のメッセージが表示されます。
...への接続を開きません(...のみ)
(ここで最初の...
は、クライアントがPORT
コマンド(GCEプライベートネットワーク内のローカルアドレス)で提供するIPアドレスであり、2番目の...
は、サーバーが認識しているクライアントの外部[NAT] IPアドレスです)。
クライアントがPORT
コマンドで外部[NATed]アドレスを報告したとしても、接続試行がNATおよびファイアウォールを通過しないため、まだ機能しません。
このため、パッシブFTPモードが存在し、クライアントはサーバーに接続してデータ転送接続を開きます。実際、最近では誰もアクティブモードを使用していません。
モードの詳細については、(私の記事) FTP接続モード を参照してください。
そのため、パッシブモードに切り替えます。これを行う方法はクライアント固有です。
最も一般的な* nix ftp
コマンドラインクライアントでは、-p
コマンドラインスイッチ。ただし、デフォルトではパッシブモードが使用されます。
-p
データ転送にパッシブモードを使用します。ファイアウォールが外部からクライアントマシンへの接続を妨げる環境でftpの使用を許可します。 FTPサーバーがPASVコマンドをサポートする必要があります。これは、PORT転送モードを使用するセキュリティ上の懸念により、すべてのクライアント(ftpおよびpftp)のデフォルトになりました。フラグは互換性のためにのみ保持され、効果はありません。
一部のクライアントは、passive
コマンドもサポートしています。
パッシブモードでFTPを有効にします。既に接続している場合は、入力してください
ftp> passive
Passive mode on.
現在、パッシブモードでFTPを使用しています。