웹사이트 검색

Ubuntu 20.04에서 Dnsmasq를 사용하여 로컬 DNS 확인자를 설정하는 방법


이 페이지에서

  1. 전제 조건
  2. 시작하기\n
  3. Dnsmasq 설치
  4. Dnsmasq 구성
  5. Dnsmasq 서버에 DNS 레코드 추가
  6. Dnsmasq 서버 해상도 확인\n
  7. Dnsmasq DNS 서버를 사용하도록 원격 클라이언트 구성\n
  8. 결론

Dnsmasq는 "DNS masquerade의 줄임말"을 의미하며 소규모 네트워크에 사용되는 간단하고 가볍고 사용하기 쉬운 DNS 전달자입니다. DNS 캐시 및 DHCP 서버로 구성할 수 있으며 IPv4 및 IPv6 프로토콜을 모두 지원합니다. DNS 쿼리를 수신하면 캐시에서 응답하거나 다른 DNS 서버로 전달합니다.

Dnsmasq는 세 가지 하위 시스템으로 구성됩니다.

  • DNS 하위 시스템: A, AAAA, CNAME 및 PTR을 포함한 다양한 레코드 유형을 캐싱하는 데 사용됩니다.\n
  • DHCP 하위 시스템: DHCPv4, DHCPv6, BOOTP 및 PXE를 지원합니다.\n
  • 라우터 하위 시스템: IPv6 호스트에 대한 기본 자동 구성을 제공합니다. 독립 실행형으로 사용하거나 DHCPv6과 함께 사용할 수 있습니다.\n

이 튜토리얼에서는 Ubuntu 20.04 서버에서 Dnsmasq를 사용하여 로컬 DNS 서버를 설정하는 방법을 보여줍니다.

전제 조건

  • Ubuntu 20.04를 실행하는 서버.\n
  • 루트 암호는 서버에 구성됩니다.\n

시작하기

먼저 시스템 패키지를 최신 버전으로 업데이트하는 것이 좋습니다. 다음 명령을 실행하여 모든 패키지를 업데이트할 수 있습니다.

apt-get update -y

모든 패키지를 업데이트한 후 시스템에서 Systemd-resolved 서비스를 비활성화해야 합니다. Systemd-resolved 서비스는 로컬 애플리케이션에 대한 네트워크 이름 확인에 사용됩니다.

다음 명령을 실행하여 비활성화할 수 있습니다.

systemctl disable --now systemd-resolved

서비스가 비활성화되면 기본 resolv.conf 파일을 제거하고 사용자 지정 DNS 서버 세부 정보로 새 파일을 만들어야 합니다.

다음 명령을 사용하여 기본 resolv.conf 파일을 제거할 수 있습니다.

rm -rf /etc/resolv.conf

그런 다음 다음 명령을 사용하여 resolv.conf 파일에 Google DNS 서버를 추가합니다.

echo "nameserver 8.8.8.8" > /etc/resolv.conf

완료되면 다음 단계로 진행할 수 있습니다.

DNS마스크 설치

기본적으로 Dnsmasq는 Ubuntu 20.04 기본 리포지토리에서 사용할 수 있습니다. 다음 명령을 실행하여 설치할 수 있습니다.

apt-get install dnsmasq dnsutils ldnsutils -y

설치가 완료되면 Dnsmasq 서비스가 자동으로 시작됩니다. 다음 명령을 사용하여 Dnsmasq의 상태를 확인할 수 있습니다.

systemctl status dnsmasq

다음과 같은 결과가 표시되어야 합니다.

dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
     Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-11-02 11:02:01 UTC; 15s ago
   Main PID: 17726 (dnsmasq)
      Tasks: 1 (limit: 2282)
     Memory: 868.0K
     CGroup: /system.slice/dnsmasq.service
             ??17726 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --trust-anchor=.,20326,8,2,e>

Nov 02 11:02:12 ubunt4 systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server...
Nov 02 11:02:12 ubunt4 dnsmasq[17705]: dnsmasq: syntax check OK.
Nov 02 11:02:12 ubunt4 dnsmasq[17726]: started, version 2.80 cachesize 150
Nov 02 11:02:12 ubunt4 dnsmasq[17726]: DNS service limited to local subnets
Nov 02 11:02:12 ubunt4 dnsmasq[17726]: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify dumpfi>
Nov 02 11:02:12 ubunt4 dnsmasq[17726]: reading /etc/resolv.conf
Nov 02 11:02:12 ubunt4 dnsmasq[17726]: using nameserver 8.8.8.8#53
Nov 02 11:02:12 ubunt4 dnsmasq[17726]: read /etc/hosts - 7 addresses
Nov 02 11:02:12 ubunt4 systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server.

완료되면 다음 단계로 진행할 수 있습니다.

Dnsmasq 구성

다음으로 Dnsmasq를 로컬 DNS 서버로 구성해야 합니다. Dnsmasq 기본 구성 파일을 편집하여 이를 수행할 수 있습니다.

nano /etc/dnsmasq.conf

