我運行的是我認為相當標準的書呆子設置。統一網路設備、用於廣告攔截的本機 DNS 和自訂內部網域對應 ( *.home
)。
我的 Mac 經常會突然出現內部 dns 故障。foo.home
?從來沒聽過。外部 DNS 繼續不受影響。於是,我疲倦地擺脫了舊事sudo killall -HUP mDNSResponder
(有時兩次),突然之間,世界又恢復正常了。
dig
並且nslookup
不使用 macOS dns 系統,它們在這些中斷期間繼續正常工作。
在停電時,如果我運行,dscacheutil -q host -a name foo.home
我什麼也得不到。重新啟動mDNSResponder
,它會很好地提供輸出:
name: foo.home
ip_address: 192.168.1.4
同樣適用於dns-sd -q foo.home
:
DATE: ---Wed 12 Jul 2023---
10:39:54.691 ...STARTING...
Timestamp A/R Flags IF Name Type Class Rdata
10:39:54.692 Add 40000002 0 foo.home.v Addr IN 0.0.0.0 No Such Record
然後重新啟動 mDNSResponder 並:
DATE: ---Wed 12 Jul 2023---
10:58:17.585 ...STARTING...
Timestamp A/R Flags IF Name Type Class Rdata
10:58:17.591 Add 2 0 foo.home. Addr IN 192.168.1.4
這種故障經常會毒害瀏覽器內部 dns 緩存,我必須清除它,到目前為止我所見過的 Brave、Firefox 和 Safari 就是這種情況。
這是我的scutil --dns
輸出:
DNS configuration
resolver #1
search domain[0] : tail44a85.ts.net
search domain[1] : home
nameserver[0] : 100.100.100.100
if_index : 22 (utun3)
flags : Supplemental, Request A records, Request AAAA records
reach : 0x00000003 (Reachable,Transient Connection)
order : 100200
resolver #2
nameserver[0] : 192.168.1.4
nameserver[1] : 9.9.9.9
if_index : 15 (en0)
flags : Request A records
reach : 0x00020002 (Reachable,Directly Reachable Address)
order : 200000
resolver #3
domain : tail44a85.ts.net.
nameserver[0] : 100.100.100.100
if_index : 22 (utun3)
flags : Supplemental, Request A records, Request AAAA records
reach : 0x00000003 (Reachable,Transient Connection)
order : 100201
resolver #4
domain : local
options : mdns
timeout : 5
flags : Request A records
reach : 0x00000000 (Not Reachable)
order : 300000
resolver #5
domain : 254.169.in-addr.arpa
options : mdns
timeout : 5
flags : Request A records
reach : 0x00000000 (Not Reachable)
order : 300200
resolver #6
domain : 8.e.f.ip6.arpa
options : mdns
timeout : 5
flags : Request A records
reach : 0x00000000 (Not Reachable)
order : 300400
resolver #7
domain : 9.e.f.ip6.arpa
options : mdns
timeout : 5
flags : Request A records
reach : 0x00000000 (Not Reachable)
order : 300600
resolver #8
domain : a.e.f.ip6.arpa
options : mdns
timeout : 5
flags : Request A records
reach : 0x00000000 (Not Reachable)
order : 300800
resolver #9
domain : b.e.f.ip6.arpa
options : mdns
timeout : 5
flags : Request A records
reach : 0x00000000 (Not Reachable)
order : 301000
DNS configuration (for scoped queries)
resolver #1
search domain[0] : home
nameserver[0] : 192.168.1.4
nameserver[1] : 9.9.9.9
if_index : 15 (en0)
flags : Scoped, Request A records
reach : 0x00020002 (Reachable,Directly Reachable Address)
resolver #2
search domain[0] : tail44a85.ts.net
nameserver[0] : 100.100.100.100
if_index : 22 (utun3)
flags : Scoped, Request A records, Request AAAA records
reach : 0x00000003 (Reachable,Transient Connection)
我在網路上看到一些抱怨,認為「後備」dns 可能是問題所在,即 mDNSResponder 嘗試了我們當地的男孩,由於任何網路或服務怪異而出現了問題,然後將其註銷並轉到 DNS#2 。我不知道如何檢驗這個假設。我在 DHCP 配置中提供 2 個 DNS,因為如果本地服務失敗/崩潰等,其他住戶不會遇到“互聯網”完全故障。
我確實運行 Tailscale,但我發現這個問題早在我使用它之前就出現了。
我的本地 dns 服務是 Adguard,作為 HomeAssistant 受監督的 Docker 容器運作。 DHCP 由 Unifi USG 提供。
我嘗試解析 Console.app 中的 mDNSResponder 日誌,但它有點神秘,因為它似乎是散列值,而且我並不是 100% 我正在尋找的東西。
網路上有很多關於此類事情的熱門話題,其中一些更有趣的是:
- https://discussions.apple.com/thread/254717652
- https://www.reddit.com/r/MacOS/comments/s4ngui/dns_issues_on_safari/
我發現這個問題早於文圖拉。這種情況已經持續了很多年,我已經厭倦了,所以想弄清楚這裡到底發生了什麼事。