DHCP와 DNS 개념 정리
네트워크를 집이라고 생각해보자. DHCP는 그 집에 사는 사람들에게 **주소(IP)**를 자동으로 배정해주는 집주인이고, DNS는 그 사람의 이름을 주소와 연결해주는 주소록(전화번호부) 역할을 한다.
- DHCP (Dynamic Host Configuration Protocol): 클라이언트(PC, 프린터 등)가 네트워크에 접속하면 자동으로 IP 주소, 서브넷 마스크, 게이트웨이, DNS 서버 등의 정보를 할당해주는 프로토콜이다. 즉, ‘당신은 이 네트워크에서 192.168.1.101번 주소를 쓰세요’ 라고 알려주는 역할이다.
- DNS (Domain Name System): 사람은
naver.com
같은 도메인 이름을 기억하기 쉽지만, 컴퓨터는 IP 주소(223.130.200.104
)로 통신한다. DNS는 이 둘을 상호 변환하는 시스템이다.
이 둘을 연동하면 어떤 이점이 있을까?
- DHCP가 클라이언트에게 IP를 주는 동시에, 그 정보가 DNS에도 자동으로 등록되면
pc01.example.com → 192.168.1.101
과 같은 매핑을 관리자가 따로 할 필요 없이 자동화할 수 있다. - 클라이언트가 IP를 바꾸더라도 DNS는 그 변경 사항을 자동으로 반영한다.
예를 들어 DHCP가 새로 들어온 노트북에 192.168.1.150을 주고, 그 노트북의 이름이 alpha-laptop
이라면, DNS에 alpha-laptop.example.com A 192.168.1.150
이 자동으로 생성된다. 이걸 동적 DNS 등록이라고 한다.
이제 본격적으로 DHCP와 DNS가 어떻게 구성되는지, 각 설정들이 어떤 역할을 하는지, 정방향과 역방향 zone이 왜 필요한지 실무적인 내용으로 넘어가 보자.
서론
동적 주소 할당(DHCP)과 도메인 네임 시스템(DNS)은 현대 네트워크 인프라에서 상호 보완적 기능을 수행하는 핵심 구성 요소이다.
DHCP는 단말 장치에 IP 및 네트워크 설정을 자동으로 제공하며, DNS는 호스트명과 IP 주소 간의 해석을 담당한다. 이 두 시스템을 상호 연동함으로써 네트워크는 자동화 수준이 증가하며, 특히 대규모 환경에서의 관리 복잡도를 획기적으로 완화할 수 있다.
본 문서에서는 CentOS 7.9 환경을 기반으로, DHCP 서버와 BIND 서버를 연동하여 동적 DNS(Dynamic DNS) 기능을 구현하는 전 과정을 고찰한다.
시스템 구성 및 실험 환경
구성 요소 | 소프트웨어 버전 | IP 주소 |
---|---|---|
DHCP 서버 | ISC DHCP Server 4.x | 192.168.1.10 |
DNS 서버 | BIND 9.11 이상 | 192.168.1.10 |
실습에서는 두 서비스가 동일한 호스트 내에 설치되며, 실제 운영 환경에서는 분리된 서버 간의 연동을 통해 고가용성 아키텍처로 확장 가능하다.
필수 패키지 설치
sudo yum install -y dhcp bind bind-utils bind-chroot dnssec-tools net-tools
설치 후, BIND는 보안을 위해 chroot 환경(/var/named/chroot
)에서 운영되는 경우가 많으므로 구성 파일 및 zone 파일의 위치에 주의해야 하며, SELinux 정책에 따른 접근 제어도 고려해야 한다.
TSIG 기반 상호 인증 키 생성
TSIG(Transaction Signature)는 DNS 업데이트 시 무결성과 인증을 보장하는 메커니즘으로, DHCP가 DNS에 zone 정보를 동적으로 반영할 수 있도록 허용한다.
BIND와 DHCP 간의 보안 채널을 수립하기 위해 아래 명령으로 키를 생성한다.
mkdir -p /etc/dhcpdns-keys
cd /etc/dhcpdns-keys
# TSIG 키 생성
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST dhcpdns
# 공유 키 추출
cat Kdhcpdns.*.private | grep Key
참고:
rndc-confgen -a
는rndc
전용 키를 생성하며 DHCP–DNS 연동과는 무관하므로 혼용하지 않도록 주의해야 한다.
이때 출력된 secret 값을 DHCP 서버 설정 파일과 BIND 설정에 각각 동일하게 반영해야 한다.
DHCP 서버 설정 (/etc/dhcp/dhcpd.conf
)
ddns-update-style interim;
ignore client-updates;
key dhcpdns {
algorithm hmac-md5;
secret "<공유 키 입력>";
};
zone example.com. {
primary 127.0.0.1;
key dhcpdns;
}
zone 1.168.192.in-addr.arpa. {
primary 127.0.0.1;
key dhcpdns;
}
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option domain-name "example.com";
option domain-name-servers 192.168.1.10;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 600;
max-lease-time 7200;
update-static-leases on;
}
interim
방식은 BIND 9와의 연동을 위해 요구되며, 클라이언트의 역방향 레코드 생성을 위해 PTR zone에 대한 설정도 포함한다.
BIND 설정 (/etc/named.conf
)
key "dhcpdns" {
algorithm hmac-md5;
secret "<공유 키 입력>";
};
zone "example.com" IN {
type master;
file "/var/named/example.com.zone";
allow-update { key dhcpdns; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "/var/named/1.168.192.zone";
allow-update { key dhcpdns; };
};
allow-update
항목을 통해 특정 TSIG 키를 보유한 주체(DHCP 서버)에 한해 zone 업데이트를 허용한다.
정방향 DNS Zone 파일 (/var/named/example.com.zone
)
✅ 주요 레코드 설명
- SOA (Start of Authority): 해당 zone의 관리 책임자 정보를 나타내며, zone의 시작점을 정의한다. 여기엔 기본 관리자의 이메일, serial 번호(변경 추적용), 갱신 주기 등이 포함된다.
- NS (Name Server): 해당 zone에 대한 질의에 응답할 수 있는 권한 있는 네임서버를 지정한다.
- A (Address): 도메인 이름을 IPv4 주소로 매핑한다. 예:
ns1.example.com → 192.168.1.10
$TTL 86400
@ IN SOA ns1.example.com. root.example.com. (
2025061001 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
IN NS ns1.example.com.
ns1 IN A 192.168.1.10
정방향 zone 파일은 호스트명 기반 쿼리를 위해 반드시 필요하며, DHCP 서버에서 A 레코드를 등록할 수 있도록 최소한의 NS 및 SOA 정보가 포함되어야 한다. (/var/named/example.com.zone
역방향 DNS Zone 파일 (/var/named/1.168.192.zone
)
✅ 주요 레코드 설명
- SOA: 정방향과 동일하게, zone의 관리 책임자 정보를 정의한다.
- NS: 해당 IP 대역에 대한 권한 있는 DNS 서버를 지정한다.
- PTR (Pointer Record): IP 주소를 호스트명으로 역변환한다. 예:
192.168.1.101 → client1.example.com
$TTL 86400
@ IN SOA ns1.example.com. root.example.com. (
2025061001 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
IN NS ns1.example.com.
101 IN PTR client1.example.com.
역방향 zone 파일은 IP 주소로부터 호스트명을 조회할 수 있도록 설정되며, DHCP 서버에서 PTR 레코드를 동적으로 등록할 수 있는 구조를 제공한다.
zone 이름은 일반적으로 in-addr.arpa
형태로 구성되며, 해당 서브넷에 따라 알맞은 이름을 지정해야 한다.
실제 정방향/역방향 적용 예시
beta-001
이라는 서버가 네임서버 역할을 하며, 클라이언트 alpha-host
가 DHCP로 IP를 받아 자동으로 등록되는 상황을 예로 들어보자.
가정
- 도메인:
fullmoon-system.com
- 네임서버:
beta-001.fullmoon-system.com
(IP: 192.168.1.10) - 클라이언트:
alpha-host.fullmoon-system.com → DHCP로 ``192.168.1.150
할당 예정
정방향 zone (/var/named/fullmoon-system.com.zone
)
$TTL 86400
@ IN SOA beta-001.fullmoon-system.com. admin.fullmoon-system.com. (
2025061001 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
IN NS beta-001.fullmoon-system.com.
beta-001 IN A 192.168.1.10
alpha-host IN A 192.168.1.150 ; # DHCP에서 동적으로 생성됨
역방향 zone (/var/named/1.168.192.zone
)
$TTL 86400
@ IN SOA beta-001.fullmoon-system.com. admin.fullmoon-system.com. (
2025061001 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
IN NS beta-001.fullmoon-system.com.
150 IN PTR alpha-host.fullmoon-system.com. ; # DHCP에서 동적으로 생성됨
결과적으로 다음이 가능해짐
host alpha-host.fullmoon-system.com
→ 192.168.1.150 반환host 192.168.1.150
→ alpha-host.fullmoon-system.com 반환
이처럼 DHCP와 DNS를 연동하면 IP와 도메인 이름 간의 정합성을 자동으로 유지할 수 있다.
8. 서비스 실행 및 기능 검증
systemctl restart named && systemctl enable named
systemctl restart dhcpd && systemctl enable dhcpd
클라이언트가 DHCP를 통해 IP를 할당받은 후, 해당 hostname이 DNS에 자동 등록되었는지 다음 명령어로 확인 가능하다:
host client1.example.com
host 192.168.1.101
# 또는 SSH 사용
ssh [client-hostname]
문제 해결을 위한 진단 도구
/var/lib/dhcpd/dhcpd.leases
: DHCP 리스 이력 추적/var/log/messages
: 서비스 로그 분석nsupdate -k <TSIG 키>
: 수동 업데이트 테스트named-checkconf
,named-checkzone
: BIND 설정 검증
구조적 비교 및 보안 고려 사항
아키텍처 유형 | 장점 | 단점 |
---|---|---|
단일 서버 통합형 | 구성 단순, 응답 속도 빠름 | SPOF 위험 존재 |
이중 서버 분산형 | 장애 격리, 확장성 우수 | 네트워크 지연, 키 공유 필요 |
보안을 강화하기 위해 DNSSEC, 접근 제어 ACL, 그리고 로그 무결성 보장 정책 적용을 고려해야 한다.
결론 및 미래 확장성
DHCP와 DNS의 연동은 단순한 주소 할당을 넘어, 네트워크 인프라 자동화와 정합성 유지라는 차원에서 중요한 의미를 가진다.
본 구현은 다음과 같은 방향으로 확장될 수 있다:
- DHCP Failover를 통한 고가용성 보장
- BIND Views를 통한 내외부 요청 분리
- DDNS TTL 정책의 자동 갱신 로직 도입
- chroot 기반 BIND 운영 시 SELinux Boolean 구성
이러한 연동 시스템은 엔터프라이즈 환경의 네트워크 정책 수립과 통합 관리를 위한 핵심 기제로 기능할 수 있으며, 특히 대규모 클라우드 인프라 또는 멀티테넌시 환경에서의 응용 가능성이 높다.