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

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(및 다른 응용 프로그램에서) 실패 합니까?

읽어 주셔서 감사합니다.



답변

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

왜 호스트가 작동하지만 핑은 작동 하지 않는지 모르겠지만 이 두 유틸리티의 특성과 관련이 있다고 생각 합니다. 핑 (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 / 에서이 문제에 대한 답변을 찾았습니다.)


답변

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

Mac OS X 공지

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

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


답변

기본 히스토리 … 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와 같은 명령 줄 도구 만 손상되었습니다.

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


답변

수정 프로그램 (및 나중에 필요할 경우 제거 프로그램)을 자동화하는 쉘 스크립트를 작성했습니다.

https://github.com/michthom/AlwaysAppendSearchDomains

이것은 수동으로 시스템 파일을 편집하는 것을 피할 수있는 기술이 부족한 사용자에게 제공하는 것이 었습니다.


답변

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


답변

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


답변

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

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

최신 정보:

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