티스토리 뷰

CentOS 강좌 PART 2. 9  DHCP 서버 구축

DHCP (Dynamic Host Configuration Protocol)은 BOOTP를 확장한 프로토콜로 DHCP Discover, Offer, Request, Ack 메세지를 이용하여 서버와 클라이언트간에 IP 주소 및 이와 관련된 다양한 정보를 클라이언트가 수신하기 위한 목적으로 사용된다.
이때 주로 사용되는 프로토콜은 BOOTP (Bootstrap Protocol)이며 , 해당 프로토콜을 통해 IP 주소를 포함하는 다양한 네트워크 정보를 서버측으로 부터 수신받도록 하는 방식이다.
해당 프로토콜은 UDP 68,69를 사용하게 되며 BOOTP의 기본이 RARP 를 이용하는 방식이므로, 브로드캐스트 전송 방식을 이용하게 된다.
리눅스에서는 dhcp 데몬을 설치하여 이 패키지를 기반으로 DHCP 서비스를 사용한다.

DHCP 서버가 Client에 전송할 때는 Option 정보를 포함하여, 단순히 IP 정보만 수신하는 게 아니라, 다양한 정보를 수신 및 송신 할 수 있다.
아래는 실제 DHCP 파라메터에서 송,수신 되는 정보들이다.

  • Client MAC 주소
  • IP 주소 : 단말에 할당 될 IP 주소
  • Option 1 - Subnet Mask
  • Option 3 - Router (단말의 GateWay)
  • Option 6 - DNS 주소
  • Option 51 - IP Lease Time (단말에서 IP를 임대해서 사용할 수 있는 기간)
  • Option 54 - DHCP Server ID (DHCP Ack를 보낸 DHCP 서버 주소)

Option은 매우 다양하게 제공이 되는데 그 정보는 아래 URL을 참조한다.




1.DHCP 서버 설치

먼저 서버가 될 호스트에 DHCP 패키지를 설치 구성한다.

1
[root@centrepo whchoi]# yum -y install dhcp
cs

설치가 완료되면
dhcp 메세지를 주고 받을 인터페이스를 지정한다.

1
2
3
4
[root@centrepo whchoi]# vi /etc/sysconfig/dhcpd
DHCPDARGS = ens192
 
# dhcp 메세지를 주고 받을 인터페이스를 선언한다.
cs


2. CentOS에서 DHCP 서버 구성

DHCP 상세 구성은 /etc/dhcp/dhcpd.conf에 구성된다. 해당 파일을 비어 있는 상태이며, 설정 샘플파일을 참조하기 위해서는 /usr/share/doc/dhcp*/dhcpd.conf.sample을 참조할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[root@centrepo whchoi]# more /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
 
# dhcp 서비스 구성방식에 대한 정보가 Sample로 제공된다.
 
[root@centrepo whchoi]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@centrepo whchoi]# vi /etc/dhcp/dhcpd.conf
 
option domain-name "cisko-dc.com";
option domain-name-servers ns1.cisko-dc.com, ns2.cisko-dc.com;
default-lease-time 3600;
max-lease-time 7200;
authoritative;
 
# domain name은 “cisko-dc.com”, domain-name-server는 “ns1.cisko-dc.com”으로 지정한다.
# default-lease-time은 3600초, max-lease-time은 7200초이다.
 
subnet 10.72.78.128 netmask 255.255.255.128 {
        option routers                  10.72.78.129;
        option subnet-mask              255.255.255.128;
        option domain-search            "cisko-dc.com";
        option domain-name-servers      10.72.86.7;
        range   10.72.78.131   10.72.78.140;
}
 
# 서브넷 10.72.78.128/25, Gateway는 10.72.78.129, domain은 “cisko-dc.com”
# nameserver 주소는 “10.72.86.7”, IP 할당 범위는 “10.72.78.131~140”이다.
 
host test1 {
hardware ethernet 00:50:56:aa:aa:01;
fixed-address 10.72.78.140;
}
 
# 클라이언트 사이드에서 MAC주소를 최초에 전송하게 되는데 이때 MAC주소를 보고 IP를 Assign할 수 있다.
 
[root@centrepo whchoi]# systemctl start dhcpd
[root@centrepo whchoi]# systemctl enable dhcpd
 
