ラズパイで作る自宅WEBサーバ:nginx編
第2回 DNS設定

2026.09.24
通常、WEBサーバーへのアクセスは、インターネット上のDNSサーバが参照されますが、開発時にはサーバ内部にDNSサーバを立ててテストします。
これにより、レジストラに登録していない任意のドメイン名でのテストが可能になります。

ブロードバンドルータの内側、ローカル側にあるラズパイにDNS設定を行います。
DNS (Domain Name System) はドメイン名とIPアドレスの名前解決を行います。
第1回 Ubuntu Server 設定
で行った各種IPアドレスおよびドメイン名は下記の通りです。
| ブロードバンドルータ: | 192.168.11.1 |
| ラズパイ: | 192.168.11.28 |
| ドメイン名: | example.com |
| ホスト名: | ns.example.com |
●DNS参照順位の確認と設定
サーバー内部のDNSを参照し、該当しない場合は外部DNSを参照するように設定します。
$ resolvectl status | grep 'DNS Server' -A2
Current DNS Server: 192.168.11.1
DNS Servers: 192.168.11.28 192.168.11.1
現在のDNSが192.168.11.1になってしまっています。
この状態ではブロードバンドルータを介して外部のDNSが最初に参照されてしまいます。
Netplanでの指定順位に従わない場合は、systemd-resolved の共通設定ファイルに直接プライマリDNSを強制記述することで解決できます。
最初にサーバー内部のDNSが参照され、該当しない場合は外部DNSを参照しに行きます。
$ sudo vi /etc/systemd/resolved.conf
[Resolve]
DNS=192.168.11.28 192.168.11.1
$ sudo systemctl restart systemd-resolved.service
$ resolvectl status | grep 'DNS Server' -A2
Current DNS Server: 192.168.11.28
DNS Servers: 192.168.11.28 192.168.11.1
再起動後も設定を継承する
$ sudo systemctl enable systemd-resolved.service
リンクを確認します
$ ls -al /etc/resolv.conf
/etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
相対パスから絶対パスへリンクを張り直しています
$ sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
●bind のインストール
BIND(Berkeley Internet Name Domain)は、インターネット上でドメイン名とIPアドレスを変換するDNSサーバー・ソフトウェアです。
パッケージの有無を確認します
$ dpkg --get-selections | grep bind
bind9-dnsutils install
bind9-host install
bind9-libs:arm64 install
パッケージのバージョンの確認します
$ apt-cache show bind9
Package: bind9
Architecture: arm64
Version: 1:9.18.39-0ubuntu0.24.04.5
bind 9 をインストールします
$ sudo apt-get install bind9
●bind の設定
サーバー内部のDNSには、ドメイン名 example.com を設定します。
このドメイン名はレジストラに登録している必要はなく、任意の名称で設定できます。
正引きを設定します
$ sudo vi /etc/bind/db.example.com
;
; BIND reverse data file for example.com zone
;
$ORIGIN example.com.
$TTL 604800
@ IN SOA ns.example.com. root.example.com. (
2026091501; Serial
604800; Refresh
86400; Retry
2419200; Expire
604800 ); Negative Cache TTL
;
IN NS ns.example.com.
IN MX 10 mail.example.com.
IN A 192.168.11.28
IN TXT "v=spf1 +ip4:192.168.11.28 ~all"
ns IN A 192.168.11.28
@ IN A 192.168.11.28
www IN A 192.168.11.28
sub1 IN A 192.168.11.28
sub2 IN A 192.168.11.28
mail IN CNAME ns
@ IN SOA ns.example.com. root.example.com. (
SOA(Start Of Authority) レコード
@ IN SOA ネームサーバの名前 管理者のメールアドレス (...
@ は named.conf の zone "example.com" { の example.com を指す
管理者のメールアドレス root@example.com は root.example.com と記載
IN NS ns.example.com.
NS(Name Server)レコード
example.com ドメインのネームサーバは ns.example.com である
IN A 192.168.11.28
A (host Address)レコード
example.com のIP アドレスは 192.168.11.28 である
IN MX 10 mail.example.com.
MX(Mail eXchange)レコード
example.com宛(****@example.com)メールはmail.example.comに転送すれば届くことを表す
プリファレンス値は小さい方が優先される(10おきに指定するのが慣例)
IN TXT "v=spf1 +ip4:202.241.168.99 ~all"
SPF(Sender Policy Framework)レコード
202.241.168.99: 内部SMTPサーバが外部に出るときに使用するグローバルIPアドレス
ns IN A 192.168.11.28
A (host Address)レコード
ns.example.com のIP アドレスは 192.168.11.28 である
www IN A 192.168.11.28
A (host Address)レコード
www.example.com のIP アドレスは 192.168.11.28 である
mail IN CNAME ns
CNAME(Canonical Name)レコード
mail.example.com の正式名称は ns.example.com である、
つまりmail.example.com は ns.example.com の別名である
逆引きを設定します
$ sudo vi /etc/bind/db.192.168.11.28
$ORIGIN 28.11.168.192.in-addr.arpa.
$TTL 604800
@ IN SOA ns.example.com. root.ns.example.com. (
2026091501; Serial
604800; Refresh
86400; Retry
2419200; Expire
604800 ); Negative Cache TTL
;
IN NS ns.example.com.
@ IN PTR ns.example.com.
@ IN SOA ns.example.com. root.example.com. (
SOA(Start Of Authority) レコード
@ IN SOA ネームサーバの名前 管理者のメールアドレス (...
@ は named.conf の zone "example.com" { の example.com を指す
管理者のメールアドレス postmaster@example.com は postmaster.example.com と記載
2026091501; Serial
内容を更新した際には、現在の値より大きな値に変更します。
日付と枝番で管理するとよいでしょう。
IN NS ns.example.com.
NS(Name Server)レコード
example.com ドメインのネームサーバは ns.example.com である
28 IN PTR ns.example.com.
PTR (PoinTeR)レコード
28: IPアドレスの4オクテッド目
ns.example.com.:ホスト名
192.168.11.28のホスト名は ns.example.com であることを示す
ゾーンファイルを named.conf に追記します
$ sudo vi /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
zone "example.com" {
type master;
file "/etc/bind/db.example.com";
allow-query { any; };
allow-update { none; };
};
zone "28.11.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.11.28";
};
$ sudo vi /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
forwarders {
192.168.11.1; ← ブロードバンドルータのアドレス
};
dnssec-validation auto;
listen-on-v6 { none; }; ← IPV6を利用する場合は、any
};
bind の再起動と有効化を行います。
$ sudo systemctl restart named
$ sudo systemctl enable named
ホスト名からIPアドレスを調べてみます
digコマンドは、DNSに問い合わせて、WebサイトのIPアドレスを調べるためのコマンドです。
Raspberry Pi OSの場合は、まず dnsutils をインストールします。
$ sudo apt install dnsutils
$ dig example.com
; <<>> DiG 9.18.39-0ubuntu0.24.04.5-Ubuntu <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44906
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 7177 IN A 192.168.11.28
;; Query time: 1 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Thu Jul 02 20:32:22 JST 2026
;; MSG SIZE rcvd: 57
IPアドレスをもとにネームサーバ名を逆引きしてみます
$ dig -x 192.168.11.28
; <<>> DiG 9.18.39-0ubuntu0.24.04.5-Ubuntu <<>> -x 192.168.11.28
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60996
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;28.11.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
28.11.168.192.in-addr.arpa. 6942 IN PTR ns.example.com.
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Aug 03 17:46:45 JST 2026
;; MSG SIZE rcvd: 84
サーバ内コンソールから、ping を飛ばしてみます
$ ping example.com
PING example.com (192.168.11.28) 56(84) bytes of data.
64 bytes from ns.example.com (192.168.11.28): icmp_seq=1 ttl=64 time=0.096 ms
64 bytes from ns.example.com (192.168.11.28): icmp_seq=2 ttl=64 time=0.436 ms
64 bytes from ns.example.com (192.168.11.28): icmp_seq=3 ttl=64 time=0.198 ms
64 bytes from ns.example.com (192.168.11.28): icmp_seq=4 ttl=64 time=0.132 ms
LAN内のWindowsパソコンからもブロードバンドルーターの外側にでることなくアクセスできるように設定します。

Windowsパソコンから検証する際は、IPv4プロパティの優先DNSをBIND設定したサーバに振り向けます。
Windowsのコマンドプロンプトから ping を飛ばして確認してみます。
> ping example.com

下記のサイトでDNSの設定をチェックできます。
https://dnscheck.jp
|