がらくたネット


BIND

BIND

  • BINDはBerkeley Internet Name Domainの頭文字
  • DNSはDomain Name Systemの略
  • BINDはISC BINDと呼ばれる
  • TOPページはここ→http://www.isc.org/
  • FQDNはFully Qualified Domain Nameの略
  • TCP/IPベースのホストを名前ベースのホスト名に関連付ける
  • BIND v9.3.1が2005/03/11にリリースされている
  • UDP 53で待ち受ける
  • マスター↔スレーブ間はTCP 53で同期する
  • rndcはTCP 953で通信する
  • DNSクライアントからの問い合わせは1024番以上のUDPで発行される
  • クラスC未満のアドレス割り当てに対してもゾーン管理が可能
  • ZONEファイルの最初のレコードは$TTL (86400)であるべき。RFC1035にて定義されている。存在していないとwarning messageが表示される
  • ゾーンサーバは自身が保有するドメイン名を広報
  • キャッシュサーバは名前解決要求に答える。外部DNSサーバを再帰検索する。
  • ルートサーバは総元締。13拠点で動作中。
  • ネガティブキャッシュとは再帰問い合わせを実施しても解決出来なかったドメインレコードをキャッシュする事
  • DNS NOTFYはマスターのゾーンファイルが更新されれば、スレーブに更新通知を発行してスレーブにゾーン転送させる事
  • OPTIONSとZONEの両ブロックに同一の設定内容が存在していた場合ZONEブロックの方が優先される
  • Lame情報とは再帰問い合わせ中に設定不備なサーバを発見した際のその不備サーバ情報

SOA

SOAレコード

$TTL 3600
e-garakuta.net. IN SOA ns1.e-garakuta.net. postmaster.e-garakuta.net. (
  serial       ;シリアル値
  refresh      ;リフレッシュ値
  retry        ;リトライ値
  expire       ;有効期限
  minimumTTL)  ;最小TTL

時間の設定 単位を省略すると時間は全て秒単位として設定される。単位(s,m,h,d,w)を設定することも可能。
$TTL
serial ゾーンのバージョン番号。順序をつけて保存する。ゾーン転送時に利用されるので厳密に管理する必要がある。一般にはYYYYMMDDNNという形式で記述することが多い。YYYYは西暦、MMは月、DDは日、NNはその日にゾーン情報を修正した回数。ゾーンを修正した場合は必ずこの値を増加させなければならない。
refresh スレーブがゾーン情報の最新性を確認する時間
retry refresh間隔でスレーブがマスタに接続できなかった場合(ゾーン更新に失敗した場合)にもう一度更新処理を行うまでの待ち時間
expire スレーブがexpireで指定している時間を経過してもマスタに接続できない場合、スレーブはゾーン情報を無効にする。無効になったゾーン情報にクライアントがアクセスしても返答はない。refreshやretryよりも長く設定する。
minimumTTL ネガティブキャッシュTTLのこと。

$TTL

ゾーンのデフォルトTTL設定方法がBIND 8.2で変更された。v8.2より古いBINDではSOAレコードの最後のフィールドでデフォルトTTLとネガティブキャッシュTTLを設定する。しかし、RFC2308でこのフィールドがネガティブキャッシュTTLのみに変更された。

v8.2以降のBINDでは$TTLステートメントを利用してデフォルトTTLを設定する。$TTLが設定されるとそれ以降のTTLが指定されていないレコードのTTL値が$TTLに設定される。

他のネームサーバーがTTLに設定された時間だけキャッシュできるようにするための値。

ネガティブキャッシュTTL

他のネームサーバがゾーンに関する否定応答をキャッシュしておく時間。否定応答とは、特定のドメイン名が存在しないや特定のドメイン名について検索された種類のデータが存在しないなどの応答のこと。

インストール

# wget ftp://ftp.isc.org/isc/bind9/9.3.1/bind-9.3.1.tar.gz
# wget ftp://ftp.rs.internic.net/domain/named.root
# tar -zxvf bind-9.3.1.tar.gz
# cd bind-9.3.1
# ./configure
# make
# make install
# cd ../
# groupadd named ←既に存在している場合あり
# useradd -g named -d /var/named -s /bin/false named ←既に存在している場合あり
# mkdir /var/named
# mkdir /var/run/named
# chown named.named /var/named /var/run/named
# cp named.root /var/named/named.ca
# /usr/local/sbin/named -u named &

設定ファイル

/etc/named.conf
 //はコメント行
 /**/までは複数コメント行
 {};で1つのブロック
 aclはアクセス制御用ブロック
  192.168.0.0/24; ←指定ネットワークからの問い合わせ許可
  127.0.0.1; ←自身からの問い合わせ許可
 optionsは各種設定をするブロック  directory "/var/named";
  pid-file "/var/run/named/named.pif";
  sortlist {
   {192.168.0.0/24; 192.168.0.0/24;};   ←192.168.0.0/24からの問い合わせは
192.168.0.0/24のアドレスを優先して返す
   {192.168.10.0/24; 192.168.10.0/24;};
  };
  recursion yes;  ←再帰問い合わせを有効にする
  max-ncache-ttl 300;  ←ネガディブキャッシュの最大TTL
  max-cache-ttl 300;  ←通常キャッシュの最大TTL
  lame-ttl 300;  ←Lame情報の最大TTL
 loggingはロギング制御用ブロック
  channel "チャンネル名"{};  ←ログの出力方法
   file "出力ファイル" versions 世代数 size サイズ;
   file syslog (facilityレベル);  ←syslogに出力する
   severity デバッグレベル; ←
   print-time yes; ←ログに時刻を表示
   print-severity yes; ←設定したレベルを表示
   print-category yes; ←設定した種類を表示
  category カテゴリ名 { "チャンネル名" }; ←出力ログの種類設定
 
 zoneはゾーン指定用ブロック
 zone "<ゾーン名>" {};で記述する
  type master;
  file "<ゾーン名>.zone";
 zone "." {};はキャッシュサーバ用ブロック
  type hint;
  file "named.ca";

