
                              <<DNS Balance>>

 By: 横田 裕思 <yokota@netlab.is.tsukuba.ac.jp>



[1. これは何ですか]

 DNS Balance は動的な負荷分散を行なう事の出来る DNS サーバーです。
昨今は kernel.org や *bsd.org, RING サーバーなど、広範囲にミラーサーバを
置くようなサーバが増えてきました。従来は手動でミラーサーバを選択した
のですが、この DNS Balance によりそれを自動化できます。

 DNS Balance には以下のような機能があります。

o 各サーバの報告により提供するアドレスを動的に変化させる事が出来る。
o クライアントの IP アドレス毎に提供するサーバの IP アドレスを
  変える事が出来る。
o 必要最小限の機能のみを提供する事により、より安全な運用が出来る(はず)。
  具体的には DNS の A レコードのみ提供します。


[2. 必要なもの]

 DNS Balance は Ruby (http://www.ruby-lang.org/) で作成していますので
Ruby を手に入れてインストールしておいて下さい。最近ではバイナリパッケージ
もあるようです。


[3. 実行]

1. DNS Balance のアーカイブを好きなディレクトリで展開して下さい。
2. 展開されたアーカイブの中の addrdb.rb がアドレスデータベースです。
   これを編集する事により、提供するアドレス情報を決めます。
   これは Ruby のプログラムで記述されているので、記述を間違うと
   おかしくなりますので気をつけて下さい。

------------------
$addr_db = {
  "130.12" => {                # => 130.12.*.* からの問い合わせ。
                               #    IPアドレス 123.45.67.89 に対しては
                               #    "123.45.67.89", "123.45.67", "123.45",
                               #    "123" の順に調べていきます。
    "www.foo.com" => [         # => www.foo.com のアドレス問い合わせ。
                               #    ホスト名は小文字で書いて下さい。
      [[1,2,3,4], 0],          # => アドレス情報と接続の難しさ(最大10000)
      [[1,2,3,5], 10000],      #    の組を並べます。接続の難しさは 0 で
      [[1,2,3,6], 9000],       #    最も接続しやすく、10000 で接続不可に
      [[1,2,3,7], 9000],       #    なります。
    ],
  },
  "default" => {               # => 特に指定のない場合は "default" の
    "www.foo.com" => [         #    情報が使われます。
      [[1,2,3,4], 0],
      [[1,2,3,5], 100],
      [[1,2,3,6], 1000],
      [[1,2,3,7], 9000],
    ],
    "localhost" => [
      [[127,0,0,1], 0],
    ],
  },
}
------------------

3. クライアントのアドレスの振り分け先が多過ぎるようなら namespace.rb に
   別名を定義しまとめて管理する事もできます。

------------------
$namespace_db = {
  "127"        => "localnet",     # アドレスと別名の対を記述する。
  "192.168"    => "foo-net",      # 検索順は 123.45.67.89 からの問い合わせなら
  "130.199"    => "foo-net",      # "123.45.67.89", "123.45.67", "123.45",
  "130.123.12" => "foo-net",      # "123" の順です。
}
------------------

   これを使うと addrdb.rb の記述を以下のように別名で記述する事ができます。

------------------
$addr_db = {
  "localnet" => {
    "www.foo.com" => [
      [[1,2,3,6], 2000],
      [[1,2,3,7], 1000],
    ],
  },
  "foo-net" => {
    "www.foo.com" => [
      [[1,2,3,4], 0],
      [[1,2,3,5], 100],
    ],
  },
  "default" => {
    "www.foo.com" => [
      [[1,2,3,4], 0],
      [[1,2,3,5], 10000],
      [[1,2,3,6], 9000],
      [[1,2,3,7], 9000],
    ],
  },
}
------------------


4. プログラムを起動します。ファイルのロードパスの関係でアーカイブの
   ディレクトリに移って実行する必要があります。また、実行には root 権限
   が必要です。"ruby dns_balance.rb" とタイプして下さい。
   うまく動いたら "host -v <ホスト名>" 等のコマンドで確かめてみて下さい。

5. このディレクトリに "addr" という名前のファイルがあると、一定期間毎
   (標準では5分毎) に読み込みます。内容は addrdb.rb と同じです。
   なお、この更新をすると以前の addrdb.rb で設定した内容が消えてしまうので
   再設定して下さい。 CSV 形式のファイルから "addr" の内容を作成する
   スクリプトも作ってみましたので参考にして下さい。

6. オプション "-l" を付けて起動すると簡単なログを出力します。
   オプション "-i xxx.xxx.xxx.xxx" で listen する IP アドレスを指定できます。
   オプション "-h" で簡単なヘルプメッセージが出力されます。


[4. お断り]

 このパッケージに含まれるプログラム等については私こと 横田 裕思 に著作権が
あります。使用した事による損害に対しては何の補償もありませんが、配布、
変更等は自由です。ただし、変更して配布する時は変更が分かるようにファイルに
書いて下さい。また、その際は今後の参考にしたいので、その変更点を私に教えて
下されば有難いです。

 現在、このパッケージは私のWWWページにてメンテナンスをしています。
時々覗いていただくと最新情報が手に入るかもしれません。

   URL http://www.netlab.is.tsukuba.ac.jp/~yokota/
       http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/dns_balance/

 使用した感想、語要望、バグ報告などをメールで送っていただければ幸いです。


 最後に、このパッケージを使用して下さった方、更にバク等の報告をしていただいた
全ての人に感謝します。


                  2000/11/29:  横田 裕思 (yokota@netlab.is.tsukuba.ac.jp)