# dhcp 데몬을 활성화하고, 재구동시 사용할 수 있도록 설정한다.
cs



3. dhcp를 위한 보안 설정

DHCP 서비스를 제공하기 위해서는 수신포트 UDP 67번을 사용한다. 따라서 Firewall에서 반드시 허용해 주어야 한다.

1
2
3
4
5
6
[root@centrepo whchoi]# firewall-cmd --permanent --zone=public --add-service=dhcp
success
[root@centrepo whchoi]# firewall-cmd --reload
success
 
# dhcp 서비스를 위해 방화벽 정책을 설정한다.
cs



4. DHCP Client Side 설정

리눅스 클라이언트가 DHCP를 사용하기 위해서는 network-script파일을 변경해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@web whchoi]# more /etc/sysconfig/network-scripts/ifcfg-ens192
HWADDR=00:50:56:8f:bb:47
NAME=ens192
DEVICE=ens192
ONBOOT=yes
USERCTL=no
BOOTPROTO=dhcp
PEERDNS=no
이하 생략
 
# BOOTPROTO를 dhcp로 구성한다.
 
[root@web whchoi]#ip link set ens192 down
[root@web whchoi]#ip link set ens192 up
 
# interface를 재구동한다.
 
[root@web whchoi]# ip a
 
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:8f:0c:d7 brd ff:ff:ff:ff:ff:ff
    inet 10.72.78.132/25 brd 10.72.78.255 scope global noprefixroute dynamic ens192
       valid_lft 3294sec preferred_lft 3294sec
 
# 설정 변경 후에 DHCP로 해당 IP Range로 정상적으로 할당되었는지 확인한다.
cs

DHCP Server 의 DHCP Log를 보면 아래와 같이 동작한 것을 알 수 있다. 

1. MAC 주소 00:50:56:8f:0c:d7을 가진 클라이언트가 “DHCP DISCOVER”를 요청
2.해당 요청에 대해 DHCP 서버는 10.72.78.132를 “DHCP OFFER”로 전송
3.10.72.86.132 IP 주소를 할당 받은 클라이언트는 해당 IP를 할당해 줄 것을 “DHCP REQUEST” 요청
4. DHCP Server는 최종적으로 10.72.86.132를 할당해 주고 Option에 배정된 정보들을 “DHCP ACK”를 통해 할당.

 


앞서 설정한 특정 MAC으로 할당했을 때 정상적으로 동작하는 지를 확인해 본다. 
VM의 MAC 주소를 변경하고, 재부팅한다.


재부팅 이후 DHCP 서버에서 메세지를 확인한다.
MAC 주소 aa:aa:01은 사전에 정의된 IP 주소 10.72.78.140으로 서버에서 할당되는 로그를 확인할 수 있다.


클라이언트에서도 정상적으로 할당되어 있는지를 확인한다.

1
2
3
4
5
6
7
8
9
[root@web whchoi]# ip a
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:aa:aa:01 brd ff:ff:ff:ff:ff:ff
    inet 10.72.78.140/25 brd 10.72.78.255 scope global noprefixroute dynamic ens192
       valid_lft 3224sec preferred_lft 3224sec
    inet6 fe80::45c5:d3c5:a4a4:7745/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
 
# DHCP Server에서 정의한 10.72.78.140으로 정상적으로 할당된 것을 확인할 수 있다.
cs



Tip . DHCP를 MAC주소만 확인하고 Assign하려면? 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
option domain-name "cisko-dc.com";
option domain-name-servers ns1.cisko-dc.com, ns2.cisko-dc.com;
default-lease-time 3600;
max-lease-time 7200;
authoritative;
 
subnet 10.72.78.128 netmask 255.255.255.128 {
        option routers                  10.72.78.129;
        option subnet-mask              255.255.255.128;
        option domain-search            "cisko-dc.com";
        option domain-name-servers      10.72.86.7;
        group{
          host test1 {hardware ethernet 00:50:56:aa:aa:01; fixed-address 10.72.78.140;}
        }
}
cs

DHCP Log는 기본 /var/log/syslog에 log7으로 기록되고, 실제 할당되는 정보는 /var/lib/dhcpd/dhcpd.leases 에서 확인할 수 있다.

공지사항