Вопрос: Почему «ping» не может решить имя, когда «nslookup» работает нормально?


На моей рабочей станции Windows XP я могу найти машину, с которой я хочу подключиться, в DNS с помощью nslookup:

nslookup wolfman
Server: dns.company.com
Address: 192.168.1.38

Name: wolfman.company.com
Address: 192.168.1.178

Но когда я пытаюсь подключиться к этой машине, я получаю сообщение об ошибке, указывающее, что машина не может быть найдена (т. Е. Не может быть обнаружена в DNS):

C:\> ping wolfman
Ping request could not find host wolfman. Please check the name and try again.

Я могу подключиться, если я использую IP-адрес напрямую:

C:\> ping 192.168.1.178

Pinging 192.168.1.178 with 32 bytes of data:

Reply from 192.168.1.178: bytes=32 time=41ms TTL=126
Reply from 192.168.1.178: bytes=32 time=41ms TTL=126
Reply from 192.168.1.178: bytes=32 time=44ms TTL=126
Reply from 192.168.1.178: bytes=32 time=38ms TTL=126

Я мог бы обойти это, добавив запись в мой hosts файл, но я бы скорее выяснил, почему это происходит. Проблема преходящая, большую часть дня я могу подключиться к машине просто отлично.

Как это возможно?

ETA: я оставил это для краткости, но его попросили:

C:\> ping wolfman.company.com
Ping request could not find host wolfman.company.com. Please check the name and try again.

ETA: Другие приложения получают одинаковые результаты. Я просто попробовал ping для упрощения. telnet не может подключиться, приложения Cygwin печатают сообщение «неизвестный хост-волк».

Обновление. Используя wirehark, я обнаружил, что моя рабочая станция не пытается искать DNS. Это просто сообщение об ошибке «не удалось найти хост».


119
2017-10-29 19:11


Источник


Что произойдет, если вы ping wolfman.company.com? - SLaks
У вас есть wirehark установлен? Вы можете увидеть, использует ли ping что-то еще при попытке решить хост. Вы тоже пробовали telnet и ftp? - ott--
Вы можете добавить DNS-суффикс по умолчанию для .company.com, - billc.cn
@ billc.cn У меня уже есть DNS-суффикс. - skiphoppy
Возможный дубликат: superuser.com/questions/220471/... - Der Hochstapler


Ответы:


Я считаю, что nslookup открывает соединение winsock на порту DNS и выдает запрос, тогда как ping использует службу DNS-клиента. Вы можете попытаться остановить эту службу и посмотреть, не изменилось ли это.

Некоторые команды, которые будут повторно инициализировать различные сетевые состояния:

Сбросить записи WINSOCK до значений по умолчанию: netsh winsock reset catalog
Сбросить стек TCP / IP до значений по умолчанию: netsh int ip reset reset.log
Очистить кеш-ресивер DNS: ipconfig /flushdns
Обновление регистрации клиента DNS и обновление аренды DHCP: ipconfig /registerdns
Таблица маршрутизации Flush: route /f  (требуется перезагрузка)


92
2017-11-20 08:40



Я бы поспорил, что Active Directory, вероятно, активен, но я не знаю, как тестировать. - skiphoppy
Я отключил службу DNS-клиента, и проблема, похоже, исчезла! Не уверен, что это была случайность. Проблема не вернулась, когда я перезапустил службу. - skiphoppy
Иногда просто прекращение и перезапуск службы устраняет проблемы DNS (не спрашивайте меня почему). Вопрос в том, как долго это будет продолжаться. Некоторым неудачливым людям нужно повторять это снова и снова. - harrymc
Да, если это так, я хочу знать, почему! Я собираюсь попробовать это в следующий раз, когда проблема возникнет. Если, похоже, это исправить, я собираюсь перетащить администраторов ИТ из главного корпоративного офиса и заставить их рассказать мне, почему. :) И вы получите щедрость, если это будет исправление. - skiphoppy
sfc / scannow в случае, если файлы системы обслуживания клиентов DNS будут искажены? Я также видел некоторых людей с аналогичными проблемами, вызванными вирусом. - Jon Kloske


Попробуйте выполнить ping с именем хоста, за которым следует точка. Поэтому вместо ping wolfman использование ping wolfman.

Это должно заставить вас разрешить, не выполняя обходные пути с файлами hosts и т. Д.


25
2018-05-05 01:08



Это решение для меня. - IAmTheSquidward
вау, это сработало и для меня. Я предполагаю, что что-то ожидает доменное имя, которое не настроено - user1190
Хорошо, это работает ... почему? - Daniel B.
какие-либо предложения, почему это работает, и как использовать локальные имена без конечных точек? - Ruberoid
@ Рубероид См. мой ответ как это сделать автоматически. - Frederik Aalund


