| TIPS INDEX |
|
djbdnsとは DNSの仕組み スキーム 各プログラムの説明 Network設計 インストール 運用・管理 よくある間違い (参考)逆引き 参考文献 |
djbdnsとは |
|
DNSにある機能を、各動作毎に分割したプログラム群です。 DNSには大別して2つの機能があります。
bindでは、この2つの機能が1つのプログラムに入っている為か、 また、設定する際の記述がわかりにくく、設定ミスもしやすいでしょう。 djbdnsは、このDNSの2つの機能を完全に分けています。また、プログラムが高速・安全*1であり、 運用・記述・設定・動作がbindに比べ、とてもわかりやすくなっています。
|
DNSの仕組み | ||||||||||||||||||
名前解決の仕組み(再帰問い合わせ と 名前解決)
![]()
マスターとスレーブの違い
スレーブの同期(ゾーン転送) ![]() プライマリとセカンダリの違い
DNSにwww.xa10.comを問い合わせすると、どちらか片方に問い合わせをして解決します。
このような仕組みの為、プライマリ・セカンダリというよりも、 また、問い合わせに応答しないDNSがある場合は、別のDNSに問い合わせします。 SOAレコード情報
|
| スキーム | ||||||||||||
各プログラムと役割
相関図 ![]() Port ![]() |
| 各プログラムの説明 |
tinydns
SOAレコード応答内の管理者宛先は決まっていて、 hostmaster@自分の資源管理ドメイン名 です。 これは変更可能ですが、特に変更する必用は無いはずです。
FQDNは、Fully Qualified Domain Name の略で、ホスト名を含む、www.xa10.com等を指します。
axfrdns
参照しているDBは、tinydnsで設定した物と同じです。参照→スキーム DNSの仕組みとして、外部へのDNSサーバへゾーン転送(セカンダリ)をする場合、もしくは返答するレコードデータが大きい場合にTCPを利用します。 ゾーン転送先がbindでなく、tinydnsであれば、rsyncを用いた方が良いとされています。
dnscache
bindに比べて高速であるらしい。この辺りは各自実験して下さい。 独自ドメインを運用しないのであれば、このdaemonのみの運用になります。
|
| Network設計 |
|
| インストール | ||||||||||||||||||||
|
daemontools と ucspi-tcp のインストールが必用。 後に、djbdns をインストールする。 FreeBSDなら、portsからdjbdnsをmakeすれば、関連する物すべてがinstallされる。 ソースファイル
Lunux等でsrcからのmakeとINSTALLする手順 # md /usr/djbdns # cd /usr/djbdns # wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz # wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz # wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz # tar xvzf ucspi-tcp-0.88.tar.gz # tar xvzf daemontools-0.76.tar.gz # tar xvzf djbdns-1.05.tar.gz # cd djbdns-1.05 # make # make setup check djbdns 完了 # cd ../ucspi-tcp-0.88 # make # make setup check ucspi 完了 # cd ../admin/daemontools-0.76 # package/install daemontools 完了
また、各プログラム別にユーザーが必用であるので、この時点で作っておきます。
これらのユーザはログインする事はありません。FreeBSDであればnologinで制限をかけましょう 登録したグループ # grep djb /etc/group djb:*:70: 登録したユーザ # grep djbdns /etc/passwd dnscache:*:40:70:djbdns_dnscache:/nonexistent:/sbin/nologin tinydns:*:41:70:djbdns_tinydns:/nonexistent:/sbin/nologin axfrdns:*:42:70:djbdns_axfrdns:/nonexistent:/sbin/nologin dnslog:*:45:70:djbdns_dnslog:/nonexistent:/sbin/nologin |
| dnscacheの設定 | |||||||||||||||||||||||||||||||||||||
|
サーバ自身の解決もdnscache経由にする為、/etc/resolv.confに自分のアドレスを追加します。 resolv.confの内容 dnscacheサーバIPを指定 # more resolv.conf nameserver 192.168.1.21ユーザーが設定済みであれば、付属のConfigコマンドで設定が可能。 インストール+基本設定
dnscache-conf {実行user} {log-user} {install-Dir} {稼働IP}
# dnscache-conf dnscache dnslog /etc/dnscache 192.168.1.21
詳細設定は、{install-Dir} 内部のファイルで行う。詳細設定 192.168.*.* からの問い合わせを受け付ける # cd /etc/dnscache/root/ip # touch 192.168 127.0.0.1 からの問い合わせを受け付ける # touch 127.0.0.1 *.xa10.com は、192.168.1.20 (tinydns) に問い合わせる。 # cd /etc/dnscache/root/servers # echo 192.168.1.20 > xa10.com 192.168.1.* の逆引きは、192.168.1.20 (tinydns) に問い合わせる。 # echo 192.168.1.20 > .1.168.192.in-addr.arpa 210.253.232.80 の逆引きは、192.168.1.20 (tinydns) に問い合わせる。 # echo 192.168.1.20 > .80.232.253.210.in-addr.arpa各フォルダとファイルの意味。
Tree figure
./dscache
│
├-env 各ファイルの詳細は上記
│ ├-CACHESIZE
│ ├-DATALIMIT
│ ├-IP
│ ├-IPSEND
│ └-ROOT
│
├-log[+] log用フォルダ
│
├-root
│ ├-ip 利用許可するipをファイル名で登録
│ └-servers ドメインの直接問い合わせ先指定
│
├-run dnscache起動スクリプト
├-seed
└-supervise[+]
動作確認
以下の方法で動作確認します。
dnscacheをsvscanへ登録する。 # ln -s /etc/dnscache /var/service dnscacheが立ち上がっているかの確認 # svstat /var/service/dnscache /service/dnscache: up (pid 72081) 23 seconds dnscacheの動作確認 試しに、yahooを問い合わせ。 # nslookup dnscacheを立ち上げたIPを指定して問い合わせ > server 192.168.1.21 Default Server: dnscache.xa10.com Address: 192.168.1.21 > www.yahoo.co.jp Server: dnscache.xa10.com Address: 192.168.1.21 ---(1) Non-authoritative answer: ---(2) Name: www.yahoo.co.jp ---(3) Addresses: 210.81.150.5, 211.14.15.5 ---(4) (1) dnscache(192.168.1.21) から、応答があって (2) 192.168.1.21は、yahoo.co.jpのSOA(資産管理権限)は無いけども、 (3) www.yahoo.co.jp は、 (4) 210.81.150.5 もしくは、211.14.15.5 である、と解決できている。 |
| tinydnsの設定 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ユーザーが設定済みであれば、付属のConfigコマンドで設定が可能。 設定
tinydns-conf {実行user} {log-user} {install-Dir} {稼働IP}
# tinydns-conf tinydns dnslog /etc/dnscache 192.168.1.20
詳細設定は、{install-Dir} 内部のファイルで行う。環境設定 # cd /etc/tinydns # cd root xa10.com の DNSサーバは aaa.bbb.ccc.ddd # ./add-ns xa10.com aaa.bbb.ccc.ddd aaa.bbb.ccc. の逆引きDNSは、aaa.bbb.ccc.ddd # ./add-ns ccc.bbb.aaa.in-addr.arpa aaa.bbb.ccc.ddd各フォルダとファイルの意味。
./tinydns ├-env 各ファイルの詳細は上記 │ ├-IP │ └-ROOT │ ├-log[+] log用フォルダ │ ├-root 詳細は上記参照 │ ├-Makefile │ ├-add-alias │ ├-add-childns │ ├-add-host │ ├-add-mx │ ├-add-ns │ └-data │ ├-run tinydns起動スクリプト ├-seed └-supervise[+]dnsへ登録
ここにサンプルと記述例を示すので、それを参考にviで直接dataを弄ったほうが良いでしょう。
理由は以下の通りです。
変更した後は、svc -t /var/service/tinydns のコマンドを入れ、再起動させます。 ※実際には再起動させなくてもmakeのみで反映されるようです。
dataサンプル
#----------------------------------------------------------------
# Grouping
# %{Group}:{IP}
#----------------------------------------------------------------
# 192.168.*と172.16.*と127.0.01はグループluに所属する例
%lu:192.168
%lu:172.16
%lu:127.0.0.1
# 上記以外 (記述無しの場合は指定された物以外の全て)
%ex:
#----------------------------------------------------------------
# NSレコード(SOA) (PTR同時生成)
# .{domain}:{ip}:{NameServer}:{ttl}:{timestamp}:{lo}
#----------------------------------------------------------------
# グループluからの問い合わせ返答レコード
.xa10.com:192.168.1.20:ns.xa10.com:86400::lu
# グループexからの問い合わせ返答レコード
.xa10.com:210.253.232.209:ns.xa10.com:86400::ex
# セカンダリDNS ns.example.com の指定 (委託先が自分の管轄で無い場合IPは無くて良い)
.xa10.com::robin.kurou.com:::ex
# 逆引き用
.209.232.253.210.in-addr.arpa::ns.xa10.com
.168.192.in-addr.arpa::ns.xa10.com:::lu
# いずれのレコードもTTL以降は省略可能
#----------------------------------------------------------------
# Aレコード (PTR同時生成)
# {=fqdn}:{ip}:{ttl}:{timestamp}:{lo}
#----------------------------------------------------------------
=router.xa10.com:192.168.1.254:300::lu
=www.xa10.com:192.168.1.20:300::lu
=alice.xa10.com:192.168.1.20:300::lu
=alice2.xa10.com:192.168.1.21:300::lu
=a30.xa10.com:192.168.1.40:300::lu
# IPのみ変えて複数行登録することで、負荷分散も可能
# 負荷分散サンプル
#=www.xa10.com:192.168.1.20:300::lu
#=www.xa10.com:192.168.1.21:300::lu
#=www.xa10.com:192.168.1.22:300::lu
#----------------------------------------------------------------
# CNAMEレコード (PTRレコード生成なし)
# +{fqdn}:{ip}:{ttl}:{timestamp}:{lo}
#----------------------------------------------------------------
+*.xa10.com:210.253.232.80:300::ex
+*.xa10.com:192.168.1.20:300::lu
# ワイルドカード*も使用可能。ロンゲストマッチ方式
#----------------------------------------------------------------
# MXレコード (Aレコード同時生成)
# @{fqdn}:{ip-address}:{Mailserver}:{distance}:{ttl}:{timestamp}:{lo}
#----------------------------------------------------------------
@xa10.com:192.168.1.20:mail.xa10.com:0:300::lu
@xa10.com:210.253.232.209:mail.xa10.com:0:300::ex
{distance}がMail送信先の優先値。大きい数字を優先する
#
#
#=================================================================
# あまり使わないコード
#
#----------------------------------------------------------------
# PTRレコード
# ^{fqdn}:{p}:{ttl}:{timestamp}:{lo}
#
# p PTRを問い合わせた際に返答するドメイン名
#----------------------------------------------------------------
#^80.232.253.210.in-addr.arpa:dns1.xa10.com:300
#----------------------------------------------------------------
# SOAレコード (様々なSOAの値を独自設定して使いたい人用)
# Z{fqdn}:{mname}:{rname}:{ser}:{ref}:{ret}:{exp}:{min}:{ttl}:{timestamp}:{lo}
#
# mname プライマリネームサーバ(FQDN)
# rname 連絡用メールアドレス
# hoge@example.comならば hoge.exapmle.com と@を.として記述する
# デフォルト値 hostmaster?
# ser シリアル番号 デフォルト値 ファイル更新日時
# ref リフレッシュ間隔 デフォルト値 16384 sec
# ret リトライ間隔 デフォルト値 2048 sec
# exp 有効期間 デフォルト値 1048576 sec
# min 最低有効期間 デフォルト値 2560 sec
#----------------------------------------------------------------
#Zwww.xa10.com:ns1.xa10.com:hostmaster.xa10.com::::::300
#----------------------------------------------------------------
# 移譲NSレコード
# &{fqdn}:{ip}:{x}:{ttl}:{timestamp}:{lo}
#
# fqdn 委譲するドメイン
# ip 委譲するネームサーバのIPアドレス
# x 委譲するネームサーバのドメイン名
#----------------------------------------------------------------
#&another.xa10.com:1.2.3.4:ns.another.xa10.com:300::
{ttl} について*3
data編集後、data.cdbへの反映 # cd /etc/tinydns/root/ # vi data vi等でdata編集後 # make `data.cdb' is up to date.dataの設定確認 tinydns-get を利用して確認 dataディレクトリに移動 # cd /var/service/tinydns/root luグループの192.168.1.10としてAレコード問い合わせ # tinydns-get a ns.xa10.com 192.168.1.10 1 ns.xa10.com: 100 bytes, 1+2+2+0 records, response, authoritative, noerror query: 1 ns.xa10.com answer: ns.xa10.com 300 A 192.168.1.20 answer: ns.xa10.com 300 A 192.168.1.20 authority: xa10.com 300 NS ns.xa10.com authority: xa10.com 300 NS lain.kurou.com ローカルIPで返答している 同様にexグループとして問い合わせ # tinydns-get a ns.xa10.com 200.200.200.200 1 ns.xa10.com: 84 bytes, 1+1+2+0 records, response, authoritative, noerror query: 1 ns.xa10.com answer: ns.xa10.com 300 A 210.253.232.80 authority: xa10.com 300 NS ns.xa10.com authority: xa10.com 300 NS lain.kurou.com グローバルIPで返答しているまた、nslookup,dig,dnsq 等を利用して直接問い合わせして確認すると良いです。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| axfrdnsの設定 | ||||||||||||||||||||
|
TCP用のDNSプログラムです。
tinydnsのDBをそのまま使用し、ゾーン転送等にも使われます。 ユーザーが設定済みであれば、付属のConfigコマンドで設定が可能です。 設定
dnscache-conf {実行user} {log-user} {install-Dir} {tinydns-Dir} {稼働IP}
# axfrdns-conf axfrdns dnslog /etc/axfrdns /etc/tinydns 192.168.1.20
詳細設定は、{install-Dir} 内部のファイルで行います。
転送先、転送許可ゾーンを作成するのにtcpserver(tcprules)を利用しています。 詳細設定 # cd /etc/axfrdns # vi tcp ----作業---- # makeFile: tcp # sample line: 1.2.3.4:allow,AXFR="heaven.af.mil/3.2.1.in-addr.arpa" # IP or ドメインを表記し、その後ろに転送許可ゾーンを記述 # 転送許可するゾーンが複数ある場合は / で区切る # exapmle.com に、xa10.comゾーンを転送許可 example.com:allow,AXFR="xa10.com" # 102.201.102.121に、xa10.com、exapmle.com、210.253.232.80逆引きゾーン転送を許可 102.201.102.121:allow,AXFR="xa10.com/example.com/.80.232.253.210.in-addr.arpa" :deny各フォルダとファイルの意味。
./axfrdns ├-env 各ファイルの詳細は上記 │ ├-IP │ └-ROOT │ ├-log[+] log用フォルダ │ ├-make* tcp.cdbを作り出すスクリプト ├-run ├-tcp フィルタリスト(txt型) ├-tcp.cdb フィルタリストをbinary化したもの └-supervise[+]動作確認
svscanに登録 # ln -s /etc/axfrdns /service axfrdnsが立ち上がっているかの確認 # svstat /service/axfrdns /service/axfrdns: up (pid 72084) 34 seconds
# nslookup
axfrdns(tinydns)を立ち上げたIPを指定
> server 192.168.1.20
Default Server: ns.xa10.com
Address: 192.168.1.20
xa10.com のリスト表示
> ls -d xa10.com
[ns.xa10.com]
$ORIGIN xa10.com.
@ 42m40s IN SOA ns hostmaster (
1039970474 ; serial
4h33m4s ; refresh
34m8s ; retry
1w5d3h16m16s ; expiry
42m40s ) ; minimum
5M IN NS dns
ns 5M IN A 192.168.1.20
@ 5M IN NS lain.kurou.com.
ns 5M IN A 192.168.1.20
* 5M IN A 192.168.1.20
@ 5M IN MX 0 mail
mail 5M IN A 192.168.1.20
router 1D IN A 192.168.1.254
alice 1D IN A 192.168.1.20
a30 1D IN A 192.168.1.50
@ 42m40s IN SOA ns hostmaster (
1039970474 ; serial
4h33m4s ; refresh
34m8s ; retry
1w5d3h16m16s ; expiry
42m40s ) ; minimum
|
| 運用・管理 |
|
基本はdaemontools(現在改装中)を参照。 IPアドレスの移行時にはTTLを短くし、{timestamp}を利用すると綺麗に移行できます。
daemontoolsを利用する理由
稼働当初はcronを利用して定期的にsvstatの結果を自分宛にメールすると良いです。 cronの利用方法(/etc/crontabへ追記) #djbdns 動作状況を08:00に管理者へメール 0 8 * * * root /usr/local/bin/svstat /var/services/* /var/services/*/log/ daemontoolsを調べるのが面倒な方は、svstatコマンドで現在の稼働状況を確認してください。 # svstat /var/services/* /var/services/*/log /var/service/axfrdns: up (pid 813) 23583809 seconds /var/service/dnscache: up (pid 814) 23583809 seconds /var/service/telnetd: up (pid 829) 23583808 seconds /var/service/tinydns: up (pid 820) 23583809 seconds /var/service/axfrdns/log: up (pid 819) 23583809 seconds /var/service/dnscache/log: up (pid 815) 23583809 seconds /var/service/tinydns/log: up (pid 822) 23583810 seconds |
| よくある間違い |
友人と相互にセカンダリを請け負っている。NSレコードの記述ルールに従ってIPを明記した。
引っ越しやプロバイダ変更で友人のIPアドレスが何時変わるか判りません。友人ドメインのNSレコードのIPは友人がレジストラを通して管理するのです。 SOAやNSレコードのTTLを短くした。
AレコードのTTLを短くした。
レジストラにIPとドメインを登録したので、上位DNSサーバのTTLが有効になるのでは?
自ドメインにNSを問い合わせると、同じIPを指すNSレコードが複数表示されてしまう
PTRレコードは必ず設定すべきだ
|
| (参考) 逆引きについて |
|
逆引きとは、IPアドレスから、FQDNが何か解決する為に使います。 AレコードのFQDNからIPを解決するのに対し、全く逆を行うわけです。 IPアドレスは、203.141.131.135 であれば、上位bitである203から探します。
この時、ドメインと同じように探す為、
2) .com. 3) .xa10.com. 4) www.xa10.com → 210.253.232.209 逆引きの順番
.210.in-addr.arpa: .253.210.in-addr.arpa: .232.253.210.in-addr.arpa: 209.232.253.210.in-addr.arpa: → www.xa10.com |
| 参考文献 |