내 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.mylan
dnsmasq
myfileserver
다음 솔루션 중 하나가 작동합니다.
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가 새 파일을 가리키도록 합니다.