System/Linux

[Linux] DHCP

Yoonsoo Park 2024. 9. 21. 13:14

1. 자동으로 네트워크 설정을 관리해주는 프로토콜, DHCP

 DHCP(Dynamic Host Configuration Protocol)자신의 네트워크 안에 있는 컴퓨터가 부팅될 때, 자동으로 IP주소, 서브넷 마스크, DNS 주소, 게이트웨이 주소를 할당해주는 프로토콜이다. 이 DHCP 덕분에 우리는 IP, 서브넷 마스크, 게이트웨이 등에 대해 세세하게 알지 못하지만, 큰 어려움 없이 인터넷을 이용하고 있다고 봐도 무방하다. 또한 DHCP는 정적(Static)으로 IP를 부여했을 때와 다르게, 컴퓨터를 사용하지 않을 경우, 해당 컴퓨터에 부여되었던 IP를 다른 곳에 사용할 수 있어, 적은 개수의 IP 주소로도 여러 명이 사용 가능하다는 장점이 있다(주로 공인 IP에서 유용).

<윈도우에서 DHCP 방식으로 IP 할당 받기>

 

 DHCP는 UDP를 전송 방식으로 사용하며, 포트 주소로는 DHCP 서버의 경우 UDP 67번, DHCP 클라이언트의 경우 UDP 68번을 사용한다. 일반적으로 서버-클라이언트 구조에서 클라이언트에서 나가는 패킷은 Dynamic 포트를 사용하는데 DHCP의 클라이언트에서 나가는 패킷의 경우 특이하게도 Well-Known 포트를 사용한다.  

 

 DHCP는 DORA(Discover, Offer, Request, Ack)라는 과정을 통해 통신을 수행한다. DORA의 각 과정은 다음과 같다. 

 

  • Discover(broadcast)
    • DHCP Client가 DHCP Server를 찾기 위해서 브로드캐스트로 전송
    • ex) DHCP 서버 계시나요? 계시면 IP주소 좀 주실래요?
  • Offer(broadcast)
    • DHCP Server가 DHCP Client에게 네트워크 설정값(IP주소…)을 제안하기 위해서 전송
    • DHCP 서버가 여러 대 존재할 수 있기 때문에 할당이 아닌 제안을 한다
    • ex) 저 여기 있어요. 이거 한 번 써보실래요?
  • Request(broadcast)
    • DHCP Client가 DHCP서버에게 제안받은 네트워크 설정값을 사용하고 싶다는 요청을 전송
    • request를 받은 DHCP 서버에만 할당한 네트워크 설정값 기록됨
    • ex) 네, 그거 쓰고 싶어요. 써도 되죠?
  • Ack(unicast)
    • DHCP서버가 DHCP Client에게 사용을 허가함을 알리기 위해서 전송
    • ex) 네, 쓰십시요

 

<DORA 과정 개요도>

 

 단순하게 요청(request)과 응답(reply)만 하는 절차를 수행하지 않고 복잡한 DORA 과정을 수행하는 이유는 무엇일까? DHCP 서버가 여러 대 있을 수 있기 때문이다. 더 자세히 설명하자면, Discover 패킷을 보내는 클라이언트에는 IP가 할당돼있지 않기 때문에 브로드캐스트 방식(255.255.255.255)으로 패킷을 보내게 된다. Discover 패킷 같은 네트워크의 모든 DHCP 서버가 수신하고, Offer 패킷을 보내게 되는데, 클라이언트는 수신한 여러 Offer 패킷 중 사용하고자 하는 네트워크 설정값을 보낸 서버의 정보를 패킷에 명시하여 브로드캐스트 방식으로 DHCP 서버들에 전송한다(패킷 내의 서버 식별자를 보고 선택된 서버는 Ack 패킷을, 선택되지 않은 서버는 무시한다). 하지만 아직 네트워크 설정값을 할당 받은 것이 아니다. 마지막으로 DHCP 서버에서 Ack 패킷을 보내오면 최종적으로 네트워크 정보를 할당(임대) 받게 되는 것이다. 추가적으로, 여러 대의 DHCP 서버가 존재하는 이유는 DHCP 서버가 1대일 경우 그 1대에 문제가 발생했을 때, 해당 네트워크의 모든 PC들이 IP를 할당받지 못하기 때문이다. 

 

DHCP 설정 관련 명령어는 다음과 같다.

  • DHCP 클라이언트 명령어
    • ipconfig /release  
      • DHCP 서버로부터 할당받은 [네트워크 설정값] 반납
      • DHCP 서버로 부터 할당(임대,Lease)받은 네트워크 설정값을 버리겠다고 통지, DHCP Release 패킷을 전송
    • ipconfig /renew 
      • DHCP 서버로부터 [네트워크 설정값] 재설정 요청 
      • DHCP 서버에게 다시 네트워크 설정값을 요청한다DORA 과정이 진행
  • DHCP 서비스 데몬 설정 명령어
    • systemctl start dhcpd: 데몬 시작
    • systemctl restart dhcpd: 데몬 재시작
    • systemctl stop dhcpd: 데몬 종료
    • systemctl enable dhcpd: 데몬 자동 실행 설정(재부팅 후에도 데몬이 자동 실행된다) 
    • systemctl status dhcpd: 데몬 상태 확인
  • netstat -anpu 또는 netstat -anpu | grep 'dhcpd'
    • UDP 기반의 모든 연결 정보를 표시(|grep을 사용하면 dhcpd로 시작하는 것만 표시)
    • 서비스 포트 상태를 확인할 때 사용

 