ゾーンファイル名はnamed.confで指定した名称

  • TTLは単位を省略すると秒になる
  • *  30 =30秒間
  • *  30m=30分間
  • *  30h=30時間
  • *  30d=30日間
  • *  30w=30週間

/var/named/named.ca

 ftp://ftp.rs.internic.net/domain/named.rootが本体なので  ここから最新を取得する。たまに更新される。

/var/named/hogehoge.zone ←正引きゾーンファイル /var/named/hogehoge.rev ←逆引きゾーンファイル  →これでもよい /var/named/0.168.192.in-addr.arpa /var/named/local.zone ←正引きローカルゾーン(必須) /var/named/local.rev ←逆引きローカルゾーン(必須)  →これでもよい /var/named/0.0.127.in-addr-apra

ゾーンファイルのサンプル

$TTL 86400 ←必須
@            IN      SOA ns.hogehoge.jp. root.hogehoge.jp. (
                     2005072501 ; serial
                     3600       ; refresh
                     900        ; retry
                     604800     ; expire
                     86400      ; minimum
)
             IN      NS     ns.hogehoge.jp.
             IN      MX  10 ns  ←小さい方が優先度が高い
ns           IN      A      192.168.0.1
www          IN      CNAME  ns
change  3600 IN      A      192.168.0.20 ←これだけTTLが1時間

.rev
$TTL 86400
@            IN      SOA   ns.hogehoge.jp. root.hogehoge.jp.  (
                     2005072501 ; serial
                     3600       ; refresh
                     900        ; retry
                     604800     ; expire
                     3600       ; minimum
)
             IN      NS    ns.hogehoge.jp.
1            IN      PTR   ns.hogehoge.jp.
10           IN      PTR   mail.hogehoge.jp.

local.zone
ループバック用なので一度設定すれば以降変更する事はない。
$TTL 86400
@            IN      SOA localhost. root.localhost. (
                     2005072501 ; serial
                     28800      ; refresh
                     14400      ; retry
                     604800     ; expire
                     86400      ; minimum
)
             IN      NS   localhost.
             IN      A    127.0.0.1

local.rev
ループバック用なので一度設定すれば以降変更する事はない。
$TTL 86400
@            IN      SOA localhost. root.localhost. (
                     2005072501 ; serial
                     28800      ; refresh
                     14400      ; retry
                     604800     ; expire
                     86400      ; minimum
)
             IN      NS   localhost.
             IN      PTR  localhost.
ホスト名の最後に「.」を付け忘れない事 連番を発生させたい場合は$GENERATEと置き換える  $GENERATE 20-100 $.0.168.192.in-addr.apra.とすると  $の部分が連番に展開される

/var/run/named/named.pid

 稼動プロセスが書き込まれる

/etc/resolv.conf

 ホストのDNSサーバ指定  domain <ドメイン名>  nameserver 127.0.0.1

ゾーン転送

  • ゾーンファイルのSOAに書かれた値を基に動く
  • serialが増加していれば、転送を開始
  • refreshは更新確認を実行する間隔
  • retryは転送に失敗した場合の待機時間
  • expireはそのゾーンの有効期限。期限が切れると応答しなくなる 既定では差分転送である
  • named.confのoptionsでrequest-ixfr no;とすると差分転送無効になる
  • allow-transfer{ スレーブ・サーバ1のIP; スレーブ・サーバ2のIP; };でゾーン転送可能なスレーブを指定できる これはoptionsブロックでもZONEブロックでもよい
  • optionsには他にも色々な設定項目がある

digコマンド

/usr/local/bin/dig @ <レコード>  正引き
/usr/local/bin/dig @ -x   逆引き
/usr/local/bin/dig @<マスタDNSサーバアドレス> <ドメイン名>axfr ゾーン転送

rndc の使用

rndc はTCPで遠隔地のBINDサーバを管理するためのツール

# /usr/local/sbin/rndc-confgen > /etc/rndc.conf
rndc.conf 後半のfollowing in named.conf から末尾までを
named.confの先頭付近にコピーする
コピー後コメントアウトを外してnamedデーモンを再起動する
# /usr/local/sbin/rndc reload  ←ゾーン再読み込み
reloadを行う場合は時刻を正確にしておく事

DNSキャッシュの削除
DNS情報を変更してもTTLの関係でキャッシュが更新されない事がある
そんな時のflush君。

rndc flush
ただしこれ、参照元の大元DNS君から実施していかないとダメなのでよろしくネ。

named-checkconfの使用

named-checkconfはBINDの設定ファイル記述内容を確認するためのツール

named-checkconf named.conf ←named.confの確認
named-checkconf ドメイン名 ゾーンファイル名 ←ゾーンファイルの確認