· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Linuxdoc Sgml/DHCP

DHCP mini-HOWTO (DHCPd/DHCPcd)

DHCP mini-HOWTO (DHCPd/DHCPcd)

DHCP 프로토콜과 클라이언트/서버에서 DHCP를 사용하는 방법

블라디미르 북산(Vladimir Vuksan) vuksan@veus.hr

v2.6, 14 November 1998 심상현 artsilly@eeserver.korea.ac.kr v1.0s, 1998년 12월 28일
이 문서에서는 리눅스 호스트를 DHCP 서버로 사용하거나 DHCP 클라이언트로 사용하기 위하여 설정하는 방법에 대해 기본적인 수준에서 다루고 있다.

1. 소개

1.1 변명의 글

글의 내용에 대해 어떠한 책임을 질 의무는 없다고 생각한다. 이 글의 모든 예제나 내용을 쓰는 것에 대해서는 사용자가 책임을 져야 한다. 게다가 이 글은 오랜 만에 개정된 최신 버전의 글이므로 사용자의 시스템에 심각한 영향을 끼칠 오류나 정확하지 않은 부분이 있을 수 있다. 비록 내키지 않더라도 항상 주의를 기울이며 각 순서를 수행해야 한다. 저자는 이 문서로 생긴 일에 대해서 책임을 지지 않는다.

또한 이 글은 공식적인 문서가 아니라는 사실은 인식하고 있어야 한다. 비록 이 글의 내용이 많은 사람들에게 있어서 적용이 되고 잘 작동하지만 가정에서 시작한 내용이 적지 않음을 밝혀둔다. 결국 이 글을 쓰는 것에 대한 모든 책임은 사용자가 져야한다.

1.2 이 글의 최신 버전에 대하여

이 글의 최신 버전은 정기적으로 comp.os.linux.answers 에 포스팅 되고 있다. 또한 HOWTO 문서에 대한 정보를 담고 있는 많은 익명 ftp를 통해서도 얻을 수 있다.

ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO

일반적으로는 리눅스 문서 프로젝트 홈페이지(Linux Document Project)를 통해 쉽게 다운로딩 할 수 있다.

http://sunsite.unc.edu/LDP/

1.3 피드백

이 문서를 제작하는데 여러분의 도움은 무척이나 유용하다. 여러분의 제안이나 의견이 없었다면 이 문서는 존재하지 못했을 것이다. 이 문서에 대해 어떤 추가 사항이나, 비평 혹은 제안이 있으시다면 vuksan@vesus.hr로 메일 보내주시기 바란다.

1.4 도움을 주신 분들

이 문서는 기본적으로 파울 맥키브(Paul Mackeev)의 최초 버전 문서를 기초로 하여 작성되었다. 그리고 다음의 사람들이 미니 하우투를 작성하는데 많은 공헌을 했다.

  • 하이코 쉴리터만(Heiko Shlittermann)
  • 조나단 스미스(Jpnathan Smith)
  • 단 카바자(Dan khabaza)
  • 할 사도프스키(Hal Sadofsky)
  • 헨릭 스토우너(Henrik Stoerner)
  • 폴 로싱턴(Paul Rossington)

1.5 저작권

이 문서의 저작권은 블라디미르 북산(Vladimir Vuksan) (c) 1998 에게 속한다. 다음 사항을 지키며 배포해 주길 바란다.

  • 이 저작권을 표시하는 한, 다른 리눅스의 하우투 문서처럼 여러가지 방법을 통해 일부나 전체를 임의로 바꾸거나 배포할 수 있다. 상업적인 재 배포 역시 권장되고 허락된다. 그러나 그럴 상황이 되면 꼭 저자에게 공적으로 연락해 주길 바란다.
  • 이 문서에 대한 번역이나 이 문서로부터의 발췌, 혹은 재 편집에 대한 내용 역시 저작권을 꼭 표시해 주기 바란다. 물론 다른 리눅스 하우투 문서 역시 이런 규칙을 지켜주기 바란다. 규칙을 지키지 않고는 이 글을 이용한 다른 문서의 작성은 허용되지 않는다. 특이한 상황 하에서만 예외가 인정될 수 있다. - 이 경우는 밑에 나오는 LINUX HOWTO 관리자와 접촉하기 바란다.
  • 이 밖에 저작권에 대한 질문이 있다면, LINUX HOWTO 관리자와 접촉하기 바란다. 다음으로 메일을 보내기 바란다. linux-howto@sunsite.unc.edu

2. DHCP 프로토콜

DHCP(Dynamic Host Configuration Protocol)는 각각의 호스트(물론 이때에는 DHCP 클라이언트가 실행중이어야 한다)의 중요한 네트워크 파라미터 및 설정 사항들을 서버의 세팅을 사용하여 원격으로 설정해주는 프로토콜이다. DHCP는 BOOTP와 호환을 유지한다. 이점에 대해서는 RFC 2131(재분류 이전의 RFC 1531)를 참고하기 바란다. (그밖의 문서들에 대해서는 이문서 말미의 인터넷 사이트들을 이용하여 참고하기 바란다.) 물론 다음의 DHCP FAQ 역시 많은 도움이 될 것이다.

