Mac OSX Lion DNS 조회 순서 [종료 됨]


96

Mac OSX Lion으로 업그레이드 한 후 이름 확인을 위해 더 이상 / etc / hosts가 처음부터 검색되지 않는다는 것을 알게되었습니다. 이로 인해 다음과 같은 부작용이 발생합니다.

  1. / etc / hosts의 항목이 고통스럽게 느리게 해결됩니다.
  2. 기존 도메인 (예 : 127.0.0.1 www.google.com)을 재정의 할 수 없습니다.
  3. DHCP에서 검색 도메인 항목을 가져 오면 .lan이라고 말하고 재미있는 사람이 localhost.lan을 로컬 DNS에서 127.0.0.1로 구성한 다음 로컬 호스트에 더 이상 연결할 수 없습니다.

이 동작이 의도 된 것입니까? 이해가 되나요? 그리고 가장 중요한 것은 어떻게 내가 이전 행동으로 돌아갈 수 있다는 것입니다.


12
슈퍼 유용한 질문 - 놀라운 그 주제 오프로 폐쇄 놀라게
세바스찬 패튼

적어도 그들은 아직 스레드를 삭제하지 않았습니다 .. 이것은 내 베이컨을 구했습니다. 모든 호스트를 X.local에서 X.lhost로 변경했는데 문제가 사라졌습니다. 참고로 저는 xip.io의 열렬한 팬입니다. 예 : foo.127.0.0.1.xip.io
Tim

답변:


78

그가 중요하다고 생각하는 것은 Lion이 .local TLD가 일부 멀티 캐스트 DNS 기능 (Bonjour에서 사용) 용으로 예약되어 있기 때문에 다르게 처리한다는 것입니다. 이 문제를 해결하기 위해 찾은 유일한 방법은 개발 호스트 (예 : .dev)에 다른 TLD를 사용하는 것입니다. 저에게는 잘 작동합니다. 다른 사람들에게 도움이되기를 바랍니다.


감사합니다. 참으로 매우 도움이됩니다.
Cade

5
내 첫 생각은 "절름발이"였습니다. 그러나 나는 다른 스택 게시물을 우연히 발견하고 내 입장을 변경했습니다. serverfault.com/questions/17255/…
Matt Beckman

참고 사항-개발에 크롬을 사용하는 경우 비표준 최상위 도메인은 검색으로 해석됩니다. 실제 도메인 조회를 수행하려면 .dev.com과 같은 작업을 수행해야 할 수 있습니다. 나는 이것을 우아하게하는 방법을 잘 모르겠다.
bbrame

5
@bbrame : URL 스키마를 사용하여 로컬 도메인을 입력 할 수 있습니다. http://foo.dev/; 그 후 Chrome은 foo.dev이것이 쿼리가 아니라 도메인 임을 인식 합니다.
총은

또는 dscl 도구사용 하여 예외를 추가 할 수 있습니다 .
Artur Bodera 2013

51

호스트 파일의 도메인 재정의와 관련하여 Lion은 일부 상황에서 IPv4 네트워크를 통해 도메인에 연결할 수없는 것으로 감지되면 도메인에 대한 IPv6 주소를 쿼리하는 것을 발견했습니다.

광고 도메인을 127.0.0.1. wireshark를 시작하고 AAAAIPv4 A쿼리 (IPv4)에 이어 (IPv6 DNS 레코드) 쿼리를 발견했습니다 . 광고 서버에는 실제로 IPv6 추가 기능이 있으며 콘텐츠를 제공 할 수있었습니다.

이에 대한 해결책은

::1 mydomain.com

모든 항목

127.0.0.1 mydomain.com

호스트 파일의 항목.

흥미롭게도 로컬 웹 서버가 실행 중이고 127.0.0.1:80브라우저가 웹 서버로부터 응답을 받으면 (오류 또는 기타) AAAATCP 연결이 최소한 가능하다고 만족하는 것 같으므로 쿼리가 실행 되지 않습니다 .


관련 메모에서 호스트 파일 (광고 차단, 로컬 웹 개발 등)을 많이 사용하는 경우 자체 로컬 DNS 확인자를 실행하는 것이 좋습니다. /etc/hosts모든 요청에 ​​대해 읽어야 하는 디스크 / CPU 히트가 상당 하므로 해당 파일을 매우 가볍게 유지하는 것이 가장 좋습니다.

dnsmasq상당한 성능 향상 외에도 로컬 과 같은 것을 실행할 때의 한 가지 장점은 전체 최상위 도메인을 로컬 컴퓨터로 다시 리디렉션 할 수 있다는 것입니다. 이를 통해 로컬로 확인하려는 모든 도메인을 개별적으로 입력하지 않고도 개발을위한 전체 * .dev 네임 스페이스를 가질 수 있습니다./etc/hosts


