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

139

На моей рабочей станции 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 выводят сообщение «неизвестный хост-волк».

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

skiphoppy
источник
Вы можете добавить DNS-суффикс по умолчанию для .company.com.
billc.cn
@ billc.cn У меня уже есть этот суффикс DNS.
skiphoppy
Я думаю, что происходит то, что ping не ищет полное доменное имя хоста, в отличие от того, nslookupкоторый использует search domainпараметр предложения DHCP (или то, что вы указываете для статической конфигурации IP). Подтвердите это, выполнив то, что сказал @SLaks, и пропингуйте полное доменное имя хоста :)
jackweirdy
1
Возможный дубликат: superuser.com/questions/220471/…
Der Hochstapler
Что происходит, когда ты бежишь ping -4 wolfman?
Der Hochstapler

Ответы:

101

Я считаю, что 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
очистить таблицу маршрутизации: route /f (требуется перезагрузка)

harrymc
источник
1
Могу поспорить, что Active Directory, вероятно, активен, но я не знаю, как проверить.
skiphoppy
11
Я отключил службу DNS-клиента, и проблема исчезла! Еще не уверен, что это была случайность. Проблема не вернулась, когда я перезапустил службу.
skiphoppy
6
Иногда просто остановка и перезапуск службы исправляет проблемы с DNS (не спрашивайте меня, почему). Вопрос в том, как долго это продлится. Некоторым несчастным людям нужно повторять это снова и снова.
Harrymc
1
SFC / SCANNOW в случае, если системные файлы службы клиента DNS тонко повреждены? Я также видел некоторых людей с похожими проблемами, вызванными вирусом.
Джон Клоске
1
Чего мне не хватало в этом ответе ipconfig /registerdns(я уточнил в своем ответе ниже)
Мик Хэлсбэнд
31

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

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

Senthil
источник
вау, это сработало и для меня. Я предполагаю, что что-то ожидает доменное имя, которое не настроено
user1190
ОК, это работает ... почему?
Даниэль Б.
3
какие-либо предложения, почему это работает и как лучше использовать локальные имена без конечных точек?
Рубероид
Спасибо - это сработало для меня, но также знало бы, почему это
Фрэнк Фу
2
@Ruberoid Пожалуйста, смотрите мой ответ о том, как сделать это автоматически.
Фредерик Аалунд
17

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

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

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

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

  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, которому соответствует hostname ( wolfman).
  2. Отправляйте пакеты на IP и слушайте ответ

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

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

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

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

Фредерик Аалунд
источник
Просто хочу сказать, что это оказалось фактором, который преуспел на машине, над которой я работал. Глупо, хотя кажется. И не только для пинга, но и для других приложений. Я не уверен, что ваше объяснение того, что пытались сделать, когда совершенно правильно (но вы признаете, что не уверены в этом). Но большой плюс для упоминания о том, что этот сбой можно легко диагностировать, если попытаться выполнить команду ping с именем домена с добавленным вручную суффиксом точки.
gwideman
Это не имеет смысла. Вы утверждаете, что «команда ping Windows не всегда пытается выполнить поиск DNS», но затем рекомендуете изменить способ поиска DNS, чтобы решить эту проблему? Представляется более вероятным , что пинг будет выполняет поиск DNS (ов) , но делает их неправильно, и именно поэтому это исправление работает.
Твист Имитатор
@TwistyImpersonator Я понимаю ваше замешательство. Дело в том, что Windows попытается использовать несколько методов разрешения имени хоста, если они заданы, wolfmanи поиск DNS (по-видимому) не является главным приоритетом среди указанных методов. Теперь, если вы используете wolfman.вместо этого, Windows установит приоритет поиска DNS по сравнению с другими методами, потому что wolfman.это полное доменное имя, которое (очевидно) требует поиска DNS.
Фредерик Аалунд
Так что я думаю, что вы говорите, что если ping достигнет точки поиска DNS в ходе своего обычного рабочего процесса поиска, он будет работать. Тем не менее, ping должен в конечном итоге попробовать DNS, если другие методы поиска не возвращают ответ, подразумевая, что причина сбоя ping сама по себе заключается в том, что другой метод пытается, прежде чем DNS возвращает ответ. Это объяснение не соответствует тому факту, что ping не может найти хост.
Твист Имитатор
@TwistyImpersonator "Так что я думаю, что вы говорите, что если ping достигнет точки поиска DNS в ходе своего обычного рабочего процесса поиска, он будет работать": да. «Тем не менее, ping должен в конечном итоге попробовать DNS, если другие методы поиска не возвращают ответ, подразумевая, что причина сбоя ping сама по себе заключается в том, что другой метод пытается до того, как DNS возвращает ответ»: очевидно, нет. Может быть, пинг просто сдается после попытки нескольких методов. Может быть, пинг сдается после тайм-аута. Возможно, ping никогда не пытается найти DNS, потому что считает, что имя хоста не похоже на DNS.
Фредерик Аалунд
11

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

