< Top / Next >

4章 内部DNSの構築

2011年11月27日 更新

1.外部DNSと内部DNS

自組織にインターネットサイドからアクセス出来るサーバ(例えば、WWWやメールサーバ)を構築した場合、DNSの運用が不可欠になってきます。 その場合、これら公開用サーバのためのDNSに登録するデータは、公開されるサーバに関するモノだけで良く、セキュリティを考慮する場合には他の情報は極力載せるべきではありません。
一方、組織内の内部LAN側では、ファイルサーバや内部メールサーバ、グループウェアサーバなどが動作しているかも知れません。 クライアントからのアクセスにおいて、これらのサーバについて、DNSを使う方が利便性は上がることでしょう。
このような時には、インターネット側の名前解決を行うDNS(外部DNS)と組織のLAN側の名前解決を行うDNS(内部DNS)とを独自で構築すると良いでしょう。



このような構成を取ることで、外部DNSへの登録情報を少なくでき、DNSのセキュリティ性が向上します。
以下では、内部プライマリDNSを構築する例を述べていきます。 内部セカンダリDNSについては、プライマリサーバが内部DNSになるだけで3章でのセカンダリサーバの構築手順と変わり有りません。

2.内部DNSの設定

以下のような内容で内部DNSの設定を実施します。
内部のLANセグメント 192.168.10.0/24
172.16.0.0/16
DNSサーバに割り当てる固定IPアドレス 192.168.10.3
192.168.10.4 (セカンダリ)
ドメイン名  正引き example.co.jp
 逆引き 10.168.192.in-addr.arpa
16.172.in-addr.arpa
DNSサーバのFQDN名 ns.example.co.jp
ns1.example.co.jp (セカンダリ)
DNSに登録する内部のメールサーバ名 mx1.example.co.jp
内部メールサーバのIPアドレス 192.168.10.5
プロパイダのDNS dns1.isp.ne.jp (210.200.xxx.5)
dns2.isp.ne.jp (210.200.xxx.6)
DHCPクライアントのアドレス範囲 172.16.5.0 - 172.16.5.255
以下では、プライマリDNSサーバの設定についての説明をします。
なお、BINDの設定に使う設定ファイルは利用するOS毎に違うので、以下ではOS毎の設定に分けて説明を行います。

