Linux 네임서버 구성 가이드
Linux 네임서버 구성 가이드입니다. BIND 설치, 캐시 DNS, 권한 zone, named-checkconf, named-checkzone, dig 검증과 Windows client 테스트를 정리했습니다.
Linux 네임서버 구성 가이드: BIND 캐시 DNS와 권한 DNS
Linux를 네임서버로 사용하려면 BIND의 named 서비스를 이해해야 한다. 네임서버는 크게 외부 이름을 대신 질의해 주는 캐시 DNS와, 내가 소유한 zone의 record를 직접 응답하는 권한 DNS로 나눌 수 있다. 실습은 관련 파일과 구성 순서를 잘 짚었지만 명령어와 설정 예시가 부족했으므로, 여기서는 RHEL 계열 BIND 기준으로 재작성한다.
관련 파일
| 경로 | 용도 |
|---|---|
/usr/sbin/named | BIND daemon |
/usr/lib/systemd/system/named.service | systemd unit |
/etc/named.conf | named main configuration |
/var/named | zone file 저장 경로 |
/etc/resolv.conf | 서버 자신이 질의할 resolver 설정 |
1. 패키지 설치
sudo dnf install -y bind bind-utils
rpm -qi bind
named -v
systemctl cat named2. named.conf 백업
sudo cp -a /etc/named.conf /etc/named.conf.bak.$(date +%Y%m%d%H%M%S)3. 캐시 네임서버 설정
내부망 client가 외부 DNS 질의를 이 서버에 맡길 수 있게 하려면 recursion과 allow-query를 내부망으로 제한한다.
options {
listen-on port 53 { 127.0.0.1; 192.168.10.192; };
listen-on-v6 port 53 { none; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; 192.168.10.0/24; };
recursion yes;
dnssec-validation yes;
};캐시 DNS를 외부 전체에 열면 open resolver가 되어 악용될 수 있다. allow-query와 recursion 대상은 반드시 내부망으로 제한한다.
4. 권한 zone 추가
내부 도메인 lab.local을 이 서버가 직접 응답하도록 zone을 추가한다.
zone "lab.local" IN {
type master;
file "lab.local.zone";
allow-update { none; };
};5. zone 파일 생성
$TTL 300
@ IN SOA ns1.lab.local. admin.lab.local. (
2026062301
3600
900
604800
300 )
IN NS ns1.lab.local.
ns1 IN A 192.168.10.192
infra01 IN A 192.168.10.192
web01 IN A 192.168.10.193
proxy IN A 192.168.10.192파일은 /var/named/lab.local.zone에 저장한다.
sudo vi /var/named/lab.local.zone
sudo chown root:named /var/named/lab.local.zone
sudo chmod 640 /var/named/lab.local.zone6. 문법 검사
sudo named-checkconf /etc/named.conf
sudo named-checkzone lab.local /var/named/lab.local.zone여기에서 실패하면 서비스를 재시작하지 않는다. DNS는 설정 오류가 있으면 전체 이름 해석 장애로 이어질 수 있다.
7. 서비스 시작과 방화벽
sudo systemctl enable --now named
sudo systemctl status named --no-pager
sudo firewall-cmd --add-service=dns --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-services8. 서버에서 직접 테스트
dig @127.0.0.1 web01.lab.local +short
dig @192.168.10.192 web01.lab.local +short
dig @192.168.10.192 www.google.com A +short
journalctl -u named -n 80 --no-pager9. 서버 자신 resolver 변경
네임서버 역할의 Linux가 자기 자신을 resolver로 쓰게 하려면 NetworkManager DNS를 조정한다.
CON_NAME="System ens33"
sudo nmcli con mod "${CON_NAME}" ipv4.dns 127.0.0.1
sudo nmcli con mod "${CON_NAME}" ipv4.dns-search lab.local
sudo nmcli con up "${CON_NAME}"
cat /etc/resolv.conf
getent hosts web01.lab.local10. Windows client 테스트
Windows 클라이언트 DNS 서버를 192.168.10.192로 지정한 뒤 확인한다.
Resolve-DnsName web01.lab.local -Server 192.168.10.192
Resolve-DnsName www.google.com -Server 192.168.10.192
nslookup web01.lab.local 192.168.10.19211. 수정 절차
zone 파일을 수정할 때는 SOA serial을 올리고 문법 검사 후 reload한다.
sudo vi /var/named/lab.local.zone
sudo named-checkzone lab.local /var/named/lab.local.zone
sudo rndc reload lab.local
dig @192.168.10.192 lab.local SOA +short
dig @192.168.10.192 web01.lab.local A +short마무리
Linux 네임서버 구성은 /etc/named.conf의 options와 zone 선언, /var/named의 zone 파일, /etc/resolv.conf 또는 NetworkManager DNS 설정이 함께 맞아야 한다. 캐시 DNS는 내부망에만 열고, 권한 DNS는 zone 파일의 SOA/NS/A record를 정확히 관리한다. 검증은 named-checkconf, named-checkzone, dig @server 순서로 진행하면 된다.