Ustaw serwer DNS w systemie OS X, nawet jeśli nie masz połączenia z Internetem

17

Zainstalowałem, skonfigurowałem serwer DNS (lokalna instancja Dnsmasq), który decyduje się na localhost, jak chcę, wszystko OK.

Kiedy przechodzę do trybu offline, przestaje działać, ponieważ OS X pusta zawartość resolv.conf i ignoruje próbę odzwierciedlenia zmian w tym pliku.

Każdy pomysł, jak skonfigurować DNS nawet w trybie offline?

Podobny problem (nierozwiązany): http://blog.steamshift.com/geek/leopard-lookupd-and-local-web-development-sites

Główną motywacją jest łatwość tworzenia aplikacji RoR, która wykorzystuje poddomeny jako klucze do kont. I nie możesz używać 127.0.0.1 * .yourapp.local w / etc / hosts. Jakiś facet zarejestrował dla niego domenę smackaho.st i srt DNS, na przykład .smackaho.st pod adresem 127.0.0.1, ale nadal nie możesz jej używać, gdy pracujesz w trybie offline.

EDYCJA: próbowałem polecenia scutil, ale wydaje się, że możesz zmienić DNS, jeśli jesteś offline

UWAGA: po wyłączeniu wszystkich interfejsów nie można ustawić serwerów DNS w Pref. płyta.

Daeltar
źródło
Powiązane: dnsmasq nie działa bez połączenia z Internetem w OS X Yosemite na Super User (bez rozwiązania, ale kilka odniesień).
Arjan

Odpowiedzi:

29

ZOBACZ AKTUALIZACJĘ PONIŻEJ!

Lubię też korzystać z Dnsmasq na moim komputerze lokalnym i miałem ten problem. Oto rozwiązanie:

Od man 5 resolver:

The configuration for a particular client may be read from a file
having the format described in this man page. These are at present
located by the system in the /etc/resolv.conf file and in the files
found in the /etc/resolver directory.

/etc/resolver/nie jest domyślnie obecny; musisz go stworzyć sam.

Również ze strony podręcznika:

domain
  Domain name associated with this resolver configuration. This
  option is normally not required by the Mac OS X DNS search system
  when the resolver configuration is read from a file in the
  /etc/resolver directory. In that case the file name is used as the
  domain name.

Jeśli więc chcesz, aby wszystkie zapytania DNS dotyczące domeny najwyższego poziomu devbyły kierowane do lokalnego serwera nazw, wykonaj następujące czynności:

# mkdir /etc/resolver
# echo 'nameserver 127.0.0.1' > /etc/resolver/dev

configdnie zmienia plików /etc/resolver/, więc to ustawienie będzie obowiązywać przez zmiany sieciowe i ponowne uruchomienie.

AKTUALIZACJA 17 lipca 2012 r

Niestety, od OS X Lion górny resolver (jak pokazuje scutil --dns) znika, gdy nie są aktywne żadne interfejsy:

# scutil --dns # Online
DNS configuration

resolver #1
  nameserver[0] : 127.0.0.1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

# scutil --dns # Offline
DNS configuration

resolver #1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

Zauważ, że resolver # 1 jest pusty, ale pozycja pochodnego serwera nazw / etc / resolver pozostaje.

Okazuje się, że ponieważ możesz określić domenę resolvera bezpośrednio w pliku / etc / resolver /, określenie specjalnej internetowej domeny głównej . powoduje utworzenie globalnego wpisu resolvera, który wygląda następująco:

resolver #8
  nameserver[0] : 127.0.0.1

Teraz wszystkie zapytania DNS są kierowane do hosta lokalnego, nawet w trybie offline.

Oczywiście nadal będziesz musiał rozwiązać wybrane domeny jako 127.0.0.1, używając czegoś takiego jak opcja --address dnsmasq:

# dnsmasq --address=/dev/127.0.0.1

W podsumowaniu:

  • Ustaw wszystkie serwery dns interfejsu sieciowego na 127.0.0.1:
    Networksetup -setdnsservers Ethernet 127.0.0.1
    Networksetup -setdnsservers Wi-Fi 127.0.0.1
    ...
  • Utwórz plik / etc / resolver / cokolwiek:
    serwer nazw 127.0.0.1
    domena .
  • Skonfiguruj lokalny serwer DNS i bądź szczęśliwy.

por. http://opensource.apple.com/source/configd/configd-395.11/dnsinfo/dnsinfo_flatfile.c