Пытаться ipconfig /displaydns и ищите волка. Если он кэшируется, поскольку «имя не существует» (возможно, из-за предыдущего прерывистого сбойного поиска), вы можете очистить кеш с помощью ipconfig /flushdns,

nslookup не использует кеш, а напрямую запрашивает DNS-сервер.


15
2017-11-19 21:57



Я попробовал: он не кэширован. И очистка кеша не устраняет проблему. - skiphoppy
Можете ли вы опубликовать вывод nslookup -all? Является novc в списке? - craig65535


nslookup отличается от других команд при разрешении имен / IP-адресов в Windows.

метод нормального разрешения в Windows как следует:

  1. Клиент проверяет, является ли запрашиваемое имя своим.
  2. Затем клиент ищет файл локальных хостов, список IP-адресов и имен, хранящихся на локальном компьютере.
  3. Запрошены серверы доменных имен (DNS).
  4. Если имя еще не разрешено, в качестве резервной копии используется последовательность имен имен NetBIOS. Этот порядок можно изменить, настроив тип узла NetBIOS клиента.

nslookup с другой стороны, используется для тестирование серверов доменных имен.


10
2017-11-19 21:29



Существуют ли какие-либо настройки, которые могут переместить запрос NetBIOS выше в этом списке? У меня есть ощущение, что поиск NetBIOS каким-то образом связан, но поскольку DNS-запрос определенно работает, я не вижу, как он когда-либо достигнет этого шага, если приведенная выше последовательность является неизменной. - skiphoppy


Попробуйте добавить . к суффиксам DNS для этого соединения. I.e, перейдите к:

  1. Состояние Ethernet
  2. Щелкните Свойства
  3. Версия интернет-протокола 4
  4. Щелкните Свойства
  5. Нажмите Дополнительно.
  6. Добавление этих DNS достаточно (по порядку)
  7. Добавить . как суффикс.

Те же шаги проиллюстрированы на следующем скриншоте:

Это должно сделать ping wolfmanРабота.

объяснение

nslookup wolfman (поиск сервера имен: wolfman) отправляет имя хоста (wolfman) в DNS (система доменных имен) для получения соответствующего IP-адреса. Это единственная цель nslookup команда. Это уже работает, поэтому мы проверили, что DNS работает, и что wolfman действительно соответствует IP-адресу.

В противоположность, ping wolfman нужно сделать две вещи:

  1. Получите IP-адрес, что имя хоста (wolfman) соответствует.
  2. Отправлять пакеты на IP-адрес и прослушивать ответ

В Windows (даже в последних версиях, таких как Windows 10) первый шаг может легко завершиться неудачей. Для обратной совместимости Windows поддерживает различные методы разрешения имени хоста (файл hosts, DNS, NetBIOS / WINS, файл LMHOST).

К сожалению, кажется, что Windows ' ping команда не всегда пытается выполнить поиск DNS. Я не знаю конкретных условий, вызывающих такое поведение.

К счастью, мы можем заставить Windows выполнять поиск DNS, используя Полное доменное имя (полное доменное имя). На практике мы делаем это путем суффикса . точка до имени хоста: wolfman., Пытаться ping wolfman. и убедитесь, что он работает.

Последний шаг - заставить Windows добавить эту точку. Я уже показал, как это сделать в начале этого ответа.


9
2017-10-09 11:51



Это взорвало мой разум! - djsmiley2k
Просто хочу сказать, что это оказалось тем фактором, который преуспел на машине, над которой я работал. Кажется, это глупо. И не только для ping, но и для других приложений. Я не уверен, что ваше объяснение того, что было пробовано, когда оно совершенно правильно (но вы признаете, что не уверены в этом). Но большой плюс для упоминания о том, что этот сбой можно легко диагностировать, пытаясь выполнить ping с доменным именем с добавлением точечного суффикса. - gwideman


Я боролся с подобной проблемой и попробовал решение, предложенное @harrymc. Я нашел то, что в конечном итоге кажется (по крайней мере, несколько) работой на форуме технологий Microsoft (nslookup работает, но ничто другое не имеет DNS на автономном компьютере Win7)

Вот цитата:

... попробуйте использовать приведенную ниже команду, чтобы очистить и сбросить кеш-клиент для проверки.

ipconfig / flushdns

ipconfig / registerdns

Подробнее см. Ссылку ниже.    http://jefferyland.wordpress.com/2011/07/28/quick-review-of-flushdns-registerdns-and-dns-queries/

Так что в основном то, что мне не хватало, было ipconfig /registerdns


8
2017-09-22 08:32



оригинальный ответ от @harrymc теперь отражает отсутствие /registerdns команда - Mick Halsband


