Что происходит с DNS в macOS?

Что происходит с DNS в macOS?

Я использую то, что, как я полагаю, является довольно стандартной настройкой для задротов. Сетевое оборудование Unify, локальный DNS для блокировки рекламы и настраиваемое внутреннее сопоставление доменов ( *.home).

Очень часто мой Mac внезапно просто выходит из строя для внутренних DNS. foo.home? никогда не слышал об этом. Внешние DNS продолжают работать без изменений. Поэтому я устало выламываю старое sudo killall -HUP mDNSResponder(иногда дважды), и внезапно все снова хорошо в мире.

digи nslookupне используйте систему DNS macOS, и они продолжат нормально работать, несмотря на эти сбои.

В случае сбоя, если я запущу, то 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. Я не уверен, как проверить эту гипотезу. Я обслуживаю 2 DNS в конфигурации DHCP, потому что если локальный сервис выйдет из строя/откажется и т. д., то другие жильцы дома не испытают полного отказа «интернета».

Я использую Tailscale, но обнаружил, что эта проблема возникла еще до того, как я начал им пользоваться.

Моя локальная служба DNS — Adguard, работающий как Docker-контейнер HomeAssistant Supervised. DHCP предоставляется Unifi USG.

Настройки DNS DHCP Unifi

Я попытался проанализировать логи в Console.app на предмет mDNSResponder, но они немного запутаны, поскольку, похоже, они хэшируют значения, а я не на 100% понимаю, что ищу.

В Интернете есть немало ссылок на подобные темы, вот некоторые наиболее интересные из них:

Я обнаружил, что эта проблема возникла еще до Вентуры. Она длится уже много лет, и мне это надоело, поэтому хотелось бы разобраться, что здесь происходит.

Связанный контент