イントラ用DNSサーバの設定手順について
イントラ用のDNSサーバを設定する方法についてのメモです。
上図ネットワーク構成の環境でDNSサーバ(sargens.kfeed.com,192.168.0.12)を設定します。
本手順で使用するドメイン名「kfeed.com」はイントラ内でのみ使用するテスト用のドメイン名となります。
本手順作成の際には下記のサイトを参照させていただきました。
今回の手順で登場するサーバ
ホスト名 | OS | 役割 | FQDN | IPアドレス |
---|---|---|---|---|
sargens | Debian 3.1 | DNSサーバ | sargens.kfeed.com | 192.168.0.12 |
sargesmb | Debian 3.1 | WEBサーバ | sargesmb.kfeed.com | 192.168.0.10 |
sargemx | Debian 3.1 | Mailサーバ | sargemx.kfeed.com | 192.168.0.15 |
macxubuntu | Xubuntu 10.04 | Linuxクライアント | macxubuntu.kfeed.com | 192.168.0.3 |
- | - | デフォルトゲートウェイ | - | 192.168.0.1 |
サブネットマスクについてはすべて 255.255.255.0 となります。
bind のインストール
sargens の端末に bind をインストールします。
apt-get install bind
sargens に root ユーザとしてログインし、上記コマンドを実行します。
Reading Package Lists... Done Building Dependency Tree... Done Suggested packages: dnsutils bind-doc The following NEW packages will be installed: bind 0 upgraded, 1 newly installed, 0 to remove and 25 not upgraded. Need to get 903kB of archives. After unpacking 2122kB of additional disk space will be used. Get:1 http://ftp.riken.jp sarge/main bind 1:8.4.6-1 [903kB] Fetched 903kB in 3s (298kB/s) Selecting previously deselected package bind. (Reading database ... 9649 files and directories currently installed.) Unpacking bind (from .../bind_1%3a8.4.6-1_i386.deb) ... Setting up bind (8.4.6-1) ... Starting domain name service: named.
bind がインストールされました。
bind の設定ファイルを編集
インストール後は bind の設定ファイルを編集します。
named.conf ファイルの編集
「/etc/bind/named.conf」ファイルを編集します。
1 // This is the primary configuration file for the BIND DNS server named. 2 // 3 // Please read /usr/share/doc/bind/README.Debian for information on the 4 // structure of BIND configuration files in Debian for BIND versions 8.2.1 5 // and later, *BEFORE* you customize this configuration file. 6 // 7 8 include "/etc/bind/named.conf.options"; 9 10 // reduce log verbosity on issues outside our control 11 logging { 12 category lame-servers { null; }; 13 category cname { null; }; 14 }; 15 16 options { 17 18 allow-query { 19 127.0.0.1; 20 192.168.0.0/24; 21 }; 22 23 forwarders { 24 8.8.8.8; 25 8.8.4.4; 26 }; 27 28 }; 29 30 // prime the server with knowledge of the root servers 31 zone "." { 32 type hint; 33 file "/etc/bind/db.root"; 34 }; 35 36 // be authoritative for the localhost forward and reverse zones, and for 37 // broadcast zones as per RFC 1912 38 39 zone "localhost" { 40 type master; 41 file "/etc/bind/db.local"; 42 }; 43 44 zone "0.0.127.in-addr.arpa" { 45 type master; 46 file "/etc/bind/db.0.0.127"; 47 }; 48 49 zone "kfeed.com" { 50 type master; 51 file "/etc/bind/db.kfeed.com"; 52 }; 53 54 zone "0.168.192.in-addr.arpa" { 55 type master; 56 file "/etc/bind/db.0.168.192"; 57 }; 58 59 // add local zone definitions here 60 include "/etc/bind/named.conf.local";
allow-query(18〜21行目)では、問い合わせを受け付けるネットワークを指定します。
forwarders(23〜26行目)では、問い合わせの転送先DNSサーバを指定します。上記では Google Public DNS を指定しました。
ルートネームサーバについての設定は30〜34行目です。本手順ではゾーンファイル「/etc/bind/db.root」の内容はデフォルトのものを使用しました。
localhost の正引き設定は 39〜42行目、逆引き設定は44〜47行目です。
kfeed.com の正引き設定は 49〜52行目、逆引き設定は54〜57行目です。
ゾーンファイルの編集
localhost の正引き用ゾーンファイルlocalhost の正引き用ゾーンファイル「/etc/bind/db.local」は以下の内容で保存しました。
/etc/bind/db.local
1 ; 2 ; BIND data file for local loopback interface 3 ; 4 $TTL 604800 5 @ IN SOA sargens.kfeed.com. root.sarge.kfeed.com. ( 6 2010070401 ; Serial 7 604800 ; Refresh 8 86400 ; Retry 9 2419200 ; Expire 10 604800 ) ; Negative Cache TTL 11 ; 12 @ IN NS sargens.kfeed.com. 13 @ IN A 127.0.0.1
SOAレコード部分(5〜11行目)にはDNSサーバのホスト名、管理者のメールアドレス(@の代わりに . を使う)、スレーブネームサーバがマスターネームサーバのゾーン情報を参照する際のシリアル番号やチェック間隔等を指定します*1。
NSレコード部分(12行目)にはDNSサーバ名を FQDN で指定します。
Aレコード部分(13行目)にはホスト名に対応するIPアドレス(上記ではlocalhostなので127.0.0.1)を指定します。
localhost の逆引き用ゾーンファイル「/etc/bind/db.0.0.127」は以下の内容で保存しました。
/etc/bind/db.0.0.127
1 ; 2 ; BIND reverse data file for local loopback interface 3 ; 4 $TTL 604800 5 @ IN SOA sargens.kfeed.com. root.sargens.kfeed.com. ( 6 2010070401 ; Serial 7 604800 ; Refresh 8 86400 ; Retry 9 2419200 ; Expire 10 604800 ) ; Negative Cache TTL 11 ; 12 @ IN NS sargens.kfeed.com. 13 1 IN PTR localhost.
SOAとNSレコード部分は正引きと同じ内容としました。
PTRレコード(13行目)はIPアドレスに対応するホスト名を指定しました。
kfeed.com の正引き用ゾーンファイル「/etc/bind/db.kfeed.com」は以下の内容で保存しました。
/etc/bind/db.kfeed.com
1 $TTL 604800 2 @ IN SOA sargens.kfeed.com. root.sargens.kfeed.com. ( 3 2010070401 ; Serial 4 604800 ; Refresh 5 86400 ; Retry 6 2419200 ; Expire 7 604800 ) ; Negative Cache TTL 8 ; 9 @ IN NS sargens.kfeed.com. 10 @ IN MX 10 sargemx.kfeed.com. 11 kfeed.com IN A 192.168.0.12 12 sargens IN A 192.168.0.12 13 sargesmb IN A 192.168.0.10 14 sargemx IN A 192.168.0.15 15 macxubuntu IN A 192.168.0.3 16 17 www IN CNAME sargesmb
SOAとNSレコード部分はlocalhost正引き用ゾーンファイルと同じ内容にしました。
MXレコード部分(10行目)にはメールサーバ名を FQDN で指定します。
Aレコード(11行目〜15行目)にはホスト名に対応するIPアドレスを指定します。
CNAMEレコード(17行目)にはホストの別名を指定します。
192.168.0.* の逆引き用ゾーンファイル「/etc/bind/db.0.168.192」は以下の内容で編集しました。
/etc/bind/db.0.168.192
1 $TTL 604800 2 @ IN SOA sargens.kfeed.com. root.sargens.kfeed.com. ( 3 2010070401 ; Serial 4 604800 ; Refresh 5 86400 ; Retry 6 2419200 ; Expire 7 604800 ) ; Negative Cache TTL 8 ; 9 @ IN NS sargens.kfeed.com. 10 IN PTR kfeed.com. 11 IN A 255.255.255.0 12 13 12 IN PTR sargens.kfeed.com. 14 10 IN PTR sargesmb.kfeed.com. 15 15 IN RTP sargemx.kfeed.com. 16 3 IN PTR macxubuntu.kfeed.com.
SOAとNSレコード部分はlocalhost正引き用ゾーンファイルと同じ内容にしました。
10行目のPTRレコードでは名前解決を行うドメインを、11行目のAレコードでは「192.168.0.*」のネットワークのサブネットマスクを指定しました。
13〜16行目のPTRレコードでは、IPアドレス(IPアドレスの第4オクテットを指定しています)に対応するホスト名を FQDN で指定しました。
DNSサーバのホスト名設定、ネットワーク設定、名前解決設定を確認
ホスト名設定を確認
/etc/hostname ファイルの内容 --> ホスト名が記載されていることを確認
sargens
/etc/hosts ファイルの内容 --> localhost 以外の内容は記述しない
127.0.0.1 localhost.localdomain localhost
ネットワーク設定を確認
/etc/network/interfaces ファイルの内容 --> IPアドレス,サブネットマスク,デフォルトゲートウェイ等のアドレスが指定されていることを確認
# The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 192.168.0.12 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1
名前解決設定を確認
/etc/resolv.conf ファイルの内容 --> nameserver に localhost(127.0.0.1)が指定されていることと、search の行に所属しているドメイン名が記載されていることを確認
nameserver 127.0.0.1 search kfeed.com
/etc/nsswitch.conf ファイル hosts の行 --> 名前解決の際に hostsファイル、DNSの順番で参照されることを確認
hosts: files dns
/etc/host.conf ファイル order の行 --> 名前解決の際に hostsファイル、DNSの順番で参照されることを確認
order hosts, bind
上記の内容を確認後、DNSサーバを再起動します。
DNSサーバ以外の端末での設定
DNSサーバ以外の端末にてホスト名設定、ネットワーク設定、名前解決設定の確認を行います。設定変更をした場合は念のため1度再起動を実施します。
下記では sargesmb の端末を例に設定内容を確認します。
ホスト名設定を確認
/etc/hostname ファイルの内容を確認 --> ホスト名が記載されていることを確認
sargesmb
/etc/hosts ファイルの内容を確認 --> 自ホストの内容のみを記載
127.0.0.1 localhost.localdomain localhost sargesmb
ネットワーク設定を確認
/etc/network/interfaces ファイル*2の内容を確認 --> DNSサーバのアドレスが指定されていることと、IPアドレス,サブネットマスク,デフォルトゲートウェイ等のアドレスが指定されていることを確認
# The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 192.168.0.10 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 dns-search kfeed.com dns-nameservers 192.168.0.12
名前解決設定を確認
/etc/resolv.conf ファイル*3の内容を確認 --> nameserver の行にDNSサーバのIPアドレスが指定されていることと、search の行に所属しているドメイン名が記載されていることを確認
nameserver 192.168.0.12 search kfeed.com
/etc/nsswitch.conf ファイル hosts の行 --> 名前解決の際に hostsファイル、DNSの順番で参照されることを確認
hosts: files dns
/etc/host.conf ファイル order の行 --> 名前解決の際に hostsファイル、DNSの順番で参照されることを確認
order hosts, bind
DNSサーバ以外の端末については上記の例にならい、設定を行います。
DNS設定の確認
macxubuntu(192.168.0.3)の端末から確認を行います。
ping コマンドを sargesmb.kfeed.com (WEBサーバ)に送信してみます。
$ ping sargesmb.kfeed.com PING sargesmb.kfeed.com (192.168.0.10) 56(84) bytes of data. 64 bytes from 192.168.0.10: icmp_seq=1 ttl=64 time=4.93 ms 64 bytes from 192.168.0.10: icmp_seq=2 ttl=64 time=0.298 ms 64 bytes from 192.168.0.10: icmp_seq=3 ttl=64 time=0.275 ms 64 bytes from 192.168.0.10: icmp_seq=4 ttl=64 time=0.274 ms
192.168.0.10 のアドレス宛に送信されています。
次は ping コマンドを sargemx.kfeed.com (Mailサーバ)に送信してみます。
$ ping sargemx.kfeed.com PING sargemx.kfeed.com (192.168.0.15) 56(84) bytes of data. 64 bytes from 192.168.0.15: icmp_seq=1 ttl=64 time=1.34 ms 64 bytes from 192.168.0.15: icmp_seq=2 ttl=64 time=0.277 ms 64 bytes from 192.168.0.15: icmp_seq=3 ttl=64 time=0.247 ms 64 bytes from 192.168.0.15: icmp_seq=4 ttl=64 time=0.288 ms
192.168.0.15 のアドレス宛に送信されています。
次は dig コマンドを使って sargemx.kfeed.com の情報を表示します。
$ dig 192.168.0.12 sargemx.kfeed.com ; <<>> DiG 9.7.0-P1 <<>> 192.168.0.12 sargemx.kfeed.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 39832 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;192.168.0.12. IN A ;; Query time: 1 msec ;; SERVER: 192.168.0.12#53(192.168.0.12) ;; WHEN: Sun Jul 4 02:15:30 2010 ;; MSG SIZE rcvd: 30 ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60874 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;sargemx.kfeed.com. IN A ;; ANSWER SECTION: sargemx.kfeed.com. 604800 IN A 192.168.0.15 ;; AUTHORITY SECTION: kfeed.com. 604800 IN NS sargens.kfeed.com. ;; ADDITIONAL SECTION: sargens.kfeed.com. 604800 IN A 192.168.0.12 ;; Query time: 11 msec ;; SERVER: 192.168.0.12#53(192.168.0.12) ;; WHEN: Sun Jul 4 02:15:30 2010 ;; MSG SIZE rcvd: 89
ANSWER SECTION の部分で 192.168.0.15 のアドレスが表示されました。
外部のサイトについての情報も問い合わせてみます。下記では www.google.com について問い合わせました。
# dig 192.168.0.12 www.google.com ; <<>> DiG 9.7.0-P1 <<>> 192.168.0.12 www.google.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 50407 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;192.168.0.12. IN A ;; AUTHORITY SECTION: . 10800 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2010070300 1800 900 604800 86400 ;; Query time: 78 msec ;; SERVER: 192.168.0.12#53(192.168.0.12) ;; WHEN: Sun Jul 4 02:24:40 2010 ;; MSG SIZE rcvd: 105 ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51554 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4 ;; QUESTION SECTION: ;www.google.com. IN A ;; ANSWER SECTION: www.google.com. 604800 IN CNAME www.l.google.com. www.l.google.com. 300 IN A 66.249.89.104 www.l.google.com. 300 IN A 66.249.89.99 ;; AUTHORITY SECTION: google.com. 172800 IN NS ns1.google.com. google.com. 172800 IN NS ns2.google.com. google.com. 172800 IN NS ns3.google.com. google.com. 172800 IN NS ns4.google.com. ;; ADDITIONAL SECTION: ns1.google.com. 172800 IN A 216.239.32.10 ns2.google.com. 172800 IN A 216.239.34.10 ns3.google.com. 172800 IN A 216.239.36.10 ns4.google.com. 172800 IN A 216.239.38.10 ;; Query time: 244 msec ;; SERVER: 192.168.0.12#53(192.168.0.12) ;; WHEN: Sun Jul 4 02:24:40 2010 ;; MSG SIZE rcvd: 234
www.google.com は www.l.google.com の別名であることや、www.l.google.com のIPアドレスのほかに、DNSサーバのFQDNやアドレスなども表示されました。
最後にブラウザから確認を行います。ブラウザのアドレス欄に sargesmb.kfeed.com(WEBサーバのアドレス)を入力します。
Apache の初期画面が表示されました。
今回はイントラネットワーク用のDNSサーバを設定しました。DNSサーバの設定ファイルでは、問い合わせの転送先DNSサーバも指定しましたので、外部のサイトについても名前解決することができるようになりました。
*1:SOAレコードの詳細については @IT:DNS Tips:SOAレコードには何が記述されている? が参考になります。
*2:/etc/network/interfaces ファイルでアドレスを指定しない場合は、root権限で”ifconfig eth0 192.168.0.10 netmask 255.255.255.0”,”route add default gw 192.168.0.1” のようにコマンドで指定します。
*3:筆者の環境では端末が Xubuntu の場合は自動的に /etc/resolv.conf ファイルが上書きされてしまうので、/etc/resolv.conf ファイルを都度編集しています /etc/network/interfaces ファイルにDNSサーバのアドレスを記載していますが、効果が定かではありません。