Menu

문서정보

목차

DHCP 설치

DHCP 란

Dynamic Host Configuration Protocol의 줄임말로, 자동으로 네트워크 환경을 설정하기 위해서 사용하는 프로토콜이다.

네트워크에 참여하는 노드는 네트워크 정보를 모르더라도 간단하게 네트워크 설정을 할 수 있다. LAN 영역에 있는 DHCP 서버에 요청을 해서 IP 주소, subnetmask, gateway, dns 등을 자동으로 설정해주는 방식이다.

나는 그 동안 단순히 DHCP 서버를 사용하기만 했다. 소프트웨어 개발자이다 보니, 굳이 DHCP 서버를 구축해야할 필요가 없었던 거다. 그러다가 kickstart 환경을 구축 하면서 자연 스럽게 dhcp서버를 구성해야 하는 필요가 생겼다.

그래서 이번 기회에 dhcp 서버를 직접 구성해보기로 했다.

dhcp server 설치 환경

내 리눅스 박스에 dhcp server를 설치하기로 했습니다. 사용하고 있는 배포판은 우분투 리눅스 11.10이다.

dhcp 서버를 설치한 다음, Virtualbox로 centos vm을 만들어서 dhcp 작동여부를 테스트 하기로 했다. centos vm이 dhcp 클라이언트로 작동하는 그림이다.. centos vm의 eth0를 dhcp로 설정하고, ubuntu dhcp server로 부터 네트워크 정보를 잘 가져와서 네트워크를 설정하고, 통신이 되는지 확인하면 된다.

내 집에서 테스트를 진행했다. 무선 공유기를 통해서 인터넷에 접속하고 있다. 굳이 무선 공유기를 그림에 넣은 이유는 공유기의 DHCP 서버가 테스트 환경에 영향을 줄 수 있기 때문이다. DHCP는 브로드 캐스팅이 되는데, 두 개의 DHCP 서버가 있을 경우 두 서버 모두 DHCP 응답을 하기 때문에 네트워크 설정이 꼬일 수 있다. 그래서 무선 공유기의 DHCP 설정을 비활성화 했다.

dhcp server 설치와 설정

아래와 같이 테스트 환경을 만들었다.

동적으로 임의의 IP 주소 할당하기

네트워크 주소를 요청하는 호스트에 할당된 네트워크 범위내에서 임의의 IP 주소를 할당하는 설정이다. dhcp server 설치. isc-dhcp-server를 설치하기로 했다.
# sudo apt-get install isc-dhcp-server

이제 dhcp 설정파일을 만들어야 겠다. 설정 파일을 만들기 전에 dhcp로 서비스할 네트워크 환경을 계획하기로 했다. 이 정보를 dhcp 설정파일에 쓰면된다. dhcp 설정파일의 위치는 /etc/dhcp/dhcpd.conf 다.
ddns-update-style none;

# option definitions common to all supported networks...
option domain-name "example.org";

# google dns 서버를 사용하기로 했습니다.
option domain-name-servers 8.8.8.8, 8.8.6.6;

# gateway 입니다. 제 리눅스 박스입니다.
option routers 192.168.56.1;

# subnet mask
option subnet-mask 255.255.255.0;

default-lease-time 60;
max-lease-time 72;

# 서브 네트워크별 dhcp client에 할당할 네트워크 정보입니다.
# 2~ 254을 할당하기로 했습니다.
subnet 192.168.56.0 netmask 255.255.255.0 {
        range 192.168.56.2 192.168.56.254;
}

이제 dhcp 서버를 작동합니다.
# sudo /etc/init.d/isc-dhcp-server restart
[sudo] password for yundream: 
 * Stopping ISC DHCP server dhcpd                              [ OK ] 
 * Starting ISC DHCP server dhcpd                              [ OK ] 
이 걸로 설치 완료 입니다.

MAC에 고정 IP주소 할당하기

회사라면 보안상의 이유로 허가한 노드만 네트워크에 접속할 수 있도록 제한하고 싶을 때가 있을 겁니다. 특정 MAC주소에 대해서 고정된 IP를 할당하는 방식으로 네트워크를 관리할 수 있습니다.

