Перейти до основного вмісту

Посібники / Виправити: посібники для помилок, з якими стикаються насправді

DNS_PROBE_FINISHED_NXDOMAIN: що означає і як виправити

DNS_PROBE_FINISHED_NXDOMAIN означає, що пошук для набраного вами імені хоста повернув відповідь "такого імені немає". Браузер так і не отримав IP-адресу, тож так і не відкрив з'єднання. Проблема в розв'язанні імені, а не у веб-сервері сайту.

Що означає ця помилка

NXDOMAIN - це код відповіді DNS, скорочення від non-existent domain (домен не існує). Резолвер повертає його, пройшовши весь ланцюжок від кореня до зони, яка мала б містити ваше ім'я хоста, і нічого там не знайшовши. Chrome показує DNS_PROBE_FINISHED_NXDOMAIN. Firefox каже, що не може з'єднатися із сервером. Safari каже, що не може знайти сервер. Усі три повідомляють про одне й те саме.

NXDOMAIN - це не те саме, що збій резолвера, і саме ця різниця визначає, де шукати причину. Якщо ваш резолвер недоступний чи не відповідає вчасно, ви отримаєте повідомлення на кшталт "DNS-сервер не відповідає". Якщо зона відповідає, але зламана - наприклад, ланцюжок DNSSEC не проходить валідацію - зазвичай ви отримаєте SERVFAIL. NXDOMAIN - це остаточна відповідь: імені просто не опубліковано.

Під час діагностики важлива одна властивість NXDOMAIN понад усе інше. Негативні відповіді кешуються. Згідно з RFC 2308 резолвер кешує результат "такого імені немає" на інтервал, зазначений у SOA-записі зони, зазвичай від 5 до 60 хвилин. Домен, що почав працювати дві хвилини тому, все ще може не працювати на вашій машині, і жодні перезавантаження сторінки цього не змінять, поки запис у кеші не застаріє або ви не очистите його самі.

Чому це стається

  • Одруківка в імені хоста. Найпоширеніша причина з великим відривом, і та, яку всі перевіряють останньою.
  • Домен не зареєстровано або його термін дії минув. Прострочений домен зазвичай прибирають із зони протягом кількох годин після закінчення пільгового періоду.
  • Немає делегування nameserver. Домен існує в реєстратора, але не має NS-записів, що вказували б на DNS-провайдера, тож батьківській зоні немає куди перенаправити резолвер.
  • Запис видалено чи перейменовано. Відсутній A- чи CNAME-запис для www дає NXDOMAIN для www.example.com, тоді як голий домен усе ще працює.
  • Зміна ще не дійшла до вашого резолвера. Появі нових записів усюди може знадобитися час до TTL попереднього запису.
  • Закешована негативна відповідь на вашому пристрої, у браузері чи на резолвері вашого провайдера.
  • Запис у файлі hosts, що вказує ім'я на щось, чого вже не існує, або застарілий рядок від старого тесту.
  • VPN, проксі чи фільтрувальне ПЗ, що самі відповідають на DNS-запити й блокують ім'я або не можуть його розв'язати.
  • Ім'я хоста, що існує лише в приватній мережі, до якої ви наразі не підключені, наприклад внутрішній домен .local чи корпоративний домен.

Як це виправити

Спершу ще раз перевірте набрану адресу, потім рухайтеся від браузера до мережі. Тестуйте після кожного кроку, а не виконуйте їх усі одразу.

Браузер

  1. Відкрийте ту саму адресу у приватному вікні. Якщо там вона завантажується, річ у розширенні чи cookie, а не в DNS.
  2. Очистіть власний кеш резолвера Chrome за адресою chrome://net-internals/#dns, а потім скиньте пули сокетів за адресою chrome://net-internals/#sockets. Chrome тримає кеш окремо від операційної системи, тож саме лише очищення на рівні ОС часто нічого не змінює.

Windows

  1. Очистіть кеш резолвера: ipconfig /flushdns
  2. Поновіть мережеву оренду, що також підхопить DNS-сервери, видані через DHCP:
    ipconfig /release
    ipconfig /renew
  3. Перезапустіть службу кешування, якщо очищення не закріплюється:
    net stop dnscache
    net start dnscache
  4. Перевірте файл C:\Windows\System32\drivers\etc\hosts на рядок з іменем домену і видаліть його, якщо він застарілий.
  5. Встановіть публічний резолвер: netsh interface ipv4 set dnsservers name="Wi-Fi" static 1.1.1.1 primary
  6. В останню чергу скиньте мережевий стек і перезавантажте машину: netsh winsock reset

macOS

  1. Очистіть кеш: sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
  2. Погляньте, які сервери використовуються: scutil --dns | grep nameserver
  3. Спрямуйте інтерфейс на публічний резолвер: sudo networksetup -setdnsservers Wi-Fi 1.1.1.1 1.0.0.1
  4. Перевірте /etc/hosts і видаліть будь-який рядок для цього домену.

