BINDで内向きDNS

内向きDNS

内向きDNSとは内部ネットワーク向けのDNSである。だいたいこんな要望があると思う。

  • 自宅サーバを公開用のグローバルアドレスではなく、プライベートアドレスでアクセスしたい
  • 内部サーバの名前解決
  • DNSのキャッシュサーバ

基本は一番目の自宅サーバをプライベートでアクセスだと思う。自分の場合にはノートパソコンを持っていて、外部にいる時にはグローバルアドレスを使用して、内部にきたらプライベートでアクセスしたい。都度、hostsファイルを編集とかは面倒なのでDNSで解決したいということだ。

やること

今回のDNSサーバでやらせることはこんなこと。

  • 内部ネットワークの名前解決
  • DNSキャッシュ
  • 自分で解決しないで、わからない名前は手前のブロードバンドルータに聞く
  • 内部限定でアクセスさせる

インスト

今回はbind9を使用する。得に理由なし新しいほうにした。いつものaptでインスト。

apt-get install bind9

ファイル一覧

インストすると/etc/bind配下に以下のファイルができあがる。

ファイル名内容
db.00から始めるアドレスの逆引きゾーン定義ファイル
db.255255から始めるアドレスの逆引きゾーン定義ファイル
db.empty空のゾーン定義ファイル
zones.rfc1918プライベートアドレス用のゾーン定義ファイル
db.127ローカルホスト(127.0.0.1)の逆引きゾーン定義ファイル
db.localローカルホスト(localhost)のゾーン定義ファイル
db.rootrootゾーン定義ファイル
named.confbindの基本設定ファイル
named.conf.localその他の設定を書くファイル?
named.conf.optionsオプション設定ファイル

自己ドメインのファイル追加

さらに自己ドメイン分を追加する。実際には以下の設定で作成する。

ファイル名内容
db.nai.homelinux.net自己ドメインのゾーン定義ファイル
db.172.16.0自己ドメインの逆引きゾーン定義ファイル

設定

基本設定ファイル(named.conf)

この基本設定ファイルでは、どの場合にはどのゾーン定義ファイルを使うということを書く

今回であれば以下を書く必要がある。

  • localhostの正引き
  • 127.0.0.1の逆引き
  • 自己ドメインの正引き
  • 172.16.0.0/24(自己ドメイン)の逆引き

これを設定に書くと、こうなる。

include "/etc/bind/named.conf.options";

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

zone "nai.homelinux.net" {
        type master;
        file "/etc/bind/db.nai.homelinux.net";
};

zone "0.16.172.in-addr.arpa" {
        type master;
        file "/etc/bind/db.172.16.0";
};

最初の1行目はオプション設定になる。通常は同一ファイルに書くがDebianでは分けて書くみたいだ。その方がすっきりするからその通りにやってみる。

オプション定義ファイル(named.conf.options)

オプション定義ではログ設定とか転送設定といったサーバの動作を設定する
ここではブロードバンドルータへ転送と内部限定でアクセスさせることにする

directory "/var/cache/bind";
dump-file "/var/log/named_dump.db";
statistics-file "/var/log/named.stats";
notify no;
allow-query { 127.0.0.1; 172.16.0.0/24; };
version "unko";
forwarders { 172.16.0.1; };
forward only;
auth-nxdomain no;    # conform to RFC1035
listen-on-v6 { any; };

logging {
       channel query_logging {
               file "/var/log/named_querylog" versions 3 size 100M;
               print-time yes;
               severity info;
               print-category yes;
       };
       category queries {
               query_logging;
       };
       category lame-servers { null; };
};

基本的にBindのデフォルト設定を使用している。設定しなくてはならないのは以下。

allow-query { 127.0.0.1; 172.16.0.0/24; };
forwarders { 172.16.0.1; };

正引きゾーン定義ファイル(db.nai.homelinux.net)

上で指定した各ゾーンの定義をする。ローカルホストはデフォルトで構わないので追加する自己ドメインの定義を作成する

$TTL 86400
@       IN      SOA     nai.homelinux.net. root.nai.homelinux.net. (
                        2007111701      ; serial
                        3H              ; refresh
                        15M             ; retry
                        1W              ; expiry
                        1D )            ; minimum

        IN      NS      nai.homelinux.net.
        IN      MX      10 nai.homelinux.net.
        IN      TXT     "test 100"

@         IN A     172.16.0.1
ftp       IN A     172.16.0.2
www       IN CNAME ftp

逆引きゾーン定義ファイル

IPからホストへの逆引きゾーン定義

$TTL 86400
@       IN      SOA     nai.homelinux.net. root.nai.homelinux.net. (
                        2008032300      ; serial
                        3H              ; refresh
                        15M             ; retry
                        1W              ; expiry
                        1D )            ; minimum

        IN      NS      nai.homelinux.net.
1       IN      PTR     Router.nai.homelinux.net.
2       IN      PTR     ftp.nai.homelinux.net.

ホスト名の最後に「.」を付け忘れないように注意

レコードについて

DNSには各用途でレコードの種類がある。主に使うレコードはこれだ。

名称内容
SOAドメイン基本情報。シリアル番号や更新期間などがある。
NSドメインのDNSサーバを指定する
MXドメインのDNSサーバを指定する
Aホストの正引き
PRTホストの逆引き

基本設定は以上で終了になる。後はサービスを起動しログを確認しよう。

動作確認

サービス起動

以下のコマンドで起動しよう

/etc/init.d/bind9 start

ログを確認(/var/log/deamon.log)。こんなログがでればOKでしょう

starting BIND 9.3.4 -u bind
found 1 CPU, using 1 worker thread
loading configuration from '/etc/bind/named.conf'
listening on IPv6 interfaces, port 53
listening on IPv4 interface lo, 127.0.0.1#53
listening on IPv4 interface br0, 172.16.0.1#53
command channel listening on 127.0.0.1#953
command channel listening on ::1#953
zone 127.in-addr.arpa/IN: loaded serial 1
zone 0.16.172.in-addr.arpa/IN: loaded serial 2008032300
zone localhost/IN: loaded serial 1
zone nai.homelinux.net/IN: loaded serial 2008032300
running

とりあえず自己ドメインを解決

自己ドメインが解決できることを確認しよう

dig @127.0.0.1 soa nai.homelinux.net

@127.0.0.1と指定したが、DNS設定(/etc/resolv.conf)を自身に設定していれば必要ないオプション
以下のメッセージを確認できればOKだろう

;; ANSWER SECTION:
nai.homelinux.net.      86400   IN      SOA     nai.homelinux.net. root.nai.homelinux.net. 2008032300 10800 900 604800 86400
;; AUTHORITY SECTION:
nai.homelinux.net.      86400   IN      NS      nai.homelinux.net.

逆引きも確認

dig @127.0.0.1 -x 172.16.0.1

オプション-xが必要。

1.0.16.172.in-addr.arpa. 86400 IN      PTR     Router.nai.homelinux.net.

外部ドメインを確認

設定では自身がルートDNSに聞かず、ブロードバンドルータに聞いている。外部ドメインが解決できるか確認。

dig google.co.jp

キャッシュも確認しよう

TTLを確認することで、キャッシュがされていることがわかる。

dig google.co.jp

TTLをみると1570

google.co.jp.           1570    IN      A       72.14.207.104

再度コマンドを入力すると

google.co.jp.           1554    IN      A       72.14.207.104

1554と下がっている。0になれば再度解決にいく。


debian Valid HTML 4.01 Strict [VALID RSS!]