сервер Ubuntu не разрешает имена хостов локальной сети

14

Немного застрял здесь.

У меня есть 2 машины, которые не могут разрешить имена хостов в локальной сети, если в / etc / hosts нет определенных записей

Но другие машины в локальной сети могут разрешать имена хостов.

Моя ЛВС:

  • 1 x маршрутизатор Cisco работает с DD-WRT v24-sp2 с включенным DNSMasq. Я настроил это с помощью имен хостов и IP-адресов в моей локальной сети.
  • 1 x Kubuntu 12.10 (правильно разрешает все имена хостов, если они введены в DNSMasq на маршрутизаторе)
  • 2 х NAS (также разрешите все имена правильно)

  • 1 x Ubuntu Server 12.04 (это НЕ разрешает локальные имена хостов, если они не введены в / etc / hosts)

  • 1 x XBMCLive (Dharma) (то же самое - не разрешается, если записи не находятся в / etc / hosts)

Как заставить последние 2 использовать записи DNSMasq на маршрутизаторе? Каждая машина настроена на использование маршрутизатора в качестве сервера имен, и все устройства правильно разрешают внешние адреса.

Благодарю.

немного больше информации:

пока на сервере, если я пингую другой компьютер (wstation)

$ ping wstation
PING wstation.local.domain (x.x.x.x) 

Если я тогда добавлю .local

$ ping wstation.local
PING wstation.local.local.domain (x.x.x.x)

и напрямую

$ ping 10.0.0.4
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
64 bytes from 10.0.0.4: icmp_req=1 ttl=64 time=0.387 ms
64 bytes from 10.0.0.4: icmp_req=2 ttl=64 time=0.316 ms
64 bytes from 10.0.0.4: icmp_req=3 ttl=64 time=0.312 ms
64 bytes from 10.0.0.4: icmp_req=4 ttl=64 time=0.280 ms
64 bytes from 10.0.0.4: icmp_req=5 ttl=64 time=0.322 ms
^C
--- 10.0.0.4 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3998ms
rtt min/avg/max/mdev = 0.280/0.323/0.387/0.038 ms                                                                       
teracow
источник
Я не знаю ответа, и я понятия не имею, будет ли это полезно, но если вы не знали ... Я обнаружил, что если я добавлю ".local" после имени машины, он будет каким-то образом найден без какой-либо настройки не требуется. Это действительно помогло мне, потому что я указывал адреса, но мне нужно было постоянно менять записи, когда я добавлял или удалял ОС, которую я использовал для тестирования и т. Д. Но, указав machinename.local, мне больше не нужно было беспокоиться. Если вы знаете, откуда это происходит, не стесняйтесь сказать мне. :)
Марти Фрид
1
Привет Марти, спасибо за твой ответ. Я добавил еще немного информации к проблеме, чтобы показать, что происходит с .local
teracow

Ответы:

15

О вашем текущем выходе

ping wstation
PING wstation.local.domain

Ясно указывает, что ваш компьютер добавляет .local.domainк не-FQDN запросов. Это что-то настроено неправильно или по крайней мере неправильно в вашей настройке. (если вы на самом деле не используете .local.domainсуффикс нарочно)

Разрешение имен и периодов

Одна важная вещь, которую многие люди не знают, это то, что полное имя всегда должно заканчиваться точкой ( .). Если вы пропустите его, то устройство попытается разрешить его в локальном домене поиска (например, mydomain.tld). Таким образом, в этом случае запрос mypc.localбудет mypc.local.mydomain.tld. Чтобы предотвратить это, сделайте запрос с точкой.

Конфигурация резольвера

Конфигурация резольвера имеет здесь большое значение. В Ubuntu (и Debian) это настраивается в файле /etc/network/interfaces(при условии, что вы не используете NetworkManager):

iface eth0 inet static
   address 192.168.3.3
   netmask 255.255.255.0
   gateway 192.168.3.1
   dns-nameservers 192.168.3.45 192.168.8.10
   dns-search foo.org bar.com                      # <-- these are the search domains

Разрешение имен в Linux также может быть выполнено другими способами. Дело не только в том, что локальный DNS-сервер запрашивает все это. Взгляните на ваш /etc/nsswitch.confфайл для hostsнастройки разрешения:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Это означает, что сначала проверяются файлы (это /etc/hostsфайл), затем mDNS, и только потом запрашивается реальный DNS-сервер. mDNS реализован с использованием Avahi в Linux и называется Bonjour на устройствах Apple. Он использует .localсуффикс по умолчанию и работает через широковещательные сообщения. Как ARP работает, но для DNS.

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

