[Centos 7] DHCP (Dynamic Host Configuration Protocol)

2022. 11. 25. 00:38리눅스(Linux)

DHCP (Dynamic Host Configuration Protocol)란? 

   - 클라이언트 컴퓨터나 다른 TCP/IP 기반 네트워크 장치에 IP 주소를 제공하는 서비스

   - IP와 함께 라우터(G/W), DNS 서버 같은 네트워크 리소스와 연결할 수 있도록 옵션 제공

   - DHCP 클라이언트에 특정 기간 IP를 임대하며 갱신을 요청하는 경우 IP 주소를 갱신

   - 특정 컴퓨터나 장치에 IP주소 예약이 가능하다.

   - Port 번호는 Server(UDP : 67), Client(UDP : 68) 사용한다.

 

$ DHCP 주소 임대 과정

   - DHCP Discover Client to server 주소를 요청

   - DHCP Offer Server to client 사용할 주소를 제공

   - DHCP Request Client to server 제공받는 주소 사용을 승인

   - DHCP ACK Server to client 주소 사용 승인

 

$ DHCP Spoofing

   - 내부 네트워크에 게이트웨이 주소, DNS서버 주소를 속여 정보를 가로챔

   - 디폴트게이트웨이가 해커가 지정한 게이트웨이로 잡히면 모든 송수신이 해커에게로 거쳐가게 됨

   - DNS서버가 잡히면 네이버랑 똑같은 피싱사이트를 만들어 로그인을 하는 순간 개인정보가 유출

   - 내부 네트워크에 허가되지 않은 dhcp가 있는지 확인하는게 중요

 

$ DHCP Package

   - dhcp-common-4.2.5-47.e17.centos.x86_64

   - dhcp-devel-4.2.5-47.e17.centosx86_64

   - dhcp-4.2.5-47.e17.centos.x86_64

   - dhcp-libs-4.2.5-47.e17.centos.x86_64

 

$ DHCP 관련 파일

   - /etc/dhcp/dhcpd.conf (DHCP 서비스 메인 설정 파일)

   - /var/lib/dhcpd/dhcpd.leases (DHCP 데이터 베이스 파일 임대 정보 등을 확인 할 수 있다.)

 

$ DHCP Client 명령어 (Windows)

C:\Users> ipconfig /all 
   - NIC 상세정보 확인
   - 169.254.0.0/16(ARIPA) 네트워크가 할당 될 경우 정상적인 DHCP서비스를 제공받지 못한 상태
   
C:\Users> ipconfig /renew 
   - DHCP를 이용한 IP주소 할당 및 재할당
   
C:\Users> ipconfig /release 
   - DHCP 임대해제

 

$ TEST 항목 (Wireshark 프로그램을 Win10 Client에서 설치)

   - Client IP주소 일반 임대 및 네트워크 통신확인 및 DHCP 주소임대과정 패킷 확인

   - Client의 MAC Address를 이용하여 DHCP 예약작업 진행 후 예약된 IP주소를 임대받는지 확인

   - DHCP Failover 구성 (Linux1 - Linux2)

 

$ dhcp 설정

# yum -y install dhcp-*

* VMware NAT의 dhcp 설정을 해제

# ps -ef | grep dnsmasq
# kill -9 dnsmasq의 pid
   - dhcp 서버 재부팅 시 dnsmasq가 충돌이 일어날 수 있으므로 종료한다.

# vi /etc/dhcp/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0
{
	 option routers 192.162.1.2 ; → 게이트웨이 주소
	 option subnet-mask 255.255.255.0 ;
	 range dynamic-bootp 192.168.1.30 192.168.1.50 ; → 할당할 대역대
	 option domain-name-servers 168.126.63.1 ; → dns 서버 주소
	 default-lease-time 10000 ; → 임대를 요청한 클라이언트가 특정한 만료 시간을 
                                  요청하지 않았을 경우에 기본으로 할당되는 시간을 10000초로 지정
	 max-lease-time 20000 ; → 임대를 요청한 클라이언트가 IP주소를 가지고 있을 수 있는 
                                  최대시간을 20000초로 지정
}