Только сегодня у нас была такой же вопрос, но решение было иным, Поэтому я подумал, что добавлю его для справки, поскольку это был самый лучший результат поиска.

  • проблема: ping не будет разрешать имя хоста, но nslookup Можно. (Соблюдается на двух разных хостах Windows Server 2012 R2.)
  • причина: (Для каждого хоста) Хост имеет несколько подключенных сетевых адаптеров и есть несколько шлюзов по умолчанию сконфигурировано.
  • Решение: (Для каждого хоста) Удалите шлюз по умолчанию из конфигурации всех сетевых адаптеров, кроме одного, так что только один шлюз по умолчанию,

6
2018-04-28 08:41



ах это сделало это для меня. Отлично. - IAmTheSquidward
Короткие и простые - Frank Fu


Возможно, wolfman.company.com указан в C: \ Windows \ system32 \ drivers \ etc \ hosts?

nslookup обходит этот файл и всегда запрашивает DNS, в то время как пинг и другие инструменты в первую очередь ищут файл «hosts», а затем в DNS.


5
2017-11-19 20:04



Хорошая мысль! Но я проверил, и ни одна из машин, которые я видел эту проблему, не указана в хостах. - skiphoppy


У меня была такая же проблема в системе Windows 2012R2 (= 8.1), и я пробовал все вышеперечисленные предложения, но ни один из них не исправит ее:
- Отработало полное имя.
- Пинг неквалифицированного имени не сделал.
- Оба работали в нескольких других системах, которые имели одинаковую ОС и, по-видимому, такую ​​же конфигурацию.
- Там были все необходимые строки поиска суффиксов.
(Обратите внимание, что некоторые из предложенных исправлений, например обходной путь для запросов с несколькими метками, явно не имеют значения, так как неквалифицированное имя имеет только одну часть.)

Затем я заметил, что у целевой системы, которую я пытался выполнить ping, не было адреса IPv6. Поэтому я попробовал "ping -4 unqualified_name», и бинго! Это сработало.
Поэтому по какой-то причине, только в этой системе, ping только пытался разрешить неквалифицированный адрес name-> IPv6, а не неквалифицированное имя-> IPv4.
Для меня было исправить это, чтобы полностью отключить IPv6, поскольку мне это совсем не нужно. Но мне было бы очень интересно найти более мягкий способ рассказать ping (или, предположительно, службу DNS-клиента), чтобы попытаться разрешить адреса IPv4 и IPv6.


5
2018-04-09 16:18





Я пытался понять, почему на одном выигрыше 7 компьютеров я могу использовать ping server который работает, а другой он не может разрешить server, Однако оба могут пинговать server.lan которые я не совсем понял.

Оказывается, я испортил некоторые настройки (DNS-суффиксы), чтобы не использовать FQDN при работе с VPN. Я должен был добавить свой местный .lan к тем суффиксам, чтобы заставить оба компьютера действовать одинаково.

Перейдите в Панель управления> Сеть и Интернет> Сетевые подключения и щелкните правой кнопкой мыши на сетевом соединении и нажмите Свойства. Нажмите «Протокол Интернета версии 4» и нажмите кнопку «Свойства». Затем нажмите кнопку «Дополнительно» в новом окне. Перейдите на вкладку DNS, здесь я добавил суффикс DNS для своей работы, но также нужен для обычных домашних подключений.

Advanced TCP/IP Settings


2
2018-01-01 16:01



Я столкнулся с аналогичной ситуацией на сервере со статическим IP-адресом. Первая запись в «Добавить эти DNS-суффиксы» была пустой и «DNS-суффикс для этого соединения» был пустым. Другие серверы, на которых он работал, имели одинаковую пустоту «Добавить эти DNS-суффиксы», но «DNS-суффикс для этого соединения» заполнен. - Tim Lewis


Я столкнулся с этим вопросом. «Самый простой» способ исправить это для меня - просто добавить . до конца имени хоста. Однако это довольно раздражает. В большинстве сетей этого не требуется. Я бы предпочел не говорить всем в сети, чтобы сделать это, когда им нужно получить доступ к одному и тому же ресурсу.

Я рассматривал предложение Фредерика Аалунда как возможное решение и заметил, что они предложили перейти от опции «Добавить первичные и связанные с подключением DNS-суффиксы» по умолчанию. Это заставило меня подумать, может быть, моя сеть была просто немного сконфигурирована.

Глядя на мои настройки DD-WRT, «LAN-домен» остался без изменений. Установка этой строки на произвольную строку, похоже, устранила эту проблему для всех клиентов в моей сети, не имея специальной конфигурации на каждой машине, решение, которое я хотел! :)


2
2018-06-12 22:14