DNS 설정 · 9 min read · Sep 08, 2025

Debian 12에서 Dnsmasq로 로컬 DNS 설정하는 방법

Dnsmasq는 로컬 환경(LAN)을 위한 작고 가벼운 네트워크 서비스입니다. DNS, DHCP 및 TFTP와 같은 네트워크 서비스를 제공합니다. Dnsmasq는 DNS 포워더, 재귀 DNS 서버 및 DNS 캐싱 시스템으로 사용할 수 있습니다. 또한 /etc/hosts 파일에서 DNS 내용을 로드하여 로컬 호스트 이름에 대한 도메인 이름을 설정할 수 있습니다.

Dnsmasq는 메모리 사용량이 적고 가벼운 설계로, 라우터 및 방화벽과 같은 저자원 장치에 적합합니다. Dnsmasq는 Linux, BSD, Android 및 macOS에서 실행할 수 있습니다.

이 튜토리얼에서는 Debian 12 서버에서 Dnsmasq로 로컬 DNS 서버를 설치하고 구성합니다. 로컬 네트워크에 사용할 수 있는 로컬 DNS 서버를 설정하고, 로컬 도메인 이름을 추가하고, DNS 캐시를 활성화하며, Dnsmasq를 통해 DHCP 서버를 활성화합니다. 또한 클라이언트 머신을 설정하고 로컬 DNS 서버를 사용하도록 추가하는 방법도 배웁니다. 이 튜토리얼을 완료하면 로컬 도메인 이름을 통해 모든 애플리케이션에 접근할 수 있으며, 캐시 DNS를 활성화했기 때문에 DNS 요청이 더 빨라집니다.

필수 조건

시작하기 전에 이 튜토리얼을 완료하기 위해 다음 요구 사항이 필요합니다:

  • Debian 12 서버 - 이 예제에서는 호스트 이름이 ‘ dnsmasq-server ‘이고 IP 주소가 192.168.5.20인 Debian 서버를 사용합니다.
  • sudo/root 관리자 권한이 있는 비루트 사용자.

클라이언트 머신의 경우, DNS 구성은 모든 배포판에서 유사하므로 어떤 Linux 배포판을 사용해도 됩니다.

시스템 준비

이 단계에서는 로컬 DNS 서버로 사용할 Debian 서버를 준비합니다. 패키지 인덱스를 업데이트하고, ‘ systemd-resolved ‘ 서비스를 중지 및 비활성화한 다음, ‘ /etc/resolv.conf ‘ 파일을 통해 정적 DNS 해석기 구성을 정의합니다.

Debian 시스템에서 DNS 해석기는 D-BUS 인터페이스를 통해 네트워크 이름 해석을 제공하는 ‘systemd-resolved’ 서비스에 의해 관리됩니다. Dnsmasq와 같은 DNS 서버 소프트웨어를 설정하려면 ‘ systemd-resolved ‘ 서비스를 비활성화해야 합니다.

시작하기 전에 아래의 apt 명령을 실행하여 Debian 패키지 인덱스를 업데이트하고 새로 고칩니다.

sudo apt update

다음으로, 아래 명령을 실행하여 ‘ systemd-resolved ‘ 서비스를 중지하고 비활성화합니다. Debian 시스템에서 DNS 구성은 NetworkManager와 systemd-resolved 서비스에 의해 관리됩니다.

sudo systemctl disable --now systemd-resolved  
sudo systemctl stop systemd-resolved

다음 명령을 통해 DNS 해석기 구성의 링크 파일 ‘/etc/resolv.conf’를 제거합니다.

sudo unlink /etc/resolv.conf

그 후, 아래 nano 편집기 명령을 사용하여 새로운 DNS 해석기 구성 파일 ‘ /etc/resolv.conf ‘를 생성합니다.

sudo nano /etc/resolv.conf

파일에 다음 줄을 추가합니다. 이렇게 하면 Cloudflare 및 Google 공개 DNS가 Debian 서버의 해석기로 추가됩니다.

nameserver 1.1.1.1  
nameserver 8.8.8.8

작업이 끝나면 파일을 저장하고 편집기를 종료합니다. 이제 Dnsmasq 설치 및 구성 단계로 이동합니다.

prepare the system

Dnsmasq 설치 및 구성

