Dyuichi Blog

自宅DNSサーバー構築

興味本位と、DNSについて理解を深めたいということで、自宅のローカルネットワーク内でDNSサーバーを立ててみた。

環境

OS:Ubuntu20.04

DNSサーバーのIPアドレス:192.168.2.254

ドメイン名:dyna-local(適当)

BINDのインストール

BINDとは、DNSサーバーソフトウェア。

shellsudo apt install bind9

設定ファイルの編集

/etc/bind/ 以下に設定ファイルが生成されている。

/etc/bind/named.conf を確認すると、他のファイルがincludeされている。

shellinclude "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

今回は、named.conf.options と、named.conf.default-zones ファイルを編集する。

named.conf ファイルは以下3つのセクションで構成されている。

options

BINDサーバーの基本的な動作を設定。

logging

BINDのログ設定。ログのレベルや保存先、フォーマットなどを指定可能。

zone

各ドメインに関するゾーン情報を設定。

named.conf.optionsの編集

以下のように設定する。

shelloptions {
    directory "/var/cache/bind";
    
    // クエリを受け入れるクライアントのIPアドレス範囲
    allow-query { localhost; 192.168.1.0/24; };
    
    // 自前で名前解決できないときの転送先
    forwarders { 192.168.2.1; };
};

named.conf.default-zonesの編集

以下のように設定する。

shell// dyna-local の正引きの設定
zone "dyna-local.com" {
    type master;
    file "dyna-local.com.zone";
};

// dyna-local の逆引きの設定
zone "2.168.192.in-addr.arpa" {
    type master;
    file "192.168.2.zone";
};

// 他に追加したいドメインがあれば同様に追記
// 例:dyna-local.xyz の正引きの設定
zone "dyna-local.xyz" {
    type master;
    file "dyna-local.xyz.zone";
};

ゾーンファイルの編集

dyna-local.zone を以下のように設定する。

shell$TTL 3600 
@ IN SOA dyna-local.com. root.dyna-local.com. (
  2024050401 ; Serial
  3H         ; Refresh
  15M        ; Retry
  1W         ; Expire
  1H )       ; Negative cache TTL

; Name Servers
@       IN  NS     dyna-local.com.

; A Records
@       IN  A      192.168.2.254
tv      IN  A      192.168.2.253

192.168.2.zone を以下のように設定する。

shell$TTL 3600 
@ IN SOA dyna-local.com. root.dyna-local.com. (
  2024050401 ; Serial
  3H         ; Refresh
  15M        ; Retry
  1W         ; Expire
  1H )       ; Negative cache TTL

; Name Servers
@       IN  NS     dyna-local.com.

; PTR Records
254     IN  PTR    dyna-local.com.
253     IN  PTR    tv.dyna-local.com.

設定確認

ゾーン設定の確認。

shell$ named-checkzone 192.168.2.in-addr.arpa /etc/bind/192.168.2.zone
zone 192.168.2.in-addr.arpa/IN: loaded serial 2024050401
OK
$ named-checkzone dyna-local.com /etc/bind/dyna-local.com.zone 
zone dyna-local.com/IN: loaded serial 2024050401
OK

構文の確認。

shellnamed-checkconf

ネームサーバー起動
shell# もし起動済みならば
sudo systemctl restart bind9 (or named)
# もし起動していなければ
sudo systemctl start bind9 (or named)

/etc/resolv.confの編集

/etc/resolv.conf にネームサーバーのIPアドレスを追加(以下例)。もともと書かれていたネームサーバーのIPアドレスは消さなくても良い。この編集は同一LAN内で、このネームサーバーを利用するクライアント全てで必要。

ローカルDNSはパブリックDNSよりも上に書かないとだめかもしれません。

shellnameserver 192.168.2.254

動作確認

以下の手順で動作確認を行う。

digコマンドでの確認

以下のようにコマンドを実行し、ANSWER SECTION が得られればOK。

shell$ dig @192.168.2.254 dyna-local.com
~~~
;; QUESTION SECTION:
;dyna-local.com.		IN	A

;; ANSWER SECTION:
dyna-local.com.	3600	IN	A	192.168.2.254

~~~
shell$ dig @192.168.2.254 tv.dyna-local.com
~~~
;; QUESTION SECTION:
;tv.dyna-local.com.		IN	A

;; ANSWER SECTION:
tv.dyna-local.com.	3600	IN	A	192.168.2.109

~~~

Webサーバーを立ち上げて確認

IPアドレスが 192.168.2.254192.168.2.253 のサーバーで以下のコマンドを実行し、Webサーバーを立ち上げる。

shellpython3 -m http.server

dyna-local.comtv.dyna-local.com にアクセスし、サーバーが起動できていることを確認。

参考文献