인터넷에 연결되어 있지 않아도 OS X에서 DNS 서버 설정


17

원하는대로 localhost로 확인되는 DNS 서버 (Dnsmasq의 로컬 인스턴스)를 설치하고 구성했습니다.

오프라인 상태가되면 OS X이 resolv.conf의 내용을 비우고이 파일의 변경 사항을 반영하려는 시도를 무시하기 때문에 작동이 중지됩니다.

오프라인에서도 DNS를 구성하는 방법은 무엇입니까?

비슷한 문제 (해결되지 않음) : http://blog.steamshift.com/geek/leopard-lookupd-and-local-web-development-sites

주요 동기는 하위 도메인을 계정 키로 사용하는 RoR 응용 프로그램을 쉽게 개발하는 것입니다. 그리고 / etc / hosts에서 127.0.0.1 * .yourapp.local을 사용할 수 없습니다. 127.0.0.1의 .smackaho.st와 같이 도메인 smackaho.st 및 srt DNS를 등록한 사람이 있지만 오프라인으로 작업 할 때는 도메인을 사용할 수 없습니다.

편집 : scutil 명령을 시도했지만 오프라인 인 경우 DNS를 변경할 수있는 것 같습니다

참고 : 모든 인터페이스가 다운되면 Pref.에서 DNS 서버를 설정할 수 없습니다. 패널.


관련 : 수퍼 유저의 OS X Yosemite에서 인터넷 연결없이 dnsmasq가 작동하지 않습니다 (솔루션이 있지만 일부 참조는 있음).
Arjan

답변:


29

아래 업데이트를 참조하십시오!

로컬 컴퓨터에서 Dnsmasq를 사용하는 것도 즐겁고이 문제도있었습니다. 해결책은 다음과 같습니다.

보낸 사람 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/기본적으로 존재하지 않습니다. 직접 만들어야합니다.

또한 매뉴얼 페이지에서 :

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.

따라서 최상위 도메인에 대한 모든 DNS 쿼리를 dev로컬 네임 서버로 라우팅하려면 다음을 수행하십시오.

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

configd의 파일을 변경하지 않으므로이 /etc/resolver/설정은 네트워크 변경 및 재부팅을 통해 유지됩니다.

업데이트 2012 년 7 월 17 일

불행히도, OS X Lion에서 scutil --dns인터페이스가 활성화되어 있지 않으면 최상위 해결 프로그램 (으로 표시됨 )이 사라집니다.

# 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

리졸버 # 1은 비어 있지만 / etc / resolver 파생 네임 서버 항목은 남아 있습니다.

/ etc / resolver / 파일에서 리졸버 도메인을 직접 지정할 수 있기 때문에 특수 인터넷 루트 도메인을 지정하면 . 다음과 같은 글로벌 리졸버 항목이 생성됩니다.

resolver #8
  nameserver[0] : 127.0.0.1

이제 모든 DNS 쿼리가 오프라인 상태에서도 로컬 호스트로 라우팅됩니다.

물론 dnsmasq의 --address 옵션과 같은 방법으로 선택한 도메인을 127.0.0.1로 해결해야합니다.

# dnsmasq --address=/dev/127.0.0.1

요약해서 말하자면:

  • 모든 네트워크 인터페이스 DNS 서버를 127.0.0.1로 설정하십시오.
    networksetup -setdnsservers 이더넷 127.0.0.1
    networksetup -setdnsservers Wi-Fi 127.0.0.1
    ...
  • / etc / resolver / what 파일을 만듭니다 :
    네임 서버 127.0.0.1
    도메인 .
  • 로컬 DNS 서버를 설정하고 행복하십시오.

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


그것이 바로 pow가 사용하는 것입니다 ( pow.cx ).
daeltar

그러나 불행히도 작동하지 않습니다 -github.com/37signals/pow/issues/104
daeltar

