本篇文章更新時間:2026/03/20
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持 。
內容目錄
macOS 26 悄悄「禁用」自訂 TLD 的 DNS 解析?從一則 Bug Report 看見蘋果的未爆彈
編輯前言:這篇筆記整理自 Adam Amyl 的技術回報文,全文可見於他的 GitHub Gist:Bug Report: macOS 26 breaks /etc/resolver/ supplemental DNS for custom TLDs。對於依賴 dnsmasq、Kubernetes、Docker 等本機 DNS 的開發者,這是一個值得警覺的系統層級問題。
核心觀點 (Key Takeaways)
- macOS 26 開始,所有非 IANA 官方 TLD 的 DNS 查詢都會被 mDNSResponder 攔截,並強制當作 mDNS 處理。
- 即便 /etc/resolver/ 已正確設置、scutil --dns 也顯示 resolver 已註冊,系統仍會忽略自訂 nameserver。
- 這導致 .internal、.test、.lan、.home.arpa 等 本地開發常用 TLD 全面失效。
深入解析
這篇原文的重點在於:macOS 26 對 DNS 查詢流程做了重大更動,而且完全沒有公告,造成所有依賴本機 DNS 的開發流程集體翻車。
作者描述,他的 Mac 在夜間自動更新到 macOS 26.3.1 後,原本透過 dnsmasq + /etc/resolver/internal 的本地 DNS 組態全數失效。最令人困惑的是:
scutil --dns 仍顯示自訂 TLD 的 resolver 被正確註冊,卻沒有任何查詢真的送到 127.0.0.1。
深入調查後,他發現所有指向 .internal、.test、.lan 等 TLD 的查詢,都被 mDNSResponder「攔截」並回傳一個 cached mDNS "No Such Record",TTL 還誇張到 108002 秒。更驚悚的是,tcpdump 顯示完全沒有任何 DNS 封包到達 127.0.0.1:53。
1. 過去的機制:/etc/resolver/
自 macOS 10.6 起,蘋果允許開發者透過 /etc/resolver/<domain> 來設定 per-domain DNS。例如:
nameserver 127.0.0.1
這可將 *.internal 或 *.test 的 DNS 查詢導向本機 dnsmasq。這在 macOS 25 以前運作完美,為本機開發的常見做法。
2. macOS 26 的改變:私有 TLD 被強制視為 mDNS
macOS 26 將所有「非 IANA TLD」的查詢視為 mDNS,完全跳過 unicast DNS resolver,包括:
.internal.test(RFC 6761 明確保留給此用途).home.arpa.lan- 任何非官方 TLD(例如
.emflocal)
換句話說,只要不是 google.com、bbc.co.uk 這類真的存在於 root zone 的 TLD,就一律走 mDNS → 然後回你「Unknown host」。
3. 影響極大且沒有替代方案
作者指出,這使得以下工具全部受到牽連:
- 使用 dnsmasq 管理本地 .test 或 .internal 的開發者
- Docker Desktop 與容器 DNS
- Vagrant、Tailscale、VPN 工具等會自動寫入 /etc/resolver/ 的軟體
- Kubernetes 的 *.cluster.local 解析
目前唯一能正常運作的 workaround 是 /etc/hosts,但對於動態 DNS 來說根本不實際。
筆者心得與啟發
讀完這篇回報,我最大的感受是:這不是小 bug,而是破壞 macOS 開發環境生態的大地震。
macOS 向來是開發者友善的系統,但這次的改動等於宣告:
只要你的 domain suffix 不在 IANA 官方名單內,macOS 26 就不讓它經過正常 DNS。
這顯然違反開發社群長期沿用的實務,也和 RFC 6761 對 .test 的規範相牴觸。更麻煩的是,它沒有任何錯誤提示,連 scutil 都顯示「一切正常」,真正的問題卻被隱藏在 mDNSResponder 裡。
對我而言,這類「靜默破壞既有技術」的系統更新才是最危險的類型。實務上,我會建議:
- macOS 26 使用者避免更新(能退回 25.x 更好)
- 若專案依賴本地 DNS resolver,在團隊內提前提醒
- 持續追蹤 Apple 官方是否回應這則 Feedback(原文紀錄於 FA: 22280434)
這件事也再次提醒我,在 macOS 上做開發,永遠要提防自動更新,尤其是網路協定層面的異動。
