2007. 11. 22. 20:03

[펌글] DHCP 란?

원문 : http://blog.naver.com/rwswin/150003401514

1 장 : DHCP란?

일반 가정에서 한국통신의 ADSL 이나 두루넷과 같은 전용회선을 사용하는 사용자들은 거의 모두 이러한 DHCP를 사용하여 IP를 할당 받고 인터넷을 사용합니다. 이번 주 테마에서는 자신의 리눅스박스에 DHCP 서버를 설치하여 보다 효율적으로 네트워크에 있는 클라이언트들의 IP를 관리할 수 있으며, 또한, 제한된 IP주소를 가지고 보다 많은 컴퓨터들이 인터넷을 효율적으로 사용할 수 있는 방법에 대해 알아보도록 하겠습니다.


  • DHCP란?
    DHCP(Dynamic Host Configuration Protocol)란 호스트의 IP 주소와 각종 TCP/IP 프로토콜의 기본 설정을 클라이언트에게 자동적으로 제공해주는 프로토콜을 말합니다. DHCP에 대한 표준은 RFC 2131 문서에 정의되어 있으며, DHCP는 네트워크에 사용되는 IP주소를 DHCP 서버가 중앙집중식으로 관리하는 클라이언트/서버 모델을 사용합니다. DHCP 지원 클라이언트는 네트워크 부팅과정에서 DHCP 서버에 IP 주소를 요청하고 이를 얻을 수 있습니다.

  • DHCP Agents
    DHCP 프로토콜은 아래와 같이 크게 세 종류의 기본적인 에이전트로 구성됩니다.

    • DHCP 서버
      DHCP 서버는 네트워크 인터페이스를 위해서 IP주소를 가지고 있는 서버에서 실행되는 프로그램으로 일정한 범위의 IP주소를 다른 클라이언트에게 할당하여 자동으로 설정하게 해주는 역할을 합니다. DHCP서버는 클라이언트에게 할당된 IP주소를 변경없이 유지해 줄 수 있습니다. 만약 DHCP서버가 몇가지 이유로 인해서 클라이언트에게 할당한 IP 주소를 유지할 수 없게 된다면, 네트워크에서 IP주소의 혼란이 올 수 도 있습니다. 가상적이지만 말입니다. DHCP서버는 하나의 클라이언트에 여러개의 IP주소를 할당할 수 도 있습니다.

    • DHCP 클라이언트
      클라이언트들은 시스템이 시작하면 DHCP 서버에 자신의 시스템을 위한 IP 주소를 요청합니다. DHCP 서버로부터 IP 주소를 부여 받으면 TCP/IP 설정은 초기화되고 다른 호스트와 TCP/IP를 사용해서 통신을 할 수 있게 됩니다. DHCP 클라이언트는 네트워크 인터페이스의 IP주소와 관계된 네트워크 설정값(MAC 주소와 같은)을 찾을 수 있는 DHCP 프로토콜을 사용할 수 있는 프로그램입니다. 또한 DHCP 클라이언트는 이전에 할당받았던 IP주소를 계속적으로 유지할 수 있으며, DHCP 프로토콜의 오래된 버젼은 짧은 주기로 IP주소 상태를 유지하지만, 최신버젼의 경우에는 프로토콜에 특별한 요청이 없이도 IP주소 상태를 유지할 수 있어서, 네트워크의 브로드캐스팅에 의한 과부하를 감소시킬 수 있습니다.

    • DHCP Relay Agent
      UNIX 계열의 OS에서 사용할 수 있는 DHCP 서버의 종류는 매우 다양합니다. 무료로 제공되고 있는 프로그램중에 가장 많이 사용되고 있는 것이 ISC(Internet Software Consortium) DHCP로 1998년 1.0버전이 발표된 이후 계속 개발되어 현재 3.0 베타 테스트 버전까지 나왔으며, 아직은 2.0 버전을 사용할 것을 권장하고 있습니다.

      ISC DHCP 공식사이트 : http://www.isc.org/products/DHCP/
      DHCP FAQ - http://www.nominum.com/resources/faqs/dhcp-faq.html
      다운로드 사이트 : ftp://ftp.isc.org/isc/dhcp/

      지금까지 릴리스된 ISC DHCP를 살펴보면 아래와 같은 주요 특징들을 포함하고 있습니다.

      -> Release 1
      DHCP 배포판 릴리즈1에 포함되어 있는 DHCP서버는 최근에 릴리즈된 배포판에 비해서 몇 가지 특징과 버그를 수정하지 못했습니다. 그러나 현재는 거의 2년이라는 기간을 거쳐 매우 안정적인 상태로 수정되었습니다. 많은 사이트들이 이제는 매우 안정적으로 사용하고 있습니다.

      -> Release 2
      DHCP 배포판 릴리즈2에 포함되어 있는 DHCP 프로그램은 DHCP서버, DHCP클라이언트 그리고 DHCP relay agent로 구성이 되어져 있습니다. 이 서버는 IP 할당이전에 ping을 지원하고 좀 더 강력하게 잘못설정 된 클라이언트들의 IP 주소 설정을 해제합니다. 인증된 클라이언트의 부팅을 거절하는 기능도 포함되어 있습니다. 릴리즈2 서버의 중요한 약점은 beta릴리즈에서부터 나온것으로 활성화되지 않은 클라이언트가 주소영역에서 계속적으로 순환되는 문제점이 있습니다. 이 문제는 여러 사이트에서 보고되었습니다. 이 문제의 부분적인 수정이 적용되었으며, 이 문제가 수정되고 테스트 되면, 릴리즈2의 개발은 종료하게 될 것입니다.

      -> Release 3
      릴 리즈 3은 중요한 새로운 특징을 몇 가지 포함하게 될 것입니다. 주요 특징은 선택적으로 동작이 가능하도록 초기화하는 것이 가능하며, 클라이언트를 단위로 묶을 수 있으며, Relay Agent의 정보가 선택적으로 가능하며, 할당되는 풀이 여러개의 단위로 분리할 수 있다는 것입니다. 또한, 동적인 DNS정보의 업데이트와 DHCP 인증을 final 릴리즈이전에 포함할 것입니다. 그러나 릴리즈3에 Interserver 프로토콜의 적용은 예상하고 있지 않습니다.