# firewall-cmd --permanent --add-service=dhcp
# firewall-cmd --reload
# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: bond0 ens32 ens34
  sources:
  services: dhcp dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

# systemctl start dhcpd
# systemctl enable dhcpd
 netstat -anp | grep dhcpd
udp        0      0 0.0.0.0:67              0.0.0.0:*                           5529/dhcpd

# systemctl retstart dhcpd
# systemctl retstart network
# cat /var/lib/dhcpd/dhcpd.leases 
   - IP 임대 정보 확인

[ Client TEST ] : IP주소 자동할당으로 변경

CMD > C:\Users\ITBANK>ipconfig /all

Windows IP 구성
   호스트 이름 . . . . . . . . : Client
   주 DNS 접미사 . . . . . . . :
   노드 유형 . . . . . . . . . : 혼성
   IP 라우팅 사용. . . . . . . : 아니요
   WINS 프록시 사용. . . . . . : 아니요

이더넷 어댑터 Ethernet0:
   연결별 DNS 접미사. . . . :
   설명. . . . . . . . . . . . : Intel(R) 82574L Gigabit Network Connection
   물리적 주소 . . . . . . . . : 00-0C-29-B7-BE-FC
   DHCP 사용 . . . . . . . . . : 예
   자동 구성 사용. . . . . . . : 예
   IPv4 주소 . . . . . . . . . : 192.168.1.60(기본 설정)
   서브넷 마스크 . . . . . . . : 255.255.255.0
   임대 시작 날짜. . . . . . . : 2022년 6월 9일 목요일 오후 1:58:36
   임대 만료 날짜. . . . . . . : 2022년 6월 9일 목요일 오후 3:58:36
   기본 게이트웨이 . . . . . . : 192.168.1.2
   DHCP 서버 . . . . . . . . . : 192.168.1.100
   DNS 서버. . . . . . . . . . : 8.8.8.8
   Tcpip를 통한 NetBIOS. . . . : 사용

$ dhcp static 설정

# vim /etc/dhcp/dhcpd.conf
subnet 192.168.111.0 netmask 255.255.255.0
{
	 option routers 192.162.1.2 ; 
	 option subnet-mask 255.255.255.0 ;
	 range dynamic-bootp 192.168.1.30 192.168.1.50 ;
	 option domain-name-servers 168.126.63.1 ; 	
 default-lease-time 10000 ; 
	 max-lease-time 20000 ; 

host client1
	 {
	 option host-name "client1"; 			→ 클라이언트 명
	 hardware ethernet 00:0c:29:47:0c:99;   → 클라이언트 물리적주소
	 fixed-address 192.168.1.45;		    → 할당할 주소
	 }
}
# firewall-cmd --permanent --add-service=dhcp
# firewall-cmd --reload
# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: bond0 ens32 ens34
  sources:
  services: dhcp dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
  
# systemctl retstart dhcpd
# systemctl retstart network
# netstat -anp | grep dhcpd
udp        0      0 0.0.0.0:67              0.0.0.0:*                           5529/dhcpd
# cat /var/lib/dhcpd/dhcpd.leases 
   - IP 임대 정보 확인

[ Client TEST ] : IP주소 자동할당으로 변경

CMD > C:\Users\ITBANK>ipconfig /all

Windows IP 구성
   호스트 이름 . . . . . . . . : Client
   주 DNS 접미사 . . . . . . . :
   노드 유형 . . . . . . . . . : 혼성
   IP 라우팅 사용. . . . . . . : 아니요
   WINS 프록시 사용. . . . . . : 아니요

