読者です 読者をやめる 読者になる 読者になる

ボールを蹴りたいシステムエンジニア

ボール蹴りが大好きなシステムエンジニア、ボールを蹴る時間確保の為に時間がある時には勉強する。

CentOS6でLANネットワークで使用する内向けのDNSサーバーを構築する

LANネットワーク内で使用する内向けDNSサーバーを構築する。

環境

CentOS6
bind9

DNSサーバーのipアドレス
eth0:192.168.10.30(WAN)
eth0:10.0.10.30(LAN)

やりたい事

LAN内ネットワークで「web01.vmware」を「10.0.10.40」
に名前解決できるようにする。
外部ネットワークには公開しない。

手順

既にbindがインストールされている前提で進めます。

bindインストール手順は下記記事より
toriaezu-engineer.hatenablog.com

正引き(ドメイン名→IPアドレス)のゾーン設定

named.confファイル編集

vi /var/named.conf 

view機能を使用してゾーンの設定をします。
view機能を使用する事でインターネット側からの問い合わせと、LAN内からの問い合わせ、それぞれに名前解決ができます。
WAN側とLAN側とで異なるドメイン名を返すといった事もできる。

今回は内向け(LAN内)のDNSサーバーなので、viewにinternalを指定しています。
外向きDNSサーバーとしても使用する場合はexternalを指定しますが、今回は使用しません。

view "internal" {
        match-clients   { 192.168.10.0/24; 10.0.10.0/24; };
        recursion yes;

        zone "." {
             type hint;
             file "named.ca";
        };

        zone "web01.vmware"{
             type master;
             file "web01.vmware.zone";
        };
  #include "/etc/named.rfc1912.zones";
  #include "/etc/named.root.key";
};

match-clientsには当該view機能を使用許可するクライアントを指定、ここではLANネットワークのIPを指定。
recursionは再帰的な問い合わせという機能となるが、外部向けDNSの場合はDOS攻撃対策の為にも使用しないよう「no」に設定する。
今回はキャッシュDNSサーバーとして使用するのでyes。

今回設定するドメインに合わせて、「web01.vmware」というゾーンを作成します。
fileで作成するゾーンファイルを指定。

デフォルトで定義されている下記ですが

  include "/etc/named.rfc1912.zones";
  include "/etc/named.root.key";

named.rfc1912.zones
はローカルホストなどの定義されてるファイル。
デフォルトでは/etc直下にあります。
コメントアウトしてもよさそうですが、使用する場合はこのファイルでインクルードしてるファイル
named.localhost
named.loopback
等は、下記にあったのでコピーします。
※バージョンによりパスは異なります

/usr/share/doc/bind-9.8.2/sample/var/named/named.localhost
/usr/share/doc/bind-9.8.2/sample/var/named/named.empty
/usr/share/doc/bind-9.8.2/sample/var/named/named.loopback

※named.conでは相対パスを指定した場合、/var/named/から参照されます。

コピー

[root@lb ~]# cp -p /usr/share/doc/bind-9.8.2/sample/var/named/named.localhost /var/named/chroot/var/named/
[root@lb ~]# cp -p /usr/share/doc/bind-9.8.2/sample/var/named/named.loopback /var/named/chroot/var/named/
[root@lb ~]# cp -p /usr/share/doc/bind-9.8.2/sample/var/named/named.empty /var/named/chroot/var/named/

ルートゾーンのファイルを作成

dig @a.root-servers.net . ns > /var/named/chroot/var/named/named.ca

このファイルはルートサーバに関する情報、ルートサーバ情報は全世界共通であり、ここではa.root-servers.netから取得する。


正引き(ドメイン名→IPアドレス)ゾーンファイル作成

vi /var/named/chroot/var/named/web01.vmware.zone  
$TTL    86400
@       IN      SOA     web01.vmware. root.web01.vmware.  (
                                2016012701      ; Serial
                                3600            ; Refresh
                                900             ; Retry
                                3600000         ; Expire
                                3600 )          ; Minimum

        IN NS    web01.vmware.
        IN MX 10 mail.web01.vmware.
