BA8000用グローバルアドレス検出CGI
おやじは、2つのISPと契約しサーバを公開しており、一方は固定IPで独自ドメインですが、もう一方は動的IPなのでZIONさんのDDNSを使わせてもらってインターネットに当サイトを公開しています。このネットワーク環境下で、サーバ1台でバーチャルサーバを使用して2つのサイトを動かすため、
マルチホーミング対応のネットワークとしていますが、サーバのデフォルトルートが固定IPのISP-Bになっているため、ZIONのDDNSの更新で問題が発生するので対策しました。
このCGI自体に問題はないのですが、DiCEを使用するとこのCGIを使っても問題が発生することが判明しました。問題点というのは、「DiCEは、外部スクリプト指定していても、そこでグローバルアドレスが取得できないと内部に指定されている外部のサイトにアクセスしてアドレスを自動取得してしまいます。この動作により、元々ISP-Aのアドレスを設定したいにもかかわらず、デフォルトルートのISP-Bのアドレスになってしまう。」というものです。普通なら問題はないのでしょうが、おやじの場合は、これでは何のためのCGIかわからなくなってしまい、DiCEは使えないことがわかりました。やむを得ず、自分でスクリプトを書くことにしましたが、注意が必要です。
なお、本体策は上記以外でも、BA8000を使用していてDiCEでグローバルアドレスを誤検出する場合にも有効です。
以下は、おやじ宅のネットワーク構成での設定です。
■問題点
DiCEは、自動に設定するとインターネット上にある外部スクリプトを利用してグローバルアドレスを検出しています。これらのスクリプトは、アクセスしてきたIPアドレスを返送するものなので、おやじの場合はデフォルトルートであるISP-Bからアクセスすることになるので、固定IPが検出されてしまい意味がありません。もう一つの検出方法は、ルータの画面情報から検出する方法ですが、これも2つのISPと繋がっているので、誤検出する可能性があります。具体的には、おやじの環境ではISP-Aがプライマリセッションになっているので通常はこちらを検出するはずですが、仮にISP-Aのセッションが切れてISP-Bが繋がっていると、誤ってISP-Bの固定IPを検出して登録してしまいます。
この問題は、両セッションとも動的IPの場合でも同じですが、下記対策で対応できます。Windowsでも少し面倒ですが対応できます。
■対 策
結論からいえば、DiCE単体ではどうにもならず、WAN側のグローバルアドレスはルータから取得する以外ありません。しかし、2セッションによる誤検出問題は残りますので、セッションを明示してルータからアドレスを取得するCGIを使うことで対処しました。まずは、Linuxベースで示しますが、Windowsでも対処可能です。
このCGIは、あらかじめ指定したセッションのみを監視するので誤検出はしません。このCGIをWWWサーバ経由でアクセスすれば、検出したアドレスを得ることができるので、DiCEの外部スクリプトにこのCGIへのアクセスを登録しておけば問題は発生しなくなります。
■CGIの使用方法
CGIを
こちらからダウンロードし、解凍して以下の手順で設置、設定してください。WWWサーバ経由でアクセスできるディレクトリに置いてください。
- ダウンロードしたCGI(/usr/local/src配下にダウンロードしたと仮定)を、WWWサーバ経由でアクセスできるディレクトリに設置します。
外部からアクセスされるとまずい(サーバのWAN側アドレスが見えるだけなので、あまり問題とは思わないが念のため)ので、おやじは、cgi-bin相当の専用ディレクトリ(/usr/local/apache2/ba8000)を作成し、そこに置き、そのディレクトリはlocalhostからしかアクセスできないように制限してある。
# cd /usr/local/apache2 # mkdir ba8000 #
cp /usr/local/src/ba8000_pro.cgi ./ba8000/ba8000_pro.cgi # chmod
700 ./ba8000_pro.cgi |
- まず、CGIの環境を設定します。viなりエディタで編集してください。まずは、perlへのパスはシステムに合わせてください。
- $router_url = "192.168.1.1"
BA8000のLAN側アドレスを指定。
- $userid = "username";
BA8000へのログインユーザ名を指定。
- $passwd = "password";
BA8000のログインパスワードを指定。
- $errmsg =
0;
エラーメッセージを出力する場合は「0」を、出力しない場合は「1」を指定。エラーはmessagesに出力される。
- $isp = 0;
検出したいセッションを 0:プライマリ 1:セカンダリで指定。
- $linux =
0;
Linuxの場合は「0」、Windowsの場合は、「1」とする。
- ba8000.cgiをCGIとして実行でき、外部からのアクセス拒否のためApacheのhttpd.confに下記を追記します。
ScriptAlias /ba8000/ "/usr/local/apache2/ba8000/"
<Directory "/usr/local/apache2/ba8000">
AllowOverride None
Options None
Order deny,allow
Deny from all
Allow from localhost
</Directory>
|
- Apacheを再起動し、ブラウザから「http://localhost/ba8000/ba8000_pro.cgi」とアクセスしたとき、ターゲットのセッションのグローバルアドレスが表示されていることを確認してください。
- DiCEの環境設定で、「外部のスクリプトから検出」を選び、4項のURLを「スクリプトのURL」として登録してください。後は、DiiCEを再起動すればおしまいです。PPPoEセッションが切れるとグローバルアドレスが変わる方は、強制的に切断して動作を確認しておきましょう。
■2セッション時の設置方法
DiCEは、環境設定が一つしかできないので、DiCEを別のディレクトリにもう一つインストールして2つ動かすしかありません。CGIの方も同様に、異なる名前で設置、監視セッションを変更し、新しいDiCEでこのCGIのURLを登録すれば、2セッションでも対応できます。
Top Pageへ