http://web.syr.edu/~jmwobus/comfaqs/dhcp.faq.html

이 mini-HOWTO 문서는 DHCP 서버 데몬과 DHCP 클라이언트 데몬에 대해 모두 다루고 있다. (이전 DHCPd mini-HOWTO 와 DHCPcd mini-HOWTO는 이 하나의 문서로 합쳐져서 더 이상 존재하지 않는다.) 아마 대부분의 사용자들은 리모트 서버로부터 네트워크 정보를 가져오기 위해 워크스테이션의 클라이언트 데몬을 세팅하는 것에 대해 관심이 많을 것이다. 서버 데몬을 세팅하는 것에 대해서는 네트워크 공급처의 시스템 관리자가 더욱 더 많은 관심을 가질 것이다. 결국 일반 사용자라면 클라이언트 데몬 만을 살펴보면 될 것이다.

3. DHCP 클라이언트 설정하기

3.1 클라이언트 데몬 다운로딩하기

2.0.x 대의 커널

어떤 배포본을 쓰는가에 관계없이 리눅스용 DHCP 클라이언트 데몬을 다운로딩 할 필요가 있다. 다운로딩해야 할 패키지는 흔히 dhcpcd 라 부르는 것이고 현재 버전은 0.70 이다. 다음 사이트에서 패키지를 다운 받고, 패키지에 대한 설명을 읽을 수 있을 것이다.

ftp://sunsite.unc.edu/pub/Linux/system/network/daemons/dhcpcd-0.70.lsm

2.1.x 대의 커널

2.1.x 대의 커널에서는 ipv4 네트워크 패키지가 변경되었기 때문에 dhcpcd가 정상적으로 동작하지 않는다. 물론 대부분의 사용자들은 개발버전을 사용하지 않기 때문에 그리 큰 문제가 아니라고 본다. 하지만 개발버전하에서 dhcpcd를 사용하고 싶다면 세지 비즈유크(Sergi Viznyuk), sergei@phystech.com가 제작하고 고친 dhcpcd 1.3.3 을 사용할 수 있다. 다음 사이트에서 받을 수 있다.

3.2 슬랙웨어에서 셋업

우선은 DHCPcd 를 다운로드 받아야 한다. 다음의 선사이트를 참고하라.

  • 압축을 푼다.
    tar -zxvf dhcpcd-0.70.tar.gz
    
  • 압축이 풀려진 디렉토리로 들어가고 dhcpcd를 make 한다.
    cd dhcpcd-0.70
    make
    
  • 설치한다.(물론 이러한 과정은 루트로 해야 한다)
    make install
    

위의 과정을 끝낸다면 아마 /etc/dhcpc 디렉토리가 생길 것이다. 이 디렉토리에는 DHCP의 정보 및 설정화일이 들어가고 dhcpcd 실행화일은 /usr/sbin밑으로 들어갈 것이다. 만일 시스템 부팅중에 DHCP를 실행하고 싶다면 다음과 같이 rc.d 를 바꾸어 주어야 할 것이다.

cd /etc/rc.d
mv rc.inet1 rc.inet1.OLD

이 과정은 보는 바와 같이 예전 네트워크 설정 스크립트를 다른 이름으로 바꾸어 보관해 놓는 것이다. DHCP를 쓰기 위해 새로운 rc.inet1 스크립트를 만들어야 할 것이다. 다음과 같은 내용을 필요로 한다.


#!/bin/sh
#
# rc.inet1      This shell script boots up the base INET system.

HOSTNAME=`cat /etc/HOSTNAME` #This is probably not necessary but I
                             #will leave it in anyways

# Attach the loopback device.
/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo

# IF YOU HAVE AN ETHERNET CONNECTION, use these lines below to configure the
# eth0 interface. If you're only using loopback or SLIP, don't include the
# rest of the lines in this file.

/usr/sbin/dhcpcd

위의 스크립트를 저장하고 리부팅을 한다. 이제는 3.8절로 넘어가면 된다.

3.3 레드햇 5.0 그리고 그 이상의 버전에서 셋업

레드햇 5.0 이상의 배포본에서는 DHCPcd를 설정하는 것이 정말로 쉽다. 오직 당신이 해야 할 일은 다음과 같이 타이핑 함으로 컨트롤 패널을 여는 것이다.

control-panel
  • "네트워크 콘피규레이션(Network Configuration)"을 선택
  • 인터페이스 택에서
  • 이더넷(아마 eth0)인터페이스를 선택후
  • Edit Ethernet/Bus Interface의 "Activate interface at boot time"을 선택한다. 물론 프로토콜로는 DHCP를 선택해 주면 된다.
