DHCP
- Dynamic Host Configuration Protocol
- 네트워크 안의 컴퓨터 IP와 네임서버주소, 게이트웨이 주소를 동적으로 할당하기 위한 프로토콜이다
사용 목적
- 기존에는 네트워크 설정 시 관리자가 직접 시스템적으로 클라이언트의 네트워크 설정을 해줘야 했다.
- 하지만 네트워크가 점점 커져감에 따라 클라이언트마다 네트워크 설정을 해주기가 부담스러워졌다.
- 그래서 DHCP가 개발되었고 이는 빠르게 클라이언트의 네트워크 설정이 가능하게 되어 최종적으로 자원의 효율적 사용이 가능하게 되었다.
구성 요소
<출처: https://lhh3520.tistory.com/285>
- 1. DHCP Client
- 새로운 IP를 할당받기 위해 DHCP 서버에 요청
- 2. DHCP Server
- Client로부터 IP 할당 요청이 들어오면 설정된 IP 대역 중 사용하지 않는 대역을 Client에게 부여.
- 3. DHCP Protocol
- IP와 TCP/IP 프로토콜 기본 설정을 개별 클라이언트에게 자동으로 할당하는 역할
DHCP State Diagram
<출처: http://www.ktword.co.kr/word/abbr_view.php?m_temp1=2590>
INIT
: Client는 DHCP 서버를 찾기 위해 Broadcast 메시지를 보냄.Selecting
: DHCP 서버는 Client에게 응답하고, Client는 응답한 DHCP 서버를 선택Requesting
: Client는 서버에게 요청을 보냄.Bound
: 서버는 요청에 대한 응답(ACK
)을 보냄.Renewing
: Client가 서버로부터 받은 IP의 임대시간이 어느정도 지나, 재연장(갱신)을 받고자할 때 발생.- 이 경우 Selecting의 과정을 거치지 않고 바로
Bound
과정을 거침
- 이 경우 Selecting의 과정을 거치지 않고 바로
동작 방식
- 1. DHCP Discover
- Client가 Broadcast 메시지를 보내 DHCP 서버를 검색.
- 2. DHCP Offer
- DHCP 서버가 자신의 IP와 할당 가능 IP를 Client에게 제공.
- 3. DHCP Request
- DHCP 서버를 찾은 Client가 Server에게 IP 할당을 요청
- 4. DHCP ACK
- Server는 Client에게 IP 할당.
<출처: https://jwprogramming.tistory.com/35>
장단점
- 편리하게 IP 관리 가능
- 중복된 IP 할당을 피할 수 있음
- DHCP 서버를 찾기 위한 Broadcast 패킷으로 인해 네트워크 상에 부하가 있을 수 있음.
DHCP 구축
- Ubuntu 환경에서 진행함.
필수 패키지 설치
아래 커맨드를 사용하여 DHCP Package 설치
sudo apt-get install -y isc-dhcp-server
isc-dhcp-server
서비스 활성화
sudo systemctl enable --now isc-dhcp-server
DHCP 상태 확인
systemctl status dhcpd
DHCP 서비스 상태를 확인하면 아마도 Failed
가 뜰 것이다.
🔴 No subnet declaration
![image](https://github.com/user-attachments/assets/3eb2c364-d4be-46d4-b277-82d1adb89ec0) 이러한 에러가 발생하는 이유는 다음과 같다.
서브넷 선언이 하나뿐이고, 해당 서브넷 범위에 네트워크 인터페이스가 없는 경우 dhcp
데몬이 시작되지 않으며,
다음과 같은 로그가 /var/log/syslog
에 기록된다.
dhcpd: No subnet declaration for enp1s0 (0.0.0.0).
dhcpd: ** Ignoring requests on enp1s0. If this is not what
dhcpd: you want, please write a subnet declaration
dhcpd: in your dhcpd.conf file for the network segment
dhcpd: to which interface enp2s0 is attached. **
dhcpd:
dhcpd:
dhcpd: Not configured to listen on any interfaces!
이 오류는 DHCP 설정 파일을 참고하면 쉽게 해결이 가능하다.
네트워크 인터페이스 확인 및 설정
DHCP 서버가 동작할 네트워크 인터페이스를 확인하자.
예를 들어, ens3
이라는 인터페이스를 사용하는 경우 다음 파일을 편집하면 된다.
/etc/default/isc-dhcp-server
INTERFACESv4="ens3"
INTERFACESv4
항목에 인터페이스 이름을 설정한다.
방화벽 허용
dhcp server는 UDP 67번 포트를 사용하며 Client는 UDP 68번 포트를 사용한다.
$ firewall-cmd --permanent --zone=public --add-port=67/udp
$ firewall-cmd --reload
DHCP 설정 파일
DHCP 설정 파일인 /etc/dhcp/dhcpd.conf
을 편집하여 IP 주소 범위 및 옵션을 정의하자.
# Global configuration ####################################
option domain-name "dhcp-test.com";
option domain-name-servers ns.dhcp-test.com;
default-lease-time 3600; //기본 임대 시간
max-lease-time 7200; //최대 임대 시간
authoritative;
# subnet configuration ####################################
subnet 10.11.0.0 netmask 255.255.255.0 {
range dynamic-bootp 10.11.0.100 10.11.0.110;
option routers 10.11.0.1;
option subnet-mask 255.255.255.0;
option domain-name "dhcp-test.com";
option domain-name-servers 8.8.8.8, 8.8.4.4;
default-lease-time 43200;
}
위와 같이 Global Configuration
에 공통 설정을 입력 할 수도 있고,
subnet Configuration
에 별도로도 설정이 가능하다.
dhcpd.conf
설명
option domain-name
: Domain Name 지정option domain-name-servers
: DNS 서버 지정default-lease-time
: 임대 요청 만료 시간을 초단위로 설정max-lease-time
: 클라이언트가 할당된 IP를 가지고 있을 최대 시간을 초단위로 설정option routers
: DHCP Server 주소 / Gateway 주소 지정range
: 클라이언트에 할당할 IP 범위 지정
임대 IP 고정 할당
DHCP 서버에서 MAC Address 기반으로 특정 IP를 지정하여 할당하도록 설정할 수 있다.
/etc/dhcp/dhcpd.conf
하단에 아래와 같은 설정 추가
host dhcp-test.com {
hardware ethernet 00:20:32:80:c9:40;
fixed-address 10.11.0.200;
}
위와 같이 설정 시,
00:20:32:80:c9:40 MAC Address는 10.11.0.200으로 IP를 할당받음.
DHCP Log
아래 커맨드로 DHCP 서비스가 작동하는 과정 및 IP 할당 로그를 확인할 수 있음.
$ tail -f /var/log/messages | grep -i 'dhcp'
DHCP Relay Agent
VLAN 10
에 DHCP 서버가 존재한다고 가정해보자.
VLAN 30
에 있는 호스트들이 DHCP 기능을 활성화하면 DHCP Discover
패킷이 브로드캐스트로 전송될 것이다.
하지만, 다른 네트워크 대역에 있으므로 L3 장비에서 해당 브로드캐스트 패킷은 차단된다.
그렇다면 VLAN 30
에 있는 호스트들은 VLAN 10
에 있는 DHCP 서버를 통해 IP를 할당 받을 수 없는 걸까?
DHCP에는 Relay Agent (IP Helper-address) 라는 기술이 존재한다.
다른 VLAN(서로 다른 네트워크) 대역에 있는 클라이언트가 DHCP 요청을 할 수 있도록 L3 스위치(또는 라우터)에서 DHCP Relay Agent 기능을 활성화할 수 있다.
- DHCP Relay의 역할:
- 클라이언트의 DHCP Discover 브로드캐스트 요청을 DHCP 서버로 전송할 때, L3 장비가 중계 역할을 함.
설정 방법
L3 스위치 또는 라우터 인터페이스에 IP Helper-Address를 설정해주면 된다.
interface VLAN10
ip address 192.168.10.1 255.255.255.0
ip helper-address 192.168.20.2 # DHCP 서버 IP
interface VLAN10
: 클라이언트가 있는 VLAN 인터페이스.192.168.20.2
: DHCP 서버의 IP 주소.
🟠 트러블 슈팅
로그 확인: 오류나 문제 발생 시 로그 확인
sudo tail -f /var/log/syslog
sudo journalctl -xeu isc-dhcp-server