Serwer Ubuntu nie rozpoznaje nazw hostów LAN

14

Trochę utknął tutaj.

Mam 2 komputery, które nie mogą rozpoznać nazw hostów LAN, chyba że w / etc / hosts znajdują się określone wpisy

Ale inne komputery w sieci LAN mogą rozpoznawać nazwy hostów.

Moja sieć LAN:

  • 1 x router Cisco z uruchomionym DD-WRT v24-sp2 z włączonym DNSMasq. Skonfigurowałem to przy użyciu nazw hostów i adresów IP w mojej sieci LAN.
  • 1 x Kubuntu 12.10 (poprawnie rozwiązuje wszystkie nazwy hostów, o ile są one wpisane do DNSMasq na routerze)
  • 2 x NAS (poprawnie rozwiązuj wszystkie nazwy)

  • 1 x Ubuntu Server 12.04 (NIE rozpoznaje lokalnych nazw hostów, chyba że są wpisane w / etc / hosts)

  • 1 x XBMCLive (Dharma) (to samo - nie jest rozwiązywane, chyba że wpisy znajdują się w / etc / hosts)

Jak uzyskać ostatnie 2, aby korzystać z wpisów DNSMasq na routerze? Każde urządzenie jest skonfigurowane do używania routera jako serwera nazw, a wszystkie urządzenia poprawnie rozpoznają adresy zewnętrzne.

Dzięki.

trochę więcej informacji:

będąc na serwerze, jeśli pinguję inny komputer (wstation)

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

Jeśli następnie dołączę .local

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

i bezpośrednio

$ 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
źródło
Nie znam odpowiedzi i nie mam pojęcia, czy będzie to pomocne, ale gdybyś nie wiedział ... Odkryłem, że jeśli dołączę „.local” po nazwie maszyny, to jakoś ją znajdzie bez potrzeby jakiejkolwiek konfiguracji. Pomogło mi to, ponieważ określałem adresy, ale musiałem ciągle zmieniać wpisy, gdy dodawałem lub usuwałem system operacyjny, którego użyłem do testowania itp. Ale określając machinename.local, nie musiałem się już martwić. Jeśli wiesz, skąd to się bierze, możesz mi powiedzieć. :)
Marty Fried
1
Cześć Marty, dziękuję za odpowiedź. Dodałem więcej informacji do problemu, aby pokazać, co dzieje się z .local
teracow

Odpowiedzi:

15

O twojej obecnej wydajności

ping wstation
PING wstation.local.domain

Wyraźnie wskazuje, że komputer dołącza się .local.domaindo zapytań spoza FQDN. Jest to coś źle skonfigurowanego lub przynajmniej źle skonfigurowanego. (chyba że faktycznie użyjesz .local.domainprzyrostka celowo)

Rozpoznawanie nazw i okresy

Jedną ważną rzeczą, o której wiele osób nie wie, jest to, że pełne imię i nazwisko powinno zawsze kończyć się kropką ( .). Jeśli go pominiesz, urządzenie spróbuje go rozwiązać w lokalnej domenie wyszukiwania (np. Mydomain.tld). W takim przypadku zapytanie mypc.localbyłoby mypc.local.mydomain.tld. Aby temu zapobiec, zapytaj o kropkę.

Konfiguracja rozdzielczości

