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 -arndc 전용 키를 생성하며 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 구성

이러한 연동 시스템은 엔터프라이즈 환경의 네트워크 정책 수립과 통합 관리를 위한 핵심 기제로 기능할 수 있으며, 특히 대규모 클라우드 인프라 또는 멀티테넌시 환경에서의 응용 가능성이 높다.