DNS 조회는`ping`과 같이 실패하지만`host`와 함께 작동합니다


35

pfSense 2.0rc3을 사용하고 있으며 DNS 전달자로 설정하고 "DNS 전달자에 DHCP 임대 등록"을 활성화했으며 로컬 조회를 위해 DNS 서버를 가져 오기위한 모든 설정이 이해됩니다.

Linux에서 예상대로 작동하며 특히 실행 host abcping abc(및 다른 응용 프로그램) 실행할 수 있으며 모두 예상대로 작동합니다.

그러나 Mac OS X Lion 10.7에서는 예상대로 작동하지 않습니다. 특히, host명령을 사용한 조회 만 작동하는 것 같습니다. 즉

$ 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

명령을 abc사용할 때 조회가 작동 host하지만 왜 ping(및 다른 응용 프로그램에서) 실패 합니까?

읽어 주셔서 감사합니다.


나는 새로운 요세미티 (10.10) MBP에서도 이와 같은 상황을 겪었다. 많은 검색 및 구성 후, 여기에 근무 대답 : apple.stackexchange.com/a/152892 기록의 경우를 그 어떤 --AlwaysAppendSearchDomains 구성없이의
스탠 Kurdziel

답변:


26

그들이 왜 이런 변화를했는지 모르겠지만, 한동안 나를 미치게했습니다.

왜 호스트가 작동하지만 핑은 작동 하지 않는지 모르겠지만 이 두 유틸리티의 특성과 관련이 있다고 생각 합니다. 핑 (Ping)은 패킷을 다시 전송 해 줄 수있는 간단하고 매우 유용한 진단 유틸리티입니다. 호스트 이름 조회 기능은 작업의 부작용 일 뿐이며 시스템의 재귀 적 리졸버에게 전달됩니다 (링크 된 라이브러리 나 그런 종류의 항목을 확인하여 확인하지 않은 것 같습니다). 호스트의 주요 임무는 DNS 이름 확인을 수행하는 것이므로 자체 재귀 해결 프로그램을 구현합니다.

애플의 재귀 해결자는 mDNSResponder입니다. 어떤 이유로 Lion의 mDNSResponder 버전은 Snow Leopard에서와 같이 동작하려면 "-AlwaysAppendSearchDomains"명령 줄 옵션이 필요합니다.

이를 해결하는 빠른 방법은 다음과 같습니다.

sudo sed -i .orig '/ProgramArguments/,/<\/array>/ {
s/\(<string>-launchd<\/string>\)/\1\
                <string>-AlwaysAppendSearchDomains<\/string>/
}' /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

(위의 마지막 두 줄부터 시작하여 두 개의 탭 문자가 있어야하지만이 작은 편집기로 탭을 삽입하는 방법을 알 수 없으므로 16 개의 공백을 추가했습니다. 작동하지만 탭은 작동합니다. 원본 파일의 간격을 더 잘 맞 춥니 다.)

이렇게하면 "-AlwaysAppendSearchDomains"인수가 mDNSResponder 시작 plist 파일에 추가되고 백업 사본을 저장하지만 실행에 의해 제어되므로 mDNSResponder를 다시 시작하도록 시스템에 지시해야합니다.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

이제 실행중인 mDNSResponder 프로세스를 확인하면 새 인수로 실행중인 것을 볼 수 있습니다.

ps auxww | grep mDNSResponder

( http://www.makingitscale.com/2011/fix-for-broken-search-domain-resolution-in-osx-lion.htmlhttp://kavassalis.com/2011/07/wtf-bug로 진행합니다. -in-os-x-10-7 / 에서이 문제에 대한 답변을 찾았습니다.)


이 수정은 Mountain Lion (10.8)에도 적용됩니다. 방금 랩톱에 적용했습니다.
Sigsegv

시원한! 기꺼이 도와 드리겠습니다.
Sigsegv

1
참고 : 요세미티에서는 작동하지 않았습니다. : 당신은 요세미티에 AlwaysAppendSearchDomains 필요한 경우 시도 apple.stackexchange.com/a/157017/65787 ) = 즉, 요세미티에 나를 위해 .local의 문제를 해결하지 못했지만,이 한 apple.stackexchange.com/a/152892을
스탠 Kurdziel을