이제는 3.8절로 가야 한다.

3.4 레드햇 4.x와 칼데라 오픈 리눅스 1.1/1.2에서 셋업

이 버전은 배포본의 cdrom이나 ftp에서 RPM으로 묶여진 DHCPcd를 쉽게 찾을 수 있다. 다운로드 가능한 ftp 사이트는 다음을 참고하라.

ftp://ftp.redhat.com/pub/redhat/redhat-4.2/i386/RedHat/RPMS/dhcpcd-0.6-2.i386.rpm

다운 받은 DHCPcd를 인스톨한다.

rpm -i dhcpcd-0.6-2.i386.rpm
물론 슬렉웨어에서 하는 것처럼 직접 소스를 받아다가 컴파일해서 쓸 수도 있다. 지금 설명하고자 하는 방법은 낫씽(nothing) nothing@cc.gatech.edu으로부터 받은 내용이다.

우선 /etc/resolv.conf에 놓여있는 고정 IP를 지워야 하셔. 하지만 search와 nameserver가 있는 라인은 그대로 둬야해. 왜냐면 무슨 이유에선지 모르겠지만 내가 쓰는 dhcpcd 가 /etc/dhcpc/resolv.conf 화일을 안만들더라구. 그래서 그냥 이런식으로 설정을 해 줬지. 하지만 다음과 같이 하면 될꺼셔. 나머지 부분이 다이나믹 하게 설정될 꺼셔. 우선 /etc/sysconfig/network 화일에서 HOSTNAME하고 GATEWAY를 지웠지 물론 다른 엔트리인 NETWORKING, DOMAINNAME, GATEWAYDEV같은 것은 남겨두고, 그리고 /etc/sysconfig/network-scripts/ifcfg-eth0 에서도 IPADDR, NETMASK, NETWORK, 그리고 BROADCAST등을 지웠지, DEVICE 랑 ONBOOT는 절대 손을 안대고. 그리곤 BOOTPROTO에 항목은 BOOTPROTO=dhcp로 바꿨지. 꼭 저장하셔. 저장 안하고 닭질하지 말고. 그리고 부팅하셔. 그러면 DHCP가 동작할 꺼셔(인용문이길래 졸립기도 하고 해서 저팔계 말투로 번역해 봤습니다. 반응이 안좋으면 담부터 이런 짓 안하죠. 역주)

이젠 3.8절로 가자!

3.5 데비안에서 셋업

다음 사이트에서 데비안 패키지의 DHCPcd를 찾을 수 있을 것이다.

ftp://ftp.debian.org/debian/dists/slink/main/binary-i386/net/dhcpcd_0.70-4.deb

혹은 3.2절에서처럼 소스 직접를 컴파일해도 될 것이다. 하여간 deb 패키지를 풀고 인스톨하기 위해서는

dpkg -i /where/ever/your/debian/packages/are/dhcpd*deb
의 명령을 쓴다. 그런데 이 경우에는 아무런 설정을 해줄 필요가 없는 것으로 보인다. 하이코 쉴리터만(Heiko Shlittermann), heiko@os.inf.tu-dresden.de의 편지에 의하면

dhcpcd 패키지를 설치하면 그 시작 스크립트가 같이 설치됩니다. 다른 시작 스크립트가 놓이는 /etc/init.d/<패키지 이름>에 놓이겠죠. 여기서는 /etc/init.d/dhcpcd 입니다. 이 스크립트를 여러분이 쓰는 런레벨에 맞추어 /etc/rc?.d/의 디렉토리로 카피 해 주거나 링크해 주시면 됩니다. 보통은 3번이나 5번을 쓰죠. (이 내용이 잘 이해 안가시면 inittab에 대한 매뉴얼을 보시기 바랍니다. 역주) 그 다음에 꼭 부팅할 필요는 없습니다. 다음번에 부팅하면 다시 시작하겠지만 지금은 dhcpcd 스크립트를 수동으로 실행 시키면됩니다. 다음처럼 합니다.
/etc/init.d/dhcpcd start
이제 3.8절로 건너뜁니다.

3.6 파워피씨 리눅스(LinuxPPC)와 MkLinux에서 셋업

