Monday, March 26, 2018

CentOS 6.6 리눅스 네트워크 ] 5.3 DHCP 서버 설치 및 간단 구성


안녕하세요. 썬구루입니다. 이 게시물에서는 CentOS 6.6을 DHCP 서버로 구성하는 방법에 알아보도록 하겠습니다.

윈도우 서버에서 DHCP 서버를 구성하는 것과 달리 리눅스 서버에 명령과 파일을 사용하여 DHCP 서버를 구성해야 하기 때문에 조금 불편함이 있습니다.

그리고 이미 고객사에 DHCP 서버/클라이언트 구성이 다 되어 있기 때문에 여러분들이 리눅스 서버를 가지고 신규 DHCP 서버를 구성할 수 있을지...

■ VMware Workstation 가상 네트워크 DHCP 서버 비활성화

DHCP는 브로드캐스트를 사용하여 IP 주소를 요청/할당받기 때문에 하나의 네트워크에 2개의 DHCP 서버가 존재해서는 안 됩니다. 존재해도 되긴 하나 원하는 서버로부터 IP를 못 받아오죠. 브로드캐스트를 사용하기 때문에 빨리 신호 받고 IP 주소를 할당해 주는 서버가 장땡~! 그래서 DHCP 설치 및 구성 테스트를 하기 위해 VMware Workstation에서 VMnet8 가상 네트워크(가상 스위치)에 설정된 DHCP 서버를 비활성화할 필요가 있습니다.

아래 그림과 같이 VMnet8에 설정된 DHCP 서버 서비스를 비활성화합니다.

VMware Workstation > Edit 메뉴 > Virtual Network Editor > Change Settings 버튼 > VMnet8 > Use local DHCP service to distributed IP address to VMs 체크박스 체크 해지 > OK


■ CentOS 6.6에 DHCP 서버 관련 패키지 설치

CentOS 운영체제를 설치할 때 Basic Server로 설치하면 DHCP 서버 관련 패키지가 같이 설치되지 않습니다. 그래서 필요할 시 관련 패키지를 설치해줘야 합니다.. CentOS 6.6 Installation DVD 1번 ISO 파일을 가상머신에 연결하여 아래같이 설치 DHCP 서버 패키지를 설치합니다.

[root@sunguru /]# rpm -qa | grep "^dh"

dhcp-common-4.1.1-43.P1.el6.centos.x86_64
dhclient-4.1.1-43.P1.el6.centos.x86_64

[root@sunguru /]#
[root@sunguru /]# cd /media/CentOS_6.6_Final/Packages/
[root@sunguru Packages]#
[root@sunguru Packages]# ls dh*

dhclient-4.1.1-43.P1.el6.centos.x86_64.rpm  dhcp-common-4.1.1-43.P1.el6.centos.x86_64.rpm
dhcp-4.1.1-43.P1.el6.centos.x86_64.rpm

[root@sunguru Packages]#
[root@sunguru Packages]# rpm -ivh dhcp-4.1.1-43.P1.el6.centos.x86_64.rpm

경고: dhcp-4.1.1-43.P1.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
준비 중...               ########################################### [100%]
   1:dhcp                   ########################################### [100%]

[root@sunguru Packages]#
[root@sunguru Packages]# rpm -ql dhcp-4.1.1-43.P1.el6.centos.x86_64 | grep /etc/dhcp
/etc/dhcp
/etc/dhcp/dhcpd.conf
/etc/dhcp/dhcpd6.conf
[root@sunguru Packages]#
[root@sunguru Packages]# service dhcpd status
dhcpd가 정지되었습니다
[root@sunguru Packages]#
[root@sunguru Packages]# chkconfig --list dhcpd

dhcpd           0:해제 1:해제 2:해제 3:해제 4:해제 5:해제 6:해제

[root@sunguru Packages]# 

■ DHCP 서버 IP 주소 전달 방식

DHCP 서버는 IP 주소 외 다른 정보(Netmask, Default Gateway, DNS 등등)를 같이 DHCP 클라이언트에게 전달할 수 있습니다. 이러한 정보를 전달하기 위해 브로드캐스트와 유니캐스트를 사용합니다.
CentOS에서 tcpdump 명령을 사용하여 DHCP 관련 패킷을 모니터링하면 IP 주소가 전달되는 과정을 확인해 볼 수 있습니다. 아래 내용과 유사한 결과를 확인하기 위해 VMware Workstation 가상 네트워크 VMnet8에 DHCP 서비스를 잠깐 활성화합니다. 그리고 터미널 윈도우를 두 개 열어 첫 번째 터미널에서는 패킷 모니터링을 하기 위해 # tcpdump -i eth0 port bootps -v -n을 실행합니다. 그리고 다른 창에서 아래와 같이 dhclient  명령을 사용하여 IP 주소 해지와 갱신을 실행합니다.