Нормальный метод разрешения на Windows , выглядит следующим образом :

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

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

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

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

Вот цитата:

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

ipconfig / flushdns

ipconfig / registerdns

Пожалуйста, обратитесь к ссылке ниже для более подробной информации. http://jefferyland.wordpress.com/2011/07/28/quick-review-of-flushdns-registerdns-and-dns-queries/

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

Мик Хэлсбэнд
источник
1
Оригинальный ответ на @harrymc отражает теперь отсутствующие /registerdnsкоманды
Мик Halsband
Я играю в эту игру на Win10 около года. Когда мой ноутбук просыпается, он не может найти какие-либо корпоративные серверы, но внешние сайты, такие как microsoft.com, работают. Похоже, это происходит при смене сетей WiFi (дом / VPN против офиса). flushdns решает проблему иногда, но не всегда. Сегодня я попробовал registerdns, и это немедленно исправило проблему. Завтра попробую добавить. до конца имени (но ping уже терпит неудачу с FQDN для внутренних серверов). Это очень расстраивает. И в завершение - если я подожду некоторое время, проблема сама себя решит.
ripvlan
6

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

  • Проблема : pingне разрешит имя хоста, но nslookupможет. (Наблюдается на 2 разных хостах Windows Server 2012 R2.)
  • Причина : (Для каждого хоста) К хосту подключено более одного сетевого адаптера, и настроено несколько шлюзов по умолчанию .
  • Решение : (Для каждого хоста) Удалите шлюз по умолчанию из конфигурации всех сетевых адаптеров, кроме одного, поэтому остается только один шлюз по умолчанию .
djlauk
источник
ах это сделал это для меня. Отлично.
IAmTheSquidward
Коротко и просто
Фрэнк Фу
5

Может быть, wolfman.company.com указан в C: \ Windows \ system32 \ drivers \ etc \ hosts?

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

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

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

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

Жан-Франсуа Ларвуар
источник
2

Добавление записи в файл c:/windows/system32/drivers/etc/hostsможет исправить это.

Маной Агарвал
источник
Это исправит это, но это не решит его проблему на этой машине, но это не поможет ему на других машинах. Помните Хосты> DNS Resolver> DNS Server> NetBIOS name.
Чувак
2

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

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

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

Расширенные настройки TCP / IP

eresonance
источник
Я столкнулся с аналогичной ситуацией на сервере со статическим IP-адресом. Первая запись в «Добавить эти суффиксы DNS» была пустой И «DNS-суффикс для этого соединения» был пустым. Другие серверы, на которых это работало, имели такой же пробел «Добавить эти DNS-суффиксы», НО «DNS-суффикс для этого соединения» заполнены.
Тим Льюис
2

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

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

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

Кэмерон Таклинд
источник
1

Я столкнулся с этим, когда мы мигрировали в Windows 7 из Windows XP, проблема была связана с проблемой Windows 7 Multi Label DNS Query.

Разрешить добавление суффикса DNS к неквалифицированным запросам имен с несколькими метками - см .:

http://computerstepbystep.com/allow_dns_suffix_appending_to_unqualified_multi_label_name_queries.html

Надеюсь это поможет

Sony NS
источник
2
Добро пожаловать в Супер пользователя! Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
канадец Люк
1

Если на Mac OS X это может быть проблема с кешем DNS:

Дамп кеша