다음 내용은 R. 샤피로(R. Sharpiro)가 쓴 내용이다. 요이치 하리구치(Yoichi Hariguchi)가 쓴 dhcpcd 의 0.65/0.70 버전 모두 파워피씨 리눅스와 Mklinux 커널 2.1.24에서 훌륭하게 동작하였다. 물론 동작을 위해서는 파워피씨 리눅스에서 항상 있는 그런 세팅을 잡아주어야 한다.

  • 만일 소스에서 실행화일로 컴파일 하고 싶다면 파워피씨 리눅스의 컴파일러가 'char'를 'unsigned char'로 처리한다는 것을 생각해야 한다. 그러나 하리구치는 'char'를 'signed char'로 생각하고 작성하였다. 이 문제를 해결하기 위해서는 Makefile 의 CFLAGS에 다음 옵션을 넣도록 한다. "-fsigned-char" 그리고 make!
  • 현재 파워피씨 리눅스(aka linux-pmac)의 안정버전은 2.1.24이고, 이때는 2.1 패치를 요구한다. http://www.cro.net/~vuksan/dhcppatch DR2.1 과 DR3.0의 mklinux는 2.0대의 커널(2.0.33)을 사용하지만 다른 패치는 필요치 않다. 물론 패치는 해도 좋다. 파워피씨 리눅스 cdrom에 있는 dhcpcd rpm에는 2.1 패치가 들어있지 않고, 결국 cd에 있는 화일만으로는 파워피씨 리눅스에서 사용할 수 없다. 물론 mklinux에서는 사용 가능할 것이다.
  • 파워피씨 리눅스 2.1대의 커널에서는 dhcpcd가 시작할때 라우터에서 경고 메세지를 뿌리는 것을 잠시 볼 수 있을지 모른다. 무시할 수 있음 무시하라.
  • 하리구치의 dhcpcd는 파워피씨 리눅스에서 약간 정체된다. 서버로 연결하고 설정 값을 받고, 라우팅을 시작하는데 30초정도 걸린다. 또한 파워피씨 리눅스의 2.1.24에서는 위의 경고 메세지를 통해 라우팅이 가능하다는 것을 알 수 있다.

2.1.24 이후의 버전에서는 안타깝게도 하리구치가 제작한 dhcpcd가 작동하지 않는다. 이 경우에는 반드시 세지 비즈유크(Sergi Viznyuk)가 작성한 프로그램을 사용하여야 한다.(최신 버전은 1.3.9이다. 위에 언급한 URL을 참고하라) 그런데 비즈유크의 dhcpcd는 glibc 2에서 작성되었다. 아직 리눅스 파워피씨 2.1.1xx는 아직 glibc 2를 사용하지 않는다. 결국 약간의 트릭을 이용하여 컴파일을 해야한다. 물론 컴파일이 되기만하면 가장 최근의 커널에서 잘 작동한다.(물론 MkLinux 파워피씨 리눅스 2.1.24에서는 아니다.)

다음의 커널에서 비즈유크의 dhcpcd(v1.3.7)을 테스트 해봤다. 2.1.102, 103, 115, 119의 버전의 파워피씨 리눅스에서 잘 작동하였다. 여기서 비즈유크의 dhcpcd를 설치하고 설정하는 것에 대해서는 더이상 언급하지 않겠다. 비즈유크의 dhcpcd는 2.1.24버전에서 동작하지 않는다. 하지만 이 버전에서는 패치한 하리구치의 dhcpcd를 쓸 수있다.

정리해 보면 MkLinux에서는 하리구치의 프로그램만 사용가능하다. 파워피씨 리눅스 2.1.24에서는 패치된 하리구치의 프로그램만 사용가능하다. 파워피씨 리눅스 2.1.102이상의 버전에서는 비즈유크의 프로그램만 사용가능하다. 물론 실행화일로 만들기 위해서는 약간의 트릭을 이용해야 한다.

비즈유크의 dhcpcd는 /etc/resolv.conf 화일을 다른 이름으로 바꾸어 놓고 dhcpcd에 맞는 설정을 직접 작성한다. 따라서 /etc/dhcpc 밑의 화일을 카피하거나 링크시킬 필요가 없다. 또한 비즈유크의 프로그램이 /sbin 밑에 설치된다는 것을 언급하고 싶다. 따라서 지금까지 위에 설명한 것이나 하리구치의 버전과는 달리 스타트업 스크립트나 명령어들이 조금 달라져야 한다는 것을 유의하기 바란다. ifup스크립트의 내용이 달라질 것이다. ifup스크립트에 대해서는 아래에 나온다.

파워피씨 리눅스에서 돌아가는 dhcpcd의 바이너리를 원하면 reshapiro@mediaone.net에게 메일을 보내기 바란다.

또한 ftp://ftp.linuxppc.org/pub/linuxppc/contrib/linuxppc-R4/RPMS/ 에서도 구할 수 있다. 그러나 위 디렉토리의 dhcpcd-1.3.8-2.ppc.rpm의 화일은 깨졌으니 받지 말기 바란다. 확실한 것은 파워피씨 리눅스 2.1.24를 위한 dhcpcd-0.70-0.ppc.rpm이다. 혹은 파워피씨 리눅스 2.1.102 이상의 버전이라면 dhcpcd-1.3.8-3.ppc.rpm을 사용해야 한다. 아마 1.3.9버전의 rpm이 곧 나오게 될 것 같다. 1.3.9의 버전에서는 -c 옵션을 이용하여 명령어 화일을 읽을 수 있게 하였다. 이 기능은 하리구치의 0.65버전이나 0.70버전에 있는 것을 차용한 것이다.(원래 비즈유크의 dhcpcd에는 이 기능이 없다.)

