- PR -

vsftpd の転送エラーについて

1
投稿者投稿内容
しんいち
会議室デビュー日: 2008/06/13
投稿数: 4
投稿日時: 2008-08-29 18:13
FTPサーバー:RHEL-ES3
デーモン:vsftpd2.0.4
ファイルサーバー(NFS):RHEL AS4 UP6

構築当初から時々転送エラーを起こし、ファイルの転送がストップすることがあります。
エラー時のログは以下です。

FTP response: Client "10.xx.xx.xx", "230 Login successful."
FTP command: Client "10.xx.xx.xx", "CWD ."
FTP response: Client "10.xx.xx.xx", "250 Directory successfully changed."
FTP command: Client "10.xx.xx.xx", "TYPE I"
FTP response: Client "10.xx.xx.xx", "200 Switching to Binary mode."
FTP command: Client "10.xx.xx.xx", "PASV"
FTP response: Client "10.xx.xx.xx", "227 Entering PassiveMode (172,xx,xx,xx,17,42)"
FTP command: Client "10.xx.xx.xx", "STOR file00001.tz"
FTP response: Client "10.xx.xx.xx", "150 Ok to send data."
FTP response: Client "10.xx.xx.xx", "421 Data timeout. Reconnect. Sorry.

該当のサーバーは24時間に約1万回のセッション要求を受けており
1セッションで、数十KB程度のファイルを2〜3個受け取ります。

上記のエラーは、1日10〜15回発生しTimeout後は、0KBのファイルが作られ
同じユーザーは以後の転送が停止します。
※0KBファイルを消すと転送が再開される。
この間、他のユーザーは通常通り転送ができます。

FTPのクライアントは固定で、複数のユーザーを使い同時接続してきます。


環境にファイルサーバーを記載していますが
詳細の環境は以下になります。

FTPクライアント → PIX-(VPN)-Netscreen → FTPサーバー → ファイルサーバー

FTPクライアントは、FTPサーバーにNFSでマウントされたファイルサーバーの
ストレージに書き込むよう構成されています。
FTPサーバーから見ると、受け取ったファイルをそのまま右から左のイメージです。


手元にある情報が多いので
ここの設定どうなってる?と聞いてもらえれば公開します。

全ての転送がNGというわけではなく、一部の転送だけに限定されるので
ファイルの破損等も疑ったのですが、糸口がみつからず困っています。


助言をお願いします。

kata
ベテラン
会議室デビュー日: 2006/10/04
投稿数: 69
投稿日時: 2008-09-01 13:42
kataと申します。
引用:

FTPクライアント → PIX-(VPN)-Netscreen → FTPサーバー → ファイルサーバー



詳しいことは言えませんが、
以前同じような現象が発生したことがあります。

その際は、WindowsPC → LinuxサーバにNetScreenを介してSSH接続したときに、
一定時間アクセスがないと、NetScreenが自動でセッションを切ってしまう
という現象でした。

自動で切断する時間 = '999999'時間
とかに設定したような気がします。

NetScreenには上記のような仕様のものも存在するようなので
F/Wを確認するのはいかがでしょうか?
24時間で数回という動きにふと思いました。

以上、ご参考までに。
しんいち
会議室デビュー日: 2008/06/13
投稿数: 4
投稿日時: 2008-09-02 12:38
情報ありがとうございます。

netscreenのFTPのtimeout値はデフォルトの30minになっていす。
またvsftpd.confの「data_connection_timeout」「idle_session_timeout」も
1800秒にしています。

ログの
FTP response: Client "10.xx.xx.xx", "150 Ok to send data."
FTP response: Client "10.xx.xx.xx", "421 Data timeout. Reconnect. Sorry.
上記の間がちょうど30minなので、このtimeoutは設定によるものでしょう。

仮にtimeout値を無制限にした場合「150 Ok to send data」のままファイルを
待ち続けるだけになると思うのですが。
クライアント側が原因だった場合、この方法では難しいのでは?
※転送元が別会社なので、使用ソフトもログも確認することができないのが辛いです。

あとPIXとNetscreen間はPolicyベースで接続しています。
関係あるか不明ですが、参考までに。

しんいち
会議室デビュー日: 2008/06/13
投稿数: 4
投稿日時: 2008-09-04 12:43
新たな情報です。

FTPのやり取りをtcpdumpでキャプチャしました。
正常終了した場合のTCPフローと、timeoutした場合のフローの比較です。

正常な場合
サーバー  クライアント | comment
Response: 200 Switc |FTP: Response: 200 Switching to Binary mode.
------------------> |
Request: PASV |FTP: Request: PASV
<------------------ |
Response: 227 Enter |FTP: Response: 227 Entering Passive Mode (172
------------------> |
Request: STOR 「file」 |FTP: Request: STOR 「file」
<------------------ |
Response: 150 Ok to |FTP: Response: 150 Ok to send data.
------------------> |

ファイル転送

Response: 226 File |FTP: Response: 226 File receive OK.
------------------> |
48982 > ftp [ACK] S |TCP: 48982 > ftp [ACK] Seq=28 Ack=126 Win=46 Len=0 T
<------------------ |
Request: QUIT |FTP: Request: QUIT

となります。


ファイル転送が失敗する場合
サーバー  クライアント | comment
Response: 200 Switc |FTP: Response: 200 Switching to Binary mode.
------------------> |
Request: PASV |FTP: Request: PASV
<------------------ |
Response: 227 Enter |FTP: Response: 227 Entering Passive Mode (172
------------------> |
Request: STOR 「file」 |FTP: Request: STOR 「file」
<------------------ |
 ftp > 55143 [ACK] S |TCP: ftp > 55143 [ACK] Seq=196 Ack=81 Win=5792 Len=0
 ------------------> |
 55143 > ftp [FIN, A |TCP: 55143 > ftp [FIN, ACK] Seq=81 Ack=196 Win=5888
 <------------------ |
 ftp > 55143 [ACK] S |TCP: ftp > 55143 [ACK] Seq=196 Ack=82 Win=5792 Len=0
 ------------------>  |
 Response: 421 Timeo |FTP: Response: 421 Timeout.
 ------------------> |
 ftp > 55143 [FIN, A |TCP: ftp > 55143 [FIN, ACK] Seq=210 Ack=82 Win=5792
 ------------------> |
 [TCP Retransmission |FTP: [TCP Retransmission] Response: 421 Timeout.
 ------------------> |

となります。

クライアントからSTORコマンドが発行された後、サーバー側が150コードを発行し
ファイルの転送が開始されると思います。

転送に失敗する時は、150コードのパケットが飛んでおらず
転送を開始できずにタイムアウトしているように見えます。
ただ、vsftpのログを見ると150コードを発行しています。

FTPのログには150コードが記録されているのに
そのパケットが確認できません。

tpcdumpは、ftp or ftp-data で取得し、Wiresharkにて確認しています。
上記やり取りの記録は、Wiresharkにてエラー時のフローのみを抽出。テキストとして吐き出した物です(ポート番号や時間は省略しています)


宜しくお願いします。
akito12
会議室デビュー日: 2008/09/28
投稿数: 1
投稿日時: 2008-09-28 12:48
はじめまして、akito12と申します。

私も同じ様な症状だったのですが、原因は認証にLDAPを使っていた為
PAM認証がうまくいっていなかった事でした。
※/etc/pam.d/vsftpd を書き直し

もしやと思いレスつけさせて頂きました。
1

スキルアップ/キャリアアップ(JOB@IT)