2. DHCP 서버와 다른 네트워크에 있다면? Relay Agent

 네트워크를 구축하다보면 보안, 브로드캐스트 도메인 축소 등의 이유로 부서 별로 VLAN 설정 및 서브넷을 나누는 경우가 생긴다. 서로 다른 VLAN, 서브넷 간에 통신을 위해서는 Multi Layer 스위치, 라우터를 통한 라우팅 과정이 필요하다. 문제는 DHCP 통신이 기본적으로 같은 네트워크 내에 DHCP 서버와 클라이언트가 같이 위치해 있는 경우만 가능하다는 것이다. DHCP 클라이언트는 브로드캐스트 방식으로 Discover 패킷을 보내는데, 라우터나 Multi Layer 스위치의 경우 네트워크의 부하를 줄이기 위해 브로드캐스트 트래픽을 차단하기 때문이다. 그럼 한 부서(VLAN, 서브넷)마다 DHCP 서버를 구축하는 방법이 있긴 하지만, 현실적으로 쉽지 않다.. 따라서 이런 문제를 해결할 수 있는 방법이 Relay Agent를 설정하는 것이다. 

 

 Relay AgentDHCP 통신에서 클라이언트가 서버로 브로드캐스트 방식으로 전송하는 패킷을 유니캐스트로 변환하여 전송하는 역할을 한다. 자세히 설명하자면, ip helper-address 명령어를 통해 Relay Agent를 설정할 때, DHCP 서버의 IP 주소를 지정해주게 되는데, 이를 이용해 클라이언트로부터 받은 브로드캐스트 패킷의 목적지 IP 주소를 해당 DHCP 서버의 IP 주소로 변환하여 유니캐스트 패킷으로 만들어 DHCP 서버로 전달하는 것이다. 아래 토폴로지를 통해 더 쉽게 이해해보자. 

 

*일반적으로 Relay Agent를 설정하는 위치는 Discover 패킷이 수신되는 라우터의 인터페이스에 한다

 

Relay Agent를 이용한 통신 과정

  • Relay Agent를 설정 전 : Discover 패킷은 브로드캐스트이므로 라우터에서 폐기처리된다

  • Relay Agent 설정 후 : DHCP 패킷을 폐기하지 않고 DHCP서버의 주소로 변경하여 Unicast로 전송된다

 

 Relay Agent를 설정하는 명령어는 다음과 같다. 

(config)# interface [DHCP패킷을 수신하는 인터페이스]
(config-if)# ip helper-address [DHCP서버주소]

ex) 
(config)# interface fa0/0 
(config-if)# ip helper-address 152.75.84.126

 

 

실습 1. DHCP 서버 설정 및 같은 네트워크 PC에 IP 할당하기

장비구성 

  • DHCP Server : Rocky 9.4 Server 
  • DHCP Client : PC2-1/PC2-2 (Windows 10) 
  • DHCP Admin : PC(Windows 10) 
  • Switch : Cisco L3 Switch 3750

목표

  • DVD ISO 내 Repository의 rpm 파일을 설치하여  DHCP 서버 설정해보기 
  • 인터넷에서 직접 dnf를 이용해 DHCP 서버 패키지를 설치하여 DHCP 서버 설정해보기 

 

실습 토폴로지

1. DVD ISO 내 Repository의 rpm 파일을 설치

1) 네트워크 설정

nmtui를 이용하여 Linux 서버의 IP를 설정해준다.

(상세한 설정 방법은 리눅스 네트워크 환경 설정 참고)

<nmtui 이용한 네트워크 설정>

 

2)서버에 설치 미디어(DVD ISO) 연결 

<DVD ISO 연결 - VMbox>

 

3) 연결된 DVD ISO 파일을 /media/에 마운트(mount)

*df: 파일 시스템의 디스크 사용량을 확인하는 명령어 

(df -h: KB, MB, GB 등 단위를 사용하여 사람이 읽을 수 있는 형식으로 출력)

mount /dev/cdrom /media/

 

<mount하지 않았을 때>

 

<mount 후 DVD ISO 파일이 인식된 것이 보인다>

*왜 dev/sr0은 무슨 의미지?

