web-dev-qa-db-ja.com

FTPファイル転送がハングしてタイムアウトする

FTP経由でのファイルのアップロードに問題があります。ディレクトリを正常に一覧表示できますが、「。htaccess」などのファイルをアップロードしようとすると、STOR .htacessで約20秒間ハングし、タイムアウトがスローされます。数回再試行しますが、常に失敗します。

FTPクライアントからの完全な出力がファイル転送でどのように見えるかを次に示します。

Status: Connecting to 88.150.168.207:21...
Status: Connection established, waiting for welcome message...
Response:   220 Welcome to CodeBuster FTP service.
Command:    USER codebuster
Response:   331 Please specify the password.
Command:    PASS ********
Response:   230 Login successful.
Command:    OPTS UTF8 ON
Response:   200 Always in UTF8 mode.
Status: Connected
Status: Starting upload of D:\Projects\codebuster\.htacess
Command:    CWD /public_html
Response:   250 Directory successfully changed.
Command:    PWD
Response:   257 "/public_html"
Command:    TYPE A
Response:   200 Switching to ASCII mode.
Command:    PASV
Response:   227 Entering Passive Mode (88,150,168,207,155,25).
Command:    STOR .htacess
Error:  Connection timed out
Error:  File transfer failed
Status: Connecting to 88.150.168.207:21...
Status: Connection established, waiting for welcome message...
Response:   220 Welcome to CodeBuster FTP service.
Command:    USER codebuster
Response:   331 Please specify the password.
Command:    PASS ********
Response:   230 Login successful.
Command:    OPTS UTF8 ON
Response:   200 Always in UTF8 mode.
Status: Connected
Status: Starting upload of D:\Projects\codebuster\.htacess
Command:    CWD /public_html
Response:   250 Directory successfully changed.
Status: Retrieving directory listing...
Command:    TYPE I
Response:   200 Switching to Binary mode.
Command:    PASV
Response:   227 Entering Passive Mode (88,150,168,207,73,43).
Command:    LIST
Response:   150 Here comes the directory listing.
Response:   226 Directory send OK.
Command:    TYPE A
Response:   200 Switching to ASCII mode.
Command:    PASV
Response:   227 Entering Passive Mode (88,150,168,207,222,74).
Command:    STOR .htacess
Error:  Connection timed out
Error:  File transfer failed
Status: Connecting to 88.150.168.207:21...
Status: Connection established, waiting for welcome message...
Response:   220 Welcome to CodeBuster FTP service.
Command:    USER codebuster
Response:   331 Please specify the password.
Command:    PASS ********
Response:   230 Login successful.
Command:    OPTS UTF8 ON
Response:   200 Always in UTF8 mode.
Status: Connected
Status: Starting upload of D:\Projects\codebuster\.htacess
Command:    CWD /public_html
Response:   250 Directory successfully changed.
Status: Retrieving directory listing...
Command:    TYPE I
Response:   200 Switching to Binary mode.
Command:    PASV
Response:   227 Entering Passive Mode (88,150,168,207,35,185).
Command:    LIST
Response:   150 Here comes the directory listing.
Response:   226 Directory send OK.
Command:    TYPE A
Response:   200 Switching to ASCII mode.
Command:    PASV
Response:   227 Entering Passive Mode (88,150,168,207,109,53).
Command:    STOR .htacess
Error:  Connection timed out
Error:  File transfer failed

これはiptblesがオフになっているため、ファイアウォールの問題ではありません。ファイルのサイズは確かに問題ではありません。ディレクトリインデックスが設定された1行だけだからです。

追記として、これはcodebuster:codebusterが所有するchrotディレクトリであり、権限はdrwxrw-rw-です。

ここにいくつかの追加の注意事項があります:

vsftpdログの行は次のことを示しています。

Sat Jan 10 14:46:23 2015 240 ::ffff:89.72.176.192 35 /public_html/.htacess a _ i r codebuster ftp 0 * c

、したがって、転送は完了したと主張しますが、そうではありませんでした。

ファイルの削除は正しく機能します

tcpdump port ftpの概要は次のことを示しています。

100 packets captured
101 packets received by filter
0 packets dropped by kernel

Ftpクライアントでアクティブモードを使用しても状況は変わりません。

1
Nicolas

まず、セットアップ全体がパッシブモードで機能する場合に備えて、パッシブモードを使用しないようにテストすることをお勧めします。

次に、この行を見てください。

応答:227パッシブモードに入る(88,150,168,207,155,25)。

これは、VPSのIPアドレスにさらに2つの番号を加えたものです。これらをp1とp2と呼びましょう。これらの番号は、「port =(p1 * 256)+ p2」の式に従って、接続する必要のあるポートを示しています。これに基づいて、問題がどこにあるかを確認するために、コンピューターとVPSで同時にネットワークキャプチャを取得することをお勧めします。コンピューターから開始されたがVPSに到達していないパッシブポートで接続が表示される場合は、ローカルネットワークに問題がある可能性があります(VPSの前にファイアウォールがないと言ったように)。パケットがサーバーに到達しても応答しない場合は、サーバーのFTP設定に問題がある可能性があります。

この種の質問に答えるのは、すべての情報がないと難しいことを覚えておいてください。しかし、これがあなたにいくらかのガイダンスを与えることを願っています。

2
Pedro Perez

ディレクトリを正常に一覧表示できますが、ファイルをアップロードしようとすると...約20秒間ハングし、その後タイムアウトがスローされます。

ディレクトリリストとファイル転送は同じ基本メカニズムを使用します。つまり、データ接続を開き、データを転送します。あなたの場合、クライアントは、PASVコマンドへの応答内でサーバーによって指定されたアドレスへの接続を開きます。

ディレクトリリストは機能するため、すべてのデータ接続がファイアウォールまたはNATデバイス)によってブロックされる一般的なケースは除外されます。

私はあなたが持っている問題の次の理由を想像することができます:

  1. サーバーでの奇妙な問題。
  2. ポリシーまたはバグのためにトラフィックを積極的に妨害するディープインスペクションミドルボックス(ファイアウォールなど)。一部のファイアウォールは、データ漏洩防止としてアップロードを禁止しています。
  3. データ接続の数をレート制限するファイアウォール。
  4. 転送中に使用されるいくつかのTCPオプションを鳴らすいくつかの壊れたルーター。

原因を絞り込むには、次の手順を実行することをお勧めします。

  • FTPサーバーのログファイルを調べて、問題が報告されているかどうかを確認します。
  • VPS自体(ローカルシステムへ)でパッシブFTP接続を試してください。
  • 別の場所から試してください。
  • 同じFTPセッション内で複数のディレクトリリストを次々に実行してみてください。
  • サーバーからファイルを取得して、アップロードのみが影響を受けるかどうかを確認してください。

それとは別に、SFTP(SSHを介したファイル転送)を使用することをお勧めします。これは、より安全で(暗号化されたログイン)、問題が少ない(単一の接続のみ、余分なデータ接続がない)ためです。

2
Steffen Ullrich

20000未満のポートへの発信接続のみが許可されているようです。 FTPサーバーのPASV範囲全体で、クライアントでの送信とサーバーでの受信が許可されていることを確認してください。そこに範囲が見つからない場合は、1024〜65535で動作するはずです。

>>> 155*256+25
39705
>>> 73*256+43  #OK
18731
>>> 222*256+74
56906
>>> 35*256+185  #OK
9145
>>> 109*256+53
27957
0
Cees Timmerman