2 장 : DHCP Agent 설치하기

인터넷에는 다양하고 많은 종류의 DHCP 패키지들이 무료로 제공되고 있습니다. 이번 테마에서는 안정버전인 ISC DHCP 2.0을 설치하여 DHCP Server를 구성한 후, 윈도우와 리눅스에서 DHCP 클라이언트를 설정해 보도록 하겠습니다. 참고로 필자가 사용하고 있는 시스템의 환경은 아래와 같습니다.
    DHCP Server OS : SuSE Linux 7.0
    Kernel : 2.4.2
    Window Manager : KDE 2.1
    DHCP Client OS : RedHat Linux 7.0
    Kernel : 2.2.16-22
    Window Manager : GNOME 1.2
    OS : Windows 2000


    ISC DHCP가 지원하는 플랫폼은 아래와 같습니다.
    NetBSD
    FreeBSD
    Linux (Linux 2.0.33 또는 그 이후의 버전)
    Mac OS X
    BSDI BSD/OS
    DEC Alpha OSF/1
    SunOS 4.1.4
    Ultrix
    Solaris 2.5, 2.6 and 7 on sparc
    HPUX.
    NextStep
    Rhapsody


    먼저 http://www.isc.org/사이트나 ftp://ftp.isc.org/isc/dhcp/로부터 dhcp-2.0.tar.gz파일을 다운받습니다.
    다운받은 소스파일을 /usr/local/src에 복사하고 압축을 풉니다.
    # cp dhcp–2.0.tar.gz /usr/local/src
    # cd /usr/local/src
    # tar xvzf dhcp–2.0.tar.gz


    압축이 풀리면 생성된 dhcp-2.0 디렉토리로 이동한 후 환경설정을 합니다.
    # cd dhcp-2.0
    # ./configure


    Make 명령어로 컴파일을 시작합니다.
    # make


    Make install 명령어로 프로그램을 설치합니다.

    # make install


    정말 간단하게 설치가 되지요? 이제 몇 가지 환경설정만 한 후 각 Agent에 맞는 데몬을 띄우기만 하면 됩니다.


3 장 : DHCP Server 설정하기