[root@sunguru Packages]# dhclient -r eth0
[root@sunguru Packages]# dhclient eth0



[root@sunguru ~]# tcpdump -i eth0 port bootps -v -n

07:48:09.943299 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:0c:29:56:e3:45, length 300, xid 0xae113443, Flags [none]
   Client-Ethernet-Address 00:0c:29:56:e3:45
   Vendor-rfc1048 Extensions
     Magic Cookie 0x63825363
     DHCP-Message Option 53, length 1: Discover
     Requested-IP Option 50, length 4: 192.168.80.105
     Parameter-Request Option 55, length 13:
       Subnet-Mask, BR, Time-Zone, Classless-Static-Route
       Domain-Name, Domain-Name-Server, Hostname, YD
       YS, NTP, MTU, Option 119
       Default-Gateway
07:48:10.944809 IP (tos 0x10, ttl 16, id 0, offset 0, flags [none], proto UDP (17), length 328)
    192.168.80.120.bootps > 192.168.80.105.bootpc: BOOTP/DHCP, Reply, length 300, xid 0xae113443, Flags [none]
   Your-IP 192.168.80.105
   Server-IP 192.168.80.120
   Client-Ethernet-Address 00:0c:29:56:e3:45
   Vendor-rfc1048 Extensions
     Magic Cookie 0x63825363
     DHCP-Message Option 53, length 1: Offer
     Server-ID Option 54, length 4: 192.168.80.120
     Lease-Time Option 51, length 4: 1800
     Subnet-Mask Option 1, length 4: 255.255.255.0
     BR Option 28, length 4: 192.168.80.255
     Domain-Name Option 15, length 11: "localdomain"
     Domain-Name-Server Option 6, length 4: 192.168.80.2
     Default-Gateway Option 3, length 4: 192.168.80.2
07:48:10.945020 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:0c:29:56:e3:45, length 300, xid 0xae113443, Flags [none]
   Client-Ethernet-Address 00:0c:29:56:e3:45
   Vendor-rfc1048 Extensions
     Magic Cookie 0x63825363
     DHCP-Message Option 53, length 1: Request
     Server-ID Option 54, length 4: 192.168.80.120
     Requested-IP Option 50, length 4: 192.168.80.105
     Parameter-Request Option 55, length 13:
       Subnet-Mask, BR, Time-Zone, Classless-Static-Route
       Domain-Name, Domain-Name-Server, Hostname, YD
       YS, NTP, MTU, Option 119
       Default-Gateway
07:48:10.945333 IP (tos 0x10, ttl 16, id 0, offset 0, flags [none], proto UDP (17), length 328)
    192.168.80.120.bootps > 192.168.80.105.bootpc: BOOTP/DHCP, Reply, length 300, xid 0xae113443, Flags [none]
   Your-IP 192.168.80.105
   Server-IP 192.168.80.120
   Client-Ethernet-Address 00:0c:29:56:e3:45
   Vendor-rfc1048 Extensions
     Magic Cookie 0x63825363
     DHCP-Message Option 53, length 1: ACK
     Server-ID Option 54, length 4: 192.168.80.120
     Lease-Time Option 51, length 4: 1800
     Subnet-Mask Option 1, length 4: 255.255.255.0
     BR Option 28, length 4: 192.168.80.255
     Domain-Name Option 15, length 11: "localdomain"
     Domain-Name-Server Option 6, length 4: 192.168.80.2
     Default-Gateway Option 3, length 4: 192.168.80.2

메시지
내 용
DHCPDISCOVER
 IP 주소를 받기 위해 DHCP 서버를 찾기 위해 사용하는 브로드캐스트 메시지이다.
DHCPOFFER
 DHCPDISCOVER를 받은 DHCP 서버는 DHCP 클라이언트를 위해 IP 주소를 예약하고 대여 제공을 만들기 위해 클라이언트에게 보내는 유니캐스트 메시지이다. 이때 임대 시간도 같이 전달된다.
DHCPREQUEST
 DHCPOFFER 메시지를 받은 클라이언트는 제공된 주소를 사용하려 DHCP 서버에게 응답을 보내는 브로드캐스트 메시지인다.
