dnsmasq (内部 DNS)

// DNSMASQ — maguro 終端 / WG クライアント向け / 最終更新: 2026-05-14

稼働中 maguro 上で稼働 / WG クライアント (10.200.0.0/16) からの DNS リクエストに応答 / 内部 FQDN → 内部 IP の自己解決

役割

maguro で稼働する 軽量 DNS サーバ。 WG クライアントが cloud.k2-o.net 等にアクセスするときに、 外部の Cloudflare DNS ではなく 内部 IP を返すための仕組み。

これがないと:

  • WG クライアントが cloud.k2-o.net を外部 DNS で解決
  • → 公開 IP (フレッツ固定) を取得
  • → RTX1300 → R640 SNI → maguro と SNI passthrough 経路で着信
  • → source IP が R640 SNI 出口 (192.168.30.21) に置換される

WG 専用 DNS で内部 IP を直接返すことで、 WG → maguro 直結 の最短経路で接続できる。

設定ファイル (maguro: /etc/dnsmasq.conf)
address=/cloud.k2-o.net/192.168.20.20
address=/office.k2-o.net/192.168.20.20
address=/admin.wan-secure.net/192.168.20.20
address=/office.wan-secure.net/192.168.20.20
address=/portal.wan-secure.net/192.168.20.20

# WG 内部での待ち受け
listen-address=10.200.0.1
bind-interfaces
port=53

# 上流 (内部解決できなかった場合のフォールバック)
server=1.1.1.1
server=1.0.0.1
注: 旧構成では 192.168.20.21 (R640 内部 IP) を返していた。 2026-05-14 改定後は 192.168.20.20 (maguro 内部 IP) を返す。 cloud.k2-o.net / office.k2-o.net / admin.wan-secure.net 等の終端は全部 maguro に移植済。
WG クライアントへの DNS 配布

WG プロファイルで DNS = 10.200.0.1 を指定すると、 WG 接続中だけ maguro 上の dnsmasq を使う。 切断するとシステムデフォルトに戻る (OS の WireGuard 実装の標準動作)。

[Interface]
PrivateKey = (クライアント秘密鍵)
Address = 10.200.0.x/32
DNS = 10.200.0.1           # ← この行が重要

[Peer]
PublicKey = (maguro wg-clients 公開鍵)
Endpoint = vpn.k2-o.net:54024
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
これがないとどうなる: DNS が外部解決され、 cloud.k2-o.net → フレッツ固定 IP → R640 SNI 経路で着信する。 接続自体はできるが 無駄なホップが増える + 内部 IP allow が効かない。 セキュリティ的に「内部 LAN ユーザー扱い」で発見されない問題が出やすい。
解決する FQDN 一覧
FQDN返す IP用途
cloud.k2-o.net192.168.20.20Nextcloud (maguro)
office.k2-o.net192.168.20.20Collabora (maguro 経由で hirame)
admin.wan-secure.net192.168.20.20運営 Portal (maguro)
office.wan-secure.net192.168.20.20WG 必須サービス
portal.wan-secure.net192.168.20.20運営 Portal alias

※ vpn.k2-o.net は外部 DNS で固定 IP を返す (WG 接続前なので内部解決できない)。

管理コマンド
# 状態確認
sudo systemctl status dnsmasq

# 再起動 (設定変更時)
sudo systemctl restart dnsmasq

# 自動起動有効化
sudo systemctl enable dnsmasq

# 設定文法チェック (起動前推奨)
dnsmasq --test

# WG クライアントから動作確認 (WG 接続中)
nslookup cloud.k2-o.net 10.200.0.1
dig @10.200.0.1 cloud.k2-o.net
トラブルシューティング
症状原因対処
WG 接続中なのに cloud.k2-o.net が外部 IP に解決WG プロファイルの DNS 行がないDNS = 10.200.0.1 を追加
systemctl restart dnsmasq が失敗port 53 が systemd-resolved に占有systemctl disable --now systemd-resolved + /etc/resolv.conf 再生成
WG クライアントから DNS リクエストが届かないiptables で port 53 を遮断iptables -L INPUT -n -v 確認、 wg-clients IF からの 53 を allow
名前は引けるが接続できないnginx allow 設定漏れnginx vhost の allow 10.200.0.0/16 確認
過去の試行錯誤メモ
  • systemd-resolved との衝突: Ubuntu 22.04 デフォルトの systemd-resolved が 127.0.0.53:53 を占有していた。 dnsmasq は bind-interfaces + listen-address=10.200.0.1 で WG IF のみに bind することで衝突回避。 ホスト本体は引き続き systemd-resolved を使う。
  • fabric IP を返すか LAN IP を返すか: 一時期 fabric (173.0.0.5) を返そうとしたが、 fabric は閉域 (R640/hirame 専用) で WG クライアントから到達不可。 結局 LAN IP (192.168.20.20) が正解。
  • port 53 vs 5353: dnsmasq を 5353 に逃がして DNAT する案も検討したが、 WG プロファイル側で port 指定できないクライアントがあるため 53 固定。
  • 上流 DNS の選定: 1.1.1.1 / 1.0.0.1 (Cloudflare) を上流に設定。 高速で censorship 耐性あり。 Google (8.8.8.8) も併用検討したが、 ログ取り問題で Cloudflare 一本に。
2026-05-14 達成: WG → dnsmasq → maguro 直結の最短経路。 WG クライアントの NC 体感速度が改善 (R640 SNI 1ホップ削減 + L7 ACL の正確化)。