DHCP Server를 설정하는 방법은 매우 간단합니다. 멀티캐스트가 지원되는지 확인 한 후 DHCPd의 환경설정 파일을 작성한 후에 서버를 실행하면 됩니다.


  • MULTICAST 설정
    프로그램을 설치한 후에는 커널이 멀티캐스팅을 지원하고 있는지 확인해 보아야 합니다. 멀티캐스트란 로컬 머신과 네트워크사이에서 인터넷 연결 등의 상호작용을 지원하는 기능을 말합니다. 현재 대부분의 시스템에서 기본적으로 지원되고 있으며, 아래와 같은 명령어로 확인해 볼 수 있습니다.

    그림에 표시된 것처럼 MULTICAST를 지원하면 다음설정으로 넘어가고, 지원하지 않는다면 멀티캐스팅을 지원하도록 커널 컴파일을 다시 해야합니다.

    DHCP 클라이언트와 DHCP서버가 서로 통신을 하려면, 먼저, 255.255.255.0의 IP주소에 정보를 보낼 수 있어야 합니다. 하지만, subnet broadcast 주소가 네트워크에 따라서 다를 수 있으므로, 이 주소에 대한 설정에 주의를 해야 합니다. 만약에 그렇지 않으면, DHCP서버로부터 DHCPOFFER 메시지를 클라이언트에서 보게 될 것입니다.

    이제 아래의 명령어로 브로드캐스트 라우터를 만들어 줍니다.
    # route add –host 255.255.255.255 dev eth0

    네트워크 카드의 이름에 eth0가 사용되었지요. 사용하고 계신 시스템환경에 따라 이름이 다를 수 있으므로 ifconfig –a 명령어를 사용해서 네트워크 카드의 이름을 확인한 후 입력하시기 바랍니다.
    255.255.255.255: Unknown host


    만일 위와 같은 메시지가 나타나면 vi 에디터로 /etc/hosts 파일을 열고 아래의 내용을 추가합니다.
    255.255.255.255 reroute


    변경사항을 저장한 후에 파일을 닫고 아래의 명령어를 입력합니다.
    # route add –host reroute dev eth0


  • /etc/dhcpd.conf
    /etc/dhcpd.conf 파일은 DHCPd의 환경 설정 파일로 DHCP 서버 데몬이 구동될 때 기본적으로 필요한 네트워크의 정보가 입력됩니다. 파일이 없으면 새로 만드셔야 합니다.


    그럼 각 라인의 내용이 무엇인지 하나씩 살펴보도록 하겠습니다.

    default-lease-time 1800;
    클라이언트에게 특별한 주소의 유지시간을 주지 않을 때 기본적으로 할당되는 시간을 설정합니다.

    max-lease-time 7200;
    클라이언트의 요구에 관계없이 IP할당을 재갱신하는 주기의 최대 시간을 설정합니다.

    option subnet-mask 255.255.255.0;
    클라이언트가 사용하게 될 서브넷 마스크의 값을 정의합니다.

    option broadcast-address 203.249.84.255;
    클라이언트가 브로드캐스팅할 때 사용하는 주소를 정의합니다.

    option routers 203.249.84.254;
    클라이언트가 사용해야할 게이트웨이 주소를 정의합니다.

    option domain-name-servers 203.249.84.7;
    클라이언트가 사용해야 할 dns서버 주소를 정의합니다.

    option domain-name linux.co.kr;
    네트워크의 이름을 정의합니다.

    subnet 203.249.84.0 netmask 255.255.255.0 {
    range 203.249.84.223 203.249.84.240;
    }
    DHCP 서버가 관리하는 네트워크의 주소인 서브넷을 설정하고, C클래스 이므로 넷마스크의 주소를 255.255.255.0로 설정합니다. range는 클라이언트에게 할당될 네트워크의 주소 범위를 설정합니다.

    특정 호스트에 대해서 고정된 IP 주소를 할당하려면 아래와 같이 설정합니다.
    host adam{
    hardware ethernet 10:0A:18:4B:C9:09;
    fixed-address 203.249.84.239;
    }
    네트워크 카드의 고유 주소인 이더넷 어드레스가 10:0A:18:4B:C9:09인 컴퓨터에 대해서는 항상 203.249.84.239라는 고정된 IP를 할당합니다.


  • /var/state/dhcp/dhcpd.lease
    dhcpd.release는 DHCP 서버가 호스트에 어떤 IP 주소를 할당하는지를 기록하는 로그 파일로 관리자에게 반드시 필요한 파일입니다. 아래의 명령어로 간단히 파일을 생성하기만 하면 됩니다.
    # touch /var/state/dhcp/dhcpd.leases

    파일을 생성한 후부터는 DHCP 서버가 클라이언트에게 IP를 할당할 때마다 자동으로 dhcpd.leases파일에 기록이 됩니다.


  • DHCPd 실행하기
    이제 마지막으로 DHCPd 데몬을 실행하면 시스템을 재 부팅하지 않고도 DHCP Server를 구동할 수 있습니다. 아래의 명령어로 DHCPd를 실행하면 DHCP Server에 대한 정보와 함께 정상적으로 구동되었다는 메시지가 출력됩니다.




