dnsmasq.conf에서 :
address=/local/127.0.0.1
resolv.conf에서 :
# Generated by NetworkManager
domain example.com
search example.com
nameserver 127.0.0.1
nameserver 10.66.127.17
nameserver 10.68.5.26
nslookup을 사용할 수 있습니다.
# nslookup www.local
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: www.local
Address: 127.0.0.1
그러나 핑을 사용할 수 없습니다 :
# ping www.local
ping: unknown host www.local
패킷이없는 www.local을 ping하면서 tcpdump를 사용하여 lo를 캡처합니다.
# tcpdump -i em1 -n | grep local
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on em1, link-type EN10MB (Ethernet), capture size 65535 bytes
20:14:38.189335 IP 10.66.65.188.mdns > 224.0.0.251.mdns: 0 A (QM)? www.local. (27)
20:14:39.190700 IP 10.66.65.188.mdns > 224.0.0.251.mdns: 0 A (QM)? www.local. (27)
20:14:41.192979 IP 10.66.65.188.mdns > 224.0.0.251.mdns: 0 A (QM)? www.local. (27)
물리적 인터페이스에서 나타납니다.
핑이 mdn을 사용한다는 것을 의미하지만 왜 nslookup이 mdn을 사용하지 않습니까? mdns가 유용한 허위를 반환하지 않을 때 핑이 정상적인 DNS를 사용하지 않는 이유는 무엇입니까?
감사.
답변
ping
이름 서비스 스위치라고하는 glibc의 이름 확인 시스템을 사용하십시오. 이 /etc/nsswitch.conf
파일을 사용하여 이름을 IP로 확인하기 위해 찾을 위치를 알 수 있습니다. hosts:
이 파일 의 줄은 각 서비스에 대한 기본 설정 순서를 나타냅니다. 예를 들어, files
로컬 /etc/hosts
파일을 나타내고 파일을 dns
사용하여 /etc/resolv.conf
DNS 서버에 연결하고 mdns
mdns를 사용합니다.
그러나 nslookup
사용하지 마십시오. 에 지정된 DNS 서버 /etc/resolv.conf
와 직접 통신 하므로 사용할 수 없습니다 mdns
.
그러나 나는 당신의 마지막 질문에 대답 할 수 없습니다. mdns
와 dns
in 을 모두 가지고 있다면 /etc/nsswitch.conf
, 심지어 mdns
처음 이라도 ,로 이름을 확인하려고 시도하고 mdns
대답이 없으면을 사용해야 dns
합니다.
답변
그것은 매우 간단합니다 – nslookup
입니다 구체적으로 는 DNS 도구 – 바인딩 도구의 그것의 일부입니다.
그것은 단순히 라이브러리 같은 부르는 다른 이름 서비스에 대해 알고하지 않습니다 gethostbyname
때문에 NSS를 통해 액세스 할 수 있음 nslookup
사용하지 않는 gethostbyname
등,