3.7 토큰링 네트워크

토큰링 네트워크상에서는 dhcpcd가 올바르게 동작하지 않는다. 헨릭 스토우너(Henrik Stoerner), henrik_stoerner@olicom.dk가 이문제에 대한 해결방안을 내게 보내주었다.

이 문제는 dhcpcd가 아직까지는 이더넷 카드만을 인식하기 때문이다. 결국 토큰링 카드를 발견한다면 아마 Interface is not ethernet 인터페이스가 이더넷이 아닙니다.라는 에러를 보여줄 것이다. 해결책은 간단한 패치로 가능하다. 나는 이 패치를 제공하는 작은 홈페이지를 만들었고 여기서는 레드햇의 RPM이나 바이너리로도 구할 수 있을 것이다. 패치를 dhcpcd의 개발자에게로 보냈으니 아마 다음 버전 중에는 정식으로 포함되어 배포되지 않을까 싶다. ^^
http://eolicom.olicom.dk/~storner/dhcp/

3.8 공통적으로 읽어야 할 것

리부팅 - 즉 dhcp가 정상적으로 시작되었다면 네트워크 인터페이스가 세팅되었을 것이다. ifconfig 명령으로 다음과 비슷한 것을 볼 수 있을 것이다.


lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
          UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
          RX packets:302 errors:0 dropped:0 overruns:0 frame:0
          TX packets:302 errors:0 dropped:0 overruns:0 carrier:0 coll:0

eth0      Link encap:Ethernet  HWaddr 00:20:AF:EE:05:45
          inet addr:24.128.53.102  Bcast:24.128.53.255  Mask:255.255.254.0
          ^^^^^^^^^^^^^^^^^^^^^^^
          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24783 errors:1 dropped:1 overruns:0 frame:1
          TX packets:11598 errors:0 dropped:0 overruns:0 carrier:0 coll:96
          Interrupt:10 Base address:0x300

아마 밑줄쳐진 inet이라는 라벨뒤에 평범해보이는 숫자가 있다면 그 주소로 설정에 성공한 것이다. 만일 0.0.0.0을 본다해도 절망하지는 말라. dhcpcd가 IP 주소를 얻기위한 임시 주소일 수 있기 때문이다. 만일 몇분이 지난 후에도 0.0.0.0이라면 3.10절을 보며 연구를 더 해야 한다. DHCPcd는 하나의 데몬이고, 컴퓨터가 켜져있는 동안에는 항상 실행되고 있다. 그리고 매 3시간마다 DHCP 서버에 연결하여 새롭게 갱신된 IP 주소를 받아온다. 이런 과정은 syslog에 기록될 것이다.(슬랙웨어 /var/adm/syslog, 레드햇/오픈리눅스 /var/log/syslog) 마지막으로 네임서버를 세팅해야 한다. 두가지 방법중 하나를 선택하면 된다. 네임서버의 IP 주소를 /etc/resolv.conf 에 넣던지 혹은 DHCPcd가 DHCP 서버로부터 리스트를 받아 /etc/dhcpc 밑에 새로운 resolv.conf를 사용하도록 하는 것이다. 후자의 경우를 자세히 살펴보면 우선 사용하던 /etc/resolv.conf 를 /etc/resolv.conf.OLD등으로 바꾸어주고 /etc/dhcpc 디렉토리가 없을 경우에는 만들어준다. 그리고는 /etc/dhcpc/resolv.conf를 /etc/resolv.conf로 링크시켜준다.

mv /etc/resolv.conf /etc/resolv.conf.OLD
mkdir /etc/dhcpc
ln -s /etc/dhcpc/resolv.conf /etc/resolv.conf

이렇게 해서 잘 안된다면 낫씽이 보내준 의견에 헨릭이 개정을 가한 방법을 써야 한다. 이 마지막 방법은 나의 dhcpcd가 /etc/dhcpc/resolv.conf를 만들지 못해 생긴 것이다. 다음처럼 /etc/sysconfig/network-scripts/ifup 화일을 수정해야 한다.(올바르게 한것 같진 않지만 나의 경우에는 작동한다^^)


elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then
        echo -n "Using DHCP for ${DEVICE}... "
        /sbin/dhcpcd -c /etc/sysconfig/network-scripts/ifdhcpc-done ${DEVICE}
        echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh
        if [ -f /var/run/dhcp-wait-${DEVICE}.pid ]; then
          ^^^^
                echo "failed."
                exit 1

이 아래와 같이 밑줄 부분을 바꾸었다.
elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then
        echo -n "Using DHCP for ${DEVICE}... "
        /sbin/dhcpcd
        echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh
        if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ]; then
        ^^^^^^
                echo "failed."
                exit 1

!를 눈여겨보라. 이제 다 되었다고 본다. 올바르게 동작하는 것을 즐기면 된다.

3.9 참고 사항