@       IN A     10.0.10.40
www     IN A     10.0.10.40
ftp     IN A     10.0.10.40
mail    IN A     10.0.10.40

簡単に説明すると、
SOAレコードの、SOAの後には「ドメイン名.」と「このドメインの管理者メールアドレス.」が続く。
Serialの行は識別ID、他のゾーンと被ってはいけない、上記では年月日+01を設定している。
NSレコードの行で、このドメインのネームサーバーを指定。
Aのレコードの行で、ホスト名からIPアドレスへの変換。
上記例だとwww以降の行はサブドメイン的な扱い。

逆引き(IPアドレスドメイン名)のゾーン設定

named.confファイル編集

vi /var/named.conf 

先程設定したviewのinternalに逆引きのゾーンを追加します。

view "internal" {
        match-clients   { 192.168.10.0/24; 10.0.10.0/24; };
        recursion yes;

        zone "." {
             type hint;
             file "named.ca";
        };

        zone "web01.vmware"{
             type master;
             file "web01.vmware.zone";
        };

        zone "10.0.10.in-addr.arpa"{
             type master;
             file "10.0.10.in-addr.zone";
             allow-transfer {
                      none;
             };
        };
  #include "/etc/named.rfc1912.zones";
  #include "/etc/named.root.key";
};

「10.0.10.in-addr.arpa」という逆引きのゾーンを作成していますが、「.in-addr.arpa」の部分は固定みたいです。
「10.0.10.in-addr.zone」とかの名前に設定したら上手く逆引きできませんでした・・
allow-transferではゾーン転送要求を許可するスレーブサーバのIPアドレスを指定しますが、今回はスレーブ構成は作成しませんのでnoneを指定します。
fileで対応するゾーンファイルを指定します。

逆引き(IPアドレスドメイン名)ゾーンファイル作成

vi /var/named/chroot/var/named/10.0.10.in-addr.zone
$TTL    86400
@       IN      SOA     web01.vmware. root.web01.vmware.(
                                      2016012701 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
              IN      NS    web01.vmware.
40            IN      PTR   web01.vmware.

簡単に説明すると、
NSレコードの行で、このドメインのネームサーバーを指定。
PTRレコードで、IPアドレスからホスト名に変更。
サーバーIPアドレス最下位部(上記例だと10.0.10.40となる)とドメイン名を指定

ゾーンファイルの各レコードについては下記参考サイトが分かりやすかった。
BINDの設定 - ゾーンファイルの記述方法

設定ファイルチェックと動作確認

named.conf構文チェック
何も表示されなければOK

[root@lb ~]# named-checkconf /etc/named.conf

ゾーンファイルの確認
ゾーン名ごとに確認
OKが出ればOK

[root@lb ~]# named-checkzone web01.vmware /var/named/chroot/var/named/web01.vmware.zone 
zone web01.vmware/IN: loaded serial 1000058531
OK

bind再起動

/etc/rc.d/init.d/named restart


起動時、以下のようなエラーが出た場合は
localhost.localdomainのゾーンで読み込んでるファイル「named.localhost」が無いですよって意味。

zone localhost.localdomain/IN: loading from master file named.localhost failed: file not found


今回設定したDNSサーバーをネームサーバーに指定

vi /etc/resolv.conf 
nameserver 192.168.10.30
nameserver 192.168.10.1

1行目が、今回構築したDNSサーバー
(eth0が192.168.10.30、eth1が10.0.10.30)
192.168.10.1はデフォルトゲートウェイルーター

注意点として、インターフェイスファイル(ifcfg-eth0)でDNSサーバーを指定している場合はそちらが優先される。
インターフェイスファイルに記述する場合は以下のようになる。

/etc/sysconfig/network-scripts/ifcfg-eth0

DNS1=192.168.10.30
DNS2=192.168.10.1

名前解決できた

[root@lb Desktop]# nslookup web01.vmware
Server:		192.168.10.30
Address:	192.168.10.30#53

Name:	web01.vmware
Address: 10.0.10.40

逆引きもOK

[root@lb ~]# nslookup 10.0.10.40
Server:         192.168.10.30
Address:        192.168.10.30#53

40.10.0.10.in-addr.arpa name = web01.vmware.