DNS 설정 · 4 min read · Oct 01, 2025

우분투 20.04에서 Dnsmasq를 사용하여 로컬 DNS 리졸버 설정하는 방법

Dnsmasq는 “DNS 변조의 약자”로, 소규모 네트워크에 사용되는 간단하고 가벼우며 사용하기 쉬운 DNS 포워더입니다. DNS 캐시 및 DHCP 서버로 구성할 수 있으며 IPv4 및 IPv6 프로토콜을 모두 지원합니다. DNS 쿼리를 수신하면 캐시에서 응답하거나 다른 DNS 서버로 전달합니다.

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

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

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

전제 조건

  • 우분투 20.04를 실행하는 서버.
  • 서버에 루트 비밀번호가 구성되어 있어야 합니다.

시작하기

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

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

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

Dnsmasq 설치

기본적으로 Dnsmasq는 우분투 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 ubuntu2004 systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server...
Nov 02 11:02:12 ubuntu2004 dnsmasq[17705]: dnsmasq: syntax check OK.
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: started, version 2.80 cachesize 150
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: DNS service limited to local subnets
Nov 02 11:02:12 ubuntu2004 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 ubuntu2004 dnsmasq[17726]: reading /etc/resolv.conf
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: using nameserver 8.8.8.8#53
Nov 02 11:02:12 ubuntu2004 dnsmasq[17726]: read /etc/hosts - 7 addresses
Nov 02 11:02:12 ubuntu2004 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 howtoforge.com +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 유틸리티를 사용하여 확인할 수 있습니다.

먼저, 다음 명령어를 실행합니다:

drill google.com | grep "Query time"

다음과 같은 출력을 볼 수 있어야 합니다:

;; Query time: 290 msec

다음으로, 캐싱이 작동하는지 확인하기 위해 명령어를 다시 실행합니다:

drill google.com | grep "Query time"

이제 쿼리 시간이 4 msec로 감소한 것을 볼 수 있어야 합니다:

;; Query time: 4 msec

결론

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

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.