Daemon(WarFTPD)による、NATルータ越えのPASVサービスの提供方法を述べます。基本的にはNT系と同じですが、サービス起動の違いでCGIやCron周りが異なるほか、設定がやや複雑になります。NT系の場合は、こちらをご覧ください。WarFTPdは、1.7以降でないとWin9x/Meでサービス起動できませんので、注意願います。WarFTPdの日本語化パッチはNT系と共通ですが、CGIやCron、crontab等が異なりますので、誤って使用しないようにしてください。WarFTPdは、ファイルアクセスまわりと、デーモンへのアクセスコントロールのデフォルト設定がおかしいので、うまく動かせない方が多いようなので、こちらに基本的な使用方法をまとめてみました。[ダウンロード]WarFTPdの日本語化パッチやおやじが作成したスクリプト等を、ダウンロードのページからダウンロードしてください。1.82.00RC1対応に変更しました。1.82.00RC1は、アップデートもしくは単体でインストールできます。WarFTPdの日本語化パッチを差分パッチに変更し容量を圧縮。内容に変更はないため、既に適用済みの方は不要。ip_check9xa/b.cgiで、ログファイルがおかしくなる不具合を修正。ip_check9xa/b.cgiで、ログの最大数を設定できるように変更。ip_check9xb.cgiで、複数の外部スクリプトを利用できるように変更し、信頼性を向上。自分で外部スクリプトを設置するときに使用するスクリプト(chkip.cgi)を追加.。ip_check9x.cgi全てで、クラスBのプライベートアドレスの判定に誤りがあり修正。1.81.3.0対応に変更。1.81.4.0対応に変更。WarFTPdそのものは、9x系、NT系のOSに対応しており、共通で使用できます。動作環境は、以下のとおりです。Meで動作確認していますが、98ですと微妙に違いがあるかもしれません。98、98SE、MeCGI(Perl5)が利用可能なこと。■WarFTPdのインストールWarFTPdのインストールそのものについては、下記のとおりNT系と全く同じ方法で問題ありません。ひとつだけ注意点があります。それは、最後のインストールフェーズのところが非常に時間がかかり、一瞬固まってしまったのかと思えますがじっくりと待ってください。インストールされるはずです。WarFTPdは、こちらから入手できますが、1.81-04-betaは1.71b02に対するパッチという形態で提供されており、両方をダウンロードしてください。英語はどうもと言われる方は、おやじの日本語化パッチ(IPアドレス変化検出用CGI、デフォルトnat.conf、crontabを含む)をダウンロードしてください。ファイルは以下のとおりです。(warftpd1.81.04j.exe)インストールは、上記の順に、ベースとなる1.71b02をインストールし、1.81b04のパッチをあて、最後に日本語化パッチをあてます。1.81b03からは、そのまま1.81b04のパッチをあて、最後に日本語化パッチをあてれば大丈夫です。ダウンロードしたWard171b02-experimental-I386.exeを実行し、1.71b02をインストールする。ファイルは自己解凍形式の圧縮ファイルになっており、実行すると解凍されると共にインストーラが起動するので、指示に従いインストールする。途中で、いろいろ聞かれるが、基本的にはデフォルトのままで問題はない。設定項目は、以下のとおりであり、基本部以外はインストール後でも変更は可能である。Files配下になっているはずであり、変更するとCGI等を含めて見直しが必要になるので、この辺をいじれる方以外は絶対に変更しないこと。users)」のままとすること。スタートメニューへの追加デフォルトのまま追加する。インストールタイプアップグレードか新規インストールかを選択する。installationのはず。後でも変更可能なので、そのままでも良い。Service)、そのままとする。サービスで使用するTagの指定デフォルトの「WARSVR」のままとする。ここを変更した場合は、CGIの変更も必要になる。Files\War-ftpd\FTPRoot」となっているが、管理を考えると別の場所に変更したほうが良い。おやじは、G:\ftpとした。アクセス制限の設定デフォルトでは、Anonymousのアクセスを許可し、ユーザからのpublicのアップロードディレクトリのリスト表示とダウンロードが禁止になっている。用途に合わせて設定する。後で修正可能なのでそのままでも良い。Managerから行うが、そこにadministrator権限でログインするためのパスワードを設定する。ユーザIDは「SYSADMIN」となる。管理者のEメールアドレス管理者のEメールアドレスを指定する。制御コネクションのポート番号ここは、よほどの理由がない限りデフォルトの21のままとする。続けてNextを押していくと、インストールが始まるが、非常に時間がかかるのでじっくり待つこと。Manager」へのログイン画面が出るが、とりあえず「Cancel」する。1.81b04へのアップグレード引き続き、ダウンロードしたwarftpd-1.81-04-unstable-beta-i386-upgrade.zipを解凍し、1.81b04へアップグレードする。解凍してできた全てのファイル(厳密には、*.txt、nat.conf.sampleは不要。SQLとODBC関係をコピーするとアプリケーションエラーが出ることがあるので、コピーしないほうが良いでしょう。Files\War-ftpd)に上書きコピーする。1.71b02を残しておきたければ、あらかじめインストールしたディレクトリ配下にある上書きされるファイルをいずれかにコピーするか、リネームしておくと良い。書いたが、Windows9xでは、単純にコピーできない。コピーしようとすると「Windowsが使用中です。対策としては、解凍しておいた上で、セーフモードで起動しなおしコピーする。セーフモードの入り方は、システムを再起動し、立ち上がってくるまで「Ctrl」キーを押したままにしておけば、起動メニューの選択画面が出てくるので、そこで選択すればよい。日本語化おやじのパッチのVer1.2以降の場合は、下記手順で日本語化パッチ(warftpd1.81.03j.exe)をあててください。セーフモードにしなくても大丈夫です。managerの画面が開いていたら、閉じる。Files\War-ftpd。WDM.exeと同じフォルダ)にwarftpd1.81.04j.exeをコピーし実行する。以上で、インストールは完了である。ここで、システムを再起動すると、1.81b04の日本語版が起動し、インストール時の条件で使用可能状態になっている。Managerを介して行う。Manager」で起動する。Managerに入る。今回は、情報提供を優先しており、設定はいじっていればある程度判るので、設定に関しては省略しています。追っかけ準備したいと思っていますが、おやじ自身がLinuxユーザのため、ご利用になった方がアップしていただくとありがたいのですが。リンクさせていただきます。WarFTPdのインストールから設定までが掲載されているサイトをご紹介しますので、参考にされると良いでしょう。最近は、いくつかのメーカや機種で本設定を行わなくてもルータで同等の対応を行うものが増えてきているので、まずは、本設定を行わずにPASVを動かしてみるとよい。対応済みルータで本設定を行うと逆にLISTで止まるようになるので注意が必要です。WarFTPdでは、WarFTPdがインストールされているディレクトリ内に、アドレス運用条件を記述した「nat.conf」を置くことにより、いろいろな制御ができます。このnat.confをWarFTPdが読み込み反映するのは、自身が動作しているマシンのIPアドレスが変化したときと、サービス起動された時のみです。従って、前者はNATルータ配下に置かれた自宅サーバでは通常考えられないので、後者を利用することにより、動的IPサービスでもNATルータ配下でのPASVでのFTPサーバ公開ができるようにしてみました。range)に応じて、以下の項目が制御できる。Address)そのときに利用する待ち受けポートの範囲(Port-range)サンプルファイル(nat.conf.sample)が、ダウンロードしたwarftpd-1.81-04-unstable-beta-i386-upgrade.zipの中にありますが、コメントが多すぎるのでおやじのnat.confを用意しました。Files\War-ftpd)にコピーしてください。range毎に1行書く形式になっています。1行目(変更不可)1行目は、localhostに関するもので、Portはデフォルトの20番でなんら問題がないためデフォルトを示す「0」のままとする。Addressもデフォルトのままとする。Port-rangeもデフォルトとなっており、この場合、1024〜65535の範囲で空いているポートが利用される。rangeでアドレスとネットマスクを変更する必要がある。デフォルトは「192.168.0.0/255.255.255.0」になっている。Portはデフォルトの20番でなんら問題がないためデフォルトを示す「0」のままとする。Address、Port-rangeもデフォルトのままとする。rangeは「0/0」のまま変更してはならない。Portはデフォルトの20番でなんら問題がないためデフォルトを示す「0」のままとする。Addressは、固定IPサービスならWAN側アドレスが変化しないので、そのアドレスを記述すればよい。動的IPの場合は、おやじのCGIで書き換えるのでそのままでよい。(値は、何でも良いが、xx.xx.xx.xxの形態は崩さないこと。)Port-rangeは、ここで指定したポートに向かって、WAN側から通信が始まる、即ちWWWサーバにアクセスしてくるのと同じ動作のため、ルータでのスタティックNATとフィルタリングの設定が必要となる。このポートはパケットバイパケットで使いまわしされるので、同時接続セッション数+αだけあれば十分なので、セキュリティのことも考え不必要に拡大しないこと。おやじのnat.confでは、4000-4029の30セッション分を確保してある。動的IPサービスを利用していると、ある日突然、WAN側のアドレスが変わってしまう。WarFTPdは、nat.confでNATルータ対応ができますが、WAN側アドレス変化に追従できないので、IPアドレスの変化検出とnat.confの書き換え用のCGIを用意しました。このCGIはシステムがインストールしてあるドライブに置いてください。ここでは、Cドライブのルートに置くことで記述しています。(ほかの場所に置いた場合は、後述のバッチファイル等の編集が必要になります。)とりあえず、動かすことを優先していますので、洗練されていませんが、最低限のことだけはやっているつもりです。今後、皆さんの意見をいただき改善したいと思います。このCGI(ip_checkx.cgi)は、cronから5分毎に起動され以下の処理を行うようにしました。(Cronについては、後述します。)自分のサイトのWAN側のIPアドレス(グローバルIPアドレス)の取得方法の違いで、2つのタイプ(Aタイプ:ip_check9xa.cgi/Bタイプ:ipcheck9xb.cgi)を用意した。リスクと検出時間を勘案の上、どちらを使われるかは各人で判断してください。Aタイプ自分のホスト名からIPアドレスに変換するもので、DDNSのアドレス変更が完了するまで変更できないが、変化検出に関連する要因はDDNSのみとなる。Bタイプ外部スクリプト(dyndns.org)を利用し、スクリプトが出力するアクセスしてきたアドレスをゲットすることにより、自分のサイトのアドレス変化を検出する方式である。外部スクリプトとは、契約プロバイダの自分のHPに自分で置いても良い。この方式は、IPアドレスが変化したとき、DDNSに反映される前でも、スクリプトにアクセスできればその時点から変更が反映できるため、Aタイプに比べ早く追従できる。DNSの障害とスクリプトがあるサイトの障害がない状態でなければ機能しない。Address)を書き換える。変更内容を反映させるたため、WarFTPdのサービスをリスタートする。乱暴であるが、これ以外に手がないのと、アドレスが変わるということは通信中のセッションも切れてしまうので、これによる弊害はないと考える。[CGI設定項目]設定は、いずれも、先頭のパラメータのところだけです。CGIに詳しい方は、いくらでも改善してください。Ver1.2でBタイプの設定が変わっています。ご自身のホスト名を記述してください。ログディレクトリ(なるべく変更しないこと。1(yes):エラー発生時にログをとる。hogehoge.com/chkip.cgiは自分でスクリプト置くときの例。設置しない場合は削除のこと。ログディレクトリ(なるべく変更しないこと。1(yes):エラー発生時にログをとる。■Cronのインストールと設定(周期的なIPアドレス監視)上記IP監視用CGIを周期的(5分毎)に起動できるようにします。Windows用Cronは、こちらからダウンロードできます。ダウンロードするのは、9x/NTサービス用です。NTサービス用ではありませんので、注意願います。インストール方法は以下のとおりです。ダウンロードしたcrons.zipを適当なところで解凍する。解凍すると、cron.exeができるので、これをC:\windows配下にコピーする。システム起動時に自動的にCronが起動するように、cron.exeをスタートアップに登録する。次に、CGIを起動するためのバッチファイルを作成します。CGIからプログラムを起動するとDosのウインドウが開きっぱなしになるので、バッチファイルを3つ作って、起動しています。スマートな方法があると思いますが、おやじは方法がわかりません。どなたか教授いただけるとありがたいのですが。3つのバッチファイルの名称、内容は、以下のとおりであり、メモ帳等で作成し3つともC:\windowsディレクトリに置いてください。おやじパッチの中にあるものを使っていただければいいと思います。使用するCGIに合わせること。-serviceEXIT設置後、各バッチファイル上で右クリックし、「プロパティ」を開き、「プログラム」の「終了時にウインドウを閉じる」にチェックを入れてください。これを行わないと、Dosウインドウが閉じません。続いて、Cron用の設定ファイルを作成します。適当なエディタで下記内容でcrontabというファイルを作成し、cron.exeと同じところ、即ち、C:\windowsに置きます。おやじパッチの中にあるcrontabを使っていただければいいと思います。ipcheck.bat設置できたら、cron.exeを起動すれば、5分毎にCGIが起動され、初回時にnat.conf内のアドレスが更新されるはずです。全ての設定が完了したら、まず、ローカルで十分試験をしてください。問題がなく動作していることが確認できたら、おやじのFTPサーバテストでテストして、外部からも使用できるか確認してください。■ODBCエラー対策デフォルトのままでは、WarFTPd起動時に以下のようなエラーがでます。ソース名および指定された既定のドライバが見つかりません。"これは、WarFTPdがデータベースにログ(セッションとファイル・イベント)を書くことができるようになっており、データベースが無いのにこの機能がデフォルトでonになっているので発生するエラーです。エラーが出ないようにする対策方法は2つあり、一つはデータベースを使用しないようにする方法(方法1)であり、もう一つはデータベースを用意する方法(方法2)です。特段理由がなければ、簡単なので方法1で機能停止すればよいと思います。「サーバ」->「アドバンスサーバプロパティ」を開く。「odbc_SOURCE」にデフォルトで設定されている「<default>」を消してブランクにし、「設定」を押下して反映させる。WarFTPDを再起動させ、エラーが出ないことを確認する。◆[方法2]:データベースを用意する方法コンソールパネルから「管理ツール」->「データソース(ODBC)」を開く。「システムDSN」を選択する。driver(*.mdb)」を選択して「完了」を押下する。「データソース名」に「WARSVR」、説明に「WarFTPD(適当に)」と入力する。続けて、「データベース」で「選択」を押して、WarFTPDのインストールフォルダ内にあるの「warsvr.mdb」を選択して「OK」を押して、セットアップ画面で再度「OK」を押す。アドミニストレータ画面で「OK」を押してデータベースを作成する。WarFTPDを再起動させ、エラーが出ないことを確認する。以降、「warsvr.mdb」にログが収集される。