自宅のPCやサーバーへアクセスするとき、IPアドレスを毎回入力するのは手間です。自宅にDNSサーバーを構築すれば、登録したホスト名から対応するIPアドレスを名前解決できます。
この記事では、Ubuntu ServerとBIND9を例に、自宅DNSサーバーの準備からホストの登録、端末からの利用、動作確認までを解説します。
自宅にDNSサーバーを構築する前に必要なものを確認する

自宅DNSサーバーには、DNSサーバーとして動作するPCと、自宅ネットワーク内からそのPCへ接続できる環境が必要です。
DNSは、ホスト名やドメイン名とIPアドレスを対応付けて名前解決する仕組みです。構築前に、どのPCでDNSサーバーを動かし、どの名前を自宅DNSサーバーで解決するのかを決めます。
DNSサーバー用のPCとネットワーク環境を用意する
この記事では、DNSサーバー用のPCとしてUbuntu Serverを使用し、BIND9をインストールする構成を例に進めます。サーバー用PCの性能や24時間運用の条件から決める場合は、ホームサーバー用PCの選び方で確認できます。
UbuntuのBIND9公式ドキュメントでは、BIND9をキャッシュDNSサーバー、プライマリDNSサーバー、セカンダリDNSサーバーとして構成する方法が案内されています。自宅内のホスト名とIPアドレスを登録する用途では、ゾーン情報を持つプライマリDNSサーバーとして構成できます。
DNSサーバーへ継続してアクセスできるよう、サーバー側のIPアドレスは変わらない状態にします。MicrosoftのDNS Server公式ドキュメントでも、構築前の要件として静的IPアドレスが挙げられています。
- DNSサーバーとして動作させるPC
- 自宅LANへ接続できるネットワーク環境
- DNSサーバーのIPアドレスが変わらない構成
- DNSサーバーの設定を変更できる管理権限
特定のCPU性能やメモリ容量は条件にしていません。今回確認した一次情報では、自宅DNSサーバー全般に適用できる最低CPU・メモリ容量までは確認できなかったためです。
自宅DNSサーバーで名前解決する範囲を決める
自宅LAN内のPCやサーバーを名前で呼び出すには、管理する名前とIPアドレスの組み合わせを決めておきます。
| 決めておく項目 | 内容 |
|---|---|
| 名前解決する範囲 | 自宅DNSサーバーで管理するゾーン |
| ホスト名 | 名前でアクセスしたいPCやサーバー |
| IPアドレス | 各ホスト名に対応させるアドレス |
BIND9では、プライマリサーバーとして管理するゾーンを設定し、ゾーンファイルへDNSレコードを登録できます。UbuntuのBIND9公式ドキュメントにも、ゾーンを定義してAレコードなどを追加する手順が示されています。
自宅にDNSサーバーを構築する

準備ができたら、Ubuntu ServerへBIND9をインストールし、自宅で名前解決する情報を登録します。
DNSサーバーソフトをインストールして基本設定を行う
Ubuntu Serverでは、Ubuntu公式ドキュメントに記載されている次のコマンドでBIND9をインストールできます。
sudo apt install bind9
動作確認でdigなどのツールを使う場合は、dnsutilsもインストールします。
sudo apt install dnsutils
BIND9の設定ファイルは/etc/bindディレクトリに配置されます。Ubuntuの標準構成では、ゾーンの設定に/etc/bind/named.conf.local、DNSのオプション設定に/etc/bind/named.conf.optionsなどを使用します。
自宅内で管理するゾーンを作る場合は、named.conf.localへ対象ゾーンとゾーンファイルを指定します。ゾーン名やファイル名は、自分の環境に合わせて設定します。
設定を反映するにはBIND9を再起動します。
sudo systemctl restart bind9.service
名前解決するホストとIPアドレスを登録する
ゾーンファイルには、名前でアクセスしたい機器とIPアドレスの対応をDNSレコードとして登録します。
IPv4アドレスとホスト名を対応付ける代表的なレコードがAレコードです。UbuntuのBIND9公式ドキュメントでも、プライマリDNSサーバーのゾーンファイルへAレコードを追加する構成が示されています。
自宅サーバーを登録するなら、そのホスト名と実際に使用しているIPアドレスを対応させます。DNSへ登録したIPアドレスと対象機器のIPアドレスが異なれば、意図した名前解決はできません。
ゾーンファイルを変更したときはSOAレコードのSerialを更新し、BIND9を再起動して変更を反映します。
ルーターや端末のDNS参照先を自宅DNSサーバーへ変更する
ほかの端末から利用するには、DNSの参照先を自宅DNSサーバーへ向けます。DNSサーバーを構築しただけでは、端末が自動的に利用するとは限りません。
端末ごとに設定する場合は、ネットワーク設定のDNSサーバー欄へ自宅DNSサーバーのIPアドレスを指定します。Windowsでは静的なDNSサーバーアドレスを設定でき、MicrosoftのDNSクライアント公式ドキュメントで設定方法を確認できます。
ルーターから複数端末へDNS設定を配布できるかどうかは機種によって異なります。ルーター側で設定する場合は、使用機種の仕様を確認します。
DNSを利用した家庭内ネットワークの別の用途として、自宅サーバーでDNSフィルタを使って広告をブロックする方法も確認できます。
DNSサーバーが正しく動作するか確認する