이 단계에서는 Dnsmasq를 사용하여 로컬 DNS 서버를 설치하고 설정합니다. Dnsmasq를 기본 DNS 포트 53 및 내부 IP 주소 ‘ 192.168.5.20 ‘에서 실행하도록 설정합니다. 또한 Dnsmasq 서비스의 도메인 이름을 정의하고, DNS 캐시를 활성화하며, 마지막으로 Dnsmasq를 통해 DHCP 서버를 활성화합니다.

기본 ‘ dnsmasq ‘ 패키지는 Debian 저장소에서 사용할 수 있습니다. 아래의 apt 명령을 실행하여 Dnsmasq 패키지를 설치합니다.

sudo apt install dnsmasq

프롬프트가 표시되면 y를 입력하여 확인하고 ENTER를 눌러 진행합니다.

install dnsmasq

Dnsmasq가 설치된 후, 아래 systemctl 명령 유틸리티를 실행하여 ‘dnsmasq’ 서비스가 활성화되고 실행 중인지 확인합니다.

sudo systemctl is-enabled dnsmasq  
sudo systemctl status dnsmasq

다음과 유사한 출력을 받게 됩니다 - dnsmasq 서비스가 활성화되어 있으며 부팅 시 자동으로 실행됩니다. 현재 dnsmasq 서비스의 상태는 실행 중입니다.

verify dnsmasq

Dnsmasq가 Debian 시스템에서 실행되고 있으므로, 다음으로 ‘/etc/dnsmasq.conf ‘ 파일을 통해 Dnsmasq 구성을 시작합니다.

시작하려면 아래 명령을 실행하여 기본 Dnsmasq 구성 파일을 백업합니다.

sudo cp /etc/dnsmasq.conf{,.orig}

이제 아래 nano 편집기 명령을 사용하여 Dnsmasq 구성 파일 ‘ /etc/dnsmasq.conf ‘을 엽니다.

sudo nano /etc/dnsmasq.conf

파일에 다음 줄을 추가합니다.

# dnsmasq run on UDP port 53  
# with IP address localhost and 192.168.5.20  
# and network interface eth1  
port=53  
listen-address=127.0.0.1,192.168.5.20  
interface=eth1  
  
# disable forwarding of non-routed address  
# disable forwarding names without the main domain.com  
# automatically append the domain part to simple names  
# disable dnsmasq to read /etc/resolv.conf file  
domain-needed  
bogus-priv  
expand-hosts  
no-resolv  
  
# upstream DNS server for non-local domain names  
# using Cloudflare and google public DNS  
server=1.1.1.1  
server=8.8.8.8  
  
# define the domain for dnsmasq  
domain=howtoforge.local  
address=/howtoforge.local/192.168.5.20  
  
# enable DNS Cache and adjust cache-size  
cache-size=1000  
  
# enable DHCP via dnsmasq  
# define lease db file  
# make the dhcp server as an authoritative  
dhcp-range=192.168.5.80,192.168.5.150,12h  
dhcp-leasefile=/var/lib/misc/dnsmasq.leases  
dhcp-authoritative

작업이 끝나면 파일을 저장하고 편집기를 닫습니다.

Dnsmasq에서 사용할 세부 옵션:

  • port: Dnsmasq를 실행할 포트입니다.
  • listen-address: Dnsmasq를 실행할 IP 주소입니다. 여러 IP 주소를 사용할 수 있습니다.
  • interface: Dnsmasq가 바인딩되고 실행될 인터페이스입니다.
  • domain-needed: 기본 도메인 주소가 없는 이름의 포워딩을 비활성화합니다. 전체 로컬 도메인인 ‘ mysql1.howtoforge.local ‘을 제공하지 않으면 ‘ mysql1 ‘ 호스트에 접근할 수 없습니다.
  • bogus-priv: 비라우팅 주소에 대한 포워딩을 비활성화합니다.
  • expand-hosts: 간단한 이름에 로컬 도메인 부분을 자동으로 추가합니다.
  • no-resolv: 서버의 ‘/etc/resolv.conf’ 파일을 무시합니다.
  • server: 비로컬 주소나 도메인에 사용할 업스트림 DNS 서버를 정의합니다. 이 예제에서는 Cloudflare와 Google의 공개 DNS 서버를 사용합니다.
  • domain: Dnsmasq 서버의 도메인 이름을 정의합니다. 이 예제에서는 Dnsmasq 서버가 로컬 도메인 howtoforge.local을 가져옵니다.
  • address: Dnsmasq의 도메인 이름에 대한 IP 주소를 정의합니다. 이 예제에서는 도메인 howtoforge.local이 IP 주소 192.168.5.20으로 해석됩니다.
  • cache-size: Dnsmasq에서 DNS 캐시를 활성화합니다. 성능과 속도를 높이기 위해 크기를 조정해야 합니다.
  • dhcp-range: Dnsmasq를 통해 DHCP 서버를 활성화합니다. 네트워크에 대한 IP 주소 풀과 임대 시간을 조정합니다.
  • dhcp-leasefile: DHCP 임대를 저장하는 데 사용될 파일을 정의합니다.
  • dhcp-authoritative: DHCP 서버를 권위 있는 것으로 만듭니다.

