인터넷에 연결되어 있지 않아도 OS X에서 DNS 서버 설정 사항을 반영하려는 시도를 무시하기

원하는대로 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 서버를 설정할 수 없습니다. 패널.



답변

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

로컬 컴퓨터에서 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


답변

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

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

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


답변

(응답 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 서버가 마음에 들지 않았을 때이 작업을 몇 번 수행했습니다.


답변

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

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

prepend domain-name-servers 127.0.0.1;

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


답변

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


답변

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

127.0.0.1       localhost

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


답변