はじめまして。
おやじさんのFTPサーバーの公開を見て、FTPサーバー構築に挑戦しているのですが、
WAN側からPASVモードでアクセスできません。
何が悪いのか他に調べる事柄があれば教えて頂けないでしょうか。
私の環境は以下になります。
クライアント(192.168.1.3) → ルータ(192.168.1.1) → インターネット
↓
FTPサーバー(192.168.1.99) ← ルータ(192.168.1.1)
本体:kurobox-pro
ディストリビューション:Debian etch
FTPサーバー:proftpd 1.3.0-19
ルータ:Buffalo WZR-RS-G54HP
/etc/proftpd/proftpd.conf
には、NATなので、以下を追加しました。DDNS名を名前解決できることを事前に確認しています。
MasqueradeAddress ftp.xxx.xxx.xxx ←DDNSを取得したものを書いています
PassivePorts 10000 10029
ルータのアドレス変換は以下を設定しました。
21を192.168.1.99へ変換
10000-10029を192.168.1.99へ変換
また、おやじさんのFTPサーバーテストCGIを使わせて頂きました。
エラー999が出力されます。
------------- ログ -------------
ホスト(61.197.1.35)のポート(21)に接続中です。(2007/06/28 21:06:48)
Error999: タイムアウトしました。(10 sec)
☆☆☆ テストは異常終了しました。☆☆☆ (2007/06/28 21:06:58)
エラー内容は、こちらを参照願います。
--------------------------------
その際の自分のルータのログです。
ポート21への接続はうまくいっている?ようです。
2007/06/28 21:06:57 NAT TCP connection accepted from 192.168.1.99:1041 to 61.213.69.123:113 (br0)
2007/06/28 21:06:51 NAT TCP connection accepted from 192.168.1.99:1041 to 61.213.69.123:113 (br0)
2007/06/28 21:06:48 NAT TCP connection accepted from 192.168.1.99:1041 to 61.213.69.123:113 (br0)
2007/06/28 21:06:47 NAT TCP connection accepted from 61.213.69.123:1030 to 192.168.1.99:21 (ppp3)
proftpdのログを見たのですが、これだけではわかりませんでした。
/var/log/proftpd/proftpd.log
Jun 28 21:06:58 KUROBOX-PRO proftpd[845] localhost (j069123.ppp.asahi-net.or.jp[61.213.69.123]): FTP session opened.
Jun 28 21:06:58 KUROBOX-PRO proftpd[845] localhost (j069123.ppp.asahi-net.or.jp[61.213.69.123]): FTP session closed.
また、LAN側からグローバル名で、FTPサーバーへアクセスすると、PORTではOKでした。
PASVでは、ファイルリストは取得できますが、ファイルのダウンロードができませんでした。
何かヒントが頂ければ幸いです。
よろしくお願い致します。
> クライアント(192.168.1.3) → ルータ(192.168.1.1) → インターネット
> ↓
> FTPサーバー(192.168.1.99) ← ルータ(192.168.1.1)
>
> 本体:kurobox-pro
> ディストリビューション:Debian etch
> FTPサーバー:proftpd 1.3.0-19
> ルータ:Buffalo WZR-RS-G54HP
>
> /etc/proftpd/proftpd.conf
> には、NATなので、以下を追加しました。DDNS名を名前解決できることを事前に確認しています。
> MasqueradeAddress ftp.xxx.xxx.xxx ←DDNSを取得したものを書いています
> PassivePorts 10000 10029
BuffaloならPASV対応しているはずなので、上記のPASV設定は不要です。
> ルータのアドレス変換は以下を設定しました。
> 21を192.168.1.99へ変換
> 10000-10029を192.168.1.99へ変換
ここも21番だけポートフォワードすればうまくいくと思います。
> また、LAN側からグローバル名で、FTPサーバーへアクセスすると、PORTではOKでした。
> PASVでは、ファイルリストは取得できますが、ファイルのダウンロードができませんでした。
これは、ファイルリストもデータもデータコネクションでやり取りするのでありえない話です。
FFFTPを使っているなら、オプションのその他の中のファイル一覧をキャッシュするのチェックを外して、FFFTPを再起動してやってみてはどうですか?
今の状況ならファイルリストも駄目になるはずです。何故なら、家庭内からアクセスしてもPASVのときにMasqueradeAddress でグローバルIPが帰るからです。ルータがこれではうまく動かないと思います。
おやじさん
返信ありがとうございます。
> BuffaloならPASV対応しているはずなので、上記のPASV設定は不要です。
最初は、ルータのPASV対応を信じて、MasqueradeAddressの設定は行いませんでした。
しかし、うまくいかなかったので、proftpd.confに設定しました。
初心に戻りもう一度やり直そうと思い、さきほど
/etc/proftpd/proftpd.conf
から
MasqueradeAddressとPassivePortsを無効にし、proftpdをリスタートさせました。
しかし、状況は変わらずです…。
ルータのログから考えると、FTPサーバーからCGIサーバーの113ポートに3回送っているが、反応がなくてFTPサーバーがコネクションクローズしたと見えるのですが、そうではないのでしょうか。
原因を切り分けたいのですが、何をすれば良いかご教授願えるとありがたいです。
よろしくお願い致します。
この説明で、大体見えてきました。PASV以前に、「FTPサーバに21番でつながった後に切れている。」というのが正確な現象ですね。
WAN側からのPASVがうまくいかないという話なので、おやじはそちらにイナーシャがかかりすぎていましたが、WAN側からはPortモードもうまくいっていないのでは?
> > BuffaloならPASV対応しているはずなので、上記のPASV設定は不要です。
> 最初は、ルータのPASV対応を信じて、MasqueradeAddressの設定は行いませんでした。
> しかし、うまくいかなかったので、proftpd.confに設定しました。
>
> 初心に戻りもう一度やり直そうと思い、さきほど
> /etc/proftpd/proftpd.conf
> から
> MasqueradeAddressとPassivePortsを無効にし、proftpdをリスタートさせました。
>
> しかし、状況は変わらずです…。
ここは、「状況は変わらずです…。」ということは、何が変わらないのですか?
「MasqueradeAddressとPassivePortsを無効」するというのは、PASVでサーバがクライアントに通知するデータコネクションのサーバ側の待ちうけアドレスとポートをルータのWAN側にするためのものですよね。従って、そこに着目して変更した効果があったかどうかを見なければ、原因究明したことにはならないですよね。
ただ、見た目の現象は、「FTPサーバに21番でつながった後に切れている。」なので、上記表現になっているのだと理解しました。
おやじの考えとしては、「FTPサーバに21番でつながった後に切れている。」という状況では、「MasqueradeAddressとPassivePorts」を設定する意味がない(つながった後の話)ので、とりあえずは指摘どおりここは無効にしてください。
ちなみに、「proftpdをリスタートさせました。」とあるのでstandaloneモードで動作させていると思いますが、「MasqueradeAddressとPassivePorts」を使用するならinetdモードでないと駄目とHPに書いてありますよね。もし、後で「MasqueradeAddressとPassivePorts」を使用するならモードを変更しないと駄目ですよ。
> ルータのログから考えると、FTPサーバーからCGIサーバーの113ポートに3回送っているが、反応がなくてFTPサーバーがコネクションクローズしたと見えるのですが、そうではないのでしょうか。
これを最初に言ってくれていれば、原因はすぐにわかったのですが・・・。
確かにルータのログが書かれていましたが、このログの時間軸が下から上なのと、PASVが駄目という頭から、ident(113番)は完全に見落としていました。
ところで、「FTPサーバに21番でつながった後に切れている。」原因は、まさにこれです。Proftpdはデフォルトでidentによりユーザ確認をしようとするが、おやじのサーバが応答しないので、3回繰り返しています。ただし、その後、Proftpdは接続にいくのですが、ちょうどその時間がおやじのクライアント(テストCGI)がタイムアウトする時間(10S)と重なっていて、見た目はサーバが切ったように見えていますが、切っているのはおやじのクライアント(テストCGI)です。
http://unixluser.org/techmemo/ident/
今時、ident(113番)に応答する殊勝なクライアントはいませんので、identを止めてしまえばおやじのテストが先に進むはずです。
identの止め方はHPに書いてあります。「IdentLookups off」です。
なお、もしinetdモードにするときは、下記の一番下に書いてありますが、「log_on_xx」で「USERID」と決して書かないでください。これを書くと、xinetdがidentで確認しようとするので、同じ問題が発生します。書くなら「HOSTID」にしてください。
http://www.aconus.com/~oyaji/ftp/proftpd.htm
おやじさん、アドバイスありがとうございます。
> ちなみに、「proftpdをリスタートさせました。」とあるのでstandaloneモードで動作させていると思いますが、「MasqueradeAddressとPassivePorts」を使用するならinetdモードでないと駄目とHPに書いてありますよね。もし、後で「MasqueradeAddressとPassivePorts」を使用するならモードを変更しないと駄目ですよ。
ご指摘のとおり、今はstandaloneで動作させています。おやじさんのFTPサーバー公開の説明でDDNSを用いる際は、inetdをつかう必要があるのは見ていたのですが、inetdでFTPサーバーが動作しなかったため、とりあえずstandaloneにしています。ほどよく動作したら再度inetdに変えようと思っています。
> > ルータのログから考えると、FTPサーバーからCGIサーバーの113ポートに3回送っているが、反応がなくてFTPサーバーがコネクションクローズしたと見えるのですが、そうではないのでしょうか。
>
> これを最初に言ってくれていれば、原因はすぐにわかったのですが・・・。
> 確かにルータのログが書かれていましたが、このログの時間軸が下から上なのと、PASVが駄目という頭から、ident(113番)は完全に見落としていました。
> ところで、「FTPサーバに21番でつながった後に切れている。」原因は、まさにこれです。Proftpdはデフォルトでidentによりユーザ確認をしようとするが、おやじのサーバが応答しないので、3回繰り返しています。ただし、その後、Proftpdは接続にいくのですが、ちょうどその時間がおやじのクライアント(テストCGI)がタイムアウトする時間(10S)と重なっていて、見た目はサーバが切ったように見えていますが、切っているのはおやじのクライアント(テストCGI)です。
>
> http://unixluser.org/techmemo/ident/
>
> 今時、ident(113番)に応答する殊勝なクライアントはいませんので、identを止めてしまえばおやじのテストが先に進むはずです。
> identの止め方はHPに書いてあります。「IdentLookups off」です。
ありがとうございました。
/etc/proftpd/proftpd.conf
に
IdentLookups off
を記述することにより、FTPサーバーテストCGIでファイル取得が成功しました。
identのことは全く知りませんでしたので、本当に助かりました。
FTPサーバーテストCGIがうまくいったので、ルータ内からプライベートアドレスとグローバルアドレスでFTPサーバーにアクセスしました。
FTPサーバーのプライベートアドレスでのアクセスOKですが、グローバルIPアドレスでは、接続できませんでした。FTPクライアントのログからは、ポート21への接続でこけている?みたいです。
/var/log/proftpd/proftpd.log
には特に何も出力されないので、ポート21へアクセスできていないと思われます。
ルータ内のFTPクライアントで、ルータのグローバルIPアドレスへはFTP接続できないものなのでしょうか?
質問ばかりで申し訳ありませんが、よろしくお願い致します。
> ご指摘のとおり、今はstandaloneで動作させています。おやじさんのFTPサーバー公開の説明でDDNSを用いる際は、inetdをつかう必要があるのは見ていたのですが、inetdでFTPサーバーが動作しなかったため、とりあえずstandaloneにしています。ほどよく動作したら再度inetdに変えようと思っています。
下記のとおりで、「MasqueradeAddressとPassivePorts」は記述していないでうまくいったなら、standaloneモードでも大丈夫です。理由はわかりますよね。
> > identの止め方はHPに書いてあります。「IdentLookups off」です。
> ありがとうございました。
> /etc/proftpd/proftpd.conf
> に
> IdentLookups off
> を記述することにより、FTPサーバーテストCGIでファイル取得が成功しました。
> identのことは全く知りませんでしたので、本当に助かりました。
「MasqueradeAddressとPassivePorts」は記述していないですよね。
もしそうなら、standaloneモードでも大丈夫です。
> FTPサーバーテストCGIがうまくいったので、ルータ内からプライベートアドレスとグローバルアドレスでFTPサーバーにアクセスしました。
> FTPサーバーのプライベートアドレスでのアクセスOKですが、グローバルIPアドレスでは、接続できませんでした。FTPクライアントのログからは、ポート21への接続でこけている?みたいです。
> /var/log/proftpd/proftpd.log
> には特に何も出力されないので、ポート21へアクセスできていないと思われます。
> ルータ内のFTPクライアントで、ルータのグローバルIPアドレスへはFTP接続できないものなのでしょうか?
これはルータの機能によりますが、WWWはグローバルIPアドレスでアクセスできる物がありますが、FTPができるルータはほとんどないと思います。WWWベースですが、下記のケース3です。FTPも同じですが、データコネクションがあるため変換が厄介なのでサポートしているルータはほとんどありません。
http://www.aconus.com/~oyaji/router/www_tst.htm
対策としては内向きDNSをたてるかクライアントのhostsファイルでプライベートアドレスに変換するか、ホスト名ではなくIPでアクセスするしかないです。
https://www.aconus.com/~oyaji/faq/apache_html3.htm
おやじのサイトに全て書いてあります。他にもありますので見てやってください。
> 下記のとおりで、「MasqueradeAddressとPassivePorts」は記述していないでうまくいったなら、standaloneモードでも大丈夫です。理由はわかりますよね。
私のケースの場合、ルータがクライアントからのPASVモードのレスポンスとしてFTPサーバーのプライベートアドレスからグローバルIPアドレスに変換してくれるためだと理解しています。
しかし、メモリの有効利用の観点から、inetdでの稼動も試してみたいと思います。
> > FTPサーバーテストCGIがうまくいったので、ルータ内からプライベートアドレスとグローバルアドレスでFTPサーバーにアクセスしました。
> > FTPサーバーのプライベートアドレスでのアクセスOKですが、グローバルIPアドレスでは、接続できませんでした。FTPクライアントのログからは、ポート21への接続でこけている?みたいです。
> > /var/log/proftpd/proftpd.log
> > には特に何も出力されないので、ポート21へアクセスできていないと思われます。
> > ルータ内のFTPクライアントで、ルータのグローバルIPアドレスへはFTP接続できないものなのでしょうか?
>
> これはルータの機能によりますが、WWWはグローバルIPアドレスでアクセスできる物がありますが、FTPができるルータはほとんどないと思います。WWWベースですが、下記のケース3です。FTPも同じですが、データコネクションがあるため変換が厄介なのでサポートしているルータはほとんどありません。
外部からアクセスできるのか、FTPサーバーテストCGI以外でも確認してみたく上記の方法をやりました。できないのであれば、誰かに依頼してアクセスできるか確かめてもらうしかないですね。
にしても、FTPがこれほど厄介だったとは、やってみるまでわかりませんでした。
>
> http://www.aconus.com/~oyaji/router/www_tst.htm
>
> 対策としては内向きDNSをたてるかクライアントのhostsファイルでプライベートアドレスに変換するか、ホスト名ではなくIPでアクセスするしかないです。
実際、ルータ内からはSambaでアクセスし、FTPである必要はありませんので、対策を取らないとアクセスできないということを認識できたということでOKだと思います。勉強になりました。ありがとうございます。
> https://www.aconus.com/~oyaji/faq/apache_html3.htm
>
> おやじのサイトに全て書いてあります。他にもありますので見てやってください。
以前からかなり参考にさせて頂いています。元々CentOSでサーバー立てて遊んでいたのですが、玄箱を買って昼夜サーバーを立てたいと思い、本格的に始めた次第です。
おやじさんのWeb資料は本にする価値があるなぁと個人的に思います。ただの項目や内容の羅列ではなく、初心者が一から追跡できるところがポイント高いです。
当初はWebDAVで考えていたのですが、日本語を扱うのが面倒そうだったので(パッチあても途中まで頑張りました)、FTPサーバーを選択したのですが、これもまたはまり、ルータが絡むと大変だなぁと思っていました。
これからも参考にさせて頂きますので、よろしくお願い致します。
いろいろ教えていただき、ありがとうございました。