avahi : ping은 호스트 이름을 확인할 수 없지만 nslookup은 DNS를 쿼리해야하는지 어떻게 알 수 있습니까? EDIT2dnsmasq harrymc가

pingURL에서 일부 호스트 이름 ( “ping : 알 수없는 호스트 domain.company.local”)을 확인할 수는 없지만 명령 줄에서 동일한 컴퓨터에서 사용 host하거나 nslookup동일한 컴퓨터에서 해상도가 올바르게 작동합니다 (즉, 빠르고 안정적입니다) ).

무엇이 원인 일 수 있습니까?

추가 테스트 : Firefox wgetping동일한 문제가 있습니다. IP 주소를 핑하면 작동합니다.

운영체제 : Linux (Ubuntu 13.04)

/etc/resolv.conf읽은 내용 편집 :

nameserver 127.0.1.1
search domain.company.local

netstat 보고서 :

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      -

이 포트에서 무언가가 실행 중입니다 ( DNS 서버로 nslookup사용한다고보고 함 127.0.1.1).

이 없으므로 /etc/*inetd.conf어떤 응용 프로그램이이 포트를 제공하는지 잘 모르겠습니다.

dnsmasq사용 된 것 같습니다 :

/usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces
   --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1
   --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec
   --enable-dbus=org.freedesktop.NetworkManager.dnsmasq
   --conf-dir=/etc/NetworkManager/dnsmasq.d

모든 구성 파일과 폴더가 비어 있습니다. 이후 nslookup말한다는 사용 127.0.1.1#53내 생각은 즉 dnsmasq도 구성없이 작동합니다. 그러나 어떤 부모 DNS를 쿼리해야하는지 어떻게 알 수 있습니까?

EDIT2dnsmasq harrymc가 제안한대로 비활성화 해도 도움이되지 않았습니다. 그래서 나는 strace ping이 이상한 출력 (흥미로운 부분)을 주었다.

open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 4
read(4, "127.0.0.1\tlocalhost\n#127.0.1.1\ta"..., 4096) = 613
...
open("/lib/libnss_mdns4_minimal.so.2", O_RDONLY|O_CLOEXEC) = 4
read(4, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\f\0\0\0\0\0\0"..., 832) = 832
...
mmap(NULL, 2105560, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x7f7829b00000
...
socket(PF_FILE, SOCK_STREAM, 0)         = 4
fcntl(4, F_GETFD)                       = 0
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
connect(4, {sa_family=AF_FILE, path="/var/run/avahi-daemon/socket"}, 110) = 0
fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
fstat(4, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f782a4f8000
lseek(4, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(4, "RESOLVE-HOSTNAME-IPV4 domain.com"..., 44) = 44
read(4, "-15 Timeout reached\n", 4096)  = 20

그래서 ping에 보이는 /etc/hosts어떤 의미가 있습니다. 그런 다음로드되고 mmap()s도 /lib/libnss_mdns4_minimal.so.2의미가 있습니다.

그러나 그것은 아바 히에게 말한다!?

이 포럼 게시물로 이동했습니다 : ping은 dns 요청을하지 않습니다 .

/etc/nsswitch.conf이 선을 포함 :

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

나는 경우 ping작동 주소, 나는 과정도 부하 볼 /lib/libnss_mdns4_minimal.so.2다음은 포트 53을 통해 DNS 쿼리를 수행하지만.

내 생각 엔 지금이되도록 /lib/libnss_mdns4_minimal.so.2어떻게 든 IP 주소의 끝이 함께 있음을 알아 차리지되는 .local하지와 .com다음이 [NOTFOUND=return]트리거됩니다.

이 문제를 어떻게 해결합니까?



답변

이 블로그 게시물 에 자세히 설명 된대로 다음 을 편집해야합니다 /etc/avahi/avahi-daemon.conf.

[server]
domain-name=.alocal

이것은 데몬을 .alocal기본값 대신 도메인에 바인딩합니다 .local.

다음을 사용하여 데몬을 다시 시작하십시오.

sudo service avahi-daemon restart

블로그 게시물에서 참고 :

내부 캐시를 지우려면 DNS, mDNS 및 리졸버 캐시를 비우고 웹 브라우저를 다시 시작해야 할 수도 있습니다.

그 후, pingnslookup동의하기 시작했다.

올바른 길로 안내해harrymc 에게 감사합니다 .


답변

/etc/nsswitch.conf 수정 및 교체

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

으로, ~에 의하여:

hosts:          files dns

나를 위해 일했다.


답변

쉬운 일 : 편집 /etc/default/avahi-daemon

줄을 바꾸십시오 :

AVAHI_DAEMON_DETECT_LOCAL=1

AVAHI_DAEMON_DETECT_LOCAL=0

를 다시 시작 avahi-daemon하거나 종료하십시오.

나는 Avahi를 좋아하지 않으며 그 기능을 사용하지 않습니다. avahi를 실제로 비활성화 /etc/init/avahi-daemon.conf하려면 다음과 유사하게 수정 하십시오.

start on (never
          and filesystem
      and started dbus)
stop on stopping dbus

답변

우분투에서 .local 주소에 액세스 할 수없는 것 같습니다.

해결책은 /etc/nsswitch.conf이 줄 을 편집 하고 변경 하는 것입니다 .

hosts:          files mdns4_minimal [NOTFOUND=return] dns

이것에 의해서 :

hosts:          files dns

답변

컴퓨터를 통해 다른 장치 또는 VM과 연결 공유를하지 않으면 Network Manager에서 dnsmasq를 끌 수 있습니다.

행을 편집 /etc/NetworkManager/NetworkManager.conf하고 주석 처리하십시오 (앞에 #을 입력하십시오).

dns=dnsmasq

그런 다음 :

sudo restart network-manager

로컬 리졸버가 꺼집니다.

출처 : DNS in Ubuntu 12.04 .


답변

따라서 /lib/libnss_mdns4_minimal.so.2는 IP 주소가 .com이 아닌 .local로 끝나고 [NOTFOUND = return]이 트리거된다는 것을 알 수 있습니다.

이 문제를 어떻게 해결합니까?

꽤 좋은 추측이지만 다른 답변은 과잉입니다. 간단한 해결책은 실제로 트리거 된 비트를 제거하는 것입니다 (예 : just 제거) [NOTFOUND=return].

이를 제거하면을 mdns4_minimal반환 NOTFOUND하면 확인자 목록의 다음 항목이 사용됩니다. 이것은 정상적인 행동입니다. [NOTFOUND=return]알 수없는 이름에서 더 빨리 실패하는 최적화이지만 모든 .local이름이 mDNS에 있다고 가정합니다 .


답변

나는 같은 증상 (핑, 마운트 등이 작동하지 않지만 호스트, 발굴 작업)과 같은 흥미로운 사례를 보았습니다. /etc/resolv.conf 파일 에 대한 권한을 확인하십시오 . 내 경우에는 누군가가 변경 cat /etc/resolv.conf했으며 파일 을 읽을 수있는 권한이 없었습니다 ( 파일 편집은 정상적으로 작동 했지만 ).

어쨌든 strace는 다음을 보여주었습니다.

open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)

결과적으로 resolv.conf 파일에서 네임 서버의 IP 대신 localhost (127.0.0.1)를 쿼리하려고했습니다.

socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=4, events=POLLOUT}], 1, 0)    = 1 ([{fd=4, revents=POLLOUT}])

그리고 는 tcpdump는 ping을 할 때 어떤 DNS 트래픽을 표시하지 않았다. 권한 수정 후 모두 작동합니다.

# chmod 644 /etc/resolv.conf
# ls -l /etc/resolv.conf
-rw-r--r-- 1 root root 111 Oct  3 09:54 /etc/resolv.conf

다른 문제는 파일의 확장 된 속성 또는 다른 액세스 문제 일 수 있습니다. 이 경우 /etc/resolv.conf 파일을 삭제하고 처음부터 다시 만드십시오.