다음 명령은 별로 필요할 것 같지는 않지만 어떤 이들에게는 무척이나 유용할 것 같다.

a) 네트워크로 연결되는 것이 아주 가끔일 때, 이경우에는 root로써 명령행으로 dhcpcd를 수행하는게 좋을 것이다.

/usr/sbin/dhcpcd
만일 dhcpcd를 끄고 싶다면 다음과 같이 한다.
/usr/sbin/dhcpcd -k

3.10 문제 해결

만일 위의 모든 과정을 다 했음에도 불구하고 네트워크를 억세스 하지 못한다면 다음 몇가지 이유로 설명할 수 있을 것이다.

I. 네트워크 카드가 정확하게 세팅되지 않았다.

리눅스 박스가 부팅되는 동안 부트 메세지 중에 네트워크 카드에 대한 설정 내용을 출력한다. 아마 다음과 비슷한 내용일 것이다.


eth0: 3c509 at 0x300 tag 1, 10baseT port, address  00 20 af ee 11 11, IRQ 10.
3c509.c:1.07 6/15/95 becker@cesdis.gsfc.nasa.gov

만일 위와 같은 내용이 보이지 않는다면 이더넷 카드가 리눅스에서 아예 인식되지 않은 것이다. 위와 비슷한 내용이 나왔음에도 잘 되지 않는다면 이더넷 카드의 IRQ나 베이스 어드레스 등의 물리적인 설정이 잘못된 것이다. 각 네트워크 카드의 설정 디스켓을 이용하여 베이스 어드레스와 IRQ를 맞추어 주고, 리눅스에서도 하드웨어와 맞는 설정을 해 주어야 한다.

II. 지금 연결하고 있는 DHCP 서버가 RFC 1541을 따른다.

이럴 경우에는 -r 옵션을 이용하여 dhcpcd를 실행시킨다. 즉 다음과 같이 한다.

/usr/sbin/dhcpcd -r
올바르게 설정되어 있는지 확인하기 위해 ifconfig명령을 통해 확인해 본다. 물론 DHCP를 통해 네트워크 설정 중에는 위에 말한 바와 같이 inet.addr이 0.0.0.0을 표시하므로 어느정도 시간이 지나고 확인해 본다. dhcpcd 를 init.d의 스크립트를 통해 실행 시킨다면 스크립트 내의 /usr/sbin/dhcpcd를 "-r" 옵션을 통해 수행하도록 바꿔줘야 한다.

III. 부팅하는 동안 "Using DHCP for eth0 ... failed" 같은 메세지가 출력 된다. 하지만 내 시스템은 잘 작동하는 것 같다.

아마 지금 레드햇을 쓰고 있고 위에 말한 모든 과정을 철저히 이행하지 않은 것 같다. :-) 위의 3.8절에서 바꿔야 한다고 했던 스크립트 내용 - 두번째 if 문안에 !를 표시하는 것을 빼먹었다. 3.8절을 다시한번 읽어보고, 확인하기 바란다.

IV. 네트워크를 몇 분정도 밖에 사용할 수 없다. 더이상 응답이 없다.

몇몇 사용자로부터 위와 같은 증상을 보이는 gated(게이트웨이 데몬)와의 충돌 문제가 보고되었다. gated가 현재 실행중인지 다음과 같은 명령

ps -auxww | grep gate
을 통해 알아보고 만일 gated가 수행중이라면 gated가 꼭 필요한 프로그램인지 확인하고, 필요치 않다면 /etc/rc.d에 있는 시작 스크립트 중에서 제거하거나, 아예 패키지를 rpm 매니저를 통해 제거하도록 한다.

V. 부트 메세지를 통해 봤을 때, 내 이더넷 카드가 확실히 작동하는 것임은 분명하다. 하지만 "NO DHCPOFFER" 라는 메세지가 로그화일에 생긴다. 나의 PCMCIA의 이더넷 카드에서도 똑같은 일이 벌어진다.

지금쓰고 있는 이더넷 포트가 10BaseT(전화플러그 형식)인지 확인해야 한다. 확인 해 보는 방법은 부팅시에 나오는 메세지를 통해 쉽게 알 수 있다. 다음 밑줄 그은 부분을 보라.


eth0: 3c509 at 0x300 tag 1, 10baseT port, address  00 20 af ee 11 11, IRQ 10.
                            ^^^^^^^^^^^^
3c509.c:1.07 6/15/95 becker@cesdis.gsfc.nasa.gov

사실 PCMCIA 이더넷을 쓰는 다른 사용자들 역시 비슷한 질문을 하였다. 이유는 포트 타입이 10Base2 타입(얇은 동축케이블)으로 되어있기 때문으로 보인다. 10BaseT 형식으로 바꾸어 주기만 하면 리부팅 없이 세팅이 가능하다.

VI. DHCP 클라이언트가 브로트캐스트로 요청하나 아무런 응답이 없다.

