内部DNSサーバがある環境でのDNSルーティングの適用

概要

ここで言う「DNSルーティング」とは、一部のブロードバンドルータに実装されている、以下のような機能のことです(メーカによる説明は、例えばここ(PDF))。 この説明は、ある特定機種の説明書に基づく理解によるものなので、機種によっては細部に差異があったり同じ名称で異なる機能が提供されている可能性もあります。
一方、ブロードバンドルータでNATを有効にし、内部のホスト/ネットワークを外部には隠蔽する構成では、内部向けDNSサーバで、recursiveネームサービスと、内部のホスト/ネットワークに関するauthoritativeネームサービスを提供する構成も考えられます。ところがこの構成では、クライアントはrecursiveネームサーバとしてブロードバンドルータではなく内部向けネームサーバをアクセスする必要があるので、単純にはDNSルーティングを適用することができません。 そこでこのメモでは、内部向けDNSサーバとDNSルーティングを両立させる手法について説明します。

設定例

想定環境

ここでは諸条件を以下のように想定します。
外部アドレス
ISPから10.20.30.40を固定割り当てされている。
ドメイン名
example.jpという独自ドメインを運用している。
DNSルーティングの対象とするドメイン名
.flets
内部アドレス
192.168.0.0/24を割り当てている。ブロードバンドルータのアドレスは192.168.0.254とする。
DNSサーバ
以下に設定例を挙げるBIND 9のサーバで、ブロードバンドルータの固定masqueradeによりexample.jpの外部向けネームサービスを提供している。また、内部向けにrecursiveサービスおよびexample.jpと0.168.192.in-addr.arpaの2つのゾーンのauthoritativeサービスを提供している。

named.confの設定例


acl internal {
        192.168.0.0/24;
};
options {
        allow-query {
                internal;
                localhost;
        };
};
view "internal" IN {
        match-clients {
                internal;
                localhost;
        };
        zone "localhost" IN {
                type master;
                file "internal/localhost";
        };
        # localhostやprivateの逆索きを適切に
        zone "example.jp" IN {
                type master;
                file "internal/example.jp";
        };
        zone "0.168.192.in-addr.arpa" IN {
                type master;
                file "internal/0.168.192.in-addr.arpa";
        };
        zone "flets" IN {
                type forward;
                forward only;
                forwarders {
                        192.168.0.254;
                };
        };
};
view "exhibit" IN {
        zone "." IN {
                type hint;
                file "/dev/null";
        };
        zone "example.jp" IN {
                type master;
                file "exhibit/example.jp";
                allow-query {
                        any;
                };
        };
};

要点はzone "flets"について、type forwardとしてforwarderをブロードバンドルータに設定していることです。また本題とは関係ありませんが、DNS amplification attackに加担しないために、allow-queryを内部だけに設定し、view exhibitのzone "example.jp"だけ、allow-queryをanyに設定してworldwideからのqueryを許可していることと、同じくview exhibitでrootゾーンについてはネームサービスを提供しないように、file "/dev/null"としています。

DNS amplification attackについての参考資料

バリエーション

この設定のバリエーションを考えてみます。 独自ドメインは運用せず、このDNSサーバで外向けのネームサービスは提供しないことにすれば、viewディレクティブによるsplit DNSは必要なくなります。しかし、DNS amplification attackの対策や内部ホストに関する情報を漏洩させないために、allow-queryによるアクセス制限は、依然、必要です。 上の設定例では、"flets"というドメイン名をDNSルーティングの対象とするという設定をDNSサーバとブロードバンドルータに重複して設定することになるので、zone "flets"の中ではなく、optionsの中で、自分がauthorityを持っている内部ゾーン以外に関するすべてのqueryをブロードバンドルータにforwardするという設定も考えられます。
Copyright(c) 2007, Koh-ichi Ito, All right reserved.
Last update: $Date: 2018-10-21 16:09:48 +0900 (Sun, 21 Oct 2018) $