スレーブサーバーに関する小技
Modified: 1 December 2002
スレーブサーバーを設置する方法 (1 December 2002)
TSIG認証でゾーン転送を行わせる方法 (1 December 2002)
サブドメインへ任せる(権限委譲をする)方法 (1 December 2002)
NSレコードに記述していないスレーブサーバーに更新されたことを通知する方法 (1 December 2002)
スレーブサーバーの設定の概要
スレーブサーバーは、マスターサーバーが機能動作ししないときに、代わりに機能を果たしてくれます。したがって、デフォルトに設定されているヒントゾーンとローカルゾーンの指定はそのまま必要です。
自分のマスターとなるサーバーのゾーンの情報に、マスターサーバーのIPアドレスと自分がスレーブであること宣言し、管理するIPアドレスを保管するファイル名を書いて、保管するファイルを決めます。
マスターでは、実際に、ホストとIPアドレスの対応表を記述しますが、スレーブでは、マスターからコピーを保管しますので、ファイル名を指定するだけでOKです。
スレーブサーバーの"named.conf"
以下のように指定します。
// generated by named-bootconf.pl options { directory "/var/named"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; }; // // a caching only nameserver config // controls { inet 127.0.0.1 allow { localhost; } keys { rndckey; }; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "localhost.zone"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" IN { type master; file "named.local"; allow-update { none; }; }; zone "tomo.ac" IN { type slave; masters { 192.168.0.85; }; file "tomo.ac.zone"; }; zone "0.168.192.in-addr.arpa" IN { type slave; masters { 192.168.0.85; }; file "named.tomo.ac"; }; include "/etc/rndc.key";マスターサーバーとの違いは、マスターサーバーでは、自分がマスターとして動作することを指定するだけですが、スレーブサーバーでは、自分がスレーブとして動作することと、親であるマスターサーバーのIPアドレスを指定することです。
上記のように、スレーブであることの指定と、対応するマスターサーバーのIPアドレスを指定して、BINDを再起動すると、早速、ドメイン情報がコピーされます。
マスターサーバー側は、デフォルトでは、どのサーバーから転送要求でも受付け、要求があれば転送します。
マスターサーバーの"named.conf"
マスターサーバーの指定では、デフォルトでスレーブサーバーからの転送を受け付けますので、スレーブサーバーを設置する場合の変更は不要です。
しかしながら、どのホストからの要求でも受け付けるのは、セキュリティ上好ましくありませんので、許可するスレーブサーバーを特定したほうが安全です。
したがって、以下のように転送要求に応えるホストのIPアドレスを指定すべきです。
:
:
zone "tomo.ac" IN {
type master;
allow-transfer {
192.168.0.86;
};
file "tomo.ac.zone";
};
zone "0.168.192.in-addr.arpa" IN {
type master;
allow-transfer {
192.168.0.86;
};
file "named.tomo.ac";
};
:
:
結果
スレーブで指定されたファイル名が、"/var/named/"内に作られます。内容を見るとマスターで指定した内容がコピーされ記述されています。
どういうことか
ゾーン転送では、マスターになりすまして、スレーブサーバーに誤ったデータを転送させられてしまう危険があります。そこで、自分がゾーン転送要求するマスターを特定するために、秘密鍵を使って認証させると安全です。
キーを生成する
以下のコマンドで、キーを生成します。
# /usr/sbin/dnssec-keygen -a HMAC-MD5 -b 512 -n HOST rh73-8586-bind
Krh73-8586-bind.+157+49195
#以下の2つのファイルが生成されます。
- Krh73-8586-bind.+157+49195.key
- Krh73-8586-bind.+157+49195.private
"Krh73-8586-bind.+157+49195.key"は、以下の内容です。
rh73-8586-bind. IN KEY 512 3 157 S05o+u4t9qFY+zHABt1xxZ55+GbW3ammUuXFvIOCsLl8Kfx/afBwOWiT q4iazVF8Rs3t23jmagCvR6gWVp+hDQ== "Krh73-8586-bind.+157+49195.private"は、以下の内容です。
rPrivate-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: S05o+u4t9qFY+zHABt1xxZ55+GbW3ammUuXFvIOCsLl8Kfx/afBwOWiTq4iazVF8Rs3t23jmagCvR6gWVp+hDQ==
マスターの"named.conf"に追加します
"key"を追加し、"allow-transfer" を変更します。
"allow-transfer" は、IPアドレスの代わりに、認証キーの名前にします。
: : key "rh73-8586-bind" { algorithm hmac-md5; secret "S05o+u4t9qFY+zHABt1xxZ55+GbW3ammUuXFvIOCsLl8Kfx/afBwOWiTq4iazVF8Rs3t23jmagCvR6gWVp+hDQ=="; }; : : : zone "tomo.ac" IN { type master; allow-transfer { key rh73-8586-bind; }; file "tomo.ac.zone"; }; zone "0.168.192.in-addr.arpa" IN { type master; allow-transfer { key rh73-8586-bind; }; file "named.tomo.ac"; }; : :
スレーブの"named.conf"に追加します
"key"を追加し、"server" を定義します。
: : key "rh73-8586-bind" { algorithm hmac-md5; secret "S05o+u4t9qFY+zHABt1xxZ55+GbW3ammUuXFvIOCsLl8Kfx/afBwOWiTq4iazVF8Rs 3t23jmagCvR6gWVp+hDQ=="; }; server 192.168.0.85 { keys "rh73-8586-bind"; }; : :
"key"でなく、"keys"です。間違えるとゾーン転送がうまく働きません。
動作確認する
確実に動作確認するには、
まず、スレーブサーバーを再起動します。
次に、マスターのゾーンファイルを開き、シリアル番号を増やし、マスターサーバーを再起動します。
スレーブサーバーの"/var/named"を確認し、転送されたことを確認します。
DNSの仕組みの確認
DNSは、自分が管理しているIPアドレスについては、回答しますが、分からない場合、下位のDNSのサーバーを知らせて、役割を終えます。
基本的にはすべてのドメインは、最初にルートサーバーに問い合わせます。
しかしこのルートサーバーは、実はどのIPアドレスも管理していません。ルートサーバは末尾の文字列を見て、どのDNSサーバーに問い合わせるべきかを教えてくれます。つまり、"jp"なら日本のDNSに問い合わせるよう、日本のDNSサーバーを教えてくれます。
下位のDNSの指定方法
DNSの存在は、"NS"レコードで指定します。
tomo.ac IN NS dns.tomo.ac
osaka.tomo.ac IN NS osaka.tomo.ac上記の例では、"tomo.ac"は、"dns.tomo.ac"が管理する。ただし、"tomo.ac"だが"osaka.tomo.ac"のサブドメインは、"osaka.tomo.ac"が管理するという指定です。
"xxx.tomo.ac"の問い合わせがあると、そのIPアドレスを返答しますが、"xxxx.osaka.tomo.ac"の問い合わせがあると、"osaka.tomo.ac"に聞いてくださいと返答します。
NSレコードに記述していないスレーブサーバーに更新されたことを通知する方法
![]()
更新を通知する方法
マスターサーバーは、内容が更新されたら、更新された旨をスレーブサーバーに通知し、ゾーン転送を求めます。
しかし、システムの構成しだいでは、バックアップとしてだけスレーブサーバーとして運用するが、マスターの代替として働かせないという使い方があります。
この場合、NSレコードにスレーブサーバーととして記述せず、ゾーンの定義に、"also-notify"を指定します。
NSレコードと、"also-notify"の両方に指定してはいけないそうです。