Проблема разрешения DNS в Fedora 20

Проблема разрешения DNS в Fedora 20

У меня есть недавно собранный сервер Fedora 20, который я только что подключил к своей сети. Это виртуальный сервер, работающий на хосте VirtualBox. Все вроде бы работает, но у меня проблема с разрешением имен.

(Здесь я должен сказать, что разрешение имен обеспечивается сервером Windows на отдельном оборудовании, которое отлично работает на всех остальных компьютерах в сети.)

Из командной строки я могу разрешить внешний хост, например unix.stackexchange.com. Я могу с легкостью разрешить его и пинговать его, как и любой другой внешний хост, который я пробовал.

Однако моя локальная сеть (назовем ее xyz.local) отличается. Сетевой интерфейс на моей машине F20 имеет DOMAIN=xyx.localв сетевом скрипте (полный скрипт ниже). Из командной строки я могу разрешить, скажем, server-01, но не server-01.xyz.local.

Я могу разрешить псевдоним в краткой форме, даже если каноническое имя имеет длинную форму, поэтому, например, ping mysqlуспешно разрешается в его псевдоним linux-04.xyz.local, но я не могу разрешить ни , mysql.xyz.localни linux-04.xyz.local.

Явно я что-то упустил. Может кто-нибудь подскажет что?

/etc/hosts содержит только стандартные записи localhost для 127.0.0.1

/etc/resolv.conf выглядит следующим образом:

#Generated by Network Manager
search xyz.local
nameserver 192.168.xxx.xxx

Мой скрипт интерфейса:

TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="Wired connection 1"
UUID=<uuid>
ONBOOT=yes
IPADDR0=192.168.xxx.xxx
PREFIX0=24
GATEWAY0=192.168.xxx.xxx
DNS1=192.168.xxx.xxx
HWADDR=<mac>
DOMAIN=xyz.local
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

решение1

Часть вашей проблемы, вероятно, связана с тем, что ваш путь поиска автоматически генерируется через NetworkManager:

search xyz.local

На самом деле эта строка должна быть такой:

search xyz.local.

Точка в конце имеет решающее значение, поскольку она сообщает DNS-резолверу, что пора остановиться. Поэтому он не будет делать с вами такие вещи:

mysql.xyz.local.xyz.local

Вы можете убедиться в этом, попытавшись разрешить имена хостов, вручную добавив точку (временно).

$ nslookup mysql.xyz.local.

Разрешение этого домена в целом

Чтобы решить эту проблему, вам необходимо изменить определение вашего домена на DHCP-сервере так, чтобы он обслуживал домен как xyz.local..

/etc/nsswitch.conf

Метод, используемый для разрешения имени хоста, контролируется файлом /etc/nsswitch.conf. Обозначение NSS означает Name Service Switch, и вы можете прочитать больше о нем на странице руководства man nss.

Вот строка из моего файла, которая управляет разрешением имен хостов:

$ grep ^hosts /etc/nsswitch.conf
hosts:      files dns mdns4_minimal

Сначала он обращается к моему локальному файлу, /etc/hostsа затем запрашивает DNS.

решение2

Проблема вызвана ключевым словом "mdns4_minimal" в файле nsswitch.conf. Это ключевое слово сообщает резолверу, что все, что заканчивается на local, должно быть запрошено с использованием mdns. Должно быть достаточно удалить это ключевое слово (и дополнительные параметры, которые обычно указаны в квадратных скобках).

Более подробную информацию вы можете найти в моемпочта

Причина, по которой nslookup разрешает все имена, заключается в том, что он не смотрит в nsswitch.conf, а использует напрямую /etc/resolv.conf. С другой стороны, ping зависит от резолвера, который сначала смотрит в nsswitch.conf и разрешает имя, используя то, что там написано.

Связанный контент