엘 캡틴에서 일하지 않습니다. 더 쉬운 방법은 것 같습니다sudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist ProgramArguments -array-add "–AlwaysAppendSearchDomains"
Dmitry Verkhoturov 15:08에

9

host (1) 매뉴얼 페이지에서 :

Mac OS X 공지

host 명령은 Mac OS X에서 실행되는 다른 프로세스에서 사용하는 호스트 이름 및 주소 확인 또는 DNS 쿼리 라우팅 메커니즘을 사용하지 않습니다. 호스트에서 인쇄 한 이름 또는 주소 쿼리의 결과는 Mac을 사용하는 다른 프로세스에서 찾은 결과와 다를 수 있습니다 OS X 기본 이름 및 주소 확인 메커니즘. DNS 쿼리 결과는 Mac OS X DNS 라우팅 라이브러리를 사용하는 쿼리와 다를 수도 있습니다.

불행히도, host 명령이 호스트 이름을 정확하게 해석하는 방법에 대한 정보는 없습니다. 이 동작은 디버깅에 다소 유용하지 않습니다 (IMHO).


6

기본 히스토리 ... nslookup은 명령이지만 모든 리졸버 루틴을 자체적으로 구현했습니다. 다른 플랫폼의 시스템 리졸버는 nslookup과 다르게 작동했습니다. 때때로 이것은 다소 다른 결과를 낳을 수도 있습니다.

host 및 dig 명령은 nslookup의 "다시 쓰기"로 작성되었습니다. 시스템 리졸버 기능에서 정적으로 링크됩니다. 시스템 리졸버는 UNIX 또는 UNIX 계열 시스템의 표준 C 라이브러리에있는 함수 모음입니다 (Mac OS X의 경우 이러한 함수는 netdb 라이브러리의 일부 임). 이렇게하면 host 및 dig 명령은 항상 시스템 리졸버가 빌드 한 OS에 관계없이 동일한 방식으로 작동하지만 의존하지는 않습니다. 이런 식으로 시스템 리졸버가 오작동하는 경우 우수한 진단 도구입니다.

참고 : Host와 dig는 대화 할 특정 네임 서버가 없으면 /etc/resolv.conf에서 네임 서버 목록을 읽습니다. host 명령 만 /etc/resolv.conf 파일의 검색 목록을 사용합니다. dig는 그렇지 않으므로 항상 dig FQDN을 제공하여 문제를 해결해야합니다. 그렇지 않으면 두 명령 모두 충분합니다. 예를 들어, /etc/resolv.conf 파일은 사용하는 이진 파일에없는 유일한 것입니다.

mDNSresponder는 Bonjour입니다. 나는 너무 깊이 파고 들지 않았지만이 구성 설정이이를 수정하지 않았거나 적어도 직접적으로 수정하지는 않았다고 생각합니다. Mac OS X 10.9.1에서도 이와 동일한 문제가 발생했으며 mDNSresponder를 다시 시작하면 문제가 해결되었습니다. 다른 시스템에서는 10.5-> 10.8 / 10.9에서이 문제를 본 적이 없습니다. 또한 GUI 응용 프로그램은 영향을받지 않으며 ping 및 ssh와 같은 명령 줄 도구 만 손상되었습니다.

라이브러리를 조금 더 파헤칠 시간을 찾으면 더 자세한 설명을 찾을 수 있는지 알 수 있습니다.



4

.local은 멀티 캐스트 용으로 예약되어 있습니다. .local을 사용하는 동일한 네트워크의 mDNS 및 DNS 서버는 문제가 될 수 있습니다.


1
여기에 대한 설명이나 일부 문서에 대한 링크가 더 필요합니다. 성가신 주셔서 감사합니다!
bmike

3

호스트가 .local dns 접미사를 추가하고 있습니다. 핑은 아니다. 이 불확실성을 발견하면 네트워크 시스템 환경 설정에서 .local을 기본 접미사로 추가 할 수 있으며 시스템은 호스트 이름을 확인하려고 할 때이를 추가합니다.


좋은 지적이며 질문에 그렇게 말하지 ping abc.local않았지만 작동하지 않습니다 (그렇지만 host abc.local). 나는 문제를 해결했다. pfSense는 DHCP 임대를 보낼 때 로컬 도메인을 검색 도메인으로 자동 추가하므로 문제가되지 않습니다.
Brian M. Hunt

