🍉

【Ubuntu 22.04】内部向けDNSサーバの構築

2023/03/15に公開

目的

今回はBIND9を用いて、内部向けのDNSサーバーを構築する方法を紹介します。

ネットワーク構成

下図に今回のネットワーク構成図をものすごく簡単に示します(適当ですみません)。実際に作成する際は、自分の環境に合わせてファイルの変更等を行なってください(必ずしも、以下のような構成でないといけないわけではありません)。

仕様

client1や2などで、dns.test.com というURIでアクセスしに行くことで、DNSサーバー内部で立っているサーバーにアクセスしにいくことができる。

手順

BIND9インストール

まずは、今回使用するBIND9のインストールを行います。

bash
sudo apt-get update
sudo apt install -y bind9 bind9-utils

BIND9の設定

これから、BIND9に関する設定をたくさんしていくので、ディレクトリを変更しておきましょう。

bash
cd /etc/bind
  1. BIND9の参照先ファイル
bash
sudo vi named.conf
/etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

// ↓新規追加
include "/etc/bind/named.conf.internal-zones";
  1. BIND9のオプションファイルの変更
    ここでは、namedのオプション(問い合わせを許可するネットワーク、再起問い合わせなどの設定をする)に関するファイルを変更していきます。。
bash
sudo vim named.conf.options
/etc/bind/named.conf.options
//↓新規追加
acl internal-network {
        192.168.50.0/24;
};

options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

       // 問い合わせを受け付けるネットワーク(↓新規追加)
        allow-query {
                localhost; internal-network;
        };

       // 再起問い合わせを許可(↓新規追加)
        recursion yes;

        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-validation auto;

        listen-on-v6 { any; };
};
  1. ドメイン定義ファイルの新規作成
bash
sudo vim named.conf.internal-zones
/etc/bind/named.conf.internal-zone
zone "test.com" IN {       
        type    master;
        file    "/etc/bind/test.com.lan";
};

zone "50.168.192.in-addr.arpa" IN {
        type    master;
        file    "/etc/bind/db.50.168.192";
};
  1. ゾーンファイルの変更
bash
sudo vi test.com.lan
/etc/bind/test.com.lan
$TTL 86400
@       IN      SOA     www.test.com. root.test.com. (
        2023031501      ;Serial
        3600            ;Refresh
        1800            ;Retry
        604800          ;Expire
        865400          ;Minimum TTL
)

        IN      NS      www.test.com
dns     IN      A       192.168.50.100
bash
vim db.50.168.192
/etc/bind/db.50.168.192
$TTL 86400
@       IN      SOA     www.test.com. root.test.com. (
        2023031501      ;Serial
        3600            ;Refresh
        1800            ;Retry
        604800          ;Expire
        86400           ;Minimum TTL
)

        IN      NS      www.test.com.
100     IN      PTR     www.test.com.

最後に、以下のコマンドを実行して変更内容を適用しましょう。

bash
sudo systemctl reload named
sudo systemctl enable named

DNSサーバー自身のDNSの設定

netplan等を用いてDNSサーバーを自分自身のIPアドレスに設定してください。今回のような環境の場合では192.168.50.100を設定します。

ファイヤーウォールの設定

ubuntuとかを使っていると、ufwとかを使ってファイヤーウォールの設定をすると思いますが、ホワイトリスト形式にしていると、DNSサービスのポートである53番が塞がっている可能性があるので、53番ポートは開けておくようにしてください。

まとめ

これらの設定を行うことで、内部的にDNSサーバーを建てることができたと思います。用途は様々かと思いますが、誰かの役に立てればと思います。最後まで読んでくださりありがとうございました。

Discussion