DHCP 서버 구축은 dhcp-server 패키지 설치와 /etc/dhcp/dhcpd.conf 설정만으로 끝낼 수 있다. DHCP(Dynamic Host Configuration Protocol)는 네트워크 장치에 IP 주소·서브넷 마스크·게이트웨이·DNS 같은 구성 정보를 자동으로 할당하는 프로토콜이다. 이 글에서는 CentOS 8(RHEL 8 계열)에서 DHCP 서버를 구축하고, 두 대의 클라이언트가 서버로부터 IP를 동적으로 할당받는 과정을 패키지 설치 → dhcpd.conf 설정 → 서비스 시작 → 방화벽 → 클라이언트 확인 순서로 정리한다.
목차
DHCP란?
DHCP 서버는 네트워크에서 IP 주소를 동적으로 관리하여, 접속하는 장치에 필요한 IP 주소를 할당하고 서브넷 마스크·게이트웨이·DNS 같은 네트워크 구성 정보를 함께 제공한다. 덕분에 관리자가 장치마다 일일이 고정 IP를 지정하지 않아도 된다. 노트북·스마트폰처럼 수시로 접속하는 장치가 많은 환경일수록 DHCP의 효용이 크다.
동작은 클라이언트가 IP를 요청하고 서버가 응답하는 4단계(DORA — Discover · Offer · Request · Acknowledge)로 이뤄진다. 통신에는 서버 측 UDP 67번 포트와 클라이언트 측 UDP 68번 포트를 사용하므로, 뒤에서 방화벽을 열 때 이 점을 기억해 두면 좋다. 할당된 IP는 영구적인 것이 아니라 임대 시간(lease time) 동안만 유효하며, 만료 전 갱신되는 구조다.
실습 환경
이 실습은 VMware Workstation Pro에서 진행한다. VMware 자체에 내장된 DHCP 기능이 충돌할 수 있으므로, 먼저 VMware의 DHCP 기능(가상 네트워크 편집기 → 해당 네트워크 → “Use local DHCP service” 체크 해제)을 해제한 상태에서 시작한다.
| 역할 | OS | 설명 |
|---|---|---|
| 서버 | CentOS 8 | DHCP 서버(dhcpd)를 구동 |
| 클라이언트 1 | CentOS 8 | DHCP로 IP 할당받음 |
| 클라이언트 2 | RHEL 8 | DHCP로 IP 할당받음 |
예제 네트워크 대역은 192.168.111.0/24, 게이트웨이는 192.168.111.2로 가정한다. 본인 환경의 가상 네트워크 대역에 맞춰 값을 바꾸면 된다.
클라이언트 사전 준비
DHCP 서버를 구축하기 전에, 두 클라이언트가 DHCP로 IP를 받도록 설정한다. 아직 서버가 동작하지 않으므로 이 단계에서는 IP를 받지 못하는 것이 정상이다.
클라이언트 1 — 패키지 확인
클라이언트가 DHCP로 IP를 받으려면 dhcp-client 패키지가 필요하다. 설치 여부를 확인한다(설치돼 있으면 패키지명이 출력된다).
# 패키지 확인
rpm -qa dhcp-client
# 출력 예시
dhcp-client-4.3.6-47.el8.x86_64
컴퓨터를 재시작한 뒤 ifconfig ens160 명령으로 IP 주소를 확인해 본다. 아직 DHCP 서버가 없으므로 inet 줄(IPv4 주소)이 비어 있다.
# DHCP 서버 미동작 시 출력 예시 (IPv4 주소 없음)
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:ab:cd:ef txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
TX packets 0 bytes 0 (0.0 B)
클라이언트 2 — DHCP 활성화
클라이언트 2에 고정 IP가 설정되어 있다면 이를 해제하고 DHCP로 바꿔야 한다. 인터페이스 설정 파일을 열어 BOOTPROTO를 dhcp로 수정하고, 고정 IP 줄을 주석 처리한다.
vi /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO="dhcp" # none -> dhcp 로 수정
#IPADDR=192.168.111.200 # 고정 IP 주석 처리
NETMASK=255.255.255.0
GATEWAY=192.168.111.2
DNS1=192.168.111.2
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
NAME=ens160
DEVICE=ens160
ONBOOT=yes
네트워크 연결을 내렸다가 다시 올려 변경 사항을 반영한 뒤 IP 주소를 확인한다.
nmcli connection down ens160
nmcli connection up ens160
이 시점에도 DHCP 서버가 없으므로 ifconfig로 확인하면 IP 정보를 얻지 못한다. 재부팅(reboot) 후에도 마찬가지다. 이제 서버를 구축할 차례다.
DHCP 서버 구축 (패키지 설치·dhcpd.conf)
DHCP 서버 패키지 설치
서버에 DHCP 서버 패키지를 설치한다. CentOS 8/RHEL 8에서 서버 데몬(dhcpd) 패키지명은 dhcp-server다(이전 버전의 단일 dhcp 패키지가 server/client로 분리됐다).
dnf -y install dhcp-server
# (구버전 호환) 위 명령이 안 되면
yum -y install dhcp-server
설치가 끝나면 서버 데몬은 /usr/sbin/dhcpd, 설정 파일은 /etc/dhcp/dhcpd.conf에 자리한다.
dhcpd.conf 설정
vi로 /etc/dhcp/dhcpd.conf 파일을 열고 할당할 서브넷과 IP 범위를 지정한다. 아래 설정은 192.168.111.55~99 범위의 IP를 동적으로 할당하도록 구성한 것이다.
vi /etc/dhcp/dhcpd.conf
ddns-update-style interim;
subnet 192.168.111.0 netmask 255.255.255.0 {
option routers 192.168.111.2; # 게이트웨이
option subnet-mask 255.255.255.0; # 서브넷 마스크
option domain-name-servers 8.8.8.8; # DNS 서버
range dynamic-bootp 192.168.111.55 192.168.111.99; # IP 할당 범위
default-lease-time 10000; # 기본 임대 시간(초)
max-lease-time 50000; # 최대 임대 시간(초)
}
각 지시어의 의미는 다음과 같다.
| 지시어 | 의미 |
|---|---|
| subnet … netmask … | 관리할 네트워크 대역과 서브넷 마스크 선언 |
| option routers | 클라이언트에 알려줄 기본 게이트웨이 |
| option subnet-mask | 클라이언트에 적용할 서브넷 마스크 |
| option domain-name-servers | 클라이언트가 사용할 DNS 서버 주소 |
| range | 동적으로 할당할 IP 주소 범위(시작~끝) |
| default-lease-time / max-lease-time | IP 임대 시간(초). 만료 전 갱신됨 |
저장한 뒤 문법 오류가 없는지 먼저 점검한다. dhcpd -t는 설정 파일을 검사만 하고 서비스를 띄우지 않으므로, 실서비스 중단 없이 오타를 잡아낼 수 있다.
dhcpd -t -cf /etc/dhcp/dhcpd.conf
DHCP 서비스 시작과 방화벽
dhcpd 서비스 시작
dhcpd 서비스를 시작하고, 부팅 시 자동 가동되도록 등록한 뒤 상태를 확인한다. --now 옵션을 쓰면 활성화와 즉시 시작을 한 번에 처리할 수 있다.
systemctl enable --now dhcpd
systemctl status dhcpd
# 위 한 줄 대신 아래처럼 나눠 써도 동일하다
# systemctl restart dhcpd
# systemctl enable dhcpd
상태가 active (running)이면 정상이다. 아래는 정상 기동 시 출력 예시다.
● dhcpd.service - DHCPv4 Server Daemon
Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; vendor preset: disabled)
Active: active (running) since ...
Main PID: 1234 (dhcpd)
...
dhcpd[1234]: Sending on Socket/fallback/fallback-net
dhcpd[1234]: Server starting service.
만약 active (running)이 아니라면 대부분 dhcpd.conf 오타이거나, 서버 인터페이스가 선언한 subnet 대역과 다른 경우다. journalctl -u dhcpd로 로그를 확인하면 원인을 빠르게 찾을 수 있다.
방화벽 개방
firewalld가 켜져 있다면 DHCP 서비스를 허용해야 클라이언트 요청이 서버에 닿는다. DHCP 서비스는 UDP 67/68번 포트를 사용하는데, --add-service=dhcp를 쓰면 해당 포트가 자동으로 열린다.
firewall-cmd --add-service=dhcp --permanent
firewall-cmd --reload
# 적용 확인
firewall-cmd --list-services
클라이언트 IP 할당 확인
클라이언트 1
네트워크 관리자(NetworkManager)를 재시작해 DHCP 서버로부터 IP 주소를 할당받는다.
su -c 'systemctl restart NetworkManager'
ifconfig ens160
ifconfig 출력의 inet 주소가 앞서 설정한 55~99 범위 안이면 정상이다.
# DHCP 할당 성공 시 출력 예시 (55~99 범위 내 주소)
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.111.55 netmask 255.255.255.0 broadcast 192.168.111.255
ether 00:0c:29:ab:cd:ef txqueuelen 1000 (Ethernet)
클라이언트 2
재부팅(reboot) 후 네트워크 관리자를 다시 시작해 DHCP 서버로부터 IP를 할당받는다. ifconfig로 확인한 IP가 역시 55~99 범위에 들어 있으면 정상이다.
ifconfig ens160
![[리눅스] DHCP 서버 구축 DHCP 서버로부터 IP를 할당받은 클라이언트 2 ifconfig 결과](https://nuschool.cc/wp-content/uploads/2024/03/image-20.png)
두 클라이언트 모두 범위 내 IP를 받았고 인터넷 연결까지 정상이면 DHCP 서버 구축이 성공한 것이다. 서버 쪽에서 누구에게 어떤 IP를 임대했는지는 임대 정보 파일로 확인할 수 있다.
# 서버에서 임대 내역 확인
cat /var/lib/dhcpd/dhcpd.leases
트러블슈팅과 자주 묻는 질문
자주 막히는 지점
- dhcpd 서비스가 안 뜬다 —
dhcpd -t로 문법 오류부터 확인한다. 세미콜론(;) 누락이 가장 흔한 원인이다. - “No subnet declaration for …” 오류 — 서버 인터페이스의 IP 대역과 dhcpd.conf의
subnet선언 대역이 일치하지 않을 때 발생한다. 서버에 해당 대역의 고정 IP를 부여한다. - 클라이언트가 IP를 못 받는다 — ① VMware 내장 DHCP가 켜져 있는지 ② 방화벽에서 dhcp 서비스가 허용됐는지 ③ 서버·클라이언트가 같은 가상 네트워크에 있는지 순서로 점검한다.
- 인터넷은 안 되고 IP만 받는다 —
option routers(게이트웨이)와option domain-name-servers(DNS) 값이 올바른지 확인한다.
고정 IP를 특정 장치에 주려면?
특정 장치에 항상 같은 IP를 주려면 MAC 주소 기반 고정 할당(host 선언)을 추가한다. range와 별개로 동작한다.
host printer {
hardware ethernet 00:0c:29:11:22:33; # 대상 장치의 MAC 주소
fixed-address 192.168.111.50; # 항상 줄 IP
}
정리
지금까지 CentOS 8(RHEL 8 계열)에서 DHCP 서버를 구축하고 두 대의 클라이언트가 IP를 동적으로 할당받는 과정을 살펴봤다. 핵심 순서는 dhcp-server 설치 → /etc/dhcp/dhcpd.conf에 subnet·range 설정 → dhcpd -t 검사 → systemctl enable –now dhcpd → 방화벽(dhcp 서비스) 개방 → 클라이언트 확인이다. 클라이언트는 BOOTPROTO=dhcp로 두면 자동으로 IP를 받는다. 같은 리눅스 네트워크 서버 시리즈로 디렉터리 공유가 필요하다면 NFS 서버 구축 글도 함께 참고하면 좋다.
참고로 CentOS 8은 2021년 12월로 공식 지원이 종료됐다. 새로 구축한다면 CentOS Stream 9, Rocky Linux, AlmaLinux 같은 RHEL 호환 배포판을 쓰는 것이 좋으며, 위 dhcpd 설정 방식은 이들 배포판에서도 거의 그대로 적용된다.
Reference
https://peemangit.tistory.com/138



💬 댓글 0