modern-utopia.net In the beginning was the name, where ideas take shape.
サイト

宅内DNSの構築と、最終的な利用を断念した話

2026-07-26

先日導入したNASに、宅内DNSを構築しようとしたのだが、最終的に失敗。

CoreDNSコンテナを立ち上げるが、いろいろ調整が必要だった。

  1. 設定ファイルをボリュームでバインドさせようとしたら、エラーが発生 →起動ユーザを変更する
  2. NASの内部で、127.0.0.1用にdnsmasqが動いている。 →portsで外部IP向けにのみポートを開放し、127.0.0.1向けには開放しない

いろいろ修正した結果 docker-compose.yaml は下記のような形になる。

  coredns:
    image: coredns/coredns:1.12.4
    container_name: coredns
    user: "XXX:XXX"
    restart: unless-stopped
    environment:
      GOMAXPROCS: "8"
    command:
      - -conf
      - /etc/coredns/Corefile
    ports:
      - "192.168.123.XXX:53:53/udp"     # IPv4 NASのLAN側IP向け
      - "192.168.123.XXX:53:53/tcp"     # IPv4 NASのLAN側IP向け
      - "[2001:db8:1234:5678::53]:53:53/udp"  # IPv6 NASのLAN側IP向け
      - "[2001:db8:1234:5678::53]:53:53/tcp"  # IPv6 NASのLAN側IP向け
    volumes:
      - ./coredns:/etc/coredns:ro

Corefileファイル

.:53 {
    errors
    log

    hosts /etc/coredns/hosts {
        reload 5s
        fallthrough
    }

    # Resolve names not registered above through upstream DNS servers.
    forward . 1.1.1.1 8.8.8.8
    cache 30
}

hostsファイル

192.168.123.XXX test.modern-utopia.net
192.168.123.XXX live.test.modern-utopia.net

DNSサーバの立ち上げ後、Windows端末からはDNS IPv4・DNS IPv6両方を手動設定することにより、宅内ホストの名前解決ができるようになったので、DNSとして動作することは確認できた。

ただ、Android端末については宅内ホストの名前解決が行えない。 今回確認した機種ではDNSの手動設定はIPv4しか設定できなかったのでそれが原因ではないかと想像している。 ※機種やOSバージョンによっては設定できるものもあるかもしれない。
これは想像になってしまうが、Android端末はおそらくIPv6の機能で通知された、別のDNSサーバで名前解決してしまっているので、今回構築したDNSを利用せずに別のDNSサーバを使用していると思われる。

よくよく調べてみると、IPv6の場合、DHCPも存在しているが、DHCPを使用せずとも、IPアドレスの自動設定やDNSアドレスを通知する仕組みがある。
ルータから、ルータ広告(RA / Router Advertisement)というパケットを投げて、IPv6プレフィックスやデフォルトゲートウェイ関連の情報を通知できる。また、RDNSSオプションによりDNSサーバのアドレスも同様に通知できる。

ルータの設定を確認したが、設定画面にDHCPv6の項目がない。かといって、RAが配布する情報を変更できるような項目もない。
打つ手がないので、宅内DNSの運用はあきらめた。