3
감사합니다. 내 코드의 변경 사항을 테스트하기 위해 10 ~ 30 초를 기다렸다가 나를 미치게했고 직접 알아낼 필요가 없어서 엄청난 시간을 절약했습니다.
Zack Angelo

1
나는 같은 문제가 있었고 이것은 내 문제를 즉시 해결했습니다! 좋은.
cstrat 2013 년

1
+1 "내 호스트 파일이 작동하지 않는 이유"를 검색하는 모든 사용자에게 유용한 정보입니다. 여기에 그 질문을하여 동일한 답을 입력하고 검색 엔진을 통해 쉽게 찾을 수 있도록 할 수 있습니다!
cape1232

읽기로 인해 디스크 I / O가 눈에 띄게 증가해서는 안됩니다 /etc/hosts. 자주 사용하는 경우 OS가 파일을 캐시합니다.
Dan Pritts 2015 년

LAN이 IPv6를 지원하는 사용자 (결국 거의 2016 년입니다!)는 지금부터 IPv4가 완전히 사라질 때까지 또는 Apple이 문제를 파악하여 내부적으로 해결할 때까지이 문제에 직면하게됩니다! Jean-Baptiste의 응답도 고려해야합니다 (예 : 개발 환경에 .local 대신 .dev 사용).
unrivaledcreations

17

문제는 내가 / etc / hosts 파일을 심볼릭 링크했다는 것입니다. / etc / hosts가 일반 파일이면 모든 것이 정상입니다.


1
나는 같은 문제가 있습니다. 그러나 내 / etc / hosts 파일은 일반 파일입니다. 이것에 대한 도움을 주시면 감사하겠습니다.
matt

4
이것은 또한 내 문제인 것 같습니다. 내 보관함 폴더에있는 파일에 대한 심볼릭 링크가 있었는데,이 폴더는 예전에는 작동했고 매우 영리하다고 생각했습니다. 애플은 더 이상이 영리함을 찾지 못하는 것 같습니다. 또한 심볼릭 링크에서 실제 파일로 이동 한 후 Option-restart를 사용하여 완전히 다시 시작했습니다. 이제 모든 것이 행복해 보입니다.
Tom S.

2
심볼릭 링크 된 호스트 파일의 항목은 다른 방법으로 확인할 수없는 경우 괜찮습니다. 이는 심볼릭 링크 된 호스트 파일이 주소를 확인할 수없는 경우에만 확인됨을 나타냅니다. 호스트 파일이 일반 파일이면 다른 형태의 해결 전에 확인됩니다. 따라서 실제로 유효한 DNS 항목이있는 도메인을 재정의해야하는 경우 호스트 파일은 심볼릭 링크가 아닌 파일이어야합니다.
cerberos

1
기록을 위해 Mavericks (10.9)의 경우에도 마찬가지입니다. 누군가가 Yosemite
가하는

1
요세미티도이 문제를 해결했습니다. 이것은 매우 이상한 행동입니다.
Vytautas Gimbutas

14

업데이트 (2) : OSX 10.10.5는 mDNSResponder.

업데이트 : OSX 10.10 Yosemite는 mDNSResponder를 "discoveryd"로 대체했습니다. 업그레이드하지 않았으므로 DNS 조회 및 /etc/hosts.

Lion의 시스템 DNS 해석기가 mDNSResponder프로세스입니다.

"그러나 mDNSResponder는 멀티 캐스트 DNS 응답자"라고 생각할 수 있습니다. 네가 옳아; 그것이 원래 목적이었고 여전히이 기능을 수행합니다. 그러나 최신 MacOS 버전에서는 표준 호스트 조회도 수행합니다.

Lion에서는 /etc/hosts적어도 항상 그런 것은 아니지만 변경 될 때 자동으로 다시 읽는 것처럼 보이지 않습니다 . 강제 종료 mDNSResponder(자동으로 다시 시작되도록 허용)하면 문제가 해결되는 것 같습니다.

sudo killall mDNSResponder

트릭을해야합니다.

아래는 후손에 대한 나의 원래 대답입니다. 어떤 경우에는 여전히 문제가 될 수 있다고 생각합니다.

/etc/hosts파일이 유닉스 스타일 텍스트 파일 인지 확인 하고, cr이 아닌 끝 부분에 줄 바꿈이 있어야합니다.

TextWrangler 또는 유닉스 텍스트 편집기로 편집하면 파일이 유지됩니다.