dnsmasq config

다음으로, 아래 nano 편집기 명령을 사용하여 구성 파일 ‘/etc/hosts’를 엽니다. 내부 애플리케이션에 대한 하위 도메인을 정의할 수 있으며 Dnsmasq 도메인 이름 ‘ howtoforge.local ‘과 자동으로 구성됩니다.

sudo nano /etc/hosts

파일에 다음 줄을 추가합니다. 이 예제에서는 하위 도메인 app1, db1, 및 files를 정의합니다. 이러한 하위 도메인의 루트 도메인은 Dnsmasq 서버 자체 ‘ howtoforge.local ‘입니다.

다음 줄을 통해 ‘ app1.howtoforge.local ‘은 IP 주소 ‘ 192.168.5.10 ‘으로 해석되고, 하위 도메인 ‘ db1.howtoforge.local ‘은 서버 IP 주소 ‘ 192.168.5.25 ‘를 가리키며, 하위 도메인 ‘files.howtoforge.local ‘은 IP 주소 ‘192.168.5.50 ‘을 가리킵니다.

192.168.5.10 app1  
192.168.5.25 db1  
192.168.5.50 files 

작업이 끝나면 파일을 저장하고 편집기를 종료합니다.

다음으로, 아래 nano 편집기 명령을 사용하여 ‘ /etc/resolv.conf ‘ 파일을 열고 Dnsmasq 서버 IP 주소를 ‘ nameserver ‘로 추가합니다.

sudo nano /etc/resolv.conf

파일 상단에 다음 줄을 추가합니다. Dnsmasq 서버 IP 주소로 변경하는 것을 잊지 마세요.

nameserver 127.0.0.1  
nameserver 192.168.5.20

작업이 끝나면 파일을 저장하고 편집기를 종료합니다.

이제 아래 ‘dnsmasq’ 명령을 실행하여 Dnsmasq 구성을 확인하고 올바른 형식 구성을 갖추었는지 확인합니다. ‘ dnsmasq - syntax check OK ‘와 같은 출력을 받아야 합니다.

sudo dnsmasq --test

마지막으로, 아래 systemctl 명령 유틸리티를 실행하여 ‘ dnsmasq ‘ 서비스를 재시작하고 변경 사항을 적용합니다.

sudo systemctl restart dnsmasq

verify dnsmasq and configure it

이 시점에서 Debian 시스템에서 Dnsmasq를 통해 로컬 DNS 서버 구성을 완료했습니다. 로컬 도메인 이름과 하위 도메인을 구성하고, DNS 캐시를 활성화하고, Dnsmasq를 통해 DHCP 서버를 활성화했습니다.

다음 단계에서는 Dnsmasq 서버 설치 및 구성을 확인합니다.

Dnsmasq 설치 확인

이 단계에서는 Dnsmasq 서비스 및 시스템의 LISTEN 포트를 확인하여 Dnsmasq 설치를 확인합니다. 그런 다음, ‘/etc/hosts’ 파일을 통해 구성한 로컬 도메인 이름 및 하위 도메인을 확인합니다.

아래 명령을 실행하여 Dnsmasq 서비스가 포트 53에서 실행되고 있는지 확인합니다. 그런 다음 systemctl 명령 유틸리티를 통해 Dnsmasq 서비스의 상태를 확인합니다.

ss -tulpn | grep 53  
sudo systemctl status dnsmasq

