dnsmasq가 로컬 호스트 이름을 확인할 수 없습니다.

dnsmasq가 로컬 호스트 이름을 확인할 수 없습니다.

내 LAN용으로 dnsmasq를 실행하는 로컬 Linux 서버가 있습니다. 지난 몇 년간 아무런 문제 없이 잘 작동해 왔습니다. 나는 운영 체제와 소프트웨어 패키지를 정기적으로 업데이트합니다. 어제 정기 업데이트 이후 LAN에 있는 컴퓨터가 대부분의 로컬 호스트 이름을 확인하려고 하면 오류 메시지가 나타납니다. 내 작업 구성에 어떤 방식으로든 결함이 있을 수 있으며 업데이트로 인해 내 결함이 노출된 것으로 의심됩니다. 업데이트 후에 이 문제에 대한 보고가 없으므로 어딘가에서 실수를 한 것 같습니다.

이것은 대부분의 클라이언트에서 발생하는 오류입니다.

# ping myfileserver
ping: myfileserver: Name or service not known

그러나 myfileserver의 주소를 ping하면 성공합니다.

# ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.325 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.239 ms

클라이언트의 resolv.conf입니다.

# cat /etc/resolv.conf
# Generated by NetworkManager
search mylan
nameserver 192.168.1.1

192.168.1.1은 내 dnsmasq 서버의 주소입니다.

분명한 사실을 간과하고 있을 수도 있지만 드릴다운을 통해 클라이언트가 올바른 호스트 이름과 로컬 IP 주소가 포함된 dnsmasq 서버로부터 응답을 받고 있음을 알 수 있습니다.

# drill myfileserver
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 40614
;; flags: qr aa rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 
;; QUESTION SECTION:
;; myfileserver.     IN      A

;; ANSWER SECTION:
myfileserver.        0       IN      A       192.168.1.2

;; AUTHORITY SECTION:

;; ADDITIONAL SECTION:

;; Query time: 0 msec
;; SERVER: 192.168.1.1
;; WHEN: Wed Oct 24 00:12:18 2018
;; MSG SIZE  rcvd: 41

서버에서 systemd는 dnsmasq 프로세스가 정상적으로 실행되고 있음을 보여줍니다.

systemctl status dnsmasq.service 
dnsmasq.service - A lightweight DHCP and caching DNS server
Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2018-10-24 00:08:13 EDT
    Docs: man:dnsmasq(8)
Process: 28230 ExecStartPre=/usr/bin/dnsmasq --test (code=exited, status=0/SUCCESS)
Main PID: 28231 (dnsmasq)
    Tasks: 1 (limit: 4915)
Memory: 1.4M
CGroup: /system.slice/dnsmasq.service
        └─28231 /usr/bin/dnsmasq -k --enable-dbus --user=dnsmasq --pid-file

서버에서 시작된 dnsmasq의 로그 출력입니다. 오류가 없습니다.

Oct 23 01:50:48 mydnsmasqd systemd[1]: Starting A lightweight DHCP and caching DNS server...
Oct 23 01:50:48 mydnsmasqd dnsmasq[768]: dnsmasq: syntax check OK.
Oct 23 01:50:48 mydnsmasqd systemd[1]: Started A lightweight DHCP and caching DNS server.
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: started, version 2.80 cachesize 5000
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: compile time options: IPv6 GNU-getopt DBus i18n IDN2 DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify du>
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: DBus support enabled: connected to system bus
Oct 23 01:50:48 mydnsmasqd dnsmasq-dhcp[772]: DHCP, IP range 192.168.10.100 -- 192.168.10.200, lease time 1d
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: using local addresses only for domain mylan
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: reading /etc/resolv-custom.conf
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: using local addresses only for domain mylan
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: using nameserver 8.8.8.8#53
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: using nameserver 8.8.4.4#53
Oct 23 01:50:48 mydnsmasqd dnsmasq[772]: read /etc/hosts - 72 addresses

문제 해결 중에 dnsmasq 구성을 변경한 다음 다시 시작했습니다. 다시 한 번 로그에는 시작 시 오류가 표시되지 않으며 다양한 구성 변경 사항이 문제에 영향을 미치지 않았습니다. 이 문제가 발생할 때 dnsmasq 구성은 변경되지 않았습니다. 이는 비교적 간단한 일반적인 구성이지만 문제 해결 중에는 거의 아무것도 하지 않도록 줄였습니다. 내가 지금 가지고 있는 것은 다음과 같습니다(분명히 관련이 없는 인터페이스 바인딩 부분 생략).

# grep -v '^#' /etc/dnsmasq.conf
resolv-file=/etc/resolv-custom.conf
dhcp-range=set:eth0,192.168.10.100, 192.168.10.200, 24h
cache-size=5000
no-negcache
conf-dir=/etc/dnsmasq.d,.bak

# cat /etc/resolv-custom.conf
search mylan
domain mylan
nameserver 8.8.8.8
nameserver 8.8.4.4

모든 머신은 Arch Linux, 4.18.10-arch1-1-ARCH Dnsmasq 버전 2.80을 실행하고 있습니다.

답변1

ndots이 질문을 했을 때 기본값이 변경되었습니다.

새 값 1은 입니다. 즉, 쿼리 이름에 점이 하나 이상 포함되어 있지 않으면 search일치하는 항목이 발견될 때까지 목록의 각 값이 접미사로 차례로 추가됩니다.

나는 이전 접근 방식이 "있는 그대로" 이름 조회를 수행하고 실패한 경우에만 search목록에 나열된 접미사를 하나씩 시도하는 것이라고 생각합니다.

오래된 상황

  • myfileserver- dnsmasq일치하는 항목이 있는 곳 으로 전달됩니다.
  • noname- 에 전달되었으나 dnsmasq일치하지 않으므로 조회를 위해 noname.mylan에 전달되고 dnsmasq일치하지 않을 수 있으므로 NXDOMAIN반환됩니다.

새로운 경향

  • myfileserver- 1포인트 미만이므로 자동으로 에 전달 mylan되며 이는 일치하지 않습니다( 에만 요청될 것으로 예상되므로 ).myfileserver.mylandnsmasqmyfileserver

다음 솔루션 중 하나가 작동합니다.

  • ndots=0이전 동작으로 되돌 리도록 설정 /etc/resolv.conf(권장되지 않음)

  • /etc/hosts접미사 를 변경하세요mylan

      192.168.1.2  myfileserver.mylan  myfileserver
    

답변2

호스트 파일이 72개의 호스트로 가득 차 있습니다. 이는 호스트 파일의 형식 문제일 수 있습니다. DNSMasq는 이를 건너뜁니다. 아래 답변을 참조하세요.스택 오버플로

123.123.123.12 Container.test를 새 파일(예: /etc/dnsmasq.hosts)에 넣습니다.

addn-hosts=/etc/dnsmasq.hosts를 /etc/dnsmasq.conf에 추가하여 dnsmasq가 새 파일을 가리키도록 합니다.

관련 정보