DNS 설정 · 10 min read · Sep 08, 2025
로키 리눅스에서 Dnsmasq로 로컬 DNS 리졸버 설치하기

Dnsmasq는 로컬 환경을 위한 작고 가벼운 DNS 서버입니다. DNS 서버, DHCP 서버 및 TFTP 서버를 제공하는 데 사용할 수 있습니다. DNS 서버의 경우, Dnsmasq는 포워더, 재귀 DNS 서버 및 DNS 캐싱 시스템으로 사용할 수 있습니다. 또한 /etc/hosts 파일에서 DNS 내용을 로드하여 로컬 호스트 이름에 대한 도메인 이름을 설정할 수 있습니다.
Dnsmasq는 라우터 및 방화벽과 같은 저자원 장치에 적합하도록 작은 발자국으로 설계되었습니다. Dnsmasq는 낮은 시스템 요구 사항을 가지고 있으며 적은 자원을 소비합니다. Linux, BSD, Android 및 macOS에서 실행할 수 있습니다.
이 튜토리얼에서는 로키 리눅스 9 서버에서 Dnsmasq로 로컬 DNS 서버를 설치하고 설정하는 방법을 다룹니다. Dnsmasq를 설치하고 로컬 도메인 이름 활성화, /etc/hosts 파일을 통한 서브 도메인 설정, 더 빠른 액세스를 위한 DNS 캐시 활성화와 같은 추가 기능을 갖춘 로컬 DNS 서버를 설정합니다. 마지막으로, Dnsmasq를 통해 DHCP 서버를 활성화합니다.
클라이언트 머신을 설정하여 로컬 DNS 서버를 기본 DNS 리졸버로 사용하는 방법도 배우게 됩니다.
전제 조건
시작하기 전에 몇 가지 전제 조건이 필요합니다. 아래는 전제 조건 목록입니다:
- 로키 리눅스 9 서버 - 이 예제에서는 호스트 이름 ‘ dnsmasq-rocky ‘와 IP 주소 ‘ 192.168.5.50 ‘를 사용하는 로키 리눅스를 사용합니다.
- sudo/root 관리자 권한이 있는 비루트 사용자.
- SELinux가 ‘ permissive ‘ 모드로 실행되고 있습니다.
클라이언트 머신의 경우, 모든 Linux 배포판을 사용할 수 있습니다. Debian 기반 또는 RHEL 기반 배포판을 클라이언트 머신으로 사용할 수 있습니다.
시스템 준비
RHEL 기반 운영 체제에서는 기본 DNS 리졸버 ‘/etc/resolv.conf’가 NetworkManager 서비스에 의해 생성됩니다. Dnsmasq를 설치하기 전에 /etc/resolv.conf 파일을 통해 정적 DNS 리졸버를 설정하고 NetworkManager 서비스에서 DNS 리졸버를 비활성화합니다.
시작하려면 아래의 nano 편집기 명령을 사용하여 NetworkManager 구성 파일 /etc/NetworkManager/NetworkManager.conf를 엽니다.
sudo nano /etc/NetworkManager/NetworkManager.conf섹션 ‘ [section] ‘ 내에 ‘ dns=none ‘ 줄을 추가합니다.
[main]
dns=none작업이 끝나면 파일을 저장하고 편집기를 종료합니다.
다음으로, 아래의 nano 편집기 명령을 사용하여 DNS 리졸버 구성 파일 ‘/etc/resolv.conf’를 엽니다.
sudo nano /etc/resolv.conf모든 사용 가능한 줄을 삭제하고 다음 줄로 교체합니다. 이렇게 하면 Cloudflare 및 Google 공개 DNS를 기본 DNS 서버로 사용하게 됩니다.
nameserver 1.1.1.1
nameserver 8.8.8.8작업이 끝나면 파일을 저장하고 종료합니다.
마지막으로, 아래의 systemctl 명령을 실행하여 NetworkManager를 재시작하고 변경 사항을 적용합니다.
sudo systemctl restart NetworkManager
이 설정이 완료되면, DNS 리졸버는 NetworkManager 서비스에 의해 변경되지 않으며 언제든지 DNS 리졸버를 추가하거나 변경할 수 있습니다.
다음 단계에서는 로키 리눅스에서 Dnsmasq 설치 및 구성을 시작합니다.
로키 리눅스에 Dnsmasq 설치하기
이 단계에서는 로키 리눅스 서버에 Dnsmasq 패키지를 설치합니다. 그런 다음 시스템 부팅 시 Dnsmasq 서비스가 실행되도록 시작하고 활성화합니다.
기본적으로 ‘ dnsmasq ‘ 패키지는 로키 리눅스 AppStream 저장소에서 사용할 수 있습니다. 아래의 dnf 명령을 실행하여 ‘ dnsmasq ‘ 패키지에 대한 정보를 가져옵니다.
sudo dnf info dnsmasq이 글을 작성할 당시 Dnsmasq v2.85가 로키 리눅스 9에서 사용 가능합니다.