어떤 종류의 시스템에서는 응답요청이 되는 호스트를 꼭 지정해 주어야 할 필요가 없다. 이럴 때는 dhcpcd -h foohost'형식으로 호스트 이름을 적어주어야 한다. 아마 호스트 이름을 원하는 서버라면 사용자 계정을 원할 것이다.

VII. 위의 모든 과정을 따랐으나 잘 되지 않는다.

케이블 모뎀 사용자라면 다음을 눈여겨 봐야 할 것이다. 케이블 모뎀에서는 일반적으로 네트워크 카드의 이더넷 어드레스를 저장해 둔다. 따라서 이더넷 카드가 바뀌거나, 컴퓨터가 바뀐다면 케이블 모뎀에게 새로운 컴퓨터나 카드가 설치된 것을 알려줘야 한다. 물론 단지 컴퓨터가 켜져 있는 동안 모뎀을 껐다 겨면 된다. 이런 방법이 지원되지 않는다면 케이블 네트워크를 제공하는 회사의 기술지원부로 연락하는 수밖에 없다.

방화벽에 대한 내용도 있다. 방화벽 설정(ipwadm rules)에서 DHCP가 사용하는 67/68번 포트를 사용하지 못하게 되어있는 경우가 있다. 이 경우 방화벽 설정을 바꾸어 줄 필요가 있다. 물론 세심한 주의를 기울이기 바란다.

VIII. 지금 현재 메디아원(Media One) 익스프레스 서비스를 사용하고 있는데 여전히 접속이 안 된다.

메디아원에서 사용하는 DHCP 서버가 뭔지 모를 새로운 확장형식을 사용하는 것으로 보인다. 더 이상은 문제가 되지 않을 것 같지만, 이 문제에 대해 이야기를 하고 넘어가는 것이 좋을 것 같다. 만일 불운하게도 - 운이 좋을 수도 있다. NT가 있다면 '이벤트 보여주기' 프로그램에서 다음과 같은 경고가 나오는 것을 볼 수 있다. DHCP received an unknown option 067 of length 005. The raw option data is given below. 0000: 62 61 73 69 63 basic

다음 ftp 사이트에서 이 확장형식을 지원하는 프로그램의 바이너리를 받던지 소스를 받도록 한다.

ftp://vanbuer.ddns.org/pub

4. DHCP 서버 셋업

4.1 유닉스를 위한 DHCP 서버

흔히 말하는 유닉스 스타일의 OS에서 사용할 수 있는 DHCP 서버의 종류는 다양하다. 이것들은 상용 또는 무료의 형태로 배포된다. 무료 소프트웨어중 매우 인기 있는 것중 하나가 Paul Vixie/ISC DHCDd이다. 가장 최근의 버전은 1.0이고, 현재 2.0이 베타 테스트 중이다. 하지만 우리는 1.0으로 문서를 작성하였고 아직은 1.0을 사용하기를 권고한다. 다음 사이트에서 받을 수 있을 것이다.

ftp://ftp.isc.org/isc/dhcp/

다운로드 후 압축을 풀고 생긴 디렉토리로 들어가 다음의 과정을 밟는다.

./configure
아마 설정을 하기위해 어느정도의 시간이 걸릴 것이다. 다 되면
make;make install
을 통하여 쏘스를 컴파일하고 설치한다.

4.2 네트워크 설정

설치가 끝나고나면 ifconfig -a 명령을 통해 다음과 같은 내용을 볼 수 있을 것이다.


eth0      Link encap:10Mbps Ethernet  HWaddr 00:C0:4F:D3:C4:62
          inet addr:183.217.19.43  Bcast:183.217.19.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2875542 errors:0 dropped:0 overruns:0
          TX packets:218647 errors:0 dropped:0 overruns:0
          Interrupt:11 Base address:0x210

만일 3번째 라인에 있는 MULTICAST 라는 단어가 보이지 않는다면 멀티캐스트와 Socket Filtering을 지원하도록 커널 컴파일을 다시해야 할 것이다. 하지만 대부분의 시스템에서는 멀티캐스트가 지원되고 있을 것이다. 다음 과정은 255.255.255.255를 위한 라우팅을 추가해 주어야 한다. DHCPd의 README 파일에서 인용해 보면

어떤 선택된 클라이언트 - 예를 들어 windows 95 시스템 - 와 잘 부합되어 돌아가는 dhcpd를 위해서, 데몬에서 대상 IP 주소인 255.255.255.255와 패킷들을 함께 보낼 수 있어야 한다. 불행히도 리눅스는 255.255.255.255를 내부 서브넷 브로드캐스트 어드레스로 설정해 버리고 만다. 이런 결과는 DHCP 프로토콜과 부합되지 않는다. 물론 많은 DHCP 클라이언트에서는 이런 문제점이 드러나지 않는다. 하지만 몇몇 클라이언트(모든 마이크로소프트사의 클라이언트)에서는 문제가 있다. 아마 DHCPOFFER 메세지를 서버로부터 받을 수 없다는 경고가 나올 것이다.