構築後は、利用する端末から名前解決を実行します。登録した名前に対応するIPアドレスが返るかを見ます。
名前解決できるか端末から確認する
Windowsではnslookupを使えます。Microsoftのnslookup公式ドキュメントでは、nslookupはDNSインフラストラクチャーの診断に利用できるコマンドとして案内されています。
コマンドプロンプトから、自宅DNSサーバーへ登録した名前を指定します。
nslookup 登録したホスト名
nslookupの第2引数にDNSサーバーを指定すれば、端末の既定DNSとは別に、自宅DNSサーバーへ直接問い合わせることもできます。
Ubuntuなどdigを利用できる環境では、digでも名前解決を調べられます。Ubuntu公式ドキュメントでもBIND9のテストに使用されています。
dig 登録したホスト名
登録した名前に対して意図したIPアドレスが返れば、ホスト名とIPアドレスの対応を確認できます。
名前解決できない場合はDNS設定と通信状態を確認する
名前解決に失敗したら、設定を一度に変更せず、どこで問題が起きているかを切り分けます。
- DNSサーバーでBIND9が動作しているか見る
- 端末が参照しているDNSサーバーを調べる
- 端末からDNSサーバーへ通信できるか調べる
- ゾーンとDNSレコードの設定を見直す
- DNSサーバーを明示して名前解決を再実行する
Ubuntuではresolvectl statusでローカルリゾルバーが使用しているDNSサーバーを調べられます。ゾーンファイルはnamed-checkzoneで検査でき、digは問い合わせのテストに使えます。これらの方法はUbuntuのBIND9公式ドキュメントでも案内されています。
DNSの通信にはUDPとTCPの53番ポートが使われます。これはRFC 1035で定められています。DNSサーバーへ問い合わせが届かない場合は、ネットワークやファイアウォールを含め、DNS通信が妨げられていないかを調べます。
DNSサーバーを直接指定すると名前解決できるのに、通常の問い合わせでは失敗するなら、端末側のDNS参照先を見直します。直接指定しても失敗する場合は、BIND9の動作状態、ゾーンとDNSレコード、サーバーまでの通信状態を順に切り分けます。
DNSサーバー用PCをモニターなしで常設して遠隔管理する場合は、PCをモニターなしで運用する設定と遠隔操作方法も参考になります。
まとめ
自宅にDNSサーバーを構築するには、DNSサーバー用のPCとネットワーク環境を用意し、名前とIPアドレスを登録したうえで、利用する端末のDNS参照先を設定します。
Ubuntu ServerではBIND9を利用できます。構築後はdigやnslookupで名前解決をテストし、失敗した場合はDNSの参照先、BIND9の動作、登録内容、通信状態を切り分けます。これで、自宅環境でDNSサーバーを使って名前解決するための構築から動作確認までを進められます。