sudo killall -HUP mDNSResponder
sudo dscacheutil -flushcache
Кристиан
источник
ОП спрашивает о Windows XP и вопрос помечен Windows.
PL
Может быть, это полезно для других. Я оставлю это, ответ был здесь уже более 3 лет. Зачем удалять сейчас?
Кристиан,
1

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

Мне показалось, что какая-то система DNS-кэширования в клиенте Windows неисправна. Это влияет на Windows 7 и 8.1 ... больше ничего не могу сказать о Windows XP. Пинг не разрешает имя. важна не часть icmp, а часть разрешения имен). nslookup предназначен для запросов к серверу имен и делает именно это, без разрешения имен иерархии окон.

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

Ура!

мрачный
источник
Отключение IPv6 не может быть жизнеспособным решением для всех (и в любом случае это звучит анекдотично в любом случае). Все остальное, что вы говорите, кажется, уже было сказано в этой теме (например, комментарий harrymc «Иногда просто остановка и перезапуск службы исправляют проблемы DNS», два года назад).
G-Man
1

Я могу ошибаться, потому что это основано на моих давно забытых днях набора ресурсов для NT4.

Как я помню, PING использует Netbios / WINS и DNS (в таком порядке, по крайней мере, если вы не укажете полное доменное имя).

Служба WINS исчезла много лет назад, но у вас все еще может быть включен Netbios на вашем интерфейсе, и поэтому PING может использовать netbios, которые могут не дать вам никакого результата. Особенно если трафик где-то проходит через роутер.

Просто отключите Netbios, и Ping будет использовать DNS в качестве первого приоритета и добавит зарегистрированный DNS Surffic на интерфейсе к вашему имени хоста.

MrCalvin
источник
0

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

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

Например, если в вашем DNS у вас есть запись для www.example.com - 10.0.0.20, но затем у вас есть запись в файле hosts вашего клиента, 10.0.0.20 Someelse.com, вы не сможете пинговать www .example.com

Странно да

Просто повезло на самом деле
источник
0

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

Короче говоря, процедура выглядит следующим образом: откройте gpedit.mscи перейдите к нему Computer Configuration -> Administrative Templates -> Network -> DNS Client > DNS Suffix Search List, установите для него значение «Включено» и добавьте имя домена в список (по умолчанию список пуст).

Более подробное описание этих шагов можно найти здесь

ndemou
источник
0

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

Сменил IP обратно на DHCP и все работало нормально.

Клаус
источник
nslookup работал, потому что ему не нужно общаться с другим хостом. Пинг должен общаться и, очевидно, ломается.
Ндему
@ndemou: Это объяснение не имеет никакого смысла. Да, задача ping - попытаться установить связь с другим хостом, но первым шагом в этом процессе является получение IP-адреса другого хоста. Если он  получает IP-адрес другого хоста, он говорит вам об этом; если он затем не может связаться с другим хостом, он в конечном итоге сообщает о «100% потере». Но в вопросе ping не может даже получить адрес. (Попробуйте  ping bbbbbbb.comи  ping bbbbbb.comдля сравнения.)
Скотт
Вы правы @ Скотт. Я редактировал ответ Клауса и, читая его описание проблемы, я забыл, что в этих вопросах особая проблема с пингом заключается в том, что он не решается. Не могу быть уверен, но я бы поспорил, что Клаус просто не получал ответов.
ndemou
0

Ни одно из решений здесь не сработало для меня. Что сработало для меня, так это переподключение к vpn моей работы с использованием OpenVPN. Затем после отключения все продолжало работать.

Я полагаю, что проблема была связана с отключением питания, когда мой компьютер был подключен к openVPN. Единственный способ, которым я понял это, был с помощью WireShark. Я заметил, что IP-адреса назначения для всех запросов переходили на IP-адреса во внутренней сети моей работы.

Бел
источник
-1

ping использует протокол ICMP, в частности «Echo Request» и «Echo Reply».

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

Вы можете найти больше о ICMP здесь:

http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol

Johnnie
источник
8
Да, но перед использованием ICMP домен должен быть преобразован в IP-адрес, как обычно. Так что это не проблема здесь.
Майкл