Невозможно разрешить доменные имена .foo.local.


15

На моем рабочем месте есть интрасеть с такими доменными именами, как server01.foo.local, server02.foo.localи т. Д. Недавно я загрузил живую среду Fedora 16, чтобы проверить ее, и обнаружил, что эти доменные имена не разрешаются.

Например:

$ ping server01.foo.local
ping: неизвестный хост server01.foo.local
$ ping server01
PING server01.foo.local (XXXX) ...

Почему будет server01разрешать (и печатать имя как server01.foo.local), но server01.foo.localне будет?


Была точно такая же проблема с Ubuntu, работающим в VMBox. Решение @ adam820 также помогло мне.
Джимбо

Ответы:


22

Хотя я не уверен на 100%, почему он не работает должным образом, похоже, существует очень большой конфликт со службой mDNS (Avahi в Linux, Bonjour / Zeroconf в Mac / Windows) и сетями Windows, которые используйте .local в качестве имени внутренней маршрутизации для доменов. Кажется, что происходит, что при пинге server01 он пропускает использование mDNS для разрешения и затем добавляет поисковый домен (foo.local) к запросу, успешно запрашивая DNS-сервер для server01.foo.local. Однако при использовании mDNS (который использует .local в качестве расширения имени компьютера по умолчанию), когда вы пытаетесь пропинговать server01.foo.local, он фактически транслирует по mDNS в поисках машины с именем «server01.foo»; когда это терпит неудачу, это не переходит к прямому DNS по любой причине. Обходной путь для этого - не называть ваш домен .local, что, вероятно, идет вразрез с обучением большинства администраторов Windows по структурированию домена. Что, как говорится:

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

Это можно найти в /etc/nsswitch.conf. В разделе для хостов будет указан порядок, который для Fedora 16 по умолчанию:

hosts:      files mdns4_minimal [NOTFOUND=return] dns myhostname

Если вы измените это на:

hosts:      files dns mdns4_minimal [NOTFOUND=return] myhostname

где вы двигаете днс вперед в порядке поиска, это должно исправить все на данный момент. В качестве альтернативы, если вы знаете, что вам вообще не понадобится mDNS, просто удалите часть «mdns4_minimal [NOTFOUND = return]».

Глядя на эту ошибку на трекере Red Hat , кажется, что это давняя проблема, которая пока не решена. Хотя, если кто-то может дать больше информации о том, почему это происходит таким образом, это будет оценено.


удаление раздела mdns решило проблему
rhollencamp

Большое спасибо, что вы добавили это. Была точно такая же проблема, и перемещение записи DNS первым решило ее. В моем случае я использую последнюю версию Ubuntu, а не Fedora, но решение было точно таким же.
Джимбо

ничего не стоит, я просто попробовал это и обнаружил, что cisco VPN, использующие VPN, vpncне могут подключиться после удаления этих записей в hosts: .*строке /etc/nsswitch.conf. Замена этих настроек устранила проблему.
Доббс

«когда происходит сбой, по какой-то причине он не переходит на прямой DNS». , Причина довольно очевидна. [NOTFOUND=return]означает «если mDNS сообщает, что имя .local не найдено, то оно является авторским, и нет смысла спрашивать дальше». Перемещение DNS до mDNS - это обходной путь, но достаточно просто сделать ошибки mDNS неавторизованными.
MSalters

Да, это правильный комментарий; это было 7 лет назад, и я не знал этого в то время. Но да, удаление его, удаление пакета, как указано ниже, или изменение порядка - все это допустимые обходные пути / решения.
adam820

2

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

Но если вы настаиваете, проще также удалить nss-mdnsпакет или libnss-mdnsпакет в зависимости от вашего дистрибутива, и вы получите решение проблемы. Если вам не нужна эта функциональность, то почему она там сохраняется?

Вот yum info nss-mdns:

Summary     : glibc plugin for .local name resolution
URL         : http://0pointer.de/lennart/projects/nss-mdns/
License     : LGPLv2+
Description : nss-mdns is a plugin for the GNU Name Service Switch (NSS)
            : functionality of the GNU C Library (glibc) providing host name
            : resolution via Multicast DNS (aka Zeroconf, aka Apple Rendezvous,
            : aka Apple Bonjour), effectively allowing name resolution by common
            : Unix/Linux programs in the ad-hoc mDNS domain .local.
            : 
            : nss-mdns provides client functionality only, which means that you
            : have to run a mDNS responder daemon separately from nss-mdns if
            : you want to register the local host name via mDNS (e.g. Avahi).

1

Некоторые вещи, которые вы можете проверить:

  • есть ли порядок в /etc/host.conf, который указывает на проверку / etc / hosts перед запросом DNS?

  • находится server01 в / etc / hosts?

  • есть ли search foo.localв / etc / resolv, conf? Это добавит foo.local к любому имени хоста, который вы ищете

Интересно, правильно ли настроен ваш сервер имен? Если у вас есть Nslookup, что он возвращает к server01, server01.foo.localи IP-адрес (обратный поиск)?


* host.conf не имеет ничего о порядке * server01 не находится в / etc / hosts * search foo.local находится в /etc/resolv.conf (NetworkManager поместил его туда), но его удаление не помогает. Я попытался защитить файл от записи /etc/resolv.conf после его редактирования, чтобы NM не мог перезаписать и перезагрузить компьютер; без кубиков
rhollencamp

@rhollencamp: у вас есть nslookup в вашей системе?
ot--
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.