BIND9の最近のブログ記事

bindのバージョンを見る

|
# /usr/sbin/named -v
BIND 9.3.2

ちなみにこういうやり方もある。

# dig version.bind. txt chaos

; <<>> DiG 9.2.4 <<>> version.bind. txt chaos ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6775 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION: ;version.bind. CH TXT

;; ANSWER SECTION: version.bind. 0 CH TXT "9.3.2"

;; AUTHORITY SECTION: version.bind. 0 CH NS version.bind.

;; Query time: 6 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue May 23 17:34:47 2006 ;; MSG SIZE rcvd: 62


  

フォワーダを利用する

|

■フォワーディングサーバ

フォワーダを利用するネームサーバ

クライアントからの名前解決依頼を受けるが、
自分で名前解決をせずに、フォワーダに名前解決を丸投げする。
 
しかし、クライアントへの回答は自分でする


■フォワーディングサーバの設定(bind9)

例1.ほとんどすべての名前解決をフォワーダに依頼する場合

自分が権威を持っているゾーンデータからも、自分の保持しているキャッシュからもqueryに対する回答が得られなかった場合、フォワーダに名前解決を依頼します。

○/etc/named.conf
options {
	-- 省略 --
	forwarders { 192.168.0.1; };
};
ちなみに複数のフォワーダを指定すると、bind9ではそのフォワーダ達のなかで反応が最速だったサーバーに最初の問い合わせをします。

さて、フォワーダから(デフォルトで60秒間)応答が無かった場合ですが、2つのパターンに分けられます。

A:フォワーディングサーバー自身が自分で名前解決に挑む。  (デフォルトの挙動) ○/etc/named.conf
options {
	-- 省略 --
	forward first;
	forwarders { 192.168.0.1; };
};
B:名前解決失敗をクライアントに告げる ○/etc/named.conf
options {
	-- 省略 --
	forward only;
	forwarders { 192.168.0.1; };
};


例2.特定のゾーンに対するqueryに関してはフォワーダを利用する。

zoneステートメントの中に記述します。

○/etc/named.conf
zone "example.local" {
	type	forward;
	forwarders { 192.168.0.1; };
};


例3.特定のゾーンに対するqueryに関してだけは、フォワーダを利用しない。
  (null forwarders リスト)

○/etc/named.conf

options {
	-- 省略 --
	forwarders { 192.168.0.1; };
};

zone "example.local" { type master; file "db.example.local"; forwarders {}; };

null forwardersが設定していない場合(例1の場合)
 "www.hoge.example.local"という名前解決は、192.168.0.1にフォワードする。

null forwardersが設定してある場合
 "www.hoge.example.local"という名前解決は、フォワーディングしない。

■MicrosoftのDNSサーバー

Windows 2000のDNSサーバーは、例1しかできなかったが、
Windows Server 2003のDNSサーバーは、
例2、つまりゾーンごとにフォワーダを分けることが可能になった。

■フォワーダ

名前解決を丸投げで請け負うネームサーバ
といっても、特にフォワーダとしての設定項目はない。

ゾーンを保持しているネームサーバの設定でもよいし、
ただのキャッシュサーバーでもよい。

自分がフォワーディングサーバとなって、
さらに他のフォワーダに名前解決を依頼することもできるが、
そのときはやはりフォワーディングの設定をする。

【クライアント(PCなど)】
↓            ↑
↓Query        ↑回答
↓            ↑
【DNSサーバ(フォワーディングサーバ)】
↓            ↑
↓Forward       ↑回答
↓            ↑
【DNSサーバ(フォワーダ)】
<<< 名前解決 >>>


  

bindのオプション

