avahi : ping은 호스트 이름을 확인할 수 없지만 nslookup은


41

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/resolv.conf?
Joseph R.

어느 것이 맞고 어느 것이 맞습니까? 호스트 이름을 확인 해야합니까 , 그렇지 않아야합니까? 당신은 당신이 가지고있는 완전히 다른 두 가지 문제 중 어떤 것을 말하지 않았습니다. (그리고 그것이 해결 되어야 한다면, 그것이 어떻게 그리고 해결되어야 하는지 가능한 상세하게 설명 하십시오. 그것이 해결되지 않는 이유에 대한 설명으로 이어질 것입니다.)
David Schwartz

... 당신의 HTTP 프록시 설정 크롬, 파이어 폭스, 그리고 위해 무엇 wget.
JdeBP

@DavidSchwartz : 해상도가 작동하기를 기대합니다. 나는 방법을 이해하지 못하는 어떤 nslookup또는 host이름과 할 수없는 시스템에서 다른 작업을 해결할 수 있습니다.
Aaron Digulla

1
컴퓨터를 통해 다른 장치 또는 VM과 연결 공유를하지 않으면 Network Manager에서 dnsmasq를 끌 수 있습니다. 행을 편집 /etc/NetworkManager/NetworkManager.conf하고 주석을 달고 dns=dnsmasq(앞에 #을 입력) a를 수행하십시오 sudo restart network-manager. 로컬 리졸버가 꺼집니다. ( 출처 )
harrymc

답변:


33

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

[server]
domain-name=.alocal

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

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

sudo service avahi-daemon restart

블로그 게시물에서 참고 :

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

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

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


1
또한 pingnss를 사용하지만 사용 nslookup하지는 않습니다. (그것은 lwres를 사용하고, 바인드하고, 리졸버와 직접 대화하기 위해 사용합니다.)
Ricky Beam

나를 위해 로컬에 대해 비활성화하지 않고 올바르게 구성하는 것이 더 합리적입니다.
keiki

@ otakun85 : 그리고 어떻게해야합니까?
Aaron Digulla

@AaronDigulla 당신은 그것을 구성하고 현재 가장 높은 투표 답변은 로컬에 대해 비활성화했습니다.
keiki

2
이것은 놀랍다. 정말 고마워. 이 게시물을 찾기 전에 몇 시간 동안 이것과 싸웠습니다.
fpghost

11

/etc/nsswitch.conf 수정 및 교체

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

으로, ~에 의하여:

hosts:          files dns

나를 위해 일했다.



8

쉬운 일 : 편집 /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

2
당신이 여기에 "감사"의견을 쓰지 않아도되는지 상관하지 않습니다. 저는 단지 감사를 표하고 싶습니다. 정말 고맙습니다! 나는 회사 VPN을 사용하여 쇼핑몰에서 응급 작업을 수행하고 있으며 내가 생각한 모든 것에도 불구하고 일부 사이트를 작동시킬 수 없었습니다. 나는 이것을 스스로 알아낼 수 없었을 것이다. 그것은 확실하다.
eresonance

7

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

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

hosts:          files mdns4_minimal [NOTFOUND=return] dns

이것에 의해서 :

hosts:          files dns

이런 종류의 나를 위해 일했다. 필자의 경우, 호스트 라인에는 "파일이 [! UNAVAIL = return] mdns4_minimal [NOTFOUND = return] dns"를 해결하고 "files mdns4_minimal [NOTFOUND = return] dns"로 변경되었습니다. 올바른 방향으로 포인터를 주셔서 감사합니다.
Andorbal

위의 다른 답변을 시도했지만 아바 히 (안심)를 비활성화하고 여전히 문제가있었습니다. 이 대답은 나를 위해 해결했습니다. 감사합니다
Adam Plocher

3

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

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

dns=dnsmasq

그런 다음 :

sudo restart network-manager

로컬 리졸버가 꺼집니다.

출처 : DNS in Ubuntu 12.04 .


2

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

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

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

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


1

나는 같은 증상 (핑, 마운트 등이 작동하지 않지만 호스트, 발굴 작업)과 같은 흥미로운 사례를 보았습니다. /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 파일을 삭제하고 처음부터 다시 만드십시오.


하나의 서버가있는 또 다른 문제는 모든 루트 폴더가 x플래그를 잃어 버렸 으므로 많은 바이너리가 제대로 작동하지 않았다는 것입니다. 수정했다 chmod +x /*.
실 렉스

0

또 다른 이유는 형식입니다 /etc/hosts. IP와 호스트 이름 사이에 공백이 없는지 확인하고 대신 Tab을 사용하십시오. Tab으로 변경 한 후 ping을 통해 호스트 이름을 확인할 수 있습니다.

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

답변이 될 수 있지만 댓글 형식입니다 ...
Francisco Tapia

-1

Ubuntu에서 avahi-daemon을 설정 ubuntu.local하여 호스트 OS에서 호스트 이름에 연결할 수 있습니다

sudo apt-get install avahi-daemon 아바 히 발견 avahi-utils libnss-mdns mdns-scan


죄송합니다.이 답변은 질문과 관련이 없습니다. 우리는 Avahi를 설치하는 방법을 묻지 않습니다. 문제는 Avahi가 설치 후 DNS 조회를 중단시킬 수있는 방법입니다.
Aaron Digulla
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.