DHCPACK
 DHCP 서버가 클라이언트에게 IP 주소 임대 승인을 발신하는 유니캐스트 메시지이다.

■ DHCP 서버 구성

DHCP 서버에 대한 구성 파일은 /etc/dhcp/dhcpd.conf, /etc/dhcp/dhcpd6.conf입니다. 우리가 현재 IPv4를 사용하고 있기 때문에 dhcpd.conf 파일을 사용할 것입니다. VI 편집기를 사용하여 간단하게 아래 내용을 추가합니다. 여기서는 IP 주소, Netmask, Default Router에 대한 정보가 전달되는 DHCP 서버 테스트를 해볼 것입니다.

[root@sunguru ~]# vi /etc/dhcp/dhcpd.conf

subnet 192.168.80.0 netmask 255.255.255.0 {
range dynamic-bootp 192.168.80.201 192.168.80.210;
option subnet-mask 255.255.255.0;
option routers  192.168.80.2;
default-lease-time 300;
max-lease-time  600;
}

구성 정보
내 용
range dynamic-bootp
 할당 할 IP 주소 범위를 나타냅니다.
option subnet-mask
 할당 할 IP 주소의 Netmask를 나타냅니다.
option routers
 Gateway 주소를 나타냅니다.
default-leae-time
 IP 주소가 할당될 때 설정되는 임대 시간을 나타냅니다. (기본 임대 시간. 단위는 초이다.)
max-lease-time
 DHCP 클라이언트가 요청할 수 있는 최대 임대 시간을 나타냅니다.

아래 명령을 실행하여 DHCP 서버 서비스를 시작합니다.

 [root@sunguru ~]# service dhcpd start

만약 DHCP 서버 서비스를 종료하려 한다면 아래 명령을 실행합니다.

 [root@sunguru ~]# service dhcpd stop

만약 DHCP 서버 시스템이 리부팅되더라도 DHCP 서버 서비스가 자동으로 올라오도록 설정하려면 아래 명령을 실행합니다.

 [root@sunguru ~]# chkconfig dhcpd on

■ DHCP 클라이언트 확인

DHCP 클라이언트 테스트를 하기 위해 CentOS가 가상머신이 하나 더 필요합니다. 이를 위해 기존에 설치한 CentOS 6.6 가상머신을 복제해도 되고 또는 새로 설치해도 됩니다. 복제 또는 설치를 하여 DHCP 클라이언트로 사용할 CentOS 가상머신을 만들었다면 2개의 터미널 창을 열어 하나는 tcpdump 명령을 실행하여 패킷 모니터링을 하고 하나는 dhclient 명령을 사용하여 IP를 받아옵니다.

[root@centos64 ~]# tcpdump -i eth0 port bootps -v -n

 [root@centos64 ~]# dhclient eth0

그러면 tcpdump 명령을 실행한 창에서 다음 결과를 확인할 수 있습니다.

[root@centos64 ~]# tcpdump -i eth0 port bootps -v -n

13:03:15.004086 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:0c:29:0d:d6:03, length 300, xid 0xe9f0716a, Flags [none]
   Client-Ethernet-Address 00:0c:29:0d:d6:03
   Vendor-rfc1048 Extensions
     Magic Cookie 0x63825363
     DHCP-Message Option 53, length 1: Discover
     Requested-IP Option 50, length 4: 192.168.80.201
     Parameter-Request Option 55, length 13:
       Subnet-Mask, BR, Time-Zone, Classless-Static-Route
       Domain-Name, Domain-Name-Server, Hostname, YD
       YS, NTP, MTU, Option 119
       Default-Gateway
13:03:15.004612 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    192.168.80.11.bootps > 192.168.80.201.bootpc: BOOTP/DHCP, Reply, length 300, xid 0xe9f0716a, Flags [none]
   Your-IP 192.168.80.201
   Client-Ethernet-Address 00:0c:29:0d:d6:03
   Vendor-rfc1048 Extensions
     Magic Cookie 0x63825363
     DHCP-Message Option 53, length 1: Offer
     Server-ID Option 54, length 4: 192.168.80.11
     Lease-Time Option 51, length 4: 300
     Subnet-Mask Option 1, length 4: 255.255.255.0
     Default-Gateway Option 3, length 4: 192.168.80.2