파일이 이미 엉망인 경우이 문제를 해결해보십시오.

tr '\015' '\012' < /etc/hosts > /tmp/hosts.$$
mv /etc/hosts /etc/hosts.bad
mv /tmp/hosts.$$ /etc/hosts
# fix up permissions while we are at it
chown root:wheel /etc/hosts
chmod 644 /etc/hosts

이 수정 사항에 대한 크레딧 :

http://techpatio.com/2011/guides-how-to/fixed-mac-osx-lion-etc-hosts-bugs-dns


이렇게하면 충돌 한 DNS 확인자 데몬 문제를 해결할 수 있지만 개발 환경에서 자주 발생하는 LAN IP 주소로 호스트를 확인하는 문제는 해결되지 않습니다. 아래 @guns 응답은 검색에서이 질문을 찾는 대부분의 사람들에게 적합한 솔루션이 될 것입니다. Jean-Baptiste-MONIN도 장점을 가지고 있습니다.
unrivaledcreations

/ etc / hosts에 대한 변경 사항이 눈에 띄지 않는 문제를 해결할 수 있습니다.
Dan Pritts 2015 년

나는 높은 시에라이 응답 해결에게 감사 별칭 문제를 사용하고 있습니다
Absolutkarlos

4

ive는 한동안이 문제를 겪었습니다. 개발자 팀에서 일하면서 실제로 .dev 또는 .localhost 대신 .local을 사용해야했기 때문에이 기사가 매우 유용하다는 것을 알았습니다.

iTand.me-Lion 로컬 도메인 및 기타 호스트 ..

요약해서 말하자면;

그러나 .local을 사용해야하는 경우 내가 찾은 가장 우아한 솔루션은 dscl 유틸리티입니다. 그것을 사용하는 것은 매우 간단합니다. mydev.local이라는 호스트를 추가하고 localhost를 가리 키려면 다음과 같이하십시오.

sudo dscl localhost -create /Local/Default/Hosts/mydev.local IPAddress 127.0.0.1

현재 정의 된 모든 호스트와 해당 IP를 보려면

sudo dscl localhost -list /Local/Default/Hosts IPAddress

호스트를 제거하려면 :

sudo dscl localhost -delete /Local/Default/Hosts/mydev.local

전반적으로 매우 간단하고 잘 작동합니다. 나는 여전히 / etc / hosts를 편집 할 수 있기를 원하지만 이것은 모든 .local 서버의 이름을 바꾸는 것보다 더 나은 대안입니다.


3
이런 방식으로 호스트 이름을 추가하면 아무 작업도 수행하지 않는 것 같습니다. 주소를 ping 할 수 없습니다. 예 : sudo는를, dscl localhost를 -create / 지역 / 기본 / 호스트 / TEST1하여 IPAddress 127.0.0.1 핑 TEST1 핑 (ping) : 알 수없는 호스트 : 없습니다 해결 TEST1 수
oligofren

3

Snow Leopard에서 Lion으로 이전하기 전에 /etc/hosts다음과 같은 앱별 항목이 여러 개있었습니다 .

127.0.0.1 foo.bar.local

업데이트 후 로컬 앱을로드하는 것이 매우 느 렸습니다. 요청이 로그 파일에 나타나기 전에 지연이 발생했으며, 일단 발생하면 앱 자체가 평소처럼 빠르다는 것을 알았습니다.

이제 다음과 같이 앱당 두 줄이 있습니다.

127.0.0.1 foo.bar.local
::1       foo.bar.local

... 그리고 모든 것이 다시 빨라졌습니다.

분명히 이것은 IPv6 주소를 추가합니까? 나는 그것을 정말로 이해하지 못하지만 작동합니다.


다른 것은 나를 위해 일하지 않았지만 이것은 순식간에 이루어졌습니다-Nathan에게 감사합니다!
foiseworth 2013

3

내 상황은 비슷했지만 정확히 5 초의 지연은 '.local'로 끝나는 URL에서만 발생했습니다. '.dev'로 끝나는 사이트를 볼 때 지연이 없었습니다.

내 사무실의 다른 개발자 중 일부는이 문제가 있었지만 일부는 그렇지 않았습니다. 나는 간단한 수정을 원했고 다른 종속성으로 인해 사이트 이름을 '.local'로 바꾸고 싶지 않았습니다.

터미널에서 다음 명령을 실행하고 사무실의 다른 사용자와 내 출력을 비교했습니다.

scutil --dns

이 섹션은 유일한 차이점이었습니다.

resolver #2
  domain   : 00000000.members.btmm.icloud.com
  options  : pdns
  timeout  : 5
  order    : 150000