와우-이상하다. 후행으로 로컬을 정규화하면 어떻게됩니까? ? ping abc.local.
bmike

1
같은 결과입니다. Mac에는 분명히 두 가지 조회 메커니즘이 있습니다. 왜 다른지 상상하기 어렵습니다.
Brian M. Hunt

이 답변이 Yosemite 및 기타 최신 OS에서 작동하는 것은 확실하지 않습니다. 아마도 더 나은 답변을 얻을 수 있을까요?
bmike

/ etc / hosts 파일이 단일 사용자 모드에서만 사용된다는 경고 메시지가 있습니다. 사실이 아니다. 나는 127.0.0.1로 라우팅하여 / etc / hosts에 자신의 이름을 넣어 많은 악의적 인 사람들이 실수로 액세스하는 것을 막습니다.이 질문에 대해서는 이것이 중요하지 않다고 생각합니다. 또한 OS X가 자주 resolv.conf를 변경하고 있으므로 cron 작업을 설정하여 10 분마다 원하는 항목으로 복원했습니다.
WGroleau

2

위의 모든 것을 시도했지만 아무것도 효과가 없으면 네임 서버검색 경로 를 추가 할 수 있습니다System Preferences>Network>Advance(bottom right of the window)>DNS tab 여기에 이미지 설명을 입력하십시오

이렇게하면 /etc/resolv.conf가 업데이트 되고 ping이 작동합니다. /etc/resolv.conf 를 편집하여 검색 경로를 업데이트하는 것은 실제로 작동하지 않지만 어떤 이유로 든 작동합니다.

최신 정보:

OS가 시스템 환경 설정 분할 창 설정에 따라 파일을 다시 쓰므로 /etc/resolv.conf 편집 이 작동하지 않습니다.


1
OS가 pref 창에 따라 다시 작성하기 때문에 "/etc/resolv.conf 편집이 실제로 작동하지 않습니다".
WGroleau

1
이것은 실제로 받아 들여진 대답과 달리 나를 위해 속임수를 사용했습니다.
Artem Pyanykh

1

Lamont Peterson의 게시물 에 대해 언급 할만한 명성이 부족 합니다. mDNSresponder를 다시 시작하면 Mac OS X 10.7 (Lion)에서 효과가있었습니다. Lamont Peterson과 달리이 문제로 인해 하나의 GUI 응용 프로그램에서 문제가 발생했습니다. Safari는 공용 또는 개인 호스트 이름을 확인할 수 없습니다. 다음은 Lamont Peterson이 수행 한 것으로 의심되는 구체적인 단계입니다.

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.mDNSresponder.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSresponder.plist

unload에는 mDNSResponder 종료하고 load다시 시작 그것을.

이로 인해 문제가 즉시 해결되었습니다. 재부팅이 필요 없습니다.

다음 list명령 을 사용하여 성공적으로 다시 시작되었는지 확인할 수 있습니다 .

$ sudo launchctl list | grep '^PID\|mDNSResponder'
PID     Status  Label
708     -       com.apple.mDNSResponder
-       0       com.apple.mDNSResponderHelper

프로세스 ID (PID)가 존재한다는 것은 프로세스 ID가 실행 중임을 의미합니다. 708OS에서 할당 한대로 다릅니다. 상태에 하이픈이나 0 이외의 것이 표시되면 문제가 발생한 것입니다.

나는 어떻게 mDNSResponderHelper상호 작용 하는지 모른다 mDNSResponder; 나는 단지 다시 시작해야했습니다 mDNSResponder.


1

한 줄로 :

sudo kill $(ps ax | grep mDNSResponder | grep -v grep | grep -v Helper | awk '{ print $1 }')

0

OSX 이름에 대한 pls 참고는 비표준 일 수 있으므로 완전성을 위해 다음을 수행하십시오.

  • FQDN은 핑 가능
  • "호스트"파일의 이름은 핑 가능

Mac 이름은 일반적이 아닙니다. 두 가지 수정을 수행해야합니다. a) 공백을 "-"로 변경 b) .local 추가

예를 들어 내 Mac : ingconti의 MacBook Pro

ingcontis-MacBook-Pro.local 에서 ping 가능합니다.

그리고 prefs를 열면 다음을 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오

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