4 장 : DHCP Client 설정하기

이제 DHCP 서버를 사용하기 위한 클라이언트의 설정에 대해 알아보도록 하겠습니다. 윈도우와 리눅스의 경우 각각 방법은 틀리지만 간단하게 설정할 수 있습니다.

  • 리눅스에서 동적 IP 설정하기
    리눅스에서 ISC DHCP를 설치하면 DHCP 서버와 클라이언트 데몬이 모두 설치되므로 아래와 같이 간단히 DHCP Client 데몬을 실행시키기만 하면 됩니다.

    [Kernel 2.0.x의 경우]
    # /usr/sbin/dhcpcd

    [Kernel 2.2.x 이상의 경우]
    # /usr/sbin/dhclient


    또는 네트워크 제어판인 netcfg나 netconf를 실행시켜 Interface configuration Protocol로 dhcp를 선택하면 됩니다.

    1. 아래의 명령어로 Network Configurator 프로그램을 실행시킵니다.
    # netcfg &

    2. Network Configurator 대화상자가 나타나면 Interface 탭을 선택합니다.


    3. Interface 설정에서 [Add]버튼을 누르고 Ethernet 인터페이스를 선택한 후 [OK]버튼을 클릭합니다. 부팅시에 이더넷 인터페이스가 활성화되도록 설정하고, Interface configuration Protocol을 dhcp로 선택합니다. 설정 후에는 [Done]버튼을 누릅니다.


    4. 이더넷(eth0) 인터페이스를 선택해 [Activate]버튼을 눌러 활성화시킵니다. 모든 설정이 끝나면 [Save]버튼을 누르고 [Quit]버튼을 누릅니다.


    5. DHCP Client 가 정상적으로 실행되었는지 확인하기 위해 ifconfig 명령어를 입력해 봅니다.


    6. 현재의 라우팅 테이블 정보를 확인해 보려면 아래의 명령어를 실행합니다.


  • 윈도우에서 설정하기
    윈도우 95/98/NT/2000에서는 더욱 간단하게 DHCP Client를 구성할 수 있습니다. 바탕화면의 [네트워크환경]에 마우스 오른쪽 버튼을 누른 후 [등록정보]를 선택합니다. 설치된 네트워크의 구성요소에서 [TCP/IP 프로토콜]을 선택하고 [등록정보] 버튼을 클릭합니다. [자동으로 IP 주소 받기]와 [자동으로 DNS 서버 주소 받기]를 체크한 후 [확인]버튼을 누르시면 됩니다.


    윈도우를 재부팅한 후, DHCP Server로부터 동적 IP를 제대로 할당 받았는지 확인하기 위해 도스 프롬프트 창에서 ipconfig 또는 route print 명령어를 입력합니다.

    DHCP Server의 환경설정 파일에서 설정한 IP 주소, 서브넷 마스크, 게이트웨이를 모두 정상적으로 받아왔다면 설치는 성공한 것입니다.

  • 맺음말
    이제 DHCP에 대한 기본적인 개념에 대해 이해하셨으리라 생각합니다. DHCP서버를 이용하면, 부당한 IP사용자들을 알 수 있으며, Log파일을 분석하여, 사용자들의 네트워크 사용상태를 파악할 수 있습니다. 또한 네트워크의 IP 할당을 중앙에서 조절할 수 있으므로, IP간의 충돌을 예방할 수 있으며, IP셋팅을 위해서 관리자들의 도움을 일반사원들이 받지 않아도 됩니다. IP의 이전이나 네임서버의 이전도 손쉽게 해결됩니다.
    동적인 IP와 정적인 IP의 설정 두 가지를 병행할 수 있으므로 네트워크의 사내관리를 쉽게 할 수도 있습니다. 이런 장점을 이용하여 보다 손쉬운 네트워크 관리에 리눅스 머신을 사용하시길 바랍니다.

'리눅스 퍼옴' 카테고리의 다른 글

리눅스 32bit 와 64bit 구분  (0) 2010.03.29
rpm 명령어 자세한 옵션  (2) 2008.11.11
mplayer 설치하기  (0) 2008.09.09
시스템관리툴킷 : 로그파일 이해하기  (0) 2008.06.04
[펌글] 리눅스 하드 관리하기  (0) 2007.11.22
[펌글] VNC 서버  (1) 2007.11.22