|
■bindのオプション
named [-d debuglevel] [-p port#] [-(b|c) config_file] [-f -q -r -v] [-u user_name]
     [-g group_name] [-t directory] [-w directory] [config_file]
-d debuglevel
 デバッグ情報を出力します。(基本)1~10,20,90(最高)
 /etc/sysconfig/namedなどに、OPTIONS="-d 1"と追加してください。

 起動中にデバッグレベルを変更するには、
 # rndc trace 10
 で始まり、
 # rndc notrace
 で終了します。

-c config_file
 代わりの config_file を使用します。
 デフォルトの値は/etc/namedb/named.conf です。

-v
 バージョンを報告し、終了します。

-u user_name
 ユーザを指定すると、初期化後のサーバがこのユーザで動作します。
 値はユーザ名または数字のユーザ ID どちらでも構いません。

-g group_name
 グループを指定すると、初期化後のサーバがこのグループで動作します。
 値はグループ名または数字のグループ ID どちらでも構いません。

-t directory
 chroot() するべきディレクトリを指定します。

■RedHat系でRPMインストールの場合 /etc/sysconfig/named に記述を追加しますが、普通は特に何も手を加える必要はありません。 bind-chrootパッケージもインストールされていれば、
ROOTDIR=/var/named/chroot
との記述があります。 ここでの指定が、/etc/init.d/named スクリプトで、-tオプションに渡されます。 また、-uオプションも/etc/init.d/named スクリプト内に記述してあるので、普通に起動すると、
# ps auxw | grep named
named     1049  0.0  3.0 37172 3852 ?        Ssl  May18   0:50 /usr/sbin/named -u named -t /var/named/chroot
となるはずです。 ■debian3.1(sarge)の場合 /etc/default/bind9
OPTIONS="-u bind"
の記述があり、起動オプションはそこに追加します。 このオプションが、/etc/init.d/bind9 スクリプトに渡され、
# ps aux | grep bind
bind     10915  0.8  6.0 11196 2788 ?        Ss   17:41   0:00 /usr/sbin/named -u bind
のように起動します。

  

viewステートメントの使い方

|

どうも、上からアドレスマッピングをしていくらしく、 一番上のviewに "any" をやってしまうと、それがすべて有効になってしまう。

view "internal" {
        match-clients { 192.168.0.0/24; 127.0.0.1; };

zone "localhost" IN { type master; file "localhost.zone"; };

zone "0.0.127.in-addr.arpa" IN { type master; file "named.local"; };

zone "." IN { type hint; file "named.ca"; };

zone "example.local" IN { type master; file "data/db.example.local.internal"; }; };

view "external" { match-clients { any; }; recursion no;

zone "example.local" IN { type master; file "data/db.example.local"; }; };

DynamicDNS

|

■ダイナミックゾーン

・動的にメンテナンスするゾーンは他の方法でメンテナンス出来ない。
 ファイルを手作業で更新するのではない。

①named.conf で allow-update と notify をゾーンに設定する
zone "dyn.example.local" {
   type master;
   file "data/db.dyn.example.local";
   allow-update {
         192.168.100.1;  // DHCPサーバも兼ねる場合、自分自身のアドレスを設定
       };
   notify;               // 更新をすぐにセカンダリに通知する
};
②zoneファイルの設定
TTL    1m
serial   1
refresh  5m
retry   2m
expire   6h
minimum  1m

■クライアント

DNS更新クライアントとなり得るのは、DHCPサーバ、
またはPPPやDHCPサーバから動的にIPアドレスを割り当てられたコンピューターである。

■nsupdateツールを使用する

【ゾーンデータベースへの追加】

※TTLが必須である

> nsupdate
> update add new.dyn.example.local. 600 IN A 172.16.1.2
> (空行が必要)

【ゾーンデータベースからの削除】

> nsupdate
> update delete new.dyn.example.local. IN A
> (空行が必要)

BINDのログを設定するには

|
■bind9のデフォルトロギング
logging {
  category default { default_syslog; default_debug; }; 
};
が設定されている(見えないけど) このため、特に設定をしなくても、syslogにinfoが出力され、 また、traceコマンドをnamedに送れば、named.runにdebugが出力される。 ■全てのログを出力したい
logging {
	channel my_file {
		file "named.log";
		severity debug;
		print-category yes;
		print-severity yes;
		print-time yes;
	};
	
	category debug { my_file; };
	category queries { my_file; };
	category general { my_file; };
};

■channel
ログの出力先を設定する。
その際、メッセージの重要度にフィルタをかけられる(severity)
severityのレベルは、critical/error/warning/notice/info/debug[level]/dynamic

デフォルトのchannelは4種類定義されている(見えないけど)
channel default_syslog { syslog daemon; severity info; }; 
channel default_debug { file "named.run"; severity dynamic; }; 
channel default_stderr { stderr; severity info; }; 
channel null { null; };
■category ログデータの種類を指定する
default  分類可能なカテゴリについて全てを含む   
general  分類不可能なものもを含む
database/security/config/resolver/xfer-in/xfer-out/notify/client/network
update/queries/dispatch/dnssec/lame-servers

  

ラウンドロビンDNS

|

■ラウンドロビンDNSは、DNSサーバの正引き用のゾーン設定ファイルに、
1つのホスト名に対して、複数のAレコードを設定するだけです。
 以下に、www.example.localの設定例を示します。

db.example.localの内容
  $ORIGIN	example.local.
  ----------------------
  www	IN	A	192.168.0.1
  www	IN	A	192.168.0.2


■ラウンドロビンDNSの注意点
 ダウンしたサーバがあると、サイト全体がダウンしていると思われてしまいます。
 そのため、障害時は、ipaliasなどで、すべてのIPでアクセスできるようにする必要があります。
 また、負荷状況を見ていないため、サーバの負荷を見ながら分散するわけではありません。

■ラウンドロビンDNSを設定するには?
options {
   rrset-order { class ANY type ANY name "*" order fixed ; }; 
};
class   INかANY
type    A,NS,CNAME,ANY
name    *で全部の名前をあらわせるが、"www.example.local"というのもあり。
order   fixed,random,cyclic

BINDの設定例

|

■/etc/named.conf の設定例

options {
	directory "/var/named";
	// query-source address * port 53;
};

zone "." IN { type hint; file "named.ca"; };

zone "example.local" IN { type master; file "db.example.local"; };

zone "0.168.192.in-addr.arpa" IN { type master; file "db.192.168.0"; };

・「IN」はQClassがインターネットクラスなのを指しています(省略可能)
・ typeの引数は、hint,master,slave,stub,forward
・ fileはoptionsで指定したディレクトリからの相対パスで記述

■正引きマスターゾーンファイル /var/named/db.example.local の設定例

;
; db.example.local
;

; #キャッシュTTL(世の中のキャッシュDNSサーバがこのゾーンのデータをキャッシュする時間) $TTL 3600

; # 「@」はnamed.confのzone"~"の、「~」の部分の省略形です。 ; # ここから"example.local."の定義の開始になります。 ; # ; # SOAの後に続いているのは ; # MNAMEフィールド(このゾーンのmasterネームサーバ) ; # RNAMEフィールド(このゾーンの管理者のメールアドレス) @ IN SOA dns1.example.local. root.dns1.example.local. ( ; # シリアル番号(設定変更したら増加させる) 2002120401 ; # リフレッシュ(slaveサーバがmasterのシリアル番号をチェックする間隔) 3600 ; # リトライ(slaveサーバがにシリアルのチェックに失敗したときに再試行する間隔) 300 ; # 期限切れ(slaveサーバがmasterのシリアルをチェックできないときにこのゾーンを保持する最大の時間) 360000 ; #ネガティブキャッシュTTL(世の中のキャッシュDNSサーバがこのゾーンの否定応答をキャッシュする時間) 1200 )

; # "example.local."に対して権威を持つネームサーバを記述します。 IN NS dns1.example.local. IN NS dns2.example.local.

; # @example.local宛のメールを受け取るホストを記述します。 IN MX 10 mail.example.local.

; # ここまで"example.local."の定義です。

; # 「hoge」の最後に「.」ドットがないので".example.local."が付加され、 ; # "hoge"は"hoge.example.local."と同じ意味になります。 hoge IN A 192.168.0.254

dns1 IN A 192.168.0.1 dns2 IN A 192.168.0.2

mail IN A 192.168.0.8

www IN CNAME hoge

■逆引きマスターゾーンファイル /var/named/db.192.168.0 の設定例

;
; db.192.168.0
;
$TTL 3600

; # "@" = "0.168.192.in-addr.arpa"です @ IN SOA dns1.example.local. root.dns1.example.local. ( 2002120401 ;Serial 3600 ;Refresh 300 ;Retry 360000 ;Expire 1200 ;Minimum )

IN NS dns1.example.local. IN NS dns2.example.local.

; # ここが逆引きゾーンファイルの特徴

; # "0.168.192.in-addr.arpa"の名前は"example.local"であると ; # PTRレコードで定義しています。 IN PTR example.local.

; # サブネットマスクが255.255.255.0であることはAレコードで定義します。 IN A 255.255.255.0

; # 「.」で終わってないものは"0.168.192.in-addr.arpa"が付加されます。 1 IN PTR dns1.example.local. 2 IN PTR dns2.example.local. 8 IN PTR mail.example.local. 254 IN PTR hoge.example.local.

  

digとnslookupとwhois

|

■digとnslookupの使い方

■Bind9用digの使い方
dig [@global-server] [domain] [q-type] [q-class] {q-opt}
        {global-d-opt} host [@local-server] {local-d-opt}
        [ host [@local-server] {local-d-opt} [...]] .
■Windows用nslookupの使い方
nslookup NAME1 -set type=mx 
       set OPTION      - set an option
           all                 - print options, current server and host
           domain=NAME         - set default domain name to NAME
           retry=X             - set number of retries to X
           timeout=X           - set initial time-out interval to X seconds
           type=X              - set query type (ex. A,ANY,CNAME,MX,NS,PTR,SOA,SRV)
           querytype=X         - same as type
           class=X             - set query class (ex. IN (Internet), ANY)
       server NAME     - set default server to NAME, using current default server
■query type を検索するには? (SOA や A や SRV 等も同様)
# dig example.local mx
> nslookup www.example.local
> nslookup
> set type=mx
> example.local
■再帰をオフにするには?
# dig www.example.local +norec (オンにするには、+rec)
> nslookup
> set norecuse
■問い合わせるネームサーバーを指定するには?
# dig @[サーバー名] www.example.local A +norec
> nslookup www.example.local [DNSサーバー]
> nslookup
> server [DNSサーバー]
> www.example.local
■再起問い合わせの状況を全部見るには
dig +trace www.example.local

■whoisの使い方

whoisの基本書式
$ whois -h WHOIS_SERVER DOMAIN
WHOIS_SERVER whoisサーバーを指定する。 DOMAIN 調べたいドメイン名を指定する。 ドメイン別whoisサーバーの一覧 http://www.domaininformation.de/whoisserver_list.html
  jp whois.jp
  kr whois.krnic.net
  アジア whois.apnic.net
  ヨーロッパ whois.ripe.net
  アメリカ rs.internic.net
・com、net、org、eduドメインの場合の検索例 多分、whoisサーバーを指定しなくても検索できる。 下記のコマンドを実行するとaol.comの情報を検索する。
$ whois aol.com
・jpドメインの場合の検索例 下記のコマンドを実行するとexample.jpの情報を検索する。
$ whois -h whois.jp example.jp

■Windowsでdigを使う

※参照http://pigtail.net/LRP/dig/ windows用のbindを全部インストールする必要はない。 1.C:\windows\system32 に
host.exe 
dig.exe  
libdns.dll  
libeay32.dll  
libisc.dll  
libbind9.dll  
libisccfg.dll  
liblwres.dll
を置く。

ダウンロードするところはここ
ftp://ftp.isc.org/isc/bind/contrib/

2.C:\WINDOWS\system32\drivers\etc\resolv.confを作成し、
nameserver 192.168.0.1
など、所定の記述をする。

3.コマンドラインから、digが使えるようになっているはず。

C:\Documents and Settings\kuwa.BUG_HQ>dig --help
Invalid option: --help
Usage:  dig [@global-server] [domain] [q-type] [q-class] {q-opt}
            {global-d-opt} host [@local-server] {local-d-opt}
            [ host [@local-server] {local-d-opt} [...]]

Use "dig -h" (or "dig -h | more") for complete list of options

+traceとかが使えないのは痛い。。。

  

このアーカイブについて

このページには、過去に書かれたブログ記事のうちBIND9カテゴリに属しているものが含まれています。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

BIND9: 月別アーカイブ

Powered by Movable Type 4.1