Product SiteDocumentation Site

10.6. ドメインネームサーバ (DNS)

10.6.1. 原理とメカニズム

ドメインネームサービス (DNS) はインターネットの基礎要素です。つまり DNS はホスト名を IP アドレスに (その逆も) 対応付け、5.153.231.42001:41c8:1000:21::21:4 の代わりに www.debian.org を使えるようにします。
DNS レコードはゾーン分けされています。そして、それぞれのゾーンはドメイン (またはサブドメイン) か IP アドレス範囲 (なぜなら、IP アドレスは通常連続した範囲を割り当てられるからです) にマッチします。プライマリサーバはあるゾーンに含まれる内容の情報を提供する権威的なサーバです。さらに、セカンダリサーバは、通常別のマシン上でホストされ、定期的にプライマリゾーンのコピーをとります。
各ゾーンには、さまざまな種類のレコード (リソースレコード) が含まれます。
  • A。このレコードは IPv4 アドレスを意味しています。
  • CNAME。このレコードは別名 (canonical name) を意味しています。
  • MX。このレコードは mail exchange つまり電子メールサーバを意味しています。MX レコードは他の電子メールサーバが与えられたあるアドレス宛の電子メールの送信先を見つけるために使われます。それぞれの MX レコードには優先順位があります。最も優先順位の高いサーバ (最も低い番号のサーバ) を最初に試行します (補注BACK TO BASICS SMTP」を参照してください)。さらに、最初のサーバからの応答がなかった場合、他のサーバを優先度の高い順に試行します。
  • PTR。このレコードはある IP アドレスに対する名前の対応付けを意味しています。このレコードはある IP アドレス範囲に対して対応付けられた「逆引き DNS」ゾーンに保存されます。たとえば、1.168.192.in-addr.arpa192.168.1.0/24 範囲に含まれる全アドレスの逆引き対応が保存されているゾーンです。
  • AAAA。このレコードは IPv6 アドレスを意味しています。
  • NS。このレコードは名前をネームサーバに対応付けるためのものです。それぞれのドメインは最低 1 つの NS レコードを持っています。NS レコードでは、このドメインに対する問い合わせに答えることができる DNS サーバを指定します。そして、これは通常そのドメインに対するプライマリおよびセカンダリサーバです。NS レコードを使って DNS の権限委譲を指定することも可能です。たとえば、falcot.com ゾーンの NS レコードには internal.falcot.com が含まれます。これは internal.falcot.com ゾーンは別のサーバが担当していることを意味します。もちろん、このサーバは internal.falcot.com ゾーンを宣言しなければいけません。
標準的なネームサーバである Bind は ISC (Internet Software Consortium) によって開発され、保守されています。Debian では、Bind を提供するパッケージは bind9 です。バージョン 9 では、前のバージョンに比べて 2 種類の大きな変更が導入されました。1 番目は、DNS サーバを非特権ユーザとして実行するという変更です。これにより、サーバのセキュリティ脆弱性によって攻撃者に root 特権を渡してしまうことがなくなりました (バージョン 8.x ではこのようなことがよくありました)。
2 番目は、Bind が DNS レコードの署名 (認証されている) に DNSSEC 標準をサポートするようになった変更です。これにより、中間者攻撃中に DNS レコードがなりすましされても、それを遮ることが可能になりました。

10.6.2. 設定

バージョンによらず bind の設定ファイルは同じ構造をしています。
Falcot の管理者は、このドメインに関連する情報を保存するためにプライマリ falcot.com ゾーンを、ローカルネットワーク内の IP アドレスとの逆引き対応を付けるために 168.192.in-addr.arpa ゾーンを、作成しました。
以下に Falcot のファイルから抜粋した設定を載せます。これは DNS サーバの設定の足掛かりになります。

例 10.12 /etc/bind/named.conf.local の抜粋

zone "falcot.com" {
        type master;
        file "/etc/bind/db.falcot.com";
        allow-query { any; };
        allow-transfer {
                195.20.105.149/32 ; // ns0.xname.org
                193.23.158.13/32 ; // ns1.xname.org
        };
};

zone "internal.falcot.com" {
        type master;
        file "/etc/bind/db.internal.falcot.com";
        allow-query { 192.168.0.0/16; };
};

zone "168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.192.168";
        allow-query { 192.168.0.0/16; };
};

例 10.13 /etc/bind/db.falcot.com の抜粋

; falcot.com Zone 
; admin.falcot.com. => zone contact: admin@falcot.com
$TTL    604800
@       IN      SOA     falcot.com. admin.falcot.com. (
                        20040121        ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
; The @ refers to the zone name ("falcot.com" here)
; or to $ORIGIN if that directive has been used
;
@       IN      NS      ns
@       IN      NS      ns0.xname.org.

internal IN      NS      192.168.0.2

@       IN      A       212.94.201.10
@       IN      MX      5 mail
@       IN      MX      10 mail2

ns      IN      A       212.94.201.10
mail    IN      A       212.94.201.10
mail2   IN      A       212.94.201.11
www     IN      A       212.94.201.11

dns     IN      CNAME   ns

例 10.14 /etc/bind/db.192.168 の抜粋

; Reverse zone for 192.168.0.0/16
; admin.falcot.com. => zone contact: admin@falcot.com
$TTL    604800
@       IN      SOA     ns.internal.falcot.com. admin.falcot.com. (
                        20040121        ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL

        IN      NS      ns.internal.falcot.com.

; 192.168.0.1 -> arrakis
1.0     IN      PTR     arrakis.internal.falcot.com.
; 192.168.0.2 -> neptune
2.0     IN      PTR     neptune.internal.falcot.com.

; 192.168.3.1 -> pau
1.3     IN      PTR     pau.internal.falcot.com.