2-1. Redhat ES5(CentOS 5)の場合

  1. BINDのインストール方法
    # yum install bind  bind-utils

  2. BINDで利用する設定ファイル
    Redhat(CentOS)では、デフォルトでセキュリティ強化の為にBINDの動作はchroot環境化(通称、牢獄環境)にて実行されるようになりました。 このため、BINDに関する各種設定ファイルは従来の場所ではなく /var/named/chroot 下の各ディレクトリに置かれたものを使うようになっています。
    目的 保存場所 従来の場所
    BINDの動作に関する基本の設定ファイル /var/named/chroot/etc/named.conf /etc/named.conf
    DNSのゾーン定義ファイルの保存場所 /var/named/chroot/var/named/* /var/named/*
    正引きファイル db.example.co.jp
    逆引きファイル db.192.168.10
    db.172.16
    ログファイルの場所 /var/log/messages /var/log/messages

  3. 設定ファイルの編集

    (/var/named/chroot/etc/named.confの内容)

    //
    options
    {
            // Those options should be used carefully because they disable port
            // randomization
            // query-source    port 53;
            // query-source-v6 port 53;

            // Put files that named is allowed to write in the data/ directory:
            directory               "/var/named"; // the default
            dump-file             "data/cache_dump.db";
            statistics-fil           "data/named_stats.txt";
            memstatistics-file  "data/named_mem_stats.txt";

            // listen-on-v6 { any; };
            auth-nxdomain no;    # conform to RFC1035

            allow-transfer {
                  localnets ;
            };

    //        forwarders { # forwardersの設定は、DNSが直接ルートDNSに参照にいけない場合設定する
    //              210.200.xxx.5 ;
    //              210.200.xxx.6 ;
    //        };

    };

    //
    logging
    {
            channel default_debug {
                    file "data/named.run";
                    severity dynamic;
            };
    };

    //key ddns_key
    //{
    //      algorithm hmac-md5;
    //      secret "use /usr/sbin/dns-keygen to generate TSIG keys";
    //};

    view    "external"
    {
    //      match-clients           { !localnets; !localhost; };
    //      match-destinations      { !localnets; !localhost; };
            match-clients           { any; };
            match-destinations      { any; };
            recursion no;

            // all views must contain the root hints zone:
            include "/etc/named.root.hints";

            zone "example.co.jp" {
                    type master;
                    allow-query { any; };
                    file "db.example.co.jp";
            };

            zone "16.172.in-addr.arpa" {
                    type master;
                    allow-query { any; };
                    file "db.172.16";
            };
            zone "10.168.192.in-addr.arpa" {
                    type master;
                    allow-query { any; };
                    file "db.192.168.10";
            };
    };
     


    (/var/named/chroot/var/named/db.example.co.jpの内容)

    $TTL    3600
    @       IN      soa     ns.example.co.jp. root.example.co.jp. (
                            2009030900      ; Serial
                            3H              ; Refresh(3 hour)
                            15M             ; Retry(15 minutes)
                            1W              ; Expire(1 week)
                            3600 )          ; Negative Cache TTL(1 hour)
    ;
    @                           IN      NS        ns.example.co.jp.
                                 IN      NS        ns1.example.co.jp.
    @                             IN      MX 10   mx1.example.co.jp.
    *.example.co.jp.        IN      MX 10   mx1.example.co.jp.

    ;
    ns              IN A            192.168.10.3 # 内部のDNS
    ns1            IN A            192.168.10.4 # 内部のDNS
    mx             IN A            192.168.10.5 #内部のメールサーバ
    ;
    www           IN A            202.xxx.yyy.zz # 外部(DMZのwebサーバなどがあれば)
    ;
    $GENERATE 1-254 dhcp-pc$ A 172.16.5.$ # DHCPクライアント用のアドレスを自動生成


    (/var/named/chroot/var/named/db.192.168.10の内容)

    $TTL    3600
    @       IN      soa     ns.example.co.jp. root.example.co.jp. (
                            2009030900      ; Serial
                            3H              ; Refresh(3 hour)
                            15M             ; Retry(15 minutes)
                            1W              ; Expire(1 week)
                            3600 )          ; Negative Cache TTL(1 hour)
    ;
    @                           IN      NS        ns.example.co.jp.
                                 IN      NS        ns1.example.co.jp.

    ;
    3                IN PTR        ns.example.co.jp.
    4                IN PTR        ns1.example.co.jp.
    5                IN PTR        mx1.example.co.jp.
    ;


    (/var/named/chroot/var/named/db.172.16の内容)

    $TTL    3600
    @       IN      soa     ns.example.co.jp. root.example.co.jp. (
                            2009030900      ; Serial
                            3H              ; Refresh(3 hour)
                            15M             ; Retry(15 minutes)
                            1W              ; Expire(1 week)
                            3600 )          ; Negative Cache TTL(1 hour)
    ;
    @                           IN      NS        ns.example.co.jp.
                                 IN      NS        ns1.example.co.jp.

    ;
    $GENERATE 1-254 $.5 PTR dhcp-pc$.example.co.jp. # DHCPクライアント用のアドレスを自動生成
    ;


  4. BINDをシステム起動時に自動的に起動する
    # chkconfig named on 

2-2. Debian 4.x(Ubuntu 8.x)の場合

  1. BINDのインストール方法
    $ sudo apt-get install bind9 bind9utils

  2. BINDで利用する設定ファイル

    目的 保存場所 従来の場所
    BINDの動作に関する基本の設定ファイル /etc/bind/named.conf ←同
    named.confにおけるoptin部 /etc/bind/named.conf.options ←同
    named.confにおけるゾーン定義部 /etc/bind/named.conf.local ←同
    DNSのゾーン定義ファイルの保存場所 /var/cache/bind/* ←同
    正引きファイル db.example.co.jp
    逆引きファイル db.192.168.10
    db.172.16
    ログファイルの場所 /var/log/syslog ←同

  3. 設定ファイルの編集

    (/etc/bind/named.conf の内容)

    // This is the primary configuration file for the BIND DNS server named.
    //
    // Please read /usr/share/doc/bind9/README.Debian.gz for information on the
    // structure of BIND configuration files in Debian, *BEFORE* you customize
    // this configuration file.
    //
    // If you are just adding zones, please do that in /etc/bind/named.conf.local

    include "/etc/bind/named.conf.options";
    include "/etc/bind/named.conf.local";
    include "/etc/bind/named.conf.default-zones";


    (/etc/bind/named.conf.options の内容)
    options {
            directory "/var/cache/bind";

            auth-nxdomain no;    # conform to RFC1035

            allow-query { any; };
            allow-transfer {
                    localnets ;
            };

    //        forwarders { # forwardersの設定は、DNSが直接ルートDNSに参照にいけない場合設定する
    //              210.200.xxx.5 ;
    //              210.200.xxx.6 ;
    //        };

    };


     (/etc/bind/named.conf.local の内容)

    //
    match-clients { any; } ;
    recursion no;

    zone "example.co.jp" {
            type master;
            allow-query { any; };
            file "db.example.co.jp";
    };

    zone "16.172.in-addr.arpa" {
            type master;
            allow-query { any; };
            file "db.172.16";
    };

    zone "10.168.192.in-addr.arpa" {
            type master;
            allow-query { any; };
            file "db.192.168.10";
    };


    (/var/cache/bind/db.example.co.jpの内容)

    $TTL    3600
    @       IN      soa     ns.example.co.jp. root.example.co.jp. (
                            2009030900      ; Serial
                            3H              ; Refresh(3 hour)
                            15M             ; Retry(15 minutes)
                            1W              ; Expire(1 week)
                            3600 )          ; Negative Cache TTL(1 hour)
    ;
    @                             IN      NS        ns.example.co.jp.
                                 IN      NS        ns1.example.co.jp.
    @                             IN      MX 10   mx1.example.co.jp.
    *.example.co.jp.        IN      MX 10   mx1.example.co.jp.

    ;
    ns              IN A            192.168.10.3 # 内部のDNS
    ns1            IN A            192.168.10.4 # 内部のDNS
    mx             IN A            192.168.10.5 #内部のメールサーバ
    ;
    www           IN A            202.xxx.yyy.zz # 外部(DMZのwebサーバなどがあれば)
    ;
    $GENERATE 1-254 dhcp-pc$ A 172.16.5.$ # DHCPクライアント用のアドレスを自動生成
    ;


    (/var/named/chroot/var/named/db.192.168.10の内容)

    $TTL    3600
    @       IN      soa     ns.example.co.jp. root.example.co.jp. (
                            2009030900      ; Serial
                            3H              ; Refresh(3 hour)
                            15M             ; Retry(15 minutes)
                            1W              ; Expire(1 week)
                            3600 )          ; Negative Cache TTL(1 hour)
    ;
    @                           IN      NS        ns.example.co.jp.
                                 IN      NS        ns1.example.co.jp.

    ;
    3                IN PTR        ns.example.co.jp.
    4                IN PTR        ns1.example.co.jp.
    5                IN PTR        mx1.example.co.jp.
    ;


    (/var/named/chroot/var/named/db.172.16の内容)

    $TTL    3600
    @       IN      soa     ns.example.co.jp. root.example.co.jp. (
                            2009030900      ; Serial
                            3H              ; Refresh(3 hour)
                            15M             ; Retry(15 minutes)
                            1W              ; Expire(1 week)
                            3600 )          ; Negative Cache TTL(1 hour)
    ;
    @                           IN      NS        ns.example.co.jp.
                                 IN      NS        ns1.example.co.jp.

    ;
    $GENERATE 1-254 $.5 PTR dhcp-pc$.example.co.jp. # DHCPクライアント用のアドレスを自動生成
    ;


     

2-3. Windows 2000/2003の場合

  1. BINDのインストール方法
    ISC(Internet Systems Consortium, Inc.)のダウンロードサイトか ら入手したzip形式のファイルを解凍してください。 解凍すると 「BINDInstall.exe」という実行ファイルがあるのでこれを実行します。 実行すると、bindをインストールするディレクトリ(デフォル ト: c:\windows\system32\dns)と、実行時のアカウント(デフォルト:named)とそのパスワードを求めてきます。 ユーザアカウン トはセキュリティの為に管理者権限以外のアカウント使う必要があるのでそのまま"named"としてパスワードを指定します。 ここでnamedのアカウ ントがWindowsに登録されていなければ指定したパスワードとともにWindowsに登録されます。
    また、セキュリティ保護のためにファイルへのアクセス権が必要なのでBINDをインストールするファイルシステムはNTFSとなっている必要があります。

  2. BINDで利用する設定ファイル
    Windows版のBINDをインストールしても、各種の設定ファイルは自動的に構成されません。 このため、1からファイル作成する必要がありますが、 記述方法自体はLinuxと変わりありません。 また、基本の設定ファイルであるnamed.confのファイル名が決まっているだけなので、それ以外の ファイル名についてはLinuxなどと合わせておくと混乱が少ないと思います。(なお、ファイルの内容について同じような記述が複数のファイルにあります が、間違いではありません)
    目的 保存場所 従来の場所
    BINDの動作に関する基本の設定ファイル c:\windows\system32\etc\named.conf
    DNSのゾーン定義ファイルの保存場所 c:\windows\system32\etc\*
      ルートキャッシュファイル named.root.txt
    ローカルゾーン設定ファイル named.rfc1912.zones.txt
    「localdomain」ゾーン定義ファイル localdomain.zone.txt
    「localhost」正引き定義ファイル localhost.zone.txt
    「localhost」逆引き定義ファイル named.local.txt
    「localhost」ipv6逆引き定義ファイル named.ip6.local.txt
    ローカルブロードキャスト定義ファイル named.broadcast.txt
    ローカルネット定義ファイル named.zero.txt
    正引きファイル db.example.co.jp
    逆引きファイル db.192.168.10
    db.172.16
    ログファイルの場所 イベントログ

  3. ルートキャッシュファイル作成
    インターネットが利用できる環境で以下のコマンドを実行します。 このコマンドを実行することで最新のルートDNSの情報が取得できます。
    C:\> cd \Windows\system32\dns
    C:\> bin\dig @a.root-servers.net . ns > etc/named.root.txt
  4. 設定ファイルの編集

    (c:\windows\system32\etc\named.confの内容)

    //
    options
    {
            // Those options should be used carefully because they disable port
            // randomization
            // query-source    port 53;
            // query-source-v6 port 53;

            directory              "C:\Windows\system32\dns\etc"; // the default

            // dump-file            "cache_dump.db";
            // statistics-fil       "named_stats.txt";
            // memstatistics-file   "named_mem_stats.txt";

            // listen-on-v6 { any; };
            auth-nxdomain no;    # conform to RFC1035

            allow-transfer {
                  localnets ;
            };

    //        forwarders { # forwardersの設定は、DNSが直接ルートDNSに参照にいけない場合設定する
    //              210.200.xxx.5 ;
    //              210.200.xxx.6 ;
    //        };


            empty-zones-enable no;
    };

    //
    logging
    {
            channel default_debug {
                    file "named.run";
                    severity dynamic;
            };
    };

    //key ddns_key
    //{
    //      algorithm hmac-md5;
    //      secret "use /usr/sbin/dns-keygen to generate TSIG keys";
    //};

    view    "external"
    {
            match-clients           { any; };
            match-destinations      { any; };
            recursion no;

            // all views must contain the root hints zone:
            zone "." IN {
                    type hint;
                    file "named.root.txt";
           };
            include "named.rfc1912.zones.txt";

            zone "example.co.jp" {
                    type master;
                    allow-query { any; };
                    file "db.example.co.jp.txt";
            };

            zone "16.172.in-addr.arpa" {
                    type master;
                    allow-query { any; };
                    file "db.172.16";
            };
            zone "10.168.192.in-addr.arpa" {
                    type master;
                    allow-query { any; };
                    file "db.192.168.10";
            };
    };


    (C:\Windows\system32\dns\etc\named.rfc1912.zones.txt の内容)
    // named.rfc1912.zones:
    //
    // ISC BIND named zone configuration for zones recommended by
    // RFC 1912 section 4.1 : localhost TLDs and address zones
    //
    zone "localdomain" IN {
            type master;
            file "localdomain.zone.txt";
            allow-update { none; };
    };

    zone "localhost" IN {
            type master;
            file "localhost.zone.txt";
            allow-update { none; };
    };

    zone "0.0.127.in-addr.arpa" IN {
            type master;
            file "named.local.txt";
            allow-update { none; };
    };

    zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
            type master;
            file "named.ip6.local.txt";
            allow-update { none; };
    };

    zone "255.in-addr.arpa" IN {
            type master;
            file "named.broadcast.txt";
            allow-update { none; };
    };

    zone "0.in-addr.arpa" IN {
            type master;
            file "named.zero.txt";
            allow-update { none; };
    };


    (C:\Windows\system32\dns\etc\localdomain.zone.txt の内容)
    $TTL    86400
    @               IN SOA  localhost root (
                                            42              ; serial (d. adams)
                                            3H              ; refresh
                                            15M             ; retry
                                            1W              ; expiry
                                            1D )            ; minimum
                    IN NS           localhost
    localhost       IN A            127.0.0.1


    (C:\Windows\system32\dns\etc\localhost.zone.txt の内容)
    $TTL    86400
    @               IN SOA  @       root (
                                            42              ; serial (d. adams)
                                            3H              ; refresh
                                            15M             ; retry
                                            1W              ; expiry
                                            1D )            ; minimum

                    IN NS           @
                    IN A            127.0.0.1
                    IN AAAA         ::1


    (C:\Windows\system32\dns\etc\named.local.txt の内容)
    $TTL    86400
    @       IN      SOA     localhost. root.localhost.  (
                                          1997022700 ; Serial
                                          28800      ; Refresh
                                          14400      ; Retry
                                          3600000    ; Expire
                                          86400 )    ; Minimum
            IN      NS      localhost.
    1       IN      PTR     localhost.


    (C:\Windows\system32\dns\etc\named.ip6.local.txt の内容)
    $TTL    86400
    @       IN      SOA     localhost. root.localhost.  (
                                          1997022700 ; Serial
                                          28800      ; Refresh
                                          14400      ; Retry
                                          3600000    ; Expire
                                          86400 )    ; Minimum
           IN      NS      localhost.
    1      IN      PTR     localhost.


    (C:\Windows\system32\dns\etc\named.broadcast.txt の内容)
    $TTL    86400
    @               IN SOA  localhost.      root.localhost. (
                                            42              ; serial (d. adams)
                                            3H              ; refresh
                                            15M             ; retry
                                            1W              ; expiry
                                            1D )            ; minimum
            IN      NS      localhost.


    (C:\Windows\system32\dns\etc\named.zero.txt の内容)
    $TTL    86400
    @               IN SOA  localhost.      root.localhost. (
                                            42              ; serial (d. adams)
                                            3H              ; refresh
                                            15M             ; retry
                                            1W              ; expiry
                                            1D )            ; minimum
            IN      NS      localhost.


    (/var/named/chroot/var/named/db.example.co.jp.txt の内容)

    $TTL    3600
    @       IN      soa     ns.example.co.jp. root.example.co.jp. (
                            2009030900      ; Serial
                            3H              ; Refresh(3 hour)
                            15M             ; Retry(15 minutes)
                            1W              ; Expire(1 week)
                            3600 )          ; Negative Cache TTL(1 hour)
    ;
    @                           IN      NS        ns.example.co.jp.
                                 IN      NS        ns1.example.co.jp.
    @                           IN      MX 10   mx1.example.co.jp.
    *.example.co.jp.        IN      MX 10   mx1.example.co.jp.

    ;
    ns              IN A            192.168.10.3 # 内部のDNS
    ns1            IN A            192.168.10.4 # 内部のDNS
    mx             IN A            192.168.10.5 #内部のメールサーバ
    ;
    www           IN A            202.xxx.yyy.zz # 外部(DMZのwebサーバなどがあれば)
    ;
    $GENERATE 1-254 dhcp-pc$ A 172.16.5.$ # DHCPクライアント用のアドレスを自動生成
    ;

    ;


    (/var/named/chroot/var/named/db.192.168.10の内容)

    $TTL    3600
    @       IN      soa     ns.example.co.jp. root.example.co.jp. (
                            2009030900      ; Serial
                            3H              ; Refresh(3 hour)
                            15M             ; Retry(15 minutes)
                            1W              ; Expire(1 week)
                            3600 )          ; Negative Cache TTL(1 hour)
    ;
    @                           IN      NS        ns.example.co.jp.
                                 IN      NS        ns1.example.co.jp.

    ;
    3                IN PTR        ns.example.co.jp.
    4                IN PTR        ns1.example.co.jp.
    5                IN PTR        mx1.example.co.jp.
    ;


    (/var/named/chroot/var/named/db.172.16の内容)

    $TTL    3600
    @       IN      soa     ns.example.co.jp. root.example.co.jp. (
                            2009030900      ; Serial
                            3H              ; Refresh(3 hour)
                            15M             ; Retry(15 minutes)
                            1W              ; Expire(1 week)
                            3600 )          ; Negative Cache TTL(1 hour)
    ;
    @                           IN      NS        ns.example.co.jp.
                                 IN      NS        ns1.example.co.jp.

    ;
    $GENERATE 1-254 $.5 PTR dhcp-pc$.example.co.jp. # DHCPクライアント用のアドレスを自動生成
    ;


     



< Top / Next >


Copyright© 1998-2011 ROBATA.ORG