리눅스 시스템에서는 CD/DVD 드라이브가 SCSI 장치처럼 인식된다. 실제 대부분의 CD/DVD 드라이브가 SATA 인터페이스를 사용하더라도 Linux 커널에서는 SCSI 장치로 취급한다. sr은 SCSI CD-ROM(SCSI 규격을 사용하는 CD-ROM 드라이브)을 의미한다. Linux에서는 /dev/sr0을 통해 해당 디스크에 액세스할 수 있고, 해당 디스크의 데이터를 실제로 사용하기 위해서는 디렉토리에 마운트(mount)해야한다.

 

4) 설치할 RPM 패키지의 위치를 확인 (find)

<현재 디렉토리 하위에 존재하는 파일/디렉토리 중 dhcp-server로 시작하는 모든 것을 찾아라>

 

5) RPM 패키지 설치 (의존성 해결하기) 

  • rpm -i: install, RPM 패키지 설치 명령어
  • -v: verbose, 설치 과정의 자세한 정보를 출력
  • -h: hash, 설치 중 진행 상황을 해시 마크(####) 형태로 표시 
cd ./BaseOS/Packages/d

rpm -ivh dhcp-common...(버전은 조금씩 다를 수 있음)

rpm -ivh dhcp-server...

<의존성 확인>
<선행 파일을 받은 후 패키지를 설치하면 정상적으로 다운이 된다>

 

6) DHCP 서비스 데몬 설정 

*데몬(daemon): Linux나 Unix에서 백그라운드에서 지속적으로 서비스를 공급하는 프로세스

 

  • DHCP 데몬 설정 파일 확보 및 샘플(형식) 복사
cp /usr/share/doc/dhcp-server/dhcpd.conf.example  /etc/dhcp/dhcpd.conf

<데몬 설정 파일에 내용이 없다>
<DHCP 데몬 설정 양식을 복사한다>

  • vi 명령어 사용해서 DHCP 데몬 설정 파일에 할당할 정보를 설정한다
vi /etc/dhcp/dhcpd.conf

<설정 파일 내 할당 정보 수정>

 

7) DHCP 서비스 데몬 설정 확인

systemctl start dhcpd => 시작
systemctl status dhcpd => 상태 확인 
systemctl restart dhcpd => 재시작

<systemctl status dhcpd>

 

 

2. 인터넷에서 직접 dnf를 이용해 DHCP 서버 패키지를 설치

1) 네트워크 연결

인터넷과 연결이 가능해야 함, 설정 방법은 리눅스 네트워크 환경 설정 참고

 

2) dnf 이용해서 dhcp-server 패키지 설치

dnf install dhcp-server

<dnf를 통해 패키지를 설치하는 장면

 

3) 이후 설정하는 과정은 RPM 패키지를 이용할 때와 동일하다

 

 

실습 2. Relay Agent 이용해서 다른 네트워크 PC에 IP 할당하기 

*앞선 실습과 중복되는 DHCP 서버의 설정 방법은 생략했습니다

<실습 토폴로지>

 

장비구성 

  • DHCP Server : Rocky 9.4 Server 
  • DHCP Client : PC2-1/PC2-2 (Windows 10) 
  • DHCP Admin : PC(Windows 10) 
  • Router : Cisco Router 2960
  • Switch : Piolink Tifront

1) 네트워크 장비 설정 

  • R1 설정
//Discover 패킷이 수신되는 라우터의 인터페이스에 Relay Agent 설정
R1(config) # interface fa 0/0 
R1(config-if) # no sh
R1(config-if) # ip address 152.75.84.1 255.255.255.128
R1(config-if) # ip helper-address 152.75.84.126 

R1(config) # interface fa 0/1 
R1(config-if) # no sh
R1(config-if) # ip address 1.221.12.1 255.255.255.252

//라우팅(단순한 토폴로지라 정적 라우팅을 했지만, 라우팅 프로토콜을 사용해도 됨)
R1(config) # ip route 152.75.84.128 255.255.255.128 1.221.12.2
  • R2 설정
//Discover 패킷이 수신되는 라우터의 인터페이스에 Relay Agent 설정
R2(config) # interface fa 0/0 
R2(config-if) # no sh
R2(config-if) # ip address 152.75.84.129 255.255.255.128
R2(config-if) # ip helper-address 152.75.84.126 

R2(config) # interface fa 0/1 
R2(config-if) # no sh
R2(config-if) # ip address 1.221.12.2 255.255.255.252

//라우팅(단순한 토폴로지라 정적 라우팅을 했지만, 라우팅 프로토콜을 사용해도 됨)
R2(config) # ip route 152.75.84.0 255.255.255.128 1.221.12.1

 

2) DHCP 서비스 데몬 설정 

vi 명령어 이용해서 DHCP 데몬 설정 파일에 주소 할당 내용을 추가해주면 된다.

( vi /etc/dhcp/dhcpd.conf)

<할당 정보 설정값>

* 할당 정보를 추가해준 후 반드시 systemctl restart dhcpd를 통해서 적용시켜줘야 한다

 

 

 

힘들지만 오늘도 해낸 나를 위한 한 마디,

"The only limit to our realization of tomorrow will be our doubts of today", Franklin D. Roosevelt

 

"스스로를 끊임없이 신뢰하자"