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

Бит застрял здесь.

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

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

Моя локальная сеть:

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

  • [ 118]

    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 [ 1122]

$ 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                                                                       
16
задан 20 January 2013 в 01:10

3 ответа

О текущем выводе

ping wstation
PING wstation.local.domain

Ясно указывает, что ваш компьютер добавляет .local.domain к запросам, не относящимся к полному доменному имени. Это что-то настроенное неправильно или, по крайней мере, неправильно в вашей настройке. (если вы не используете суффикс .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. Я думаю, именно поэтому вы сейчас не понимаете, почему одно устройство работает, а другое - нет: они не все используют один и тот же метод разрешения.

Чтобы разобраться во всем

  • Избегайте использования if .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:

    enter image description here

  • Теперь и простое разрешение имен ( ping hostname ), а также полное имя ( ping hostname.my.home ) должны работать.
16
ответ дан 20 January 2013 в 01:10

На основании ответа gertvdijk я просто закомментировал строку в nsswitch.conf

sudo vim /etc/nsswitch.conf

.
.
.
hosts:          files dns # mdns4_minimal [NOTFOUND=return] dns
1
ответ дан 20 January 2013 в 01:10

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

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

см. Также на https://superuser.com/a/938366/467479

-1
ответ дан 20 January 2013 в 01:10

Другие вопросы по тегам:

Похожие вопросы: