Korzystam z pfSense 2.0rc3, skonfigurowałem go jako usługę przesyłania dalej DNS i włączyłem „Zarejestruj dzierżawy DHCP w usłudze przesyłania dalej DNS” i rozumiem, że są to wszystkie odpowiednie ustawienia, aby uzyskać serwer DNS dla lokalnych wyszukiwań.
Działa zgodnie z oczekiwaniami w systemie Linux, w szczególności mogę uruchomić host abc
i ping abc
(i inne aplikacje) i wszystkie działają zgodnie z oczekiwaniami.
Jednak w systemie Mac OS X Lion 10.7 nie działa zgodnie z oczekiwaniami. W szczególności działają tylko wyszukiwania z host
poleceniem, tj
$ ping abc
ping: cannot resolve abc: Unknown host
$ host abc
abc.local has address 192.168.1.128
$ ping abc.local
ping: cannot resolve abc.local: Unknown host
$ host abc.local
abc.local has address 192.168.1.128
Dlaczego wyszukiwanie abc
działa podczas korzystania z host
polecenia, ale kończy się niepowodzeniem w przypadku ping
(i innych aplikacji)?
Dziękuje za przeczytanie.
Odpowiedzi:
Dlaczego wprowadzili tę zmianę, nie wiem, ale doprowadziło mnie to do szaleństwa.
Nie wiem, dlaczego rzeczy działają dla hosta, ale nie pingują, ale myślę, że ma to związek z naturą tych dwóch narzędzi. Ping jest prostym (choć bardzo pomocnym) narzędziem diagnostycznym do upuszczania pakietów na drut, które powinny zostać wysłane do ciebie echem. Funkcja wyszukiwania nazwy hosta jest tylko efektem ubocznym zadania i została przekazana rekurencyjnemu resolverowi systemu (wydaje mi się, że nie sprawdziłem, sprawdzając połączone biblioteki lub coś w tym rodzaju). Głównym zadaniem hosta jest rozpoznawanie nazw DNS, więc implementuje on własny rekurencyjny przelicznik.
Program rekurencyjny resolvera firmy Apple to mDNSResponder. Z jakiegoś powodu wersja mDNSResponder w Lionie potrzebuje opcji wiersza poleceń „-AlwaysAppendSearchDomains”, aby zachowywała się tak, jak w Snow Leopard (przynajmniej).
Oto szybki sposób, aby to naprawić:
(Powinny istnieć dwa znaki tabulacji na początku od ostatniego do ostatniego wiersza powyżej, ale nie mogłem wymyślić, jak zmusić ten mały edytor do wstawiania tabulatorów, więc dodałem 16 spacji. Obie powinny działać, ale tabulatory lepiej dopasuj odstępy w oryginalnym pliku).
Spowoduje to dodanie argumentu „-AlwaysAppendSearchDomains” do pliku listy startowej mDNSResponder (i zapisanie kopii zapasowej), ale ponieważ jest on kontrolowany przez uruchomienie, system musi zostać poinformowany o konieczności ponownego uruchomienia mDNSResponder.
Teraz, jeśli sprawdzisz działający proces mDNSResponder, powinieneś zobaczyć, że działa on z nowym argumentem:
(Propozycje do http://www.makingitscale.com/2011/fix-for-broken-search-domain-resolution-in-osx-lion.html i http://kavassalis.com/2011/07/wtf-bug -in-os-x-10-7 / , gdzie znalazłem odpowiedzi na ten problem).
źródło
sudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist ProgramArguments -array-add "–AlwaysAppendSearchDomains"
Ze strony podręcznika hosta (1):
Niestety nie ma informacji o tym, jak dokładnie polecenie hosta rozpoznaje nazwy hostów. To zachowanie czyni go nieco bezużytecznym przy debugowaniu, IMHO.
źródło
Podstawowa historia ... nslookup było poleceniem, ale miało własną implementację wszystkich procedur resolvera. Zaczęło się dziać, że resolwery systemowe na różnych platformach działały inaczej niż nslookup. Czasami daje to całkiem odmienne wyniki.
Polecenia host i dig zostały utworzone jako „przepisz” dla nslookup. Łączą się one statycznie w funkcjach systemowego rozpoznawania nazw. Systemowy resolver to zbiór funkcji w standardowej bibliotece C systemu UNIX lub systemu podobnego do UNIX (w Mac OS X funkcje te są częścią biblioteki netdb). W ten sposób komendy host i dig działają zawsze w taki sam sposób, jak program tłumaczący system dla każdego systemu operacyjnego, dla którego zostały zbudowane, ale nie polegają na tym. W ten sposób są doskonałymi narzędziami diagnostycznymi w przypadkach, gdy resolver systemu działa nieprawidłowo.
UWAGA: Hostuj i kop zarówno czytając listę serwerów nazw z /etc/resolv.conf, chyba że otrzymają konkretny serwer nazw do rozmowy. Tylko polecenie host korzysta z listy wyszukiwania w pliku /etc/resolv.conf; dig nie, dlatego zawsze trzeba podać FQDN dig, aby cokolwiek rozwiązać. Oba polecenia są poza tym w pełni samowystarczalne; np. plik /etc/resolv.conf jest jedyną rzeczą, której nie używają w pliku binarnym.
mDNSresponder to Bonjour. Nie zagłębiłem się w to zbyt głęboko, ale podejrzewam, że to ustawienie konfiguracji nie naprawia tego, a przynajmniej nie bezpośrednio. Właśnie spotkałem ten sam problem w systemie Mac OS X 10.9.1 i po prostu zrestartowałem mDNSresponder, aby go naprawić. Nigdy wcześniej nie widziałem tego problemu na 10.5 -> 10.8 / 10.9 na żadnym innym systemie. Nie wpłynęło to również na aplikacje GUI, zepsuły się tylko narzędzia wiersza poleceń, takie jak ping i ssh.
Jeśli znajdę czas na trochę głębsze przeszukanie biblioteki, zobaczę, czy znajdę pełniejsze wyjaśnienie.
źródło
Przygotowałem skrypt powłoki, aby zautomatyzować poprawkę (i deinstalator, jeśli będziesz go później potrzebować), tutaj:
https://github.com/michthom/AlwaysAppendSearchDomains
Miało to dać mniej technicznym użytkownikom w pracy, którzy mogą unikać ręcznej edycji plików systemowych.
źródło
.local jest zarezerwowany dla multiemisji. Problemem mogą być serwery mDNS i DNS w tej samej sieci korzystające z .local.
źródło
Host dołącza sufiks .local dns. Ping nie jest. Jeśli okaże się to niepokojące, możesz dodać .local jako domyślny sufiks w preferencjach systemu sieciowego, a system doda to podczas próby rozwiązania nazw hostów.
źródło
ping abc.local
też nie działa (choćhost abc.local
działa). Naprawiłem pytanie. pfSense automatycznie dodaje domenę lokalną jako domenę wyszukiwania, gdy wysyła dzierżawę DHCP, więc to nie byłby problem.ping abc.local.
W przypadku, gdy próbowała wszystko powyższe i nic nie działało wtedy można dodać serwery nazw i szukać drogi do
System Preferences>Network>Advance(bottom right of the window)>DNS tab
Aktualizacje /etc/resolv.conf i ping powinny teraz działać. Aktualizowanie ścieżki wyszukiwania przez edycję /etc/resolv.conf tak naprawdę nie działa, ale z jakiegoś powodu to działa.
AKTUALIZACJA:
Edycja /etc/resolv.conf nie działa, ponieważ system operacyjny przepisuje plik na podstawie ustawienia panelu Preferencje systemowe.
źródło
Brakuje mi wystarczającej reputacji, aby skomentować post Lamonta Petersona . Ponowne uruchomienie mDNSresponder działało dla mnie w systemie Mac OS X 10.7 (Lion). W przeciwieństwie do Lamonta Petersona ten problem spowodował u mnie problemy z jedną aplikacją GUI - Safari nie mogło rozwiązać publicznych lub prywatnych nazw hostów. Oto konkretne kroki, które zrobiłem i podejrzewam, że zrobił to również Lamont Peterson:
Do
unload
wyłącza mDNSResponder iload
uruchamia go ponownie.To natychmiast rozwiązało problem; ponowne uruchomienie nie jest wymagane.
Możesz sprawdzić, czy zrestartował się pomyślnie, używając
list
polecenia:Obecność identyfikatora procesu (PID) oznacza, że jest uruchomiony.
708
będzie się różnić, ponieważ jest przypisany przez system operacyjny. Jeśli status pokazuje coś innego niż łącznik lub zero, coś poszło nie tak.Nie wiem, jak
mDNSResponderHelper
wchodzi w interakcjemDNSResponder
; Musiałem tylko ponownie uruchomićmDNSResponder
.źródło
W jednej linii:
źródło
Uwaga: nazwy OSX mogą być niestandardowe, więc dla kompletności:
Nazwy komputerów Mac NIE są ogólnie: należy wprowadzić dwie poprawki: a) zmień spacje na „-” b) dodaj .local
na przykład mój Mac: MacBook Pro ingconti
będzie można pingować pod adresem: ingcontis-MacBook-Pro.local
I otwieranie prefs można zobaczyć:
źródło