[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [+]

1台のマシンで複数の named を立ち上げる

サーバマシンが足りないけれど、提供する内容の異なる DNS サーバを 複数立ち上げる必要にかられることが時々あります。 そんなとき、1台のマシンで複数の named が立ち上げられたらなあと 思っておりました。
ふと、それができてしまいましたので、方法を書きます。
# たいそうなことはしていません。

目次


1. 環境

1.1 OS や named のバージョン

自前ノートの FreeBSD-3.2R です。named は bind-8.1.2 です。
具体的な方法(I/F の alias の設定など)は異なると思いますが、他の OS でも同様の方法で設定できると思います。

1.2 前提条件

該当サーバの ethernet I/F 名が ed0 で、そのIPアドレスが 192.168.0.1 だとします。DNS サーバのドメインは usupi.org で、これの named の設定 はすでに行われているものとします。
そして、ドメインが同じで異なるアドレス(1.2.3.0/24)を返す DNS サーバ が必要になったと仮定します。また、192.168.0.2 が未使用とします。

2. 設定方法

2.1 IPを複数割り当てる

192.168.0.2 が未使用なので、これを ed0 に割り当てます。
/etc/rc.conf に以下を追加して、OS を再起動します。
# 手動で ifconfig してもいいと思います。rc.network を見ればわかる と思います。

  ifconfig_ed0_alias0="inet 192.168.0.2 netmask 0xffffff00"

2.2 既存の named.conf を変更する

/etc/namedb/named.conf の options に以下を追加します。

        listen-on {
                127.0.0.1;
                192.168.0.1;
        };

そして、上記設定を反映させます。

  kill -HUP `cat /var/run/named.pid`

2.2 新たな named の設定を行う

named.conf やデータの置場所を /etc/namedb/new とします。
/etc/namedb/new/named.conf を以下のようにします。
# コメントなどは一切省いています。 実際は既存の named.conf をコピーして修正すればいいと思います。

  options {
  	directory "/etc/namedb/new";
  
  	listen-on {
  		192.168.0.2;
  	};
  };

  zone "." {
	type hint;
	file "named.root";
  };

  zone "0.0.127.IN-ADDR.ARPA" {
	type master;
	file "localhost.rev";
  };

  zone "usupi.org" {
	type master;
	file "usupi.zone";
  };

  zone "3.2.1.IN-ADDR.ARPA" {
	type master;
	file "usupi.zone.rev";
  };

あとは、named.root, localhost.rev, usupi.zone, usupi.zone.rev を 記述して、/etc/namedb/new に置きます。(内容は割愛します。)

2.3 起動

以下のように起動させます。また、/usr/local/etc/rc.d に同内容のスク リプトを置いておけば、OS 起動時に自動的に起動してくれます。

  /usr/sbin/named /etc/namedb/new/named.conf


3. 動作確認

3.1 nslookup の場合

例を示します。

  % nslookup
  Default Server:  localhost.usupi.org
  Address:  127.0.0.1

  > server 192.168.0.2
  Default Server:  ns2.usupi.org
  Address:  192.168.0.2

  > www
  Server:  ns2.usupi.org
  Address:  192.168.0.2

  Name:    ns1.usupi.org
  Address:  1.2.3.4
  Aliases:  www.usupi.org

3.2 dig の場合

例を示します。

  % dig @192.168.0.2 www.usupi.org in a

  ; <<>> DiG 8.1 <<>> @192.168.0.2 www.cst-sw.takaoka.co.jp in a 
  ; (1 server found)
  ;; res options: init recurs defnam dnsrch
  ;; got answer:
  ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10
  ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1
  ;; QUERY SECTION:
  ;;      www.usupi.org, type = A, class = IN

  ;; ANSWER SECTION:
  www.usupi.org.  1H IN CNAME  ns1.usupi.org.
  ns1.usupi.org.  1H IN A  1.2.3.4

  ;; AUTHORITY SECTION:
  usupi.org.   1H IN NS        ns1.usupi.org.

  ;; ADDITIONAL SECTION:
  ns1.usupi.org.  1H IN A  1.2.3.4

  ;; Total query time: 68 msec
  ;; FROM: tamao to SERVER: 192.168.0.2
  ;; WHEN: Wed Oct  4 03:50:22 2000
  ;; MSG SIZE  sent: 42  rcvd: 128


4. どんなときに必要となるか

社内向けと社外向けの DNS サーバが必要になった時、でしょうか。
デュアルホームなマシンでは、alias を使用せずに、外向きの I/F と内向き の I/F それぞれに DNS サーバを立ち上げれば、社内アドレス情報の流出を あまり気にしなくてすむのではないかと思います。
# 設定も簡単ですし。
## でも会社の DNS サーバではまだ試していません。(^__^;;

5. きっかけ

以前、仕事で
dnscache を使用した際に、1台のマシンに複数の DNS サーバを構築する必要が出て きたのですが、listen するアドレスがはっきりしていたので、同様の方法 を用いて構築することができました。
最近、bind で同様の設定が必要になり、多分できるだろうと思って調べて みたら、あっさりできてしまいました。:-)
# ちなみに、このときは Linux 上でやりました。

Powered by Apache PostgreSQL Usupi Logo Kuri Logo
[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [-]
usu@usupi.org Last modified : Wed Jun 6 14:32:51 2001