<> By: YOKOTA Hiroshi [1. What's this] DNS Balance is a load-balancing DNS server. Today's Web server, like "kernel.org", "*bsd.org" and Ring Server Project (http://www.ring.gr.jp/) are mirrored all over the world. DNS Balance selects fast server from all over the world for DNS resolver. DNS Balance has these functions: o Dynamic load balancing. o Answer different IP address between DNS client's IP address. o Minimun implement. This may be good for security. [2. What you need] DNS Balance requires Ruby (http://www.ruby-lang.org/). So, you must install it. Some PC-UNIX has binary packages. [3. What you do] 1. Extract the archive in "/usr/local/share". If you want to extract another directory, change "$prefix" in script "dns_balance.rb". 2. File "addrdb.rb" is the address database. You must edit this for your site. ------------------ $addr_db = { "130.12.0.0/16" => { # => Request from 130.12.0.0/16 # For example, DNS client's IP is # "123.45.67.89", search "123.45.67.89/32" to # "0.0.0.0/1". "www.foo.com" => [ # => IP address for "www.foo.com" # This host name must be lower case character. [[1,2,3,4], 0], # => IP address and badness information. [[1,2,3,5], 10000], # Badness must be 0-10000. 0 is for fastest [[1,2,3,6], 9000], # server, and 10000 is for downed server. [[1,2,3,7], 9000], ], }, "default" => { # => If theres nothing to match, use "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. If your addrdb.rb is too complex to maintain, you can use namespace.rb . ------------------ $namespace_db = { "127.0.0.0/8" => "localnet", # Write IP address and its alias name. "192.168.0.0/16" => "foo-net", # If client IP is 123.45.67.89, search "130.199.0.0/16" => "foo-net", # "123.45.67.89/32" to "0.0.0.0/1". "130.123.12.0/28" => "foo-net", } ------------------ If you use namespace.rb , you can write this way. ------------------ $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. You can use "--as" option to use "Autonomous System" information from whois.ra.net . whois.ra.net offers AS information. --------- $ whois -h whois.ra.net 192.168.0.1 route: 192.168.0.0/24 descr: Foo networks origin: AS1000 <==================== This is AS information member-of: RS-COMM_FOONET mnt-by: MAINT-AS1000 changed: rm@foo.ad.jp 99999999 source: BARNET --------- You can use AS information like this. -------------- $addr_db = { "AS1000" => { "www.foo.com" => [ [[1,2,3,4], 0], ], }, "default" => { "www.foo.com" => [ [[1,2,3,4], 0], [[1,2,3,5], 10000], ], }, } -------------- 5. Run DNS Balance. Type "ruby /usr/local/lib/DNS-Balance-x.x/dns_balance.rb" for run DNS Balance. 6. If exists a file named "addr", DNS Balance is loads automatically every 5 minutes. This file contains same database as "addrdb.rb". I make some sample script like CSV -> address database converter. See "sample" directory 7. "-i xxx.xxx.xxx.xxx" to specify listen IP address. And "-h" to display some help message. [4. Copyright] See README.dns_balance. If you want newer version, see my homepage. URL http://www.netlab.is.tsukuba.ac.jp/~yokota/ http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/dns_balance/ Any questions and suggestions are welcome. 2002/09/06: YOKOTA Hiroshi (yokota@netlab.is.tsukuba.ac.jp)