다음의 명령행으로 추가한다.

route add -host 255.255.255.255 dev eth0

만일

255.255.255.255: Unknown host

라는 응답을 받는다면 /etc/hosts파일에 다음의 엔트리를 추가한 후

255.255.255.255 all-ones

다시 한번 라우팅을 한다.

route add -host all-ones dev eth0

혹은 이런 방식도 가능하다.

route add -net 255.255.255.0 dev eth0

당연한 이야기지만 eth0은 물리적인 네트워크 디바이스의 이름이다. 다른 이름을 쓴다면 적절히 바꿔주길 바란다.

4.3 DHCPd의 옵션

이제 DHCPd를 설정해야 한다. 설정 파일은 /etc/dhcpd.conf이다. 없다면 만들도록 한다. 일반적인 방법으로는 IP address를 임의로 설정하게 하는 것이다. 이것은 다음과 같은 설정으로 가능하다.


default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "mydomain.org";

subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.10 192.168.1.100;
   range 192.168.1.150 192.168.1.200;
}

위의 설정으로는 클라이언트에게 192.168.1.10에서 192.168.1.100까지 그리고 192.168.1.150부터 192.168.1.200까지의 IP 어드레스를 할당할 것이다. 클라이언트가 적절한 시간내에 응답을 하지 않는다 하더라도, 우선적으로는 600초 동안 IP 어드레스를 할당한다. 그렇지 않는다면 최대한 7200초를 할당한다. 또한 서버는 각 클라이언트로 하여금 서브넷 마스크를 255.255.255.0으로 쓰도록 알려준다. 192.168.1.255는 브로드 캐스트 어드레스이고, 192.168.1.254는 라우터나 게이트웨이를 가리킨다. 물론 도메인 네임 서버 역시 세팅되어있다. 만일 특정 이더넷 카드를 가진 클라이언트에게 특정한 IP주소를 주고 싶다면 다음과 같은 방법으로 할 수 있을 것이다.


host haagen {
   hardware ethernet 08:00:2b:4c:59:23;
   fixed-address 192.168.1.222;
}

이 것은 이더넷 어드레스로 08:00:2b:4c:59:23를 가진 네트워크 카드를 설치한 컴퓨터에 192.168.1.222의 IP 어드레스를 할당해 준다.

또한 여러가지 옵션들을 섞어 이용할 수도 있다. 즉 어떤 클라이언트는 고정적인 IP 어드레스를 가지고 있고(서버들) 다른 것들은 다이나믹한 IP 로 할당하기를 바란다면 다른 옵션들을 이용하여 세팅 가능하다(ex wins server addresses, time server 등등) 더 자세한 것이 알고 싶다면 dhcp.conf의 매뉴얼을 참고하기 바란다.

4.4 서버 실행하기

단순하게는

/usr/sbin/dhcpd
라고 명령을 주는 것만으로 간단히 실행 할 수있다.(혹은 부트 스크립트에 넣는 방법 역시 유용하다) 만일 최초로 실행해 볼때 여러가지 설정 사항들에 대해 확인해 보고 싶다면 다음과 같은 명령으로 디버깅 모드에 포그라운드 모드로 사용할 수 있을 것이다.

/usr/sbin/dhcpd -d -f
자 이제 DHCP를 지원하는 클라이언트를 부팅시키고 서버의 콘솔에 뜨는 메세지를 점검하자. 오류를 발견할 지도, 자신의 실력에 감탄할 지도 모른다.

5. 역자로부터

  • 이 글은 원문의 내용을 한국어로 번역한 글입니다.
  • 이 글은 리눅스 한글문서 프로젝트http://eeserver.korea.ac.kr/~artsilly/trans/로부터 얻을 수 있습니다.
  • 본문의 내용중 잘못된 내용이나 번역이 잘못된 부분이 있으면 artsilly@eeserver.korea.ac.kr로 메일을 보내주시기 바랍니다.
  • 원문의 버전이 올라가는대로 번역본도 개정하도록 하겠습니다. 개정이 늦어지면 위의 주소로 제게 알려주시기 바랍니다.
  • 이 한국어 버전의 글을 인용, 편집, 재배포하실 경우에는 원저자와 함께 역자의 저작권을 표시해 주시기 바랍니다.
  • 다들 즐거운 리눅싱 하시길 ^^ - 심각한 말투로 번역하는 건 너무 힘드네요. TT; 즐거운 말투나 사투리로 번역하고 싶네요. ^^
  • 버전정보
    • v0.3, 1998년 12월 25일 크리스마스!! 울고 있을 땅콩공주님을 위해 ^^; / 원문 v2.3 번역
    • v1.0s, 1998년 12월 29일 / 원문 v2.6 번역, sgml 변환




sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2003-10-18 10:58:59
Processing time 0.0055 sec