이제 아래 명령을 실행하여 Dnsmasq를 설치합니다. 확인을 요청받으면 y를 입력하고 ENTER를 눌러 진행합니다.
sudo dnf install dnsmasq dnsmasq-utils이제 Dnsmasq 설치가 시작되어야 합니다.
Dnsmasq를 설치한 후, 아래의 systemctl 명령을 실행하여 ‘ dnsmasq ‘ 서비스를 시작하고 활성화합니다. 아래 명령을 실행하면 ‘ dnsmasq ‘ 서비스가 현재 실행 중이며 부팅 시 자동으로 시작됩니다.
sudo systemctl start dnsmasq
sudo systemctl enable dnsmasq아래의 systemctl 명령 유틸리티를 통해 ‘ dnsmasq ‘ 서비스를 확인합니다.
sudo systemctl status dnsmasq다음과 같은 출력을 받게 됩니다 - ‘ dnsmasq ‘ 서비스가 현재 실행 중이며, 활성화되어 있으며 부팅 시 자동으로 실행됩니다.

Dnsmasq가 설치되고 실행 중이므로, 이제 Dnsmasq를 로컬 DNS 서버로 실행하도록 구성합니다.
Dnsmasq 구성하기
이 단계에서는 Dnsmasq를 로컬 DNS 서버로 설정하고 DNS 캐시, DHCP 서버와 같은 몇 가지 활성화된 기능을 설정하고 로컬 애플리케이션을 위한 도메인 이름 및 서브 도메인을 구성합니다. 이를 통해 애플리케이션은 ‘ db1.howtoforge.local ‘, ‘ app.howtoforge.local ‘ 등과 같은 로컬 도메인 이름/서브 도메인을 통해 접근할 수 있습니다.
시작하려면 아래 명령을 실행하여 기본 Dnsmasq 구성 파일을 ‘/etc/dnsmasq.conf.orig’로 복사한 다음, 아래의 nano 편집기 명령을 사용하여 원본 Dnsmasq 구성 파일 ‘/etc/dnsmasq.conf’를 엽니다.
sudo cp /etc/dnsmasq.conf{,.orig}
sudo nano /etc/dnsmasq.conf파일에 다음 줄을 추가합니다.
# dnsmasq는 UDP 포트 53에서 실행됩니다.
# IP 주소 localhost 및 192.168.5.50에서
# 네트워크 인터페이스 eth1
port=53
listen-address=127.0.0.1,192.168.5.50
interface=eth1
# 비라우팅 주소의 포워딩 비활성화
# 기본 도메인 주소가 없는 이름의 포워딩 비활성화
# 간단한 이름에 도메인 부분 자동 추가
# dnsmasq가 /etc/resolv.conf 파일을 읽지 않도록 비활성화
domain-needed
bogus-priv
expand-hosts
no-resolv
# 비로컬 도메인을 위한 업스트림 DNS 서버
# Cloudflare 및 Google 공개 DNS 사용
server=1.1.1.1
server=8.8.8.8
# dnsmasq의 도메인 정의
domain=howtoforge.local
address=/howtoforge.local/192.168.5.50
# DNS 캐시 활성화 및 캐시 크기 조정
cache-size=10000
# dnsmasq를 통한 DHCP 활성화
# 임대 db 파일 정의
# DHCP 서버를 권위 있는 것으로 설정
dhcp-range=192.168.5.100,192.168.5.150,12h
dhcp-leasefile=/var/lib/dnsmasq/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.50으로 해결됩니다.
- cache-size: Dnsmasq에서 DNS 캐시를 활성화합니다. 성능과 속도를 높이기 위해 크기를 조정해야 합니다.
- dhcp-range: Dnsmasq를 통한 DHCP 서버를 활성화합니다. 네트워크에 대한 IP 주소 풀 및 임대 시간을 조정합니다.
- dhcp-leasefile: DHCP 임대를 저장하는 데 사용할 파일을 정의합니다.
- dhcp-authoritative: DHCP 서버를 권위 있는 것으로 설정합니다.

