カテゴリー

アクセスカウンター


since 1996/06/14

アクセス状況

  • 1
  • 8
  • 77
  • 1,785

DNSの深堀りとセカンダリDNS

初めに

最近、色々サーバ設定や構築方法をネットで検索したりAIに聞いたりしているけど、気がつくと同じことを何度も聞いてる感じで、且つベストマッチな回答ってのもなかなか少ないので、自分でも少しメモを残すことにした。AIが主流になってくるとこういうメモを残す人も少なくなってきて、そう云うAIの情報源もズレが出てくる気もするので、その様なものの情報源になっても良いかなって思ってます。(自分用のメモという目的が達成できれば、あとは誰にどの様な目的で使われようが構わない派)

手始めにDNSに関する情報だけど、過去にも少し書いてる気がしますが不十分・古い情報も多くある意味再編なので、ある程度まとまったら過去情報を消して行きたいと思います。

プライマリ構築・設定

ここでは詳細は扱ってません。今後新規構築するなりする機会があれば書きます。
以下、個人的な設定メモだけ。

forwarder

ローカルDNSが扱ってない名前の解決を求められた場合に、他のDNSへ転送します。

forwarders {
    1.1.1.1;
    1.0.0.1;
    8.8.8.8;
    8.8.4.4;
};

forward only;

1.1.1.1と1.0.0.1はCloudflare、8.8.8.8と8.8.4.4はGoogle。AI曰く日本国内は大差無いけど、Cloudflare優先がお勧めらしいです。
また、家庭内DNSならこの設定があればルートDNS(zone “.”でtype hintのやつ)は書かない方がいいんでない?とのこと。理由はforwarderをこれだけ書いてあれば信頼性として十分なのと、ルートDNSへの問い合わせを書くとアクセス方法によっては遅い/余計なトラフィックが掛かるからとのこと。まぁ、民間人がわざわざ王様へお伺いしなくてもいいでしょってこと。

セカンダリ構築・設定

セカンダリ側named.conf

普通は/etc以下だけど、alpine linuxベースのコンテナだと/etc/bind/named.confですが、、、。

まずは全体的な構成です。セカンダリDNSは要するにプライマリDNSを自動複製したものなので、プライマリDNSと構成を同じにすべきなんですが、セカンダリDNSという特性上、いくつかプライマリDNSとは考え方が異なる部分があります。以下全体構造の要約とセカンダリDNS側で考慮する内容です。

options {
    // ここではallow-query、allow-transferなどの設定はすべてnone、ディレクトリ設定など基本的な動作のみ設定。
}
logging {
    // ログの設定
}
acl "allowed-hosts" {
    // インターネット側のアクセス許可の設定だが、セカンダリは家の中からのみアクセス可にするので、このセクション自体削除。
}
acl "allowed-internal-hosts" {
    // 家の中で使ってるサブネットのみ許可
}
view "internal" {
    // 家の中だけ許可
    match-clients           { allowed-internal-hosts; };
    allow-query             { allowed-internal-hosts; };
    allow-query-cache       { allowed-internal-hosts; };
    allow-transfer          { allowed-internal-hosts; };
    allow-recursion         { allowed-internal-hosts; };
    // DNSで扱ってない名前はフォワード
    forwarders {
        1.1.1.1;
        1.0.0.1;
        8.8.8.8;
        8.8.4.4;
    };
    forward only;
    recursion       yes;    // 必須、管理外ドメインの名前も解決する
    dnssec-validation auto; // 署名付きDNS情報が改ざんされていないか確認
    empty-zones-enable yes; // プライベートの逆引きを外部DNSへ転送しない

    zone "d77.jp" IN { // セカンダリとして名前解決したいゾーンで、正引き、逆引きくらい。「.」は要らない。
      type slave; // セカンダリ。どうでもいいけど「secondary」と書いても大丈夫らしい。
      masters {
        プライマリDNSのIP; // セカンダリなので、マスタの指定は必須
      };
      file "ファイル名(名称指定だけでファイルは置かない)";
    };
}
view "external" {
    // セカンダリDNSは家庭内でしか使わないので定義しない。インターネットへ公開しようにも家の外部公開IPは一つしか無いので無理。
}
//以下略

セカンダリはこれだけでゾーンファイルは用意しません。ゾーン転送によって自動作成されます(何故か作成されるゾーンファイルはテキストファイルではなくバイナリファイル)

プライマリ側named.conf

ここでは設定の全体は割愛で、セカンダリと連携の設定だけ。連携したいviewへ以下の追記をする。
なお、「allow-transfer」さえあればセカンダリへの連携が可能です。notifyはプライマリ側で更新があった場合にセカンダリへ即時連携する機能なので、設定されてれば便利ってくらいです。

view "internal" {

    allow-transfer {
        セカンダリ側IP;
    };

    notify yes;

    also-notify {
        セカンダリ側IP;
    };

    ...
};

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>