3
@guns이 솔루션은 여전히 ​​요세미티에서 작동합니까? 업그레이드 할 때까지 dnsmasq가 오프라인에서 제대로 작동했습니다. 이제 scutil --dns인터넷에 연결되지 않은 상태에서 실행 하면 얻을 수있는 모든 것은 No DNS configuration available 위의 지침을
따르지만

1
@ MatthewLee, 예, 맞습니다. 유일한 해결 방법은 hosts 파일에 항목을 추가하는 것 같습니다.
Lenciel

1
아직 요세미티 솔루션을 찾았습니까?
jmagnusson

2

왜 대신 / etc / hosts에 항목을 작성하지 않습니까? 실제로 완전한 DNS 서버를 실행 해야하는 상황을 생각하는 데 문제가 있습니다. Mac에서 호스트 파일 항목을 항상 사용하여 이와 같은 작업을 수행합니다.

OS X의 리졸버는 Linux 또는 다른 Unix의 리졸버와 다르게 작동합니다. 이것은 아마도 슬픔을 일으키는 원인의 일부일 것입니다. 예를 들어, 먼저 사용할 해결 방법에 대한 환경 설정이 있으며 모든 쿼리 결과를 일정 기간 동안 캐시합니다.

네트워크 환경 설정 창의 인터페이스에 DNS 서버를 추가 했습니까? 이렇게하면 확인자가 DNS 항목을 찾기로 결정한 경우 해당 서버가 쿼리에 해당 서버를 사용하도록해야합니다.


클라이언트 시스템 에서 DNS 전달자 를 사용하는 한 가지 이유 는 모든 요청에서 현재 부풀어 오른 호스트 파일을 제거하는 리졸버 디먼의 성능 패널티를 겪지 않고 광고 / 악성 프로그램 도메인의 대규모 블랙리스트를 유지하기위한 것입니다. 이 방법의 장점에도 불구하고 dnsmasq는 / etc / hosts를 메모리에로드하여 조회 시간이 최소화됩니다. 또한 웹 개발을 수행하는 경우 작업중인 모든 사이트에 대해 로컬 도메인을 추가 할 때 약간의 번거 로움을 피할 수 있습니다.
총 :

1

(응답 b / c 아직 댓글을 달 수 없습니다 ...)

오프라인 상태는 어떻습니까?

(지금 당장 얻은 최고의 답변)

# 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.

따라서 UI에 무언가를 입력 할 수 있어야합니다. 로컬 DHCP 서버가 제공하는 DNS 서버가 마음에 들지 않았을 때이 작업을 몇 번 수행했습니다.


NetworkPreferences에서 DNS 구성을 변경하면 /etc/resolv.conf 파일이 변경됩니다.
Fabian Zeindl

0

OSX에 일반 Linux / UNIX DHCP 클라이언트 구성에있는 /etc/dhcp3/dhclient.conf 구성 파일이 있습니까?

그렇다면 주석을 해제 할 수있는 줄이 있어야합니다

prepend domain-name-servers 127.0.0.1;

DHCP 클라이언트가 항상 resolv.conf에 해당 줄을 추가하도록


resolv.conf에 추가해도 OS X에서는 도움이되지 않습니다. resolv.conf의 내용이 생성되고 자체가 /var/run/resolv.conf에서 symlink이며 /var/run/resolv.conf를 변경하더라도 변경 사항을 반영하지 않습니다 .
daeltar 2016 년

0

고정 주소와 127.0.0.1로 구성된 두 번째 이더넷 서비스를 DNS 서버로 추가하십시오. 또는 DNS 서버를 127.0.0.1로 설정하는 네트워크 위치를 추가하십시오. 이러한 변경은 모두 "네트워크"패널의 "시스템 환경 설정"에서 수행됩니다.


-2

그냥 넣는 것이 도움이 될 수 있습니다

127.0.0.1       localhost

/ etc / hosts에 연결하므로 localhost를 찾기 위해 해석 할 필요가 없습니다.


1
하위 도메인에 필요하므로 이것이 아닙니다.
daeltar 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.