在管理 DNS 伺服器(如 BIND9)時,有時會在 lame-servers.log 或一般系統日誌中看到如下訊息:
03-Sep-2025 10:51:51.443 network unreachable resolving './NS/IN': 2001:500:1::53#53
03-Sep-2025 10:51:51.443 network unreachable resolving './NS/IN': 2801:1b8:10::b#53
03-Sep-2025 10:51:51.443 network unreachable resolving './NS/IN': 2001:7fe::53#53
03-Sep-2025 10:51:51.443 network unreachable resolving './NS/IN': 2001:503:c27::2:30#53
乍看之下像是 DNS 出錯,但其實這些只是 IPv6 無法連線的提醒訊息,並不影響實際解析。
🔍 為什麼會出現這些訊息?
BIND 在進行遞迴查詢時,會同時嘗試向根伺服器(Root DNS)查詢 IPv4 與 IPv6。
如果你的伺服器或 Docker 容器 沒有啟用 IPv6 網路或沒有預設 IPv6 路由,
BIND 嘗試連線到 IPv6 根伺服器(如 2001:500:1::53)時,就會出現:
network unreachable resolving './NS/IN'
👉 也就是說,它只是告訴你「IPv6 不通」,並不代表 DNS 功能異常。
IPv4 解析仍然正常進行。
✅ 解決方式(擇一)
方案 A:讓 BIND 僅使用 IPv4(最簡單)
如果你的環境暫時不使用 IPv6,可讓 BIND 啟動時加上 -4 參數。
範例:你原本的啟動腳本為
docker run \
-d -4 \
--name=bind9 \
--restart=always \
-p 53:53/udp \
-p 53:53/tcp \
-v /data/docker/dnssys/bind9.9.21/config:/etc/bind \
-v /data/docker/dnssys/bind9.9.21/cache:/var/cache/bind \
-v /data/docker/dnssys/bind9.9.21/log:/var/log/bind \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
internetsystemsconsortium/bind9:9.21
其中的 -4 位置錯了,應該改成放在 映像名稱之後,如下:
docker run \
-d \
--name=bind9 \
--restart=always \
-p 53:53/udp \
-p 53:53/tcp \
-v /data/docker/dnssys/bind9.9.21/config:/etc/bind \
-v /data/docker/dnssys/bind9.9.21/cache:/var/cache/bind \
-v /data/docker/dnssys/bind9.9.21/log:/var/log/bind \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
internetsystemsconsortium/bind9:9.21 \
-4 -f
這樣 -4 參數會正確傳給容器內的 named 程序,使其只使用 IPv4。
✅ 優點:最簡單直接,立刻清除 IPv6 相關錯誤訊息。
⚠️ 缺點:未來若啟用 IPv6,需要改回。
方案 B:啟用 IPv6 網路支援
若你的網路環境支援 IPv6,或希望 BIND 同時支援 IPv4/IPv6,可在 Docker 啟用 IPv6。
編輯 /etc/docker/daemon.json:
{
"ipv6": true,
"fixed-cidr-v6": "fd00:dead:beef::/64"
}
然後重啟 Docker:
sudo systemctl restart docker
確認容器內能連線至 IPv6:
ping6 2001:4860:4860::8888
✅ 優點:完整 IPv6 功能。
⚠️ 缺點:需網路、防火牆支援 IPv6。
方案 C:靜音這類訊息(不建議,但可行)
如果你只是不想看到這些訊息,可在 named.conf 中調整 logging:
logging {
channel null_chan { null; };
category lame-servers { null_chan; };
// category resolver { null_chan; }; // 有需要可加
};
✅ 優點:不改行為,僅停止輸出。
⚠️ 缺點:只是隱藏訊息,IPv6 還是 unreachable。
💡 補充
./NS/IN指的是根伺服器的 NS 查詢。- 位址如
2001:500:1::53、2001:7fe::53都是 Root DNS 的 IPv6 位址。 - 若 BIND 僅作為權威伺服器,可設定
recursion no;,自然不會對外查詢根伺服器。
🔚 結語
這些「network unreachable resolving ‘./NS/IN’」並非錯誤,只是提示你的伺服器未啟用 IPv6。
最簡單的解法是使用 -4 參數讓 BIND 僅使用 IPv4,或開啟 IPv6 支援以完全消除警告。
無論選哪一種方式,DNS 服務在 IPv4 下都能正常運作。