Profile picture

DHCP 서버 구축하기

JaehyoJJAng2023년 06월 07일

DHCP

  • Dynamic Host Configuration Protocol
  • 네트워크 안의 컴퓨터 IP와 네임서버주소, 게이트웨이 주소를 동적으로 할당하기 위한 프로토콜이다

사용 목적

  • 기존에는 네트워크 설정 시 관리자가 직접 시스템적으로 클라이언트의 네트워크 설정을 해줘야 했다.
  • 하지만 네트워크가 점점 커져감에 따라 클라이언트마다 네트워크 설정을 해주기가 부담스러워졌다.
  • 그래서 DHCP가 개발되었고 이는 빠르게 클라이언트의 네트워크 설정이 가능하게 되어 최종적으로 자원의 효율적 사용이 가능하게 되었다.

구성 요소

image
<출처: 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

image
<출처: 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 과정을 거침

동작 방식

  • 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 할당.

image
<출처: 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가 뜰 것이다.
image


🔴 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

Loading script...