Nie można rozpoznać nazw domen .foo.local

15

Moje miejsce pracy ma intranetu z nazwami domen, takich jak server01.foo.local, server02.foo.localitp Niedawno uruchomiony na Fedora 16 na żywo środowisko przetestować go i odkrył, że te nazwy domen nie rozwiążą.

Na przykład:

$ ping server01.foo.local
ping: nieznany host server01.foo.local
$ ping server01
PING server01.foo.local (XXXX) ...

Dlaczego server01rozwiąże (i wydrukuje nazwę jako server01.foo.local), ale server01.foo.localnie zrobi tego?

rhollencamp
źródło
Miał dokładnie ten sam problem z Ubuntu działającym w VMBox. Rozwiązanie @ adam820 również zadziałało dla mnie.
jimbo

Odpowiedzi:

22

Chociaż nie jestem w 100% przekonany, dlaczego nie działa zgodnie z oczekiwaniami, wydaje się, że istnieje bardzo duży konflikt z usługą mDNS (Avahi w Linuksie, Bonjour / Zeroconf w Mac / Windows) i sieciami Windows, które użyj .local jako wewnętrznej nazwy routingu dla domen. Wydaje się, że zdarza się, że podczas pingowania server01 pomija użycie mDNS do rozpoznawania, a następnie dołącza domenę wyszukiwania (foo.local) do żądania, pomyślnie wysyłając zapytanie do serwera DNS o server01.foo.local. Jednakże, gdy używasz mDNS (który używa .local jako domyślnego rozszerzenia nazwy komputera), kiedy próbujesz pingować server01.foo.local, w rzeczywistości transmituje przez mDNS, szukając komputera o nazwie „server01.foo”; gdy zawiedzie, z jakiegokolwiek powodu nie przechodzi do bezpośredniego DNS. Dużym obejściem tego problemu jest brak nazewnictwa domeny .local, co prawdopodobnie stoi w sprzeczności ze szkoleniem większości administratorów Windows w zakresie strukturyzowania domen. Biorąc to pod uwagę:

Jeśli mDNS nie ma znaczenia w Twojej sieci (jak to zwykle bywa w przedsiębiorstwie, które ma tendencję do uruchamiania dedykowanych serwerów DNS w porównaniu do sieci domowej, w której czasami używany jest mDNS), zmiana kolejności wyszukiwania jest najłatwiejszym obejściem.

Można to znaleźć w pliku /etc/nsswitch.conf. Sekcja dla hostów wyświetli listę kolejności, która dla Fedory 16 jest domyślna:

hosts:      files mdns4_minimal [NOTFOUND=return] dns myhostname

Jeśli zmienisz to na:

hosts:      files dns mdns4_minimal [NOTFOUND=return] myhostname

gdzie przesuwasz dns do przodu w kolejności wyszukiwania, to na razie powinno to naprawić. Alternatywnie, jeśli wiesz, że wcale nie będziesz potrzebować mDNS, po prostu usuń część „mdns4_minimal [NOTFOUND = return]”.

Patrząc na ten błąd w trackerze Red Hata , wydaje się, że jest to długotrwały problem bez widocznego rozwiązania w tej chwili. Gdyby ktoś mógł uzyskać więcej informacji na temat tego, dlaczego tak się dzieje, byłoby to mile widziane.

adam820
źródło
usunięcie sekcji mdns rozwiązało problem
rhollencamp 10.11.11
Dziękuję bardzo za dodanie tego. Miałem dokładnie ten sam problem i najpierw przeniesienie wpisu dns rozwiązało. W moim przypadku używam najnowszego Ubuntu, a nie Fedory, ale rozwiązanie było dokładnie takie samo.
jimbo
nic nie warte, po prostu spróbowałem tego i okazało się, że korzystanie z cisco VPN vpncnie może się połączyć po usunięciu tych wpisów w hosts: .*linii /etc/nsswitch.conf. Zastąpienie tych ustawień rozwiązało problem.
dobbs
„gdy zawiedzie, nie przechodzi do bezpośredniego DNS z jakiegokolwiek powodu.” . Powód jest dość oczywisty. [NOTFOUND=return]oznacza „jeśli mDNS powie ci, że nie znaleziono nazwy lokalnej, to jest to autorytatywne i nie ma sensu pytać dalej”. Przenoszenie DNS przed mDNS jest obejściem, ale samo spowodowanie braku autoryzacji mDNS jest już wystarczające.
MSalters,
Tak, to jest poprawny komentarz; to było 7 lat temu i wtedy o tym nie wiedziałem. Ale tak, usunięcie go, usunięcie pakietu, jak wspomniano poniżej, lub zmiana kolejności są ważnymi obejściami / rozwiązaniami.
adam820
2

Proponuję inne rozwiązanie na wypadek korzystania z .localdomeny. Po pierwsze, nie jest to dobry pomysł, ponieważ wydaje się, że standardem / konwencją jest stosowanie w .localprzypadku dynamicznego wykrywania multiemisji.

Ale jeśli nalegasz, łatwiej jest po prostu usunąć nss-mdnspakiet lub libnss-mdnspakiet w zależności od dystrybucji, a problem zostanie rozwiązany. Jeśli nie potrzebujesz tej funkcji, to dlaczego masz ją tam?

Oto 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).
akostadinov
źródło
1

Niektóre rzeczy, które możesz sprawdzić:

  • czy w /etc/host.conf jest zamówienie, które określa sprawdzenie / etc / hosts przed wysłaniem zapytania do DNS?

  • jest server01 w / etc / hosts?

  • czy jest plik search foo.local/ etc / resolv, conf? To by dopisało foo.local do dowolnej nazwy hosta, której szukasz

Zastanawiam się, czy twój serwer nazw jest poprawnie skonfigurowany. Jeśli nadal masz nslookup, co to za powrót server01, server01.foo.locala adres IP (reverse lookup)?

ott--
źródło
* host.conf nie ma nic na temat kolejności * server01 nie znajduje się w / etc / hosts * wyszukiwanie foo.local znajduje się w /etc/resolv.conf (NetworkManager umieścił go tam), ale usunięcie go nie pomaga. Po edycji próbowałem /etc/resolv.conf ochrony przed zapisem, aby NM nie mógł zastąpić i zrestartować komputera; bez kości
rhollencamp 10.11.11
@rhollencamp: czy masz nslookup w swoim systemie?
ott--