13:03:15.004853 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:0c:29:0d:d6:03, length 300, xid 0xe9f0716a, Flags [none]
   Client-Ethernet-Address 00:0c:29:0d:d6:03
   Vendor-rfc1048 Extensions
     Magic Cookie 0x63825363
     DHCP-Message Option 53, length 1: Request
     Server-ID Option 54, length 4: 192.168.80.11
     Requested-IP Option 50, length 4: 192.168.80.201
     Parameter-Request Option 55, length 13:
       Subnet-Mask, BR, Time-Zone, Classless-Static-Route
       Domain-Name, Domain-Name-Server, Hostname, YD
       YS, NTP, MTU, Option 119
       Default-Gateway
13:03:15.009520 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    192.168.80.11.bootps > 192.168.80.201.bootpc: BOOTP/DHCP, Reply, length 300, xid 0xe9f0716a, Flags [none]
   Your-IP 192.168.80.201
   Client-Ethernet-Address 00:0c:29:0d:d6:03
   Vendor-rfc1048 Extensions
     Magic Cookie 0x63825363
     DHCP-Message Option 53, length 1: ACK
     Server-ID Option 54, length 4: 192.168.80.11
     Lease-Time Option 51, length 4: 300
     Subnet-Mask Option 1, length 4: 255.255.255.0
     Default-Gateway Option 3, length 4: 192.168.80.2

그리고 ifconfig 명령을 실행하면 할당받는 IP 주소를 아래와 같이 확인할 수 있습니다.

[root@centos64 ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:0D:D6:03
          inet addr:192.168.80.201  Bcast:192.168.80.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe0d:d603/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:37559 errors:0 dropped:0 overruns:0 frame:0
          TX packets:23193 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:31351768 (29.8 MiB)  TX bytes:1459142 (1.3 MiB)
[root@centos64 ~]# 

■ IP 주소 임대시간 갱신

임대 시간의 50%를 사용하면 클라이언트는 서버에게 IP 주소 임대 시간을 갱신할 것을 요청합니다. 그러면 서버는 그 신호를 받고 응답을 해주고 임대 시간이 갱신된다. 이 내용은 2분 30초가 지나면 DHCP Client에서 tcpdump를 실행한 터미널 창에서 확인할 수 있다.



13:07:43.021823 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
    192.168.80.201.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:0c:29:0d:d6:03, length 300, xid 0xe9f0716a, secs 130, Flags [none]
   Client-IP 192.168.80.201
   Client-Ethernet-Address 00:0c:29:0d:d6:03
   Vendor-rfc1048 Extensions
     Magic Cookie 0x63825363
     DHCP-Message Option 53, length 1: Request
     Parameter-Request Option 55, length 13:
       Subnet-Mask, BR, Time-Zone, Classless-Static-Route
       Domain-Name, Domain-Name-Server, Hostname, YD
       YS, NTP, MTU, Option 119
       Default-Gateway
13:07:43.029492 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 328)
    192.168.80.202.bootps > 192.168.80.201.bootpc: BOOTP/DHCP, Reply, length 300, xid 0xe9f0716a, secs 130, Flags [none]
   Client-IP 192.168.80.201
   Your-IP 192.168.80.201
   Client-Ethernet-Address 00:0c:29:0d:d6:03
   Vendor-rfc1048 Extensions
     Magic Cookie 0x63825363
     DHCP-Message Option 53, length 1: ACK
     Server-ID Option 54, length 4: 192.168.80.11
     Lease-Time Option 51, length 4: 300
     Subnet-Mask Option 1, length 4: 255.255.255.0
     Default-Gateway Option 3, length 4: 192.168.80.2

서버에서 IP 주소가 클라이언트에게 전달되는 정보를 보려면 아래 파일을 tail 명령으로 확인할 수 있습니다.

[root@sunguru ~]# tail -f /var/lib/dhcpd/dhcpd.leases

lease 192.168.80.201 {
  starts 3 2016/07/20 11:45:01;
  ends 3 2016/07/20 11:50:01;
  cltt 3 2016/07/20 11:45:01;
  binding state active;
  next binding state free;
  hardware ethernet 00:0c:29:0d:d6:03;
  client-hostname "centos64";
}

DHCP 서버와 클라이언트는 통신을 위해  브로드/유니캐스트를 사용하기 때문에 DHCP 서버의 NIC 네트워크 대역이 아니라면 다른 네트워크에서 발행한 DHCP 요청에 대해 응답을 할 수 없습니다. 이를 위해 DHCP Relay라는 것을 사용하는데 이것은 내년 초에 다루도록 하겠습니다. 잉??? 내년 초?

다음 게시물에서 NTP 서버 구성에 대해 알아보도록 하겠습니다.





No comments:

Post a Comment