Чтобы разобраться

  • Избегайте использования, если .localтолько вы не хотите полностью полагаться на mDNS. Из вашего вопроса я понимаю, что вы хотите, чтобы все было сконфигурировано самостоятельно, поэтому мой подход заключается в том, чтобы этого избежать
  • Настройте свой локальный DNS-сервер (устройство DD-WRT в вашем случае) на использование специального доменного имени, например my.home. Для dnsmasq это единственная настройка, но в обычных настройках она должна быть настроена как на DNS-сервере, так и на DHCP-сервере (так как об этом объявляется через DHCP).
  • Настройте все ПК, чтобы иметь простое и уникальное имя хоста. Они используют это в своем запросе к DHCP, и это используется в dnsmasq, работающем на вашем маршрутизаторе, для их разрешения. Или настройте их вручную, чтобы не полагаться на DHCP.
  • Удалите любую оставшуюся конфигурацию на тот /etc/resolv.confслучай, если вы с ней поиграли в прошлом.
  • Настройте ПК в своей сети для использования my.homeв качестве локального поискового домена. Это может быть сделано через DHCP автоматически, или если используются статические адреса через /etc/network/interfacesфайл или в Network Manager:

    введите описание изображения здесь

  • Теперь должно работать как простое разрешение имен ( ping hostname), так и полное имя ( ping hostname.my.home).
gertvdijk
источник
5
Вот это да! Отличный ответ gertvdijk! Очень всеобъемлющий Настолько, что мне понадобится время, чтобы понять, что ты сказал. Я могу сказать, что я проверял пинг с точкой после имени хоста, и он работал правильно. Я не использую DHCP в этой локальной сети для постоянных машин. Я никогда не настраивал параметры .local ни на одной машине, так как не понимал, что это такое. Я буду расследовать это дальше согласно вашим инструкциям и перезвоню вам.
1958 года
Спасибо за этот исчерпывающий ответ. Я изменил свой /etc/nsswitch.conf, чтобы DNS пытался работать до mDNS files mdns4_minimal [NOTFOUND=return] dns mdns4. Теперь все ведет себя так, как я ожидаю с моими (плохо названными) адресными машинами host.foo.local. До этого изменения ping hostnameработали, но ping hostname.foo.localне получалось. Я действительно запутался, когда dig hostnameтерпел неудачу и dig hostname.foo.localвозвращал результат, противоположный тому, что я ожидал. Теперь я могу пинговать FQDN, как я и ожидал. Есть ли обратная сторона в том, что порядок выставлен таким образом?
TafT
1

Основываясь на ответе gertvdijk, я только что закомментировал строку в nsswitch.conf

sudo vim /etc/nsswitch.conf

.
.
.
hosts:          files dns # mdns4_minimal [NOTFOUND=return] dns
Ян Альфред Рихтер
источник
0

У меня возникли похожие проблемы с / etc / hosts, содержащим несколько пробелов между IP и именем хоста, вместо этого я использовал TAB. После изменения на TAB имя хоста может быть разрешено с помощью ping.

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

см. также на /superuser//a/938366/467479

Томас Лаурия
источник
3
Извините, это НЕ правильно. Файл hosts будет работать с пробелами или вкладками. Кроме того, 127.0.0.1 должен иметь сначала localhost, затем localhost.localdomain - и, в зависимости от настроек, имя хоста вашего компьютера. (В некоторых установках, Ubuntu / Debian, вы указали имя вашего хоста в строке 127.0.1.1). Однако я не рекомендовал бы устанавливать какие-либо адреса .local в файле hosts, поскольку они конфликтуют с mDNS / Avahi
The Dude
1
Если в вашем домене есть компьютеры с Windows, очевидно, он использует одноадресный DNS, который не совместим с реализациями mvaS Avahi или Zeroconf. Кроме того, проверьте ваш /etc/nsswitch.conf, чтобы увидеть, если он возвращается после mdns4_minimal [NOTFOUND = return] или выполняет полный поиск mdns4 (переместите его назад). Кроме того, не настраивайте DNS-серверы для использования домена .local, так как распознаватели mDNS / sd-DNS будут маскировать поиск в этом домене. Для внутреннего DNS-домена верхнего уровня используйте .lan, .work, .home и т. Д. (Но НЕ один из новых TLD, например .biz, .xyz, .web и т. Д.). Удачи и добро пожаловать в увлекательный мир разрешения DNS.
Чувак