다음으로, 아래의 nano 편집기 명령을 사용하여 ‘ /etc/hosts ‘ 파일을 엽니다. 이제 로컬 환경의 애플리케이션을 위한 몇 가지 서브 도메인을 정의합니다.
sudo nano /etc/hosts파일에 다음 줄을 추가합니다. 이 예제에서는 세 개의 서브 도메인 wiki, mysql 및 files를 생성합니다. 각 서브 도메인은 Dnsmasq 서버의 기본 도메인 ‘howtoforge.local’을 따르며 특정 IP 주소를 가리킵니다.
서브 도메인 wiki.howtoforge.local은 IP 주소 ‘ 192.168.5.10 ‘을 가리키고, 서브 도메인 ‘ mysql.howtoforge.local ‘은 IP 주소 ‘ 192.168.5.25 ‘을 가리키며, ‘ files.howtoforge.local ‘은 IP 주소 ‘ 192.168.5.30 ‘을 가리킵니다.
192.168.5.10 wiki
192.168.5.25 mysql
192.168.5.30 files 작업이 끝나면 파일을 저장하고 편집기를 종료합니다.
이제 아래의 nano 편집기 명령을 사용하여 DNS 리졸버 구성 파일 ‘ /etc/resolv.conf ‘를 엽니다.
sudo nano /etc/resolv.conf파일 상단에 다음 줄을 추가합니다. Dnsmasq 서버 IP 주소로 IP 주소를 변경해야 합니다.
nameserver 127.0.0.1
nameserver 192.168.5.50작업이 끝나면 파일을 저장하고 편집기를 종료합니다.
이제 아래 명령을 실행하여 Dnsmasq 구성을 확인하고 올바른 구성이 있는지 확인합니다. ‘ dnsmasq: syntax check OK ‘와 같은 출력을 받게 됩니다.
sudo dnsmasq --test마지막으로, 아래의 systemctl 명령 유틸리티를 실행하여 ‘dnsmasq’ 서비스를 재시작하고 변경 사항을 적용합니다.
sudo systemctl restart dnsmasq
이 시점에서, 로키 리눅스 시스템에서 Dnsmasq를 로컬 DNS 서버로 구성하는 작업이 완료되었습니다. Dnsmasq 서버에 대한 도메인 이름과 ‘/etc/hosts’ 파일을 통한 몇 가지 서브 도메인을 구성했습니다. 마지막으로, Dnsmasq를 통해 DNS 캐시와 DHCP 서버를 활성화했습니다.
다음 단계에서는 Dnsmasq 서버 설치 및 구성을 확인합니다.
Dnsmasq 설치 확인하기
Dnsmasq 구성이 완료되면, 이제 Dnsmasq 서비스 자체를 확인합니다. Dnsmasq가 기본 포트 50에서 실행되고 있는지 확인하고 서비스가 실행 중인지 확인합니다. 그런 다음, ‘ dns-utils ‘ 패키지를 통해 생성한 로컬 도메인 이름과 서브 도메인을 확인합니다.
아래 명령을 실행하여 시스템에서 열린 포트를 확인합니다. 그런 다음 systemctl 명령 유틸리티를 통해 ‘ dnsmasq ‘ 서비스를 확인합니다.
ss -tulpn | grep 53
sudo systemctl status dnsmasq다음과 같은 출력을 받게 됩니다 - Dnsmasq가 기본 포트 53에서 실행 중이며 서비스 상태가 현재 실행 중입니다. 또한, 활성화되어 있어 부팅 시 자동으로 시작됩니다.

다음으로, 아래의 dnf 명령을 실행하여 ‘bind-utils’ 패키지를 로키 리눅스 서버에 설치합니다. 이 패키지는 DNS 서버 테스트 및 문제 해결을 위한 여러 명령줄 도구를 제공합니다.
sudo dnf install bind-utils프롬프트가 나타나면 y를 입력하고 ENTER를 눌러 진행합니다.

