---
title: LAN内の固定エントリを解決させたいだけなら dnsmasqは不要
description: ホームラボや開発環境で固定ホスト名を解決したいだけなら、dnsmasqを使わずsystemd-resolvedと/etc/hostsで済ませられる。
image: dnsmasq-systemd-resolved.jpg
date: 2026-05-13 14:25:00
---

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

- `nas.lan` や `router.lan` などの固定ホスト名を解決させたい
- dnsmasq を入れて `address=/nas.lan/192.168.123.20` のような設定だけをしている

実は、**この程度の用途なら 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]必要がある。

[^1]: この機能は systemd 247 以降にのみ存在するので注意

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

```ini
[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` を再起動して設定を適用する。

```bash
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
```

## 確認

他のマシンから

```bash
dig @192.168.123.10 nas.lan
```

Windows では `nslookup` を使う

```
nslookup nas.lan 192.168.123.10
```

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

## メリット

- **最初からある**：systemd-resolved は systemd の一部
- **設定が極めてシンプル**：バインドするIPアドレスを増やすだけ
- **mDNS/LLMNR も引ける**：`.local` ドメインを特別な設定なしで解決可能
- **DNS over TLS** などの現代的機能が使える

## 注意点・デメリット

- **ワイルドカードは使えない** `*.dev.local` のような一括解決は不可
- **大量エントリには向かない** /etc/hostsに全部書くため
- **動的登録はできない** DHCPとの連携機能はない
- **A/AAAA/PTR以外は設定できない** /etc/hostsではそれしか表現できないため

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

## まとめ

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

## 関連記事

- [localhost を使った開発で TLS を有効にする方法](localhost-tls-development.md)
- [またWiFiがつながらなくなったLinuxユーザーの日常: RTL8723BSとLinux 7.0](rtl8723bs-linux-7-wifi.md)
- [Zabbixを使ってエージェント無しで単純な Webサイト監視だけを行う最短の方法](zabbix-simple-web-monitoring.md)
- [OP25Bを回避するため Postfixのリレー先を gmailに設定する方法](gentoo-postfix-relay-gmail.md)
