Product SiteDocumentation Site

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

10.6.1. 原理とメカニズム

ドメインネームサービス (DNS) はインターネットの基礎要素です。つまり DNS はホスト名を IP アドレスに対応付け (逆に IP アドレスをホスト名に対応付けることも行います)、5.153.231.42001:41c8:1000:21::21:4 の代わりに www.debian.org を使えるようにします。
DNS レコードはゾーン分けされています。それぞれのゾーンはドメイン (またはサブドメイン) か IP アドレス範囲に対応付けられます (なぜなら、ゾーンは通常連続した IP アドレス範囲を割り当てられるからです)。プライマリサーバはあるゾーンに含まれる内容の情報を提供する権威的なサーバです。さらに、セカンダリサーバは通常プライマリサーバとは別のマシン上でホストされ、定期的にプライマリゾーンのコピーをとるサーバです。
各ゾーンには、さまざまな種類のレコード (リソースレコード) が含まれます。
  • A。IPv4 アドレスを意味します。
  • CNAME。別名 (canonical name) を意味します。
  • MXmail exchange つまり電子メールサーバを意味します。MX レコードは電子メールサーバが自分の管理下にないアドレス宛の電子メールの送信先を見つけるために使われます。それぞれの MX レコードには優先度があります。最も優先度の高いサーバ (最も低い番号のサーバ) に対する送信を最初に試行します (補注BACK TO BASICS SMTP」を参照してください)。さらに、最初のサーバからの応答がなかった場合、他のサーバを優先度の高い順に試行します。
  • PTR。ある IP アドレスに対する名前の対応付けを意味します。PTR レコードはある 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 です。Bind バージョン 9 では、前のバージョンに比べて 2 種類の大きな変更が導入されました。1 番目は DNS サーバを非特権ユーザとして実行するという変更です。これにより、サーバのセキュリティ脆弱性によって攻撃者に root 権限を渡してしまうことがなくなりました (バージョン 8.x ではこのようなことがよくありました)。
2 番目は Bind が DNS レコードの署名 (すなわち DNS レコードの認証) に DNSSEC 標準をサポートするようになった変更です。これにより、中間者攻撃で DNS レコードが偽装された場合に、偽装された DNS レコードを遮断することが可能になりました。

10.6.2. 設定

バージョンによらず bind の設定ファイルは同じ構造をしています。
Falcot の管理者は falcot.com ドメインに関連する情報を保存するためにプライマリ 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 ゾーン
; admin.falcot.com. でゾーン連絡先アドレスに admin@falcot.com を指定したことになります
$TTL    604800
@       IN      SOA     falcot.com. admin.falcot.com. (
                        20040121        ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
; @ はゾーン名 (ここでは "falcot.com") または
; $ORIGIN 指示文が使われていた場合 $ORIGIN を意味します
;
@       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 の抜粋

; 192.168.0.0/16 用の逆引きゾーン
; admin.falcot.com. でゾーン連絡先アドレスに 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.