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.net | 192.168.20.20 | Nextcloud (maguro) |
office.k2-o.net | 192.168.20.20 | Collabora (maguro 経由で hirame) |
admin.wan-secure.net | 192.168.20.20 | 運営 Portal (maguro) |
office.wan-secure.net | 192.168.20.20 | WG 必須サービス |
portal.wan-secure.net | 192.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 の正確化)。