이제 아래의 dig 명령을 실행하여 Dnsmasq 서버의 도메인 이름 ‘ howtoforge.local ‘을 확인합니다. ‘ howtoforge.local ‘이 서버 IP 주소 ‘ 192.168.5.50 ‘을 가리키는 것을 확인해야 합니다.
dig howtoforge.local
마지막으로, 아래 명령을 실행하여 ‘/etc/hosts’ 파일을 통해 정의한 서브 도메인을 확인합니다.
dig wiki.howtoforge.local +short
dig mysql.howtoforge.local +short
dig files.howtoforge.local +short다음과 같은 출력을 받게 됩니다 - 서브 도메인 wiki.howtoforge.local은 IP 주소 192.168.5.10을 가리키고, 서브 도메인 mysql.howtoforge.local은 IP 주소 192.168.5.25을 가리키며, 마지막으로 서브 도메인 files.howtoforge.local은 서버 IP 주소 192.168.5.30을 가리킵니다.

이 결과를 통해, Dnsmasq를 로컬 DNS 서버로 구성하는 작업이 완료되었습니다. 다음 단계에서는 Firewalld를 통해 DNS 포트를 보호합니다.
Firewalld 설정하기
이 단계에서는 firewalld를 설정하여 DNS 서비스 포트를 열고 내부 네트워크 IP 주소를 firewalld에 추가하여 DNS 서비스 포트에 접근할 수 있는 주요 소스로 설정합니다.
아래의 firewall-cmd 명령을 실행하여 firewalld에 DNS 서비스를 추가합니다. 그런 다음, 내부 네트워크 IP 주소를 소스로 추가합니다.
sudo firewall-cmd --add-service=dns
sudo firewall-cmd --add-source=192.168.5.0/24다음으로, 아래 명령을 실행하여 생성한 임시 규칙을 저장하고 firewalld를 재로드하여 변경 사항을 적용합니다.
sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reload
다음 명령을 통해 firewalld를 확인합니다. DNS 서비스가 firewalld에 추가되었고 네트워크의 소스 IP 주소도 firewalld에 추가된 것을 확인해야 합니다.
sudo firewall-cmd --list-all출력:

클라이언트 설정하기 (Debian 기반 또는 RHEL 기반)
이 단계에서는 Dnsmasq를 통해 생성한 로컬 DNS 서버를 사용하도록 Debian 기반 및 RHEL 기반 배포판을 설정하는 방법을 배웁니다.
RHEL 기반 배포판의 경우
아래의 nano 편집기 명령을 사용하여 NetworkManager에 대한 새 구성 파일 ‘ /etc/NetworkManager/conf.d/dns-servers.conf ‘를 추가합니다.
sudo nano /etc/NetworkManager/conf.d/dns-servers.conf파일에 다음 줄을 추가하고 Dnsmasq 서비스 IP 주소로 IP 주소를 변경해야 합니다. 이 구성으로 클라이언트의 기본 DNS 리졸버를 Dnsmasq 서버 IP 주소를 사용하여 설정합니다. 이렇게 하면 DNS 리졸버 구성 ‘ /etc/resolv.conf ‘이 자동으로 작성됩니다.
[global-dns-domain-*]
servers=192.168.5.50작업이 끝나면 파일을 저장하고 편집기를 종료합니다.
다음으로, 아래의 systemctl 명령을 실행하여 NetworkManager 서비스를 재시작하고 변경 사항을 적용합니다.
sudo systemctl restart NetworkManager설정을 확인하기 위해 ‘/etc/resolv.conf’ 파일을 표시할 수 있습니다. 기본 이름 서버가 로컬 Dnsmasq 서버 IP 주소 192.168.5.50인 것을 확인해야 합니다.
cat /etc/resolv.conf
다음으로, 아래의 dnf 명령을 실행하여 시스템에 ‘bind-utils’ 패키지를 설치합니다.
sudo dnf install bind-utils
Debian 기반 배포판의 경우
Debian 기반 운영 체제를 사용하는 경우, DNS 리졸버를 수동으로 설정하고 시스템에서 ‘systemd-resolved’ 서비스를 비활성화할 수 있습니다 - 특히 Ubuntu 시스템의 경우.
아래 명령을 실행하여 systemd-resolved 서비스를 중지하고 비활성화합니다.
sudo systemctl disable --now systemd-resolved이제 아래 명령을 실행하여 DNS 리졸버 구성 ‘/etc/resolv.conf’의 심볼릭 링크 파일을 제거합니다. 그런 다음, 아래의 nano 편집기 명령을 통해 새 리졸버 구성 파일 ‘ /etc/resolv.conf ‘을 생성합니다.
unlink /etc/resolv.conf
sudo nano /etc/resolv.conf파일에 다음 줄을 추가하고 Dnsmasq 서버 IP 주소로 IP 주소를 변경합니다.
nameserver 192.168.5.50작업이 끝나면 파일을 저장하고 편집기를 종료합니다.
다음으로, 아래의 apt 명령을 실행하여 시스템에 ‘ dnsutils ‘ 패키지를 설치합니다.
sudo apt install dnsutils‘bind-utils’ 또는 ‘dns-utils’가 설치되면, dig 명령을 통해 Dnsmasq의 구성을 확인할 수 있습니다.
아래의 dig 명령을 실행하여 Dnsmasq 서버의 도메인 이름 ‘ howtoforge.local ‘을 확인합니다. ‘ howtoforge.local ‘이 Dnsmasq 서버 IP 주소 192.168.5.50을 가리키는 것을 확인해야 합니다.
dig howtoforge.local
다음으로, 아래 명령을 사용하여 ‘/etc/hosts’ 파일을 통해 구성한 서브 도메인을 확인합니다. 각 서브 도메인이 ‘/etc/hosts’ 파일에서 구성한 특정 IP 주소를 가리키는 것을 확인해야 합니다.
dig wiki.howtoforge.local +short
dig mysql.howtoforge.local +short
dig files.howtoforge.local +short다음과 같은 출력을 받게 됩니다 - 서브 도메인 wiki.howtoforge.local은 IP 주소 192.168.5.10을 가리키고, 서브 도메인 mysql.howtoforge.local은 IP 주소 192.168.5.25을 가리키며, 마지막으로 서브 도메인 files.howtoforge.local은 서버 IP 주소 192.168.5.30을 가리킵니다.