다음과 유사한 출력을 받게 됩니다 - Dnsmasq 서비스가 기본 포트 53에서 실행 중이며 활성화되어 부팅 시 자동으로 실행됩니다.

verify dnsmasq service

다음으로, Dnsmasq를 통해 구성한 도메인 이름 및 하위 도메인을 확인합니다. 그러나 그 전에 아래 apt 명령을 실행하여 ‘ dnsutils ‘ 패키지를 시스템에 설치합니다. ‘dnsutils’ 패키지는 DNS 서버 구성을 테스트하기 위한 명령줄 도구를 제공합니다.

sudo apt install dnsutils

프롬프트가 표시되면 y를 입력하고 ENTER를 눌러 설치를 진행합니다.

dnsutils ‘가 설치된 후, 다음 dig 명령을 실행하여 구성한 도메인 이름 및 하위 도메인을 확인합니다.

Dnsmasq의 기본 도메인 ‘ howtoforge.local ‘을 확인합니다. 이는 Dnsmasq 서버 IP 주소 ‘192.168.5.20’로 가리킵니다.

dig howtoforge.local

testing with dig command

‘/etc/hosts’ 파일을 통해 정의한 하위 도메인을 확인하려면 아래 dig 명령을 실행합니다.

dig app1.howtoforge.local +short  
dig db1.howtoforge.local +short  
dig files.howtoforge.local +short

하위 도메인 ‘ app1.howtoforge.local ‘은 IP 주소 ‘ 192.168.5.10 ‘으로 가리키고, 하위 도메인 ‘ db1.howtoforge.local ‘은 IP 주소 ‘ 192.168.5.25 ‘으로 가리키며, 마지막으로 ‘ files.howtoforge.local ‘은 IP 주소 ‘ 192.168.5.50 ‘으로 가리킵니다.

아래는 유사한 출력을 받게 됩니다.

verify sub domains

이제 Dnsmasq를 로컬 DNS 서버로 구성하고 테스트했습니다. 다음 단계에서는 UFW 방화벽을 사용하여 Dnsmasq를 설정하고 보호합니다.

UFW 방화벽 설정

이제 로컬 DNS 서버에서 방화벽을 설정합니다. UFW 방화벽을 통해 DNS 서버에 대한 접근을 제한하여 Dnsmasq 설치를 보호합니다.

아래 apt 명령을 실행하여 Debian 시스템에 UFW 방화벽을 설치합니다.

sudo apt install ufw -y

install ufw firewall

UFW를 설치한 후, 아래 명령을 실행하여 OpenSSH 서비스와 DNS 포트 53을 UFW 방화벽에 추가합니다. 이 예제에서는 Dnsmasq 서버에 접근할 수 있는 네트워크의 출처를 지정합니다. 이는 IP 주소 192.168.5.0/24인 로컬 네트워크입니다.

로컬 네트워크 IP 주소를 내부 네트워크 서브넷으로 변경하는 것을 잊지 마세요.

sudo ufw allow OpenSSH  
sudo ufw allow from 192.168.5.0/24 to any port 53 proto udp

다음으로, 아래 명령을 실행하여 UFW 방화벽을 시작하고 활성화합니다.

sudo ufw enable

구성 요청 시 y를 입력하여 확인하고 ENTER를 눌러 진행합니다. 이제 UFW 방화벽이 실행 중이며 활성화되어 부팅 시 자동으로 시작됩니다.

setup enable ufw

마지막으로, 아래 명령을 실행하여 UFW 방화벽의 상태를 확인합니다. UFW 방화벽이 ‘활성’ 상태이며 OpenSSH 서비스와 DNS 포트 53이 방화벽에 추가된 것을 확인할 수 있습니다.

sudo ufw status

verify ufw

UFW 방화벽이 구성되었으므로 이제 로컬 DNS 서버에 연결할 클라이언트를 추가할 수 있습니다.

클라이언트 설정

이 단계에서는 Debian 기반 배포판과 호스트 이름 ‘ client ‘인 클라이언트 머신을 설정합니다. 클라이언트 머신에 로컬 DNS 서버 Dnsmasq를 추가합니다.

아래 명령을 실행하여 DNS 해석기 구성 파일 ‘/etc/resolv.conf’의 링크를 제거합니다. 그런 다음 아래 nano 편집기 명령을 사용하여 새로운 해석기 구성을 ‘ /etc/resolv.conf ‘로 생성합니다.