내 Mac이 내 iCloud 계정에 연결되었고 내 Mac으로 돌아 가기가 활성화되었습니다. Back To My Mac을 비활성화하면 추가 해결 프로그램이 사라지고 5 초 지연이 사라졌습니다.


1

와, 악몽 이네요. 나는이 주제에 대한 모든 것을 절대적으로 읽었으며 지금까지 제안 된 모든 것은 내가 경험했던 것과 거의 비슷했지만 어떤 해결책도 나를 위해 일하지 않았습니다.

그리고 나는 그 이유를 알아 냈다.

다른 사람들과 달리 / etc / hosts를 사용하여 로컬 도메인을 설정하지 않았습니다. 내 / etc / hosts 파일은 루프백 인터페이스와 브로드 캐스트 호스트에 필요한 항목 만 포함 된 stock이었습니다. 게다가이 파일은 올바르게 인코딩 된 유닉스 파일이었습니다. 저는 emacs를 사용하여 명령 줄에서만 편집하는 사람이기 때문입니다. 다행스럽게도 문제를 해결하기 위해 DNSmasq와 같은 자체 DNS 서버를 실행할 필요가 없었습니다.

(명확하게 말하면,이 문제를 일으키는 증상은 emacs를 시작하는 데 약 10 초가 걸리지 만 내가 wifi를 켰을 때만 걸린다는 것입니다. wifi를 끄면 emacs가 예상대로 즉시 시작됩니다.)

내 솔루션 : 내 랩톱에는 "터미네이터"라는 이름이 있습니다. (예, 반짝이는 알루미늄 외관으로 인해 Arnold Schwarzenegger 캐릭터가 떠 올랐습니다.) / etc / hosts에 기계 이름에 대한 항목을 추가하기 만하면되었습니다.

127.0.0.1   terminator
::1         terminator

터미널에서 간단한 명령을 실행하여 호스트 이름을 찾았습니다.

hostname

... 출력 : "terminator"와 함께 돌아 왔습니다. 이 두 항목을 포함하도록 / etc / hosts를 변경 한 후 emacs는 이제 랩톱의 이름을 빠르게 확인할 수 있습니다.

누군가에게 도움이되기를 바랍니다.


1
이것은 지금 저에게 효과가 있었던 것 같습니다. 이것이 성립하는지 볼 것입니다. 나는이 문제가 경고없이 발생하는 것을 간헐적으로 보아 왔기 때문에 이것을 알아 낸 것에 감격합니다.
Jeremy Carlson

사격. 이것은 저에게 영구적 인 해결책이 아닙니다. 다시 문제. 나는이를 다시 읽을 때, 내 문제는 당신이 ... 아니, 당신을 마음
제레미 칼슨

0

나는 OSX Lion을 웹 개발 상자로 사용하여 속도 문제가 발생했습니다 ... 제안 조합을 사용하여 ipv6 네트워킹을 비활성화하고 ipv6를 localhost6로 라우팅하는 방법을 사용했습니다.

sudo networksetup -setv6off Ethernet

/ etc / hosts ...

127.0.0.1    localhost
127.0.0.1    dev.aliasdomain.com
... 
::1          localhost6 

0

몇 가지 버그 수정이 있었던 것 같습니다. 언급 된 많은 문제를 보았지만 현재 적용되는 것은없는 것 같습니다 (예를 들어, 한 줄에 여러 별칭을 배치하면 이제 잘 작동합니다).

어쨌든 Lion을 통해 Apple은 모든 DNS 조회를 처리하는 mDNSResponder를 대폭 변경했으며 (적어도 Lion에서는) / etc / hosts 캐시도 처리합니다. 나를 위해 정방향 조회도 이제 작동합니다. 그러나 역방향 조회 (예 : google.com 대신 1.2.3.4 조회)는 작동하지 않습니다.

많은 고통 끝에 mDNSResponder가이 조회를 4.3.2.1.in-addr.arpa로 변환하고 이름 조회를 수행하는 것처럼 보입니다. 이것은 DNS가 선호하는 방식 일 수 있지만 / etc / hosts에서는 전혀 작동하지 않습니다.

물론 각 호스트에 대해 4.3.2.1.in-addr.arpa의 별칭을 추가하지 않는 한, 4.3.2.1은 이전에 사용하던 IP 주소와 반대 순서입니다. 이것은 나를 위해 모든 것을 수정합니다. 다음은 / etc / hosts 항목의 예입니다.

1.2.3.4 foo foo.example.com alias.example.com 4.3.2.1.in-addr.arpa

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.