이더넷 어댑터 Ethernet0:
   연결별 DNS 접미사. . . . :
   설명. . . . . . . . . . . . : Intel(R) 82574L Gigabit Network Connection
   물리적 주소 . . . . . . . . : 00-0C-29-B7-BE-FC
   DHCP 사용 . . . . . . . . . : 예
   자동 구성 사용. . . . . . . : 예
   IPv4 주소 . . . . . . . . . : 192.168.1.60(기본 설정)
   서브넷 마스크 . . . . . . . : 255.255.255.0
   임대 시작 날짜. . . . . . . : 2022년 6월 9일 목요일 오후 1:58:36
   임대 만료 날짜. . . . . . . : 2022년 6월 9일 목요일 오후 3:58:36
   기본 게이트웨이 . . . . . . : 192.168.1.2
   DHCP 서버 . . . . . . . . . : 192.168.1.100
   DNS 서버. . . . . . . . . . : 8.8.8.8
   Tcpip를 통한 NetBIOS. . . . : 사용

$ DHCP Failover 구성

[Linux 01 primary 설정]
# firewall-cmd --permanent --add-port=647/tcp
# firewall-cmd --reload
# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: bond0 ens32 ens34
  sources:
  services: dhcp dhcpv6-client ssh
  ports: 647/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
  
# vi /etc/dhcp/dhcpd.conf
failover peer "dhcp-failover" {
	primary;
	address 192.168.1.100;
	port 647;
	peer address 192.168.1.100;
	peer port 647;
	max-response-delay 30;
	load balance max seconds 3;
	mclt 1800;
	split 128;
}

subnet 192.168.1.0 netmask 255.255.255.0{
	option subnet-mask 255.255.255.0;
	option broadcast-address 192.168.1.255;
	option routers 192.168.1.2;
	option domain-name-servers 168.126.63.1;
	pool {
		failover peer "dhcp-failover";
		max-lease-time 7200;
		range 192.168.1.100 192.168.1.254;
	}
}
# systemctl restart dhcpd
# netstat -anp | grep dhcpd
tcp        0      0 192.168.1.100:647       0.0.0.0:*               LISTEN      56482/dhcpd
udp        0      0 0.0.0.0:67              0.0.0.0:*                           5529/dhcpd
   - LISTEN 상태가 뜨는지 확인 


[Linux 02 secondary 설정]
# yum -y install dhcp-*
# firewall-cmd --permanent --add-service="dhcp" 
# firewall-cmd --permanent --add-port=647/tcp 
   - Failover 구성 시 사용
# firewall-cmd --reload 
# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens32
  sources:
  services: dhcp dhcpv6-client ssh
  ports: 647/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

# vi /etc/dhcp/dhcpd.conf
failover peer "dhcp-failover" {
	secondary;
	address 192.168.1.150;
	port 647;
	peer address 192.168.1.100;
	peer port 647;
	max-response-delay 30;
	load balance max seconds 3;
}

subnet 192.168.1.0 netmask 255.255.255.0{
	option subnet-mask 255.255.255.0;
	option broadcast-address 192.168.1.255;
	option routers 192.168.1.2;
	option domain-name-servers 168.126.63.1;
	pool {
		failover peer "dhcp-failover";
		max-lease-time 7200;
		range 192.168.1.100 192.168.1.254;
	}
}

# systemctl start dhcpd
# systemctl enable dhcpd
# netstat -anp | grep dhcpd
tcp        0      0 192.168.1.150:647       0.0.0.0:*               LISTEN      53371/dhcpd
tcp        0      0 192.168.1.150:59477     192.168.1.100:647       ESTABLISHED 53371/dhcpd
udp        0      0 0.0.0.0:67              0.0.0.0:*                           53371/dhcpd
   - ESTABLISHED 뜨는지 확인, 이중화 연동 확인

$ DHCP Failover 구성테스트

1. Primary Server로부터IP주소할당 

2. Primary Server에서DHCP Service 비활성화 

3. Client에서IP주소임대해제후다시IP주소를할당 

4. Secandary Server로부터IP주소임대가되는지확인