macOS DNS 發生了什麼事?

macOS DNS 發生了什麼事?

我運行的是我認為相當標準的書呆子設置。統一網路設備、用於廣告攔截的本機 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 提供。

Unifi DHCP DNS 設定

我嘗試解析 Console.app 中的 mDNSResponder 日誌,但它有點神秘,因為它似乎是散列值,而且我並不是 100% 我正在尋找的東西。

網路上有很多關於此類事情的熱門話題,其中一些更有趣的是:

我發現這個問題早於文圖拉。這種情況已經持續了很多年,我已經厭倦了,所以想弄清楚這裡到底發生了什麼事。

相關內容