Ogromne znaczenie ma tutaj konfiguracja resolvera. W Ubuntu (i Debian) jest to skonfigurowane w pliku /etc/network/interfaces(zakładając, że nie korzystasz z 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

Rozpoznawanie nazw w systemie Linux można również wykonać na inne sposoby. Nie tylko o to pyta lokalny serwer DNS. Spójrz na swój /etc/nsswitch.confplik do hostskonfiguracji rozwiązania:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Oznacza to, że najpierw wypróbowywane są pliki (to jest /etc/hostsplik), następnie mDNS, a dopiero później sprawdzany jest prawdziwy serwer DNS. mDNS jest implementowany za pomocą Avahi w Linuksie i na urządzeniach Apple nazywa się Bonjour. .localDomyślnie korzysta z sufiksu i działa za pośrednictwem wiadomości rozgłoszeniowych. Podobnie jak ARP działa, ale dla DNS.

Wszystkie te systemy mogą być bardzo mylące, a nawet bardziej, gdy używa się ich .localw regularnej konfiguracji DNS połączonej z urządzeniami mDNS. Wydaje mi się, że właśnie dlatego jesteś teraz zdezorientowany, dlaczego jedno urządzenie działa, a drugie nie: nie wszystkie używają tej samej metody rozwiązywania.

Aby to załatwić

  • Unikaj używania, jeśli .localnie chcesz całkowicie polegać na mDNS. Z twojego pytania rozumiem, że chciałbyś, abyś sam skonfigurował swoje rzeczy w centralnym miejscu, więc moim podejściem jest unikanie tego.
  • Skonfiguruj lokalny serwer DNS (urządzenie DD-WRT w Twoim przypadku), aby używał specjalnej nazwy domeny, np my.home. W przypadku dnsmasq jest to pojedyncze ustawienie, ale w regularnych konfiguracjach należy to skonfigurować zarówno na serwerze DNS, jak i na serwerze DHCP (jak zapowiada się za pomocą DHCP).
  • Skonfiguruj wszystkie komputery, aby miały prostą i unikalną nazwę hosta. Używają tego w swoim żądaniu DHCP i jest to używane w dnsmasq uruchomionym na routerze, aby je rozwiązać. Alternatywnie, skonfiguruj je ręcznie, aby nie polegać na DHCP.
  • Usuń wszelkie resztki konfiguracji na /etc/resolv.confwypadek, gdybyś majstrował przy niej w przeszłości.
  • Skonfiguruj komputery w sieci, aby używały my.homejako lokalnej domeny wyszukiwania. Można to zrobić automatycznie przez DHCP lub jeśli używasz adresów statycznych za pomocą /etc/network/interfacespliku lub Menedżera sieci:

    wprowadź opis zdjęcia tutaj

  • Teraz powinny działać zarówno proste rozpoznawanie nazw ( ping hostname), jak i pełna nazwa ( ping hostname.my.home).
gertvdijk
źródło
5
Łał! Niesamowita odpowiedź gertvdijk! Bardzo obszerny. Tak bardzo, że potrzebuję trochę czasu, aby zrozumieć, co powiedziałeś. Mogę powiedzieć, że przetestowałem ping z kropką po nazwie hosta i działał on poprawnie. Nie używam DHCP w tej sieci LAN dla maszyn stałych. Nigdy nie konfigurowałem ustawień .local na żadnym komputerze, ponieważ nie rozumiałem o co w tym wszystkim chodzi. Zbadam to dalej zgodnie z Twoimi instrukcjami i skontaktuję się z Tobą.
teracow
Dziękuję za tę kompleksową odpowiedź. Zmieniłem mój /etc/nsswitch.conf, tak że DNS próbuje się przed mDNS files mdns4_minimal [NOTFOUND=return] dns mdns4. Teraz wszystko działa bardziej tak, jak oczekuję na moich (źle nazwanych) maszynach adresowanych host.foo.local. Wcześniej ta zmiana ping hostnamedziałała, ale się ping hostname.foo.localnie udawała. Byłem naprawdę zdezorientowany, kiedy dig hostnamezawodziłem i dig hostname.foo.localzwracałem wynik, w przeciwieństwie do tego, czego się spodziewałem. Teraz mogę pingować nazwy FQDN zgodnie z oczekiwaniami. Czy ustawianie zamówienia w ten sposób ma swoje wady?
TafT
1

Na podstawie odpowiedzi gertvdijk właśnie skomentowałem wiersz w nsswitch.conf

sudo vim /etc/nsswitch.conf

.
.
.
hosts:          files dns # mdns4_minimal [NOTFOUND=return] dns
Jan Alfred Richter
źródło
0

Mam podobne problemy z plikiem / etc / hosts zawierającym wiele spacji między adresem IP a nazwą hosta, zamiast tego za pomocą TAB. Po zmianie na TAB nazwę hosta można rozwiązać za pomocą polecenia ping.

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

patrz również na /superuser//a/938366/467479

Thomas Lauria
źródło
3
Przepraszam, to NIE jest poprawne. Plik hosts będzie działał ze spacjami lub tabulatorami. Ponadto 127.0.0.1 powinien mieć najpierw localhost, a następnie localhost.localdomain - i, w zależności od konfiguracji, nazwę hosta komputera. (W niektórych konfiguracjach Ubuntu / Debian umieściłeś swoją nazwę hosta w wierszu 127.0.1.1) Nie zalecałbym jednak instalowania żadnych adresów lokalnych w pliku hosts, ponieważ są one sprzeczne z mDNS / Avahi
The Dude
1
Jeśli masz domeny Windows w swojej domenie, najwyraźniej używa DNS emisji pojedynczej, który nie jest zgodny z implementacjami mDNS Avahi lub Zeroconf. Sprawdź także plik /etc/nsswitch.conf, aby sprawdzić, czy jest on zwolniony za kaucją po mdns4_minimal [NOTFOUND = return] lub wykonując pełne wyszukiwanie mdns4 (cofnij go). Nie konfiguruj też żadnych serwerów DNS, aby korzystały z domeny .local, ponieważ programy tłumaczące mDNS / sd-DNS będą maskować wyszukiwania w tej domenie. Do wewnętrznego TLD DNS użyj .lan, .work, .home itp. (Ale NIE jeden z nowych TLD, takich jak .biz, .xyz, .web itp.). Powodzenia i witaj w zabawnym świecie rozwiązywania nazw DNS.
Koleś