다음 이전 차례

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 를 다운로드 받아야 한다. 다음의 선사이트를 참고하라.

위의 과정을 끝낸다면 아마 /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
이제는 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에서 훌륭하게 동작하였다. 물론 동작을 위해서는 파워피씨 리눅스에서 항상 있는 그런 세팅을 잡아주어야 한다.

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


다음 이전 차례