joinc 회사의 네트워크 관리자인 저는 아래와 같이 접속을 제어하기로 계획을 세웠습니다. guest vm의 네트워크를 관리하기 위해서 MAC을 조사한 다음 아래와 같은 표를 만들었습니다.
guest vm 01 08:00:27:20:90:86 192.168.56.50
guest vm 02 08:00:27:FB:54:98 192.168.56.60
이 표대로 dhcp.conf를 수정하면 됩니다.
...
...
subnet 192.168.56.0 netmask 255.255.255.0 {
	option routers 192.168.56.1;
	deny unknown-clients;
	host guest-vm-01 {
		hardware ethernet 08:00:27:20:90:86;
		fixed-address 192.168.56.50;
	}

	host guest-vm-02 {
		hardware ethernet 08:00:27:FB:54:98;
		fixed-address 192.168.56.60;
	}
}

...
dhcp 서버를 재 시작한 후 테스트 하시면 됩니다. virtualbox는 자신의 가상 네트워크를 관리하기 위한 DHCP를 실행합니다. 그러므로 virtualbox의 DHCP 서비스를 중지해야 합니다.
$ ps -ef | grep virtual
yundream  5015  4968  0 09:38 ?        00:00:00 /usr/lib/virtualbox/VBoxNetDHCP .... 
$ kill 5015

shared network 설정

네트워크의 규모가 커서 여러 개의 서브넷을 관리해야 하는 경우도 있다. 다음과 같이 "shared-network"를 이용해서 여러 서브넷을 함께 관리할 수 있다. 여러 서브넷을 하나의 dhcp 서버로 관리하려면, 하나의 브로드캐스팅 도메인에 묶여있어야 할 것이다.
shared-network name {
    option domain-name              "test.redhat.com";
    option domain-name-servers      ns1.redhat.com, ns2.redhat.com;
    option routers                  192.168.0.254;
    more parameters for EXAMPLE shared-network
    subnet 192.168.1.0 netmask 255.255.252.0 {
        parameters for subnet
        range 192.168.1.1 192.168.1.254;
    }
    subnet 192.168.2.0 netmask 255.255.252.0 {
        parameters for subnet
        range 192.168.2.1 192.168.2.254;
    }
}

group 설정

네트워크 환경을 공유하는 서브넷 혹은 호스트들이 있을 수 있다. 이들은 그룹으로 묶어서 관리할 수 있다. 그룹은 호스트와 shared-network 모두를 포함할 수 있다.
group {
   option routers                  192.168.1.254;
   option subnet-mask              255.255.255.0;

   option domain-name              "example.com";
   option domain-name-servers       192.168.1.1;

   option time-offset              -18000;     # Eastern Standard Time

   host apex {
      option host-name "apex.example.com";
      hardware ethernet 00:A0:78:8E:9E:AA;
      fixed-address 192.168.1.4;
   }

   host raleigh {
      option host-name "raleigh.example.com";
      hardware ethernet 00:A1:DD:74:C3:F2;
      fixed-address 192.168.1.6;
   }
}

dhcp client 테스트

virtualbox의 centos vm을 실행했습니다. 먼저 centos가 dhcp client 설정이 돼 있는지 확인을 해야겠죠.
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

eth0를 재시작한 다음에 네트워크 정보를 제대로 가져오는지 확인해 보겠습니다.
# ifdown eth0
# ifup eth0

Determining IP information for eth0... done.

# ifconfig 
eth0      Link encap:Ethernet  HWaddr 08:00:27:20:90:86  
          inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe20:9086/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:103 errors:0 dropped:0 overruns:0 frame:0
          TX packets:146 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:15080 (14.7 KiB)  TX bytes:16067 (15.6 KiB)

잘 가져왔네요.

dns server 설정도 확인해 봐야죠
# cat /etc/resolv.conf
; generated by /sbin/dhclient-script
search example.org
nameserver 8.8.8.8
nameserver 8.8.6.6

route 정보도 확인해 보겠습니다.
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         192.168.56.1    0.0.0.0         UG    0      0        0 eth0

마치며

virtualbox로 테스트 했는데, 자꾸 virtualbox가 dhcp 서버를 띄워서 테스트에 혼선이 빚어졌다. virtualbox dhcp 데몬이 떠 있는지 확인하고 테스트를 하자. kvm(:12)을 이용하면 좀 더 쉽게 테스트 할 수 있을 것 같다.

참고

  1. http://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-dhcp-configuring-server.html

히스토리

  1. 작성 : 2012년 1월
  2. 수정 :
    • 2012년 2월 15일 : static ip 설정 추가
    • : shared-network, group 선언 추가