이로써 로컬 도메인 이름과 서브 도메인이 성공적으로 구성되었습니다. 이제 Github.com과 같은 공용 도메인 이름은 어떻게 될까요?
아래 명령을 실행하여 클라이언트 머신에서 인터넷 도메인 이름을 확인합니다. 이렇게 하면 Dnsmasq 서버에서 로컬 DNS가 해결되더라도 인터넷에 연결할 수 있는지 확인할 수 있습니다.
dig github.com다음과 같은 출력을 받게 됩니다 - github.com에 대한 dig 쿼리가 IP 주소 192.168.5.50에서 실행되는 로컬 DNS 서버를 통해 연결되었습니다. 기본 포트 53에서 연결되었습니다.

마지막으로, 아래의 dig 명령을 실행하여 DNS 캐시 설정을 확인합니다. 이는 실행된 쿼리의 통계를 보여주며, 대상 도메인 이름에 대한 ‘ Query time ‘을 포함합니다.
dig +noall +stats duckduckgo.com
dig +noall +stats duckduckgo.com그러면 다음과 같은 출력을 받게 됩니다 - 첫 번째 쿼리에서 ‘ Query time ‘이 63ms입니다. 그러나 두 번째 및 세 번째 쿼리에서는 Query Time이 2ms로, 동일한 도메인 이름에 대한 쿼리가 Dnsmasq 로컬 DNS 서버를 통해 캐시되었음을 의미합니다.

결론
이 튜토리얼에서는 Dnsmasq로 로컬 DNS 서버를 생성했습니다. 로키 리눅스 9 서버에서 Dnmasq로 로컬 환경을 위한 DNS 서버를 설정했습니다. 또한, Dnsmasq를 로컬 도메인 이름 및 서브 도메인으로 구성하고, 더 빠른 액세스를 위해 DNS 캐시를 활성화하고, Dnsmasq를 통해 DHCP 서버를 활성화했습니다.
마지막으로, 생성한 로컬 DNS 서버를 사용하도록 클라이언트 머신(데비안 기반 및 RHEL 기반 배포판)을 추가하고 구성했습니다. 이 과정에서 DNS 서버를 dig 명령으로 문제 해결하는 방법과 Linux 시스템에서 DNS 리졸버를 설정하는 방법도 배웠습니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.