Вопрос или проблема
На клиенте Windows 7, когда я пингуй хост в локальной сети MYSTERY, он показывает правильный IP. Однако, когда я выполняю nslookup MYSTERY, он говорит, что домен не существует. Я проверил как DNS, указанные в ipconfig, и обнаружил, что имя MYSTERY действительно не указано. На DHCP-сервере также нет этой записи. Такое же поведение наблюдается после выполнения ipconfig /flushdns. В локальном файле hosts Windows тоже нет этой записи.
Как я могу выяснить, откуда клиент получает разрешённый IP?
Примечание: MYSTERY — это Synology Rackstation, настроенный для подключения к сетевому домену.
На вашем компьютере с Windows должен быть установлен какой-то резольвер mDNS (Bonjour), будь то из iTunes, Skype или другого программного обеспечения, которое устанавливает резольвер mDNS. ping
будет правильно разрешаться, если резольвер установлен, потому что LLMNR теперь используется в Windows Vista и выше. LLMNR использует резольвер mDNS для возврата записи.
Synology использует демона под названием avahi, это Multicast DNS/mDNS/DNS-SD сервер. С завода Synology поставляется с батареей, настроенным как “RackStation” или по имени хоста, исходя из моего опыта.
Если у вас есть Mac, dns-sd -B
покажет вам многокастовые службы. Вы увидите службу _http._tcp.local. для RackStation.
dns-sd -G v4 RackStation.local
должен дать вам правильный IP-адрес для вашей RackStation.
dns-sd -L RackStation _http._tcp.
должен вернуть всю информацию о службе, включая номер порта, серийный номер, модель и т. д.
Это также относится и к DiskStation. Я проводил свои испытания на DiskStation. RackStation должен быть таким же.
(Этот ответ, вероятно, неверен. @xeon, похоже, на правильном пути, и я здесь чему-то научился.)
Причина, по которой запрос DNS не выполняется, в том, что ping не использует DNS для разрешения этого имени.
nslookup
— это команда для запросов DNS. ping
, с другой стороны, также попытается использовать NetBIOS/WINS и файл hosts для разрешения имен. Наиболее вероятный сценарий заключается в том, что это имя было получено через первое.
Вы можете использовать nbtstat -c
, чтобы перечислить имена NetBIOS и IP-адреса, которые были недавно видны, или nbtstat -a <устройство>
, если вы хотите активно искать имя. Имейте в виду, что -a
займет больше времени, так как ему нужно попытаться сделать это для каждого интерфейса. (вы не можете сказать ему пропустить широковещательную рассылку/использовать только WINS)
Опция -r
позволит вам сравнить то, что было разрешено через широковещательную рассылку, с тем, что было разрешено через WINS, но это становится немного более сложным.
Проверьте свой файл hosts Windows, чтобы убедиться, что у вас там нет закодированной записи. Это будет принуждать разрешение имен даже в том случае, если оно не может быть разрешено там.
Ответ или решение
Чтобы узнать, как DNS разрешается на клиентском компьютере, можно выполнить несколько шагов, чтобы получить полное представление о процессе разрешения имён. Ниже представлен план действий на примере Windows 7, учитывающий вашу ситуацию с именем хоста "MYSTERY".
Шаг 1: Проверка инструментов разрешения имён
-
Использование команды
ping
:
Командаping
пытается разрешить имя хоста через несколько методов, включая:- DNS
- NetBIOS
- WINS
- файл hosts
Если
ping MYSTERY
возвращает корректный IP-адрес, значит, имя хоста было разрешено каким-то из перечисленных способов. Для дальнейшего анализа важно определить, какой именно метод был использован. -
Использование команды
nslookup
:
Командаnslookup
служит для выполнения DNS-запросов и, если она возвращает сообщение "недействительный домен", это означает, что DNS-сервер не содержит информации о данном имени хоста.
Шаг 2: Проверка кэша NetBIOS
Чтобы проверить, использовалось ли разрешение через NetBIOS, выполните команду:
nbtstat -c
Эта команда покажет кэшированные NetBIOS имена и соответствующие IP-адреса. Если имя MYSTERY присутствует, значит, оно было разрешено именно через NetBIOS.
Дополнительно, можно использовать:
nbtstat -a <ip-адрес>
для активного запроса имени по IP-адресу. Эта команда может занять больше времени, так как она будет выполнять запрос по каждому интерфейсу.
Шаг 3: Проверка файла hosts
Проверьте файл hosts (расположение: C:\Windows\System32\drivers\etc\hosts
), чтобы убедиться, что в нём нет недействительных или конфликтующих записей. Это может переопределять стандартное поведение DNS и вызывать путаницу при разрешении имён.
Шаг 4: Мониторинг Multicast DNS
Учитывая, что ваше устройство Synology Rackstation может использовать mDNS (Multicast DNS), есть вероятность, что оно было разрешено через mDNS-резолвер. На Windows 7 может быть установлен модули mDNS (например, Bonjour). Для тестирования mDNS, если у вас есть Mac, попробуйте команды:
dns-sd -B
и
dns-sd -G v4 RackStation.local
Это может подтвердить, используется ли mDNS для разрешения имен.
Шаг 5: Проверка и анализ DHCP
Обратите внимание на сервер DHCP. Убедитесь, что сервер DHCP не предоставляет какие-либо дополнительные метаданные, которые могут содержать информацию о хостах. Если у вас есть доступ к DHCP, проверьте, нет ли в нём записей о MYSTERY.
Заключение
Если выполненные выше шаги не дают ясности, возможно, стоит рассмотреть использование сетевых снифферов, таких как Wireshark, чтобы более глубоко понять, какие запросы и ответы проходят по сети в момент разрешения имени.
Следуя этим шагам, вы сможете определить источник разрешения имени на клиентском компьютере и тем самым устранить возникшую проблему.