pistolety
źródło
Właśnie tego używa pow ( pow.cx ).
daeltar
ale niestety to nie działa - github.com/37signals/pow/issues/104
daeltar
3
@guns czy to rozwiązanie nadal działa w Yosemite? dnsmasq działało dobrze dla mnie offline, dopóki nie zaktualizowałem. Teraz mam kiedy biegnę scutil --dns, gdy nie jest podłączony do Internetu wszystkim mogę to No DNS configuration available ja po instrukcji powyżej, ale bez powodzenia
MatthewLee
1
@MatthewLee, tak, masz rację, wydaje się, że jedynym rozwiązaniem jest dodawanie wpisów do pliku hosts.
Lenciel
1
Czy ktoś jeszcze znalazł rozwiązanie dla Yosemite?
jmagnusson
2

Dlaczego nie zamiast tego wprowadzić wpisy w / etc / hosts? Mam problem z myśleniem o sytuacji, w której musiałbyś faktycznie uruchomić w pełni funkcjonalny serwer DNS. Wpisy pliku hosta używam cały czas, aby wykonywać takie czynności na komputerach Mac.

Program rozpoznawania nazw w systemie OS X działa inaczej niż w systemie Linux lub innych systemach uniksowych. Jest to prawdopodobnie część tego, co powoduje u Ciebie smutek. Podobnie jak na przykład, ma preferencje, której metody rozstrzygania użyć w pierwszej kolejności i buforuje wyniki wszystkich zapytań przez pewien czas.

Czy dodałeś serwer DNS do interfejsu w panelu preferencji Sieć? Powinno to zapewnić, że program tłumaczący użyje tego serwera do zapytań, jeśli zdecyduje się poszukać wpisu DNS.


źródło
Jednym z powodów korzystania z usługi przesyłania dalej DNS na komputerze klienckim jest utrzymywanie dużej czarnej listy domen reklam / złośliwego oprogramowania bez ponoszenia ograniczenia wydajności przez demona programu rozpoznawania nazw grep rozdęty teraz plik hosta przy każdym żądaniu. Niezależnie od zalet tego podejścia, dnsmasq ładuje / etc / hosts do pamięci, gdzie czas wyszukiwania będzie minimalny. Ponadto, jeśli zajmujesz się tworzeniem stron internetowych, pozwala to uniknąć drobnych niedogodności związanych z dodawaniem domen lokalnych do każdej witryny, nad którą pracujesz.
pistolety
1

(odpowiadając b / c nie mogę jeszcze komentować ...)

Jak idziesz offline?

(najlepsza odpowiedź, jaką mam teraz)

# man -S 5 resolver
 .
 .
 .
 Note that the /etc/resolv.conf file,
 which contains configuration for the default (or "primary") DNS resolver
 client, is maintained automatically by Mac OS X and should not be edited manu-
 ally.  Changes to the DNS configuration should be made by using the Network
 Preferences panel.

Powinieneś być w stanie wprowadzić coś w interfejsie użytkownika i powinno się ono trzymać. Zrobiłem to kilka razy, gdy nie podobał mi się serwer DNS, który zapewnia mój lokalny serwer DHCP.

benc
źródło
Zmiana konfiguracji DNS w NetworkPreferences powoduje zmianę pliku /etc/resolv.conf.
Fabian Zeindl
0

Czy OSX ma plik konfiguracyjny /etc/dhcp3/dhclient.conf, który ma normalna konfiguracja klienta DHCP dla Linux / UNIX?

Jeśli tak, powinien mieć linię, za którą możesz odkomentować

prepend domain-name-servers 127.0.0.1;

aby klient DHCP zawsze dodawał tę linię do pliku resolv.conf

Kevin Kuphal
źródło
Dodanie do resolv.conf nie pomaga w systemie OS X. Treść resolv.conf jest generowana i sama jest dowiązaniem symbolicznym na /var/run/resolv.conf i nawet gdy zmieniam /var/run/resolv.conf, nie odzwierciedla zmian .
daeltar
0

Spróbuj dodać drugą usługę Ethernet skonfigurowaną z adresem statycznym i 127.0.0.1 jako serwerem DNS. Lub dodaj lokalizację sieciową, która ustawia twój serwer DNS na 127.0.0.1. Obie te zmiany zostaną wprowadzone w „Preferencjach systemowych” w panelu „Sieć”.

Josh
źródło
-2

Może to po prostu pomóc

127.0.0.1       localhost

do / etc / hosts, więc nie trzeba resolvera, aby znaleźć localhost.

Sven
źródło
1
Potrzebuję go do poddomen, więc to nie nie nie.
daeltar