LAN内の固定エントリを解決させたいだけなら dnsmasqは不要

ホームラボや開発環境で固定ホスト名を解決したいだけなら、dnsmasqを使わずsystemd-resolvedと/etc/hostsで済ませられる。

LAN内の固定エントリを解決させたいだけなら dnsmasqは不要

ホームラボや開発環境で、以下のような使い方をしている人は多いと思う。

実は、この程度の用途なら dnsmasq は不要で、systemdに標準で含まれているsystemd-resolved のDNS機能だけで十分に実現できる。

systemd-resolved でできること

機能 systemd-resolved dnsmasq
/etc/hosts の解決 ○(デフォルト)
固定ホスト名の解決
.local ドメイン(mDNS) ○(ネイティブ) △(Avahi併用が必要)
Split DNS
DNS over TLS ×
設定のシンプルさ
ワイルドカード(*.dev.local ×
DHCPサーバとの連動 ×

「固定エントリを解決したいだけ」で、ワイルドカードが不要ならsystemd-resolved の方がむしろ優位

systemd-resolvedを「うちのDNSサーバ」にする

systemd-resolvedはデフォルトでは 127.0.0.53にしかバインドされないため、LAN内の他のホストからDNSの問い合わせを受け付けたい場合は明示的にバインドしてやる[1]必要がある。

/etc/systemd/resolved.conf.d/stub-listener-extra.conf

[Resolve]
DNS=8.8.8.8 8.8.4.4  # 上流のDNSサーバー例(DHCPで取れている場合は不要)
DNSStubListenerExtra=192.168.123.10  # 自身(他のマシンから見える)のIPアドレス
DNSStubListenerExtra=fd00::192:168:123:10  # IPv6アドレス(必要なら)。リンクローカルアドレスは使用不可

上記のドロップイン設定ファイルを作成したら、systemd-resolved を再起動して設定を適用する。

systemctl restart systemd-resolved

ファイアウォールが有効な場合は53番ポート(TCP/UDPとも)をLAN向けに解放すること。

/etc/hosts にエントリを追加

192.168.123.1     router.lan
192.168.123.20    nas.lan
192.168.123.30    pihole.lan

確認

他のマシンから

dig @192.168.123.10 nas.lan

Windows では nslookup を使う

nslookup nas.lan 192.168.123.10

これで /etc/hosts に書いた名前が解決できればOK

メリット

注意点・デメリット

これらデメリットに問題がなければ dnsmasq をアンインストールできる。

まとめ

多くのホームラボ勢が「dnsmasq を入れないと…」と思い込んでいるが、実はオーバーキルになっているケースがある。今はおよそどのLinuxディストリビューションも systemdで動いているので、標準で含まれている systemd-resolvedを使って /etc/hosts ファイルだけで解決できるならそれにこしたことはない。

関連記事


  1. この機能は systemd 247 以降にのみ存在するので注意 ↩︎

当社代表のデスクトップ(※)を常時ライブ配信中

※ライブ配信専用PC

OSSの検証や自社用ツールの開発といった公開できる作業に限り、 ライブ配信専用PC上で行っています。常時配信ですのでいつでもお気軽にチャットメッセージ(公開)を残していって下さい。