sudo unlink /etc/resolv.conf  
sudo nano /etc/resolv.conf

파일에 다음 줄을 입력합니다. Dnsmasq 서버 IP 주소로 변경하는 것을 잊지 마세요.

nameserver 192.168.5.20

작업이 끝나면 파일을 저장하고 편집기를 종료합니다.

다음으로, 아래 명령을 실행하여 클라이언트 머신에 ‘dnsutils’ 패키지를 설치합니다.

sudo apt install dnsutils

setup client

이제 아래 dig 명령을 실행하여 도메인 이름 ‘ howtoforge.local ‘을 확인합니다. 이는 Dnsmasq 서버 IP 주소로 가리킵니다.

dig howtoforge.local

아래는 받을 출력입니다.

verify domain from client

하위 도메인에 대해서는 아래 dig 명령을 실행합니다. 각 하위 도메인은 Dnsmasq 서버의 ‘ /etc/hosts ‘ 파일에 정의된 IP 주소로 가리킵니다.

dig app1.howtoforge.local +short  
dig db1.howtoforge.local +short  
dig files.howtoforge.local +short

아래는 클라이언트 머신에서 받을 유사한 출력입니다.

verify sub domains

다음으로, Dnsmasq 로컬 DNS 서버를 통해 공용 도메인 이름에 접근할 수 있는지 확인해야 합니다. ‘ github.com ‘와 같은 공용 도메인 이름을 확인하여 이를 검증할 수 있습니다.

dig github.com

아래와 유사한 출력을 받게 됩니다 - 출력 하단에서 요청이 ‘ 192.168.5.20’에서 실행되는 Dnsmasq 로컬 DNS 서버에 의해 응답되었음을 확인할 수 있습니다. 이를 통해 Dnsmasq 로컬 DNS 서버를 통해 공용 도메인 이름에 성공적으로 연결되었습니다.

ensure dns is working

마지막으로, ‘drill’ 및 ‘dig’ 명령을 통해 DNS 캐시를 확인합니다. ‘ drill ‘ 명령은 ‘ ldnsutils ‘ 패키지의 일부이므로 아래 apt 명령을 실행하여 설치합니다.

sudo apt install ldnsutils

install ldns

ldnsutils가 설치된 후, 아래 drill 명령을 실행하여 Dnsmasq 서버에서 구성한 DNS 캐시를 확인합니다.

drill duckduckgo.com | grep "Query time"  
drill duckduckgo.com | grep "Query time"

아래와 같은 출력을 받게 됩니다 - 첫 번째 요청 시 ‘ Query time ‘은 60ms입니다. 그러나 같은 도메인에 대해 두 번째 요청 시 쿼리 시간은 1ms로 줄어들며, 이는 DNS 요청이 로컬 DNS 서버 Dnsmasq에 캐시되었음을 나타냅니다.

verify dns cache

+stats ‘ 옵션과 함께 dig 명령을 사용하여 DNS 캐시를 확인할 수도 있습니다.

dig +noall +stats duckduckgo.com  
dig +noall +stats duckduckgo.com

이제 클라이언트 머신 구성을 완료하고 Dnsmasq 로컬 DNS 서버가 완전히 작동하는지 확인했습니다. ‘/etc/hosts’ 파일을 통해 정의한 로컬 도메인 이름 및 하위 도메인에서부터 Dnsmasq에서 활성화한 DNS 캐시까지 모두 확인했습니다.

결론

이 튜토리얼에서는 Dnsmasq로 로컬 DNS 서버를 생성했습니다. Debian 12 서버에서 Dnmasq를 사용하여 로컬 환경을 위한 로컬 DNS 서버를 설정했습니다. 또한 Dnsmasq를 로컬 도메인 이름 및 하위 도메인으로 구성하고, 더 빠른 반복 DNS 응답을 위해 DNS 캐시를 활성화하며, Dnsmasq를 통해 DHCP 서버를 활성화했습니다.

마지막으로, 생성한 로컬 DNS 서버를 사용하도록 클라이언트 머신을 추가하고 구성했습니다. 이 과정에서 DNS 서버를 dig 명령으로 문제 해결하는 방법과 Linux 시스템에서 DNS 해석기를 설정하는 방법도 배웠습니다.

Share: X/Twitter LinkedIn

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

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