2009年 03月 02日
SUSE Linux 10 : YaST で イントラネットDNS サーバを設定
システム管理者にとっては DNS/DHCP という機能を導入することによる運用費用、手間の軽減できるという意図が理解できても経営側にとっては「お前がやればいい」ということでこの苦労を理解させにくいところがあります。DNS/DHCP がないことによる、システム管理者の管理コストをどう数字化すればよいのかというのも難しい点かもしれません。
「インターネットに繋がるのに、何が問題なんだ」というのが経営者の判断です。そのために管理用のサーバハードウェアを購入するということは非常に高価なものと判断されやすいものです。それだけに XEN 仮想化のターゲットとして DNS サーバはどうかという提案ができます。
しかもDNSサーバはサーバとしての負荷、記憶容量はそれほどコストがかかるものでもないため、XEN 仮想化を検討する運用現場ではもっとも引き合いが多い機能の一つです。設定も苦労することが多いので、一旦動くとあまりいじりたくない機能でもあるし、サーバのライフサイクルで再設定をほとんど考慮する必要のない仮想化にはまさにうってつけの機能でしょう。
DNSは「専門家」が必要なくらい、複雑なものなのですが、彼らにとっては一旦覚えてしまえばこんな簡単なものはないと、豪語するでしょう。そして、自分が理解した方法でしか頑固に設定したがりません。
だから、初心者がDNSに手を出して四苦八苦するくらいならプロの手を借りた方が無難なのかもしれませんが自分がメンテナンスできないことも事実です。しかもDNSは良い教科書が中々なく、最初の root の仕組みから教科書を読むと眠くなること自明です。それにDNSのインストール、設定がいかに難しいかを説明するだけで、挫折させることが目的じゃないかと思われる文書が多いと思います。
ということで、ここでは、インターネット外部へのDNSではなく、イントラネットで利用するDNSを作ることを目標に、 SUSE Linux で YaST を使った場合どのような手順で作ればよいかを説明します。DNSについてもっと詳しく知りたいようであれば、ソースコードのダウンロードから時間をかけて理解することをお勧めします。
-インストール-
教科書では DNS は「どこか」からダウンロードして圧縮解凍して make install しろとよく書かれていますが、 SUSE Linux の場合は、インストールサマリから SoftWare Product > DNS/DHCP を選ぶとインストールは自動的に行われてしまいます。後から入れる場合でも YaST > Software メニューからインストールできます。
もし、インストールを忘れた場合でも YaST > Network Service > DNS をクリックするだけでインストールが終わってしまいます。インストールソースに CD の生メディアが指定されている場合はCD/DVDを用意しましょう。イントラネットにインストールソースを指定しておけば、インストールサーバから追加でインストールされます。
YaST > Network Service から HOSTNAME を確認しますこの設定はインストールの際、Network Card の設定からスタティックアドレスを設定したものです。デフォルトでは linux-XXXX.site です。任意にここでは dns2 というホスト名と intra というドメイン名(ゾーン名)を指定しました。
内容は /etc/HOSTNAME に反映されます。
-list-
dns2:/etc # cat HOSTNAME
dns2.intra
YaST > Network Service > DNS Hostname を確認します。
ここではNetwork Card の設定からスタティックアドレスを設定した、DNSサーバの値が設定されています。多くの場合、例えば BBルータや ISP の DNS サーバアドレスが指定されているはずです。
内容は /etc/resolv.conf に書き込まれます。
-list-
dns2:/etc # cat resolv.conf
nameserver 192.168.1.2
nameserver 192.168.1.1
search intra
<---- 転送元のDNSです。ここでは BB Router です。
dns2:/etc #
YaST > Network Service を選ぶと自動的に Bind がインストールされ、コンフィグレーションウィザードが起動します。まず forwarderの設定なのですが、この
この状態でとりあえず、内部から外部ネットワークへの参照用キャッシュサーバが出来上がります。YaST > DNS サーバメインの Startup メニューから save and reload .... を実行するとDNSサーバが起動します。
SUSE Linux の bind パッケージはデフォルトでは自動起動されませんので、自動実行するように when booting をチェックしておきます。DNSの停止、再起動は全てこの画面から行うことができます。
-dig を使った動作確認-
# dig @MyDNS Target-Device の構文でDNSが正しく動作しているか確認します。
dns2:/etc # dig @localhost www.novell.com
; <<>> DiG 9.3.4 <<>> @localhost www.novell.com
; (2 servers found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53148
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 2
;; QUESTION SECTION: <--- 問い合わせ内容
;www.novell.com. IN A
;; ANSWER SECTION: <--- 帰ってきた答え
www.novell.com. 86400 IN A 130.57.5.25
;; AUTHORITY SECTION: <--- どの DNS が返してきたか
novell.com. 86400 IN NS ns.wal.novell.com.
novell.com. 86400 IN NS ns.novell.com.
novell.com. 86400 IN NS ns2.novell.com.
;; ADDITIONAL SECTION:
ns.wal.novell.com. 86400 IN A 130.57.22.5
ns2.novell.com. 86400 IN A 137.65.1.2
;; Query time: 916 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Mar 2 22:42:45 2009
;; MSG SIZE rcvd: 136
dns2:/etc #
ANSWER SECTION に正しく外部のサービスが見えていることを確認します。
-クライアント側からの確認-
一旦 YaST > Network Service から DNS のサービスを STOP させてみましょう。コマンドで実行する場合は
# service named stop
を実行します。
次に Windows PC などのDNS指定をこのサーバに設定します。
Windows からipconfig /flushdns でDNSのキャッシュをクリアします。
C:\>ipconfig /flushdns <- Windowsの DNS キャッシュをクリアします。
Windows IP Configuration
Successfully flushed the DNS Resolver Cache.
C:\ping www.novell.com <- DNS が動いていないため、正引きできません。
Ping request could not find host www.novell.com. Please check the name and try a
gain.
Yast > DNS Server から Start DNS server now を押します。コマンドでは
# service named start
を実行します。
C:\>ping www.yahoo.co.jp
pinging www.yahoo.co.jp [124.83.139.191] with 32 bytes of data:
reply from 124.83.139.191: bytes=32 time=479ms TTL=48
reply from 124.83.139.191: bytes=32 time=406ms TTL=48
reply from 124.83.139.191: bytes=32 time=430ms TTL=48
reply from 124.83.139.191: bytes=32 time=501ms TTL=48
ing statistics for 124.83.139.191:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
pproximate round trip times in milli-seconds:
Minimum = 406ms, Maximum = 501ms, Average = 454ms
正しく Ping が帰ってきます。
-Basic Option-
ここは特にいじる必要がなかったので、そのままにします。必要なオプションはその手の解説本を参考にしてください。
※ 必要に応じて allow-recursion と allow-query を設定する必要がある場合があります。
パラメータはドロップダウンリストから設定できます。
値は { xxxx.xxxxx.xxxx.xxxx/xx; ------- continue } 形式です。 多くの解説本には " } ; " と書いてあります。
allow-recursion { 192.168.1.0/24; 127.0.0.1; };
allow-query { 192.168.1.0/24; 127.0.0.1; };
YaST から設定する場合は ”閉じ括弧” の後に "セミコロン"を書くとエラーになります。セミコロンは自動的に named.conf に付加されるので注意してください。
-ZONE の定義-
ここでは、内部ネットワーク参照用のDNSを定義します。このサーバは dns2.intra というネームを持つので、 DNS ZONE > intra : MASTER を選び Add ボタンを押します。これで intra ZONE の編集をします。
intra ZONE を選んで Edit ボタンを押すと、おなじみのゾーンエディタが起動するので、必要な項目を書いていきます。
このあたりは一般的な教科書にある内容をそのままパクリで持ってくるのも一つの方法でしょうか。基本形さえできてしまえば、あとは add で A レコードや MX レコードを追加するだけです。絵とは若干違いますが、 /var/lib/named/master/intra ファイルは次のような中身になりました。 忘れがちなserial セクションは YaST が起動する都度インクリメントアップするので、特に気にする必要はありません。
- list- /var/lib/named/master/intra
$TTL 1d
@IN SOA dns2 root.localhost. (
2009030210; serial
3h; refresh
1h; retry
1w; expiry
1d ); minimum
@.intra.IN NS dns2.intra.
intra. IN NS dns1.intra.
oes2lx1 IN A 192.168.1.235
mylx IN A 192.168.1.240
ace-tree IN A 192.168.1.235
bandit IN A 192.168.1.245
router IN A 192.168.1.1
※追記: CNAME レコードは重複したホストを指定できません。Bind の仕様なのか SUSE のパッケージでエラーにしているのかは不明ですがRFCでも推奨していないようです。 named をリスタートした後 tail /var/log/messages にエラーがでていないか確認してください
multiple RRs of singleton type: DNS には CNAME で同じレコードを登録してはいけない。
NS レコードには自分自身の名前 dns2 をセットします。
Finish ボタンを押すと設定ファイルが保存され、自動的に named がリスタートします。
※ここからは、DNSの教科書に従って /var/lib/named/master/intra を編集して
# rndc reload
などを行なって内部レコードの更新をおこなってもよいでしょう。
その際、 ..../master/MyZone ファイルは事前にバックアップしておくことです。
※追記 SLES の場合 YaST で設定したゾーンファイルの内容とファイルの実態が異なる場合があります。
明示的に named を再起動すると YaST でキャッシュされた内容が書き込まれるようです。
-内部DNSは正しく動いているか-
dns2:/etc # dig @localhost router.intra
; <<>> DiG 9.3.4 <<>> @localhost router.intra
; (2 servers found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44762
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;router.intra. IN A
;; ANSWER SECTION:
router.intra. 86400 IN A 192.168.1.1
;; AUTHORITY SECTION:
intra. 86400 IN NS dns1.intra.
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Mar 2 23:38:16 2009
;; MSG SIZE rcvd: 65
dns2:/etc #
dig コマンドで内部のリソースにアドレスが割り振られています。
Windows でも正しく引けているか確認しましょう。
C:\>ipconfig /flushdns ローカルの DNS キャッシュをクリアします。
Windows IP Configuration
Successfully flushed the DNS Resolver Cache.
C:>ping ace-tree ping を確認します。
Pinging ace-tree.intra [192.168.1.235] with 32 bytes of data:
Reply from 192.168.1.235: bytes=32 time<1ms TTL=64
Reply from 192.168.1.235: bytes=32 time<1ms TTL=64
Reply from 192.168.1.235: bytes=32 time<1ms TTL=64
Reply from 192.168.1.235: bytes=32 time<1ms TTL=64
Ping statistics for 192.168.1.235:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
-/var/log/message を確認する-
Mar 4 12:45:31 dns2 named[2682]: shutting down: flushing changes <--- bind のシャットダウンです
Mar 4 12:45:31 dns2 named[2682]: stopping command channel on 127.0.0.1#953
Mar 4 12:45:31 dns2 named[2682]: stopping command channel on ::1#953
Mar 4 12:45:31 dns2 named[2682]: no longer listening on ::#53
Mar 4 12:45:31 dns2 named[2682]: no longer listening on 127.0.0.1#53
Mar 4 12:45:31 dns2 named[2682]: no longer listening on 192.168.1.2#53
Mar 4 12:45:31 dns2 named[2682]: exiting
Mar 4 12:45:32 dns2 named[2814]: starting BIND 9.3.4 -t /var/lib/named -u named
Mar 4 12:45:32 dns2 named[2814]: found 1 CPU, using 1 worker thread
Mar 4 12:45:32 dns2 named[2814]: loading configuration from '/etc/named.conf' <-- /etc/named.conf が読まれます。
Mar 4 12:45:32 dns2 named[2814]: listening on IPv6 interfaces, port 53
Mar 4 12:45:32 dns2 named[2814]: listening on IPv4 interface lo, 127.0.0.1#53
Mar 4 12:45:32 dns2 named[2814]: listening on IPv4 interface eth0, 192.168.1.2#53
Mar 4 12:45:32 dns2 named[2814]: command channel listening on 127.0.0.1#953
Mar 4 12:45:32 dns2 named[2814]: command channel listening on ::1#953
Mar 4 12:45:32 dns2 named[2814]: zone 0.0.127.in-addr.arpa/IN: loaded serial 42
Mar 4 12:45:32 dns2 named[2814]: zone intra/IN: loaded serial 2009030211 <-- /var/lib/named/master/intra が読み込まれます
Mar 4 12:45:32 dns2 named[2814]: zone localhost/IN: loaded serial 42
Mar 4 12:45:32 dns2 named[2814]: running
-DNSキャッシュのダンプ-
DNSキャッシュは rndc dumpdb コマンドでデフォルトの保存先にダンプされます。
dns2:~ # rndc dumpdb
dns2:~ #
dns2:~ # cat /var/lib/named/log/named_dump.db | more
;
; Start view _default
;
;
; Cache dump of view '_default'
;
$DATE 20090304041029
; authanswer
. 516956 IN NS A.ROOT-SERVERS.NET.
516956 IN NS B.ROOT-SERVERS.NET.
516956 IN NS C.ROOT-SERVERS.NET.
516956 IN NS D.ROOT-SERVERS.NET.
516956 IN NS E.ROOT-SERVERS.NET.
516956 IN NS F.ROOT-SERVERS.NET.
516956 IN NS G.ROOT-SERVERS.NET.
516956 IN NS H.ROOT-SERVERS.NET.
516956 IN NS I.ROOT-SERVERS.NET.
516956 IN NS J.ROOT-SERVERS.NET.
516956 IN NS K.ROOT-SERVERS.NET.
516956 IN NS L.ROOT-SERVERS.NET.
516956 IN NS M.ROOT-SERVERS.NET.
; glue
com. 171355 NS A.GTLD-SERVERS.NET.
dns2:~ #
-DNSキャッシュの確認-
例えば yahoo のサイトが引けるかどうかは次のように grep します。
dns2:~ # grep yahoo.co.jp /var/lib/named/log/named_dump.db
yahoo.co.jp. 743 NS ns04.ops.ogk.yahoo.co.jp.
: 略
dns2:~ #
※ Windows 環境ではこのままで動作しない場合があります。外部DNSの参照をさせないように設定する必要があります。
こちらを御覧ください。
※ YaSTでスレーブ側を設定するとレコードファイルが mydomainA となる場合があります。 /etc/.named.conf の次の部分を確認してください。/etc/named.conf の中に intra ではなく intraA と記述される場合がありますので、この部分を修正すればよいようです。
include "/etc/named.conf.include";
zone "intra" in {
allow-transfer { any; };
masters { 192.168.1.2; };
file "slave/intraA";
type slave;
};
あわせてこちらの記事もご参考にしてください。
SUSE で 作る DNS サーバ(逆引きゾーン)
SUSE Linux で Dynamic DNS(DDNS) を作る
YouTube に openSUSE11 で YaST を使ったDNSのインストールから設定までを解説したビデオがありました
Learning Linux: Lesson 11 DNS ServerSUSE Linux DNS の動作チェック、ゾーンのメンテナンス