Linux

  1. На systemd-resolved: sudo resolvectl flush-caches, а потім підтвердьте сервери, що використовуються, командою resolvectl status.
  2. На dnsmasq: sudo systemctl restart dnsmasq. На nscd: sudo systemctl restart nscd.
  3. Прочитайте /etc/resolv.conf, щоб побачити, до якого резолвера ви звертаєтеся, і /etc/hosts на застарілий перевизначений запис.
  4. З NetworkManager змініть резолвер прямо на з'єднанні:
    nmcli con mod "Wired connection 1" ipv4.dns "1.1.1.1 1.0.0.1"
    nmcli con up "Wired connection 1"

Роутер

  1. Перезавантажте роутер живленням. Більшість побутових роутерів запускають невеликий пересилальний резолвер із власним кешем, і перезапуск його очищує.
  2. На сторінці адміністрування роутера погляньте на DNS-сервери WAN чи DHCP. Якщо вони вказують на старий внутрішній сервер чи фільтрувальний сервіс, замініть їх.
  3. Перевірте з телефона на мобільному інтернеті замість Wi-Fi. Якщо там ім'я розв'язується, проблема всередині вашої мережі.

Якщо домен належить вам

NXDOMAIN на власному сайті - це проблема публікації, і причин може бути лише кілька. Спершу перевірте статус реєстрації й дату закінчення терміну дії. Потім підтвердьте делегування - крок, який люди часто пропускають:

dig NS example.com +short
dig example.com +trace

Порожня відповідь NS означає, що в батьківської зони немає делегування, тож жоден резолвер не може дістатися вашого DNS-провайдера, хоч би які записи ви там створили. Вивід +trace показує ланцюжок перенаправлень і точний крок, на якому він зупиняється. Якщо делегування в порядку, зверніться напряму до nameserver вашого провайдера, щоб підтвердити, що запис існує в зоні, яку ви редагуєте:

dig @ns1.example-dns.net www.example.com A

Коли ви додасте відсутній запис, стара негативна відповідь усе ще лишатиметься закешованою деінде стільки, скільки дозволяє мінімум SOA, тож зачекайте цей час, перш ніж робити висновок, що виправлення не спрацювало.

Перевірте ззовні

Кожне з виправлень вище стосується лише вашої власної машини. Жодне з них не каже, чи розв'язується ім'я для когось іншого, а саме це варто знати в першу чергу. Запустіть запит проти двох публічних резолверів і порівняйте:

dig example.com +short
dig @1.1.1.1 example.com +short
dig @8.8.8.8 example.com +short

nslookup example.com 8.8.8.8

Якщо ваш резолвер за замовчуванням не повертає нічого, а 1.1.1.1 повертає адресу, запис існує, а ваш резолвер тримає застарілу негативну відповідь або фільтрує ім'я. Якщо жоден резолвер не повертає нічого, запису справді немає.

Два резолвери все одно покривають лише одну точку огляду, а відповіді DNS відрізняються за регіоном частіше, ніж очікують. Запустіть перевірку DNS-запиту, щоб розв'язати ім'я з контрольних точок у кількох країнах одночасно й побачити, що повернула кожна з них. Розбіжний результат - коли одні локації відповідають, а інші ні - вказує на зміну, що ще поширюється, або на недоступність nameserver одного провайдера з частини інтернету. Таке спостереження в часі і є поширенням DNS, для якого є окремий посібник - як перевірити поширення DNS.

Як зловити ім'я, що перестає розв'язуватися

Запис, що зникає, не залишає жодного сліду на вашому боці. Нічого не логується, бо жоден запит так і не приходить, а єдина ознака - графік трафіку, що падає. Рішення в усіх випадках одне: пошук, що виконується за розкладом звідкись, крім вашого офісу. HostTracker моніторить сайти з 2004 року і зараз виконує перевірки з понад 300 точок у 158 містах, сповіщаючи електронною поштою, SMS, голосовим дзвінком, у Slack, Telegram та іншими способами, коли ім'я перестає розв'язуватися чи починає відповідати неправильною адресою. Інші посібники цього розділу зібрані в кластері виправлень, а два найближчі до цього - DNS-сервер не відповідає, для випадку, коли резолвер узагалі ніколи не відповідає, і як виправити повільний DNS-пошук, для випадку, коли він відповідає, але надто довго.

Перевірити зараз

Запустіть безкоштовну перевірку власного сайту - обліковий запис не потрібен.

Dns query

Стежити за цим постійно

Отримуйте сповіщення в момент збою: HostTracker перевіряє з понад 300 локацій і повідомляє вас електронною поштою, SMS, у Slack, Telegram та інших каналах.

Можливості HostTracker

Ще в цьому розділі: Виправити: посібники для помилок, з якими стикаються насправді