ffftp + Putty でFTPをSSHトンネルさせたいと思っているのですが、以下のようにパッシブモードでデータ転送しようとした瞬間(だと思うのですが)、接続ができなくなってしまいます。

以下のようにクライアントの源ポートは8021、サーバのデータ転送ポート(パッシブモードで使われるポート)は50000or50001に設定しています。
原因としてどのようなことが考えられるでしょうか?

--

ホスト 127.0.0.1 (8021) に接続しています.
接続しました.
220 Welcome to blah FTP service.
>USER sampleuser
331 Please specify the password.
>PASS [xxxxxx]
230 Login successful.
>XPWD
257 "/home/hoge"
>TYPE A
200 Switching to ASCII mode.
>PASV
227 Entering Passive Mode (127,0,0,1,195,81)
ダウンロードのためにホスト 127.0.0.1 (50001) に接続しています.
接続できません.
ファイル一覧の取得を中止しました.
ファイル一覧の取得に失敗しました.

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/07/12 20:45:06
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:tombe No.1

回答回数38ベストアンサー獲得回数7

ポイント34pt

大雑把に言うとFTPは制御用ポート(21番)とデータ用ポート(20番)の2つのポートを使います・・・と一般的に言われています。

ただし厳密には、サーバ:クライアントの関係で言えば合計4つのポートを使用します。

デフォルトの(PASVモードでない)アクティブモードは、コマンド要求に関しては、クライアント(ポート番号任意)→FTPサーバ(制御用ポート21番)の方向に流れます。

ところがデータ転送に関しては、接続要求がFTPサーバ(データ用20番ポート)→クライアント(サーバ側に通知済みのポート番号)の方向に流れます。つまりデータ転送に関しては一般的な感覚で言うサーバとクライアントの立場が逆転します。

これが原因でファイアーウォール経由ではアクティブモードは動作しません。

従ってファイアーウォール経由の場合はパッシブモードに切り替えます。


パッシブモードの場合、コマンド要求に関してはアクティブモードと同じですが、データ転送に関しては、接続要求がクライアント(ポート番号任意)→FTPサーバ(クライアント側に通知済みのポート番号)の方向に流れます。つまり制御もデータ転送も、サーバ側はいわゆるサーバとしての立ち位置ですからファイアーウォール経由でも大丈夫ということです。


以上は普通にFTP接続した場合の話で、SSHトンネル経由の場合は別の要素が絡みます。

要点は、上記文章の以下の点


> 接続要求がクライアント(ポート番号任意)→FTPサーバ(クライアント側に通知済みのポート番号)


この文章の「クライアント側に通知済みのポート番号」とは何かというと、サーバ側でその時たまたま空いているポート番号です。20番ではありません。常に変動番号です。



結論:常に変動するポート番号にSSHトンネルでフォワーディングするには?



(参考ページ)

http://www.nina.jp/server/basic/ftp.html

ちょっと分かり難いけど資料としては纏っています。

id:niwa-mikiho No.2

回答回数516ベストアンサー獲得回数40

ポイント33pt

1回のコネクションごとにポート番号が変わっていきますが、1度使われたポート番号は一定の秒数は使えません。

その使えない秒数が何秒かは不明ですが、、、

で接続できないのは使うポートが2つしかなく、2つのポートが使われようとする間隔がその秒数よりも短いために接続できないのでは?と思います。

PASSIVE モードで使うポートの範囲を 100 個ほどにしてみては如何でしょうか?

id:km1981 No.3

回答回数429ベストアンサー獲得回数49

ポイント33pt

サーバ側のFTPデーモンがPassiveモードに対応していないのだと思います

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません