*.local 도메인을 확인하고 IP를 핑할 수 있지만 도메인을 핑할 수 없습니다.

*.local 도메인을 확인하고 IP를 핑할 수 있지만 도메인을 핑할 수 없습니다.

*를 얻으려고 합니다.. 현지의vagrant-dns와 함께 DNS 서버를 사용하려면 도메인을 사용하세요. 작동하게 하기 위해 dnsmasq가 그 앞에서 실행되도록 설정했습니다.

NetworkManager가 설치되었지만 다음으로 설정되었습니다.dns=none

해결.conf:

nameserver 127.0.0.1 #this points to dnsmasq

테스트 솔루션:

$ nslookup domain.local
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   domain.local
Address: 10.222.222.22

Dig는 동일한 문제를 해결합니다.

$ dig domain.local

; <<>> DiG 9.10.3-P4-Debian <<>> domain.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18052
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;domain.local.      IN  A

;; ANSWER SECTION:
domain.local.   86400   IN  A   10.222.222.22

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Jan 29 19:18:52 CST 2017
;; MSG SIZE  rcvd: 49

정확한 주소입니다. IP에 핑을 보낼 수 있습니다.

ping 10.222.222.22
PING 10.222.222.22 (10.222.222.22) 56(84) bytes of data.
64 bytes from 10.222.222.22: icmp_seq=1 ttl=64 time=0.185 ms

하지만 다음 주소로 ping을 보낼 수는 없습니다.

$ ping domain.local
ping: domain.local: Name or service not known

또한 브라우저에서 호스팅된 페이지를 로드하려고 시도했지만 DNS 오류가 발생했습니다. 이상하게도 다른 모든 사이트는 제대로 작동하는 것 같습니다. 하지만 해당 사이트가 localhost DNS 서버를 사용하는지 알 수는 없습니다.

데비안 8 사용 Jessie/테스트

답변1

답을 찾았어요! 따라서 대부분의 사람들은 /etc/hosts 파일이 DNS 서버와 같이 도메인을 확인한다는 것을 알게 될 것입니다. 하지만 시스템은 이 파일을 찾는 방법을 어떻게 알 수 있습니까? 파일이나 DNS 서버를 어떤 순서로 보는지 어떻게 알 수 있나요?

파일이 있습니다:/etc/nsswitch.conf

제게는 이런 말이 있습니다:

hosts:          files myhostname mdns4_minimal [NOTFOUND=return] dns

이는 /etc/hosts와 같은 파일을 먼저 확인하는 것을 의미합니다. 그런 다음 시스템 호스트 이름을 확인하십시오. 그리고 mdns4가 있는데, 내 생각엔 로컬 네트워크에서 다른 컴퓨터를 찾는 데 사용되는 프로토콜인 것 같아요.

mdns4가 나를 방해하고 있습니다. [NOTFOUND=return]. mdns는 로 끝나는 이름을 찾습니다 .local. 발견되지 않으면 다음 및 최종 검색 방법으로 전달될 뿐만 아니라 dns실제로 중지되고 시스템에 도메인이 존재하지 않는다고 알려줍니다. dnsmasq에 설정한 도메인은 도메인이므로 .local절대 거기에 도달하지 않습니다.

따라서 이 문제를 해결하는 방법에는 두 가지가 있습니다. 첫 번째는 삭제입니다 [NOTFOUND=return]. 그것이 제가 이 일을 선택한 방법이고, 아주 훌륭하게 작동합니다. mdns가 보고 .local전달하기 전에 찾아보려고 시도하는 것 같아서 약간의 지연이 있습니다 dns.

현재 내 파일은 다음과 같습니다.

hosts:          files myhostname mdns4_minimal dns

또 다른 옵션은 실제로 mdns를 사용하지 않기 때문에 mdns를 완전히 제거하거나 다른 tld를 사용하도록 지시할 수 있는 방법이 있다는 것입니다. .alocal그러나 그렇게 하면 mdns를 효과적으로 비활성화할 수도 있다고 생각합니다.

답변2

제 경우에는 여러 개의 네임서버 행이 있었고 /etc/resolv.conf제가 사용하고 싶은 행은 첫 번째 행에 있었습니다.

나는 지침을 읽었고 다음과 같이 말했습니다.

여러 서버가 있는 경우 파서 라이브러리는 나열된 순서대로 쿼리합니다.

그러나 나는 그것이 항상 마지막 네임서버를 먼저 선택한다는 것을 발견했습니다.

그래서 노선을 반대로 바꿨어요/etc/resolv.conf

문제가 해결되었습니다.

답변3

RFC에 따르면 도메인 이름에는 밑줄을 사용할 수 없습니다. 내가 아는 한 이것은 문제이다. 이름을 확인하는 데 자신만의 방식을 사용 dig하면 nslookup괜찮습니다. Ping은 시스템 라이브러리를 사용하지만 실패합니다. 실제로 이름의 일부가 밑줄로 시작하거나 끝나는 경우 ping은 구문 분석할 수 없습니다.

답변4

사용 사례의 작은 하위 집합(예: Fedora Core 31, 긴 업그레이드 기록)에서 문제는 nss-mdnsavahi-daemon 소켓에 대한 경로가 하드코딩되었지만 다른 소켓 경로를 지정했다는 것 /var/run/avahi-daemon/socket입니다./usr/lib/systemd/system/avahi-daemon.socket

ListenStream=/run/avahi-daemon/socket

/var/run그리고 에 심볼릭 링크 /run(또는 /var/run/avahi-daemon심볼릭 링크 ) 하지 않으면 /run/avahi-daemon연결되지 않습니다. 아래 답글을 쓰다가 우연히 이 내용을 발견했습니다.Red Hat 버그질라 버그그리고 달리는 중

strace  -e open,openat,connect,read /usr/bin/getent hosts MY_PRINTER_NODE.local

개발자/유지관리자를 위한 유용한 정보를 충분히 디버깅하고 준비하는 동안 연결에 실패하는 것을 발견했습니다.

connect(3, {sa_family=AF_UNIX, sun_path="/var/run/avahi-daemon/socket"}, 110) = -1 ENOENT (No such file or directory)

호기심에 nsswitch.conf다음 줄을 사용했습니다.

hosts:      files mdns4 [NOTFOUND=return] dns myhostname

/etc/mdns.allow파일이 있어요

.local
.local.

여기와 다른 포럼 및 질문에 언급된 다른 모든 방법을 시도했지만 아무것도 작동하지 않습니다. 이 작업을 수행한 후:

ln -s /run/avahi-daemon /var/run/avahi-daemon

이름 .local확인은 서비스를 다시 시작하지 않고도 ping작동하고 작동합니다.getent

ListenStream경로를 변경해도 괜찮을 것 같지만 /usr/lib/systemd/system/avahi-daemon.socket설치 시 이것이 기본값입니다. 이것이 내가 해야 할 장기적인 해결책인지 아직 결정하지 못했지만, 이것이 다른 불쌍한 영혼에게 유용할 수 있기를 바랍니다.

관련 정보