다음 줄을 변경합니다.

port=53
domain-needed
bogus-priv
listen-address=127.0.0.1,your-server-ip
expand-hosts
domain=dns-example.com
cache-size=1000

완료되면 파일을 저장하고 닫습니다.

다음으로 resolv.conf 파일에서 기본 네임서버로 서버 IP 주소를 추가해야 합니다. 다음 명령으로 추가할 수 있습니다.

nano /etc/resolv.conf

"nameserver 8.8.8.8" 줄 위에 다음 줄을 추가합니다.

nameserver your-server-ip

완료되면 파일을 저장하고 닫습니다. 그런 다음 다음 명령을 사용하여 구성 오류가 있는지 서버를 확인합니다.

dnsmasq --test

모든 것이 정상이면 다음과 같은 결과가 표시됩니다.

dnsmasq: syntax check OK.

마지막으로 Dnsmasq 서비스를 다시 시작하여 변경 사항을 적용합니다.

systemctl restart dnsmasq

이 시점에서 Dnsmasq가 시작되고 포트 53에서 수신 대기합니다. 다음 명령으로 확인할 수 있습니다.

ss -alnp | grep -i :53

다음과 같은 결과가 표시되어야 합니다.

udp     UNCONN   0        0                                             0.0.0.0:53                                                0.0.0.0:*                      users:(("dnsmasq",pid=41051,fd=4))                                             
udp     UNCONN   0        0                                                [::]:53                                                   [::]:*                      users:(("dnsmasq",pid=41051,fd=6))                                             
tcp     LISTEN   0        32                                            0.0.0.0:53                                                0.0.0.0:*                      users:(("dnsmasq",pid=41051,fd=5))                                             
tcp     LISTEN   0        32                                               [::]:53                                                   [::]:*                      users:(("dnsmasq",pid=41051,fd=7))                                             

Dnsmasq 서버에 DNS 레코드 추가

다음으로 /etc/hosts 파일을 편집하고 로컬 DNS 서버 항목을 추가해야 합니다.

nano /etc/hosts

다음 줄을 추가합니다.

your-server-ip host1.dns-example.com

완료되면 파일을 저장하고 닫습니다.

Dnsmasq 서버 해상도 확인

이 시점에서 Dnsmasq가 설치되고 구성됩니다. 아니요, DNS 확인을 확인할 시간입니다.

아래와 같이 dig 명령을 사용하여 DNS 확인을 확인할 수 있습니다.

dig host1.dns-example.com +short

모든 것이 정상이면 다음 출력에 서버 IP가 표시되어야 합니다.

your-server-ip

다음 명령을 사용하여 외부 DNS 확인을 확인할 수도 있습니다.

dig linux-console.net +short

다음과 같은 결과가 표시되어야 합니다.

172.67.68.93
104.26.3.165
104.26.2.165

Dnsmasq DNS 서버를 사용하도록 원격 클라이언트 구성

다음으로 Dnsmasq DNS 서버를 기본 DNS 서버로 사용하도록 원격 클라이언트를 구성해야 합니다.

먼저 다음 명령을 사용하여 DNS 도구를 설치합니다.

apt-get install dnsutils ldnsutils -y

설치가 완료되면 /etc/resolv.conf 파일과 Dnsmasq DNS 서버 항목을 편집해야 합니다.

nano /etc/resolv.conf

파일 시작 부분에 다음 줄을 추가합니다.

nameserver your-server-ip

완료되면 파일을 저장하고 닫습니다.

그런 다음 다음 명령을 사용하여 로컬 DNS 확인을 확인합니다.

dig host1.dns-example.com

다음 출력이 표시되어야 합니다.

; DiG 9.9.5-3ubuntu0.4-Ubuntu host1.dns-example.com
;; global options: +cmd
;; Got answer:
;; HEADER opcode: QUERY, status: NOERROR, id: 26401
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;host1.dns-example.com.		IN	A

;; ANSWER SECTION:
host1.dns-example.com.	0	IN	A	45.58.32.165

;; Query time: 301 msec
;; SERVER: 45.58.32.165#53(45.58.32.165)
;; WHEN: Mon Nov 02 16:49:37 IST 2020
;; MSG SIZE  rcvd: 66

다음으로 캐싱을 위해 DNS 서버를 확인해야 합니다. 드릴 유틸리티를 사용하여 확인할 수 있습니다.

먼저 다음 명령을 실행합니다.

drill google.com | grep "Query time"

다음 출력이 표시되어야 합니다.

;; Query time: 290 msec

그런 다음 명령을 다시 실행하여 캐싱이 작동하는지 확인합니다.

drill google.com | grep "Query time"

이제 쿼리 시간이 4msec로 감소하는 것을 볼 수 있습니다.

;; Query time: 4 msec

결론

축하합니다! Dnsmasq를 로컬 DNS 서버 및 Ubuntu 20.04로 성공적으로 설치 및 구성했습니다. 이제 이름 확인을 위해 로컬 네트워크에서 쉽게 구현할 수 있기를 바랍니다.