はじめに
この前自宅を大掃除し、使っているサーバ群を整理しました。このサーバもある程度数が殖えてきて、IPアドレスだけだとどれがどれだか分からなくなってきました。
そこで、自宅にDNSサーバを建ててみることにしました。こうすることで、IPアドレスではなく意味を持たせた文字列でサーバにアクセスできるようになり、区別や管理がしやすくなるはずです。
やったこと
今回は、UnboundというDNSサーバを使ってDNSサーバを建ててみました。使用したOSはUbuntu 24.04 LTSです。
Unboundのインストール
まずはUnboundをインストールします。
sudo apt update
sudo apt install unbound
Unboundの設定
次にUnboundの設定を行います。
sudo nano /etc/unbound/unbound.conf
以下のように設定します。
server:
# ログ出力ファイルの設定
logfile: "/var/log/unbound.log"
# ログ出力先にsyslogを使用しない
use-syslog: no
# エラーと操作情報を出力
verbosity: 1
# リクエストの受付
interface: 0.0.0.0
interface: ::0
# アクセスを許可
access-control: 0.0.0.0/0 refuse
access-control: xxx.xxx.xxx.0/24 allow
access-control: 127.0.0.1 allow
# ローカルネットワークのリクエストを受け付ける
domain-insecure: "home"
# 対応を正引きと逆引きの両方記述する
local-data: "hogefoo.home. IN A xxx.xxx.xxx.1"
local-data-ptr: "xxx.xxx.xxx.1 hogefoo.home"
# フォワーダーの設定
forward-zone:
name: "."
forward-addr: 10.32.10.1
xxx.xxx.xxx.0/24
は自宅のネットワークアドレスに置き換えてください。まず全てを拒否し、その後自宅のネットワーク内のみアクセスを受け付けるという流れです。
また、自分が自分を呼び出せるように、ローカルホストのアクセスも許可しておきます。
変換はサーバの数だけ書きます。ドメイン名→IPアドレスを書くときにはドメイン名の末尾に.
をつけることに注意してください。
.com
みたいなところは適当に決めることができますが、実在するドメイン名との競合を避けるため、自宅ならhome
、会社ならcompany
などにしておくとよいでしょう。
自分は[業務内容].[苗字].home
という形にしています。これでサーバの区別がつきやすくなりました。
Unboundの起動
Unboundは他のDNSサーバと競合する可能性があります。そのため、他のDNSサーバを停止しておきます。
sudo nano /etc/systemd/resolved.conf
以下のように設定します。
DNSStubListener=no
設定を変更したら再起動します。
sudo systemctl restart systemd-resolved
また、Unboundはデフォルトで53番ポートを利用しているので、ファイアウォールを設定している場合は導通させておきます。
sudo ufw allow 53
sudo ufw enable
ここまでできたら、Unboundを再起動します。
sudo systemctl restart unbound
Unboundの動作確認
Unboundが正しく動作しているか確認します。
nslookup hogefoo.home localhost
以下のような結果が返ってくれば成功です。
Server: localhost
Address: 127.0.0.1#53
Name: hogefoo.home
Address: xxx.xxx.xxx.1
クライアント側での設定
DNSサーバを立てたはいいものの、これだけではクライアントが名前解決をしてもらうことができません。なので、クライアント側でDNSサーバを設定します。
今回はWindowsの場合について説明します。Mac等の場合も似たような手順で設定できるはずです。
まず、ネットワークとインターネットの設定を開きます。「ネットワークと共有センター」を開いて、接続しているネットワークをクリックします。「プロパティ」をクリックし、プロパティを開きます。
一覧から「インターネット プロトコル バージョン 4 (TCP/IPv4)」を選択し、「プロパティ」をクリックします。
「次の DNS サーバー アドレスを使用する」を選択し、プライマリDNSサーバにUnboundをインストールしたサーバののIPアドレスを入力します。
これでクライアント側での設定は完了です。
ping
コマンドなどで名前解決ができるか確認してみてください。Webブラウザでhttp
を使ってアクセスしてみてもいいでしょう。
わからなかったこと
建てたDNSサーバをクライアント側でセカンダリDNSとして設定すると、名前解決ができなくなりました。
また、建てたものをプライマリ、元々のデフォルトゲートウェイのDNSをセカンダリに設定すると、名前解決ができたりできなかったりしました。
そのため、先述したように今回建てたDNSサーバをプライマリとし、セカンダリの設定はしませんでした。
なんでかわからなかったのですが、先述の通り建てたDNSサーバは名前解決ができなかったときに、デフォルトゲートウェイのDNSに問い合わせるようになっているので、この設定でも問題ないようです。
おわりに
これで自宅にDNSサーバを建てることができました。利用のためにはクライアント側でDNSサーバを設定する必要がありますが、これで自宅のサーバを管理しやすくなりました。
できればデフォルトゲートウェイとなっているルータの設定を変更し、名前解決したいサーバのIPアドレスを登録する形にしてクライアント側での設定を不要にしたかったのですが、そういった設定ができないルータだったようで、仕方なく今回のような形としました。
サーバが増えてきたら、アクセスの利便性のためにもDNSサーバを建てることをおすすめします。
それではまた。
参考文献
Unboundで自宅のLAN内の名前解決がしたい #Linux - Qiita
奥が深いDNSサーバーとdigコマンド #dns - Qiita
第834回 Unboundでお手軽に家庭内DNSサーバーを作ろう[Ubuntu 24.04 LTS対応版] | gihyo.jp
unbound-control(8) | 日本Unboundユーザー会
Unbound on CentOS7でローカルDNSサーバを構築してみる - ニートのMEMO
俺様サーバー構築記 - LAN内DNSサーバー Unbound @デスクトップパソコン(BIOS) #dns - Qiita