[linux] 홈네트워크를 위한 DHCP
로빈아빠
본문
홈네트워크를 위한 DHCP
By Jc Pollman and Bill Mote
윤봉환/ el@linuxlab.co.kr
날마다 사무실, 집으로 랩탑을 끌고 다녀야 하는데 그 때마다, 한번은 M$운영체로 부트해서 네트워크 설정을 집이나, 사무실에 맞게 설정한 다음 (시디를 넣어야 한다구 징징거릴 때도 있던데..), 그 다음에...음.. 재 부트한다?! 안타깝게도 나는 그랬다!
하지만 ,이제 사무실과 집에서 그다지 복잡하지 않은 네트워크 환경만 제대로 설정한다면, DHCP가 당신에게 최고의 새 친구가 될 것이다!
Disclaimer:
이 기사는 단행본, 하우투 문서들, 맨 페이지, 유즈넷 뉴스그룹, 그리고 셀 수 없는 시간을 키보드와 씨름하며 얻은 유용한 정보들을 제공한다. 비록 모든 주제에 대해 통달했다는 것을 뜻하지는 않지만, 초급자가 중급 사용자가 되는 발판이 될 것이다. 모든 예제들은 우리 홈 네트워크로부터 그대로 가져왔으므로 우리가 아는 한 잘 동작한다.
이 가이드를 어떻게 사용할까:
·【Enter】처럼 각 괄호에 담긴 단어들을 키보드에서 그 키를 누르거나
마우스 1번 버튼을 누르라는 뜻이다.
· {your name here}처럼 구불구불한 괄호안에 담긴 단어들은 사용자가
입력해야 할 “진짜”데이터를 뜻한다.
· 이탤릭체로(기울어진) 쓰여진 텍스트는 사용자자신이 셸 프롬프트에
써넣어야 할 명령을 뜻한다.
필요한 것들 Prerequisites:
이 가이드는 사용자의 시스템에 DHCP 2.0 최신버전이 설치되었으며, 로컬 IP 네트워크가 잘 작동하고 있다고 가정한다.
DHPC@HOME, 왜? 편한가.
내가 집에 왔을 때, 그리고 그 다음날 사무실로 다시 돌아갔을 때 매번 네트워크 설정을 바꾸는데 나는 아주 진저리가 났다. 그렇다고, 내 대신 그런 설정들을 관리할 특별한 유틸리티를 추가하는 것도 그다지 맘에 드는 방법은 아니었다. 그러다가 하루는 좋은 생각이 떠올랐다.
우리는 일할 때 대개 DHCP를 사용한다. 그럼, 어째서 홈 네트워크에서 DHCP를 사용할 생각을 못했을까! 홈 네트워크에서도 DHCP 서버가 로컬 네트워크 IP 주소, 필요한 DNS정보와 적절한 게이트웨이를 자동으로 내게 제공할 것이다.
譯 註 : DHCP
DHCP(Dynamic Host Configuration Protocol) 서버는 “로컬 네트워크 IP 주소, 필요한 DNS정보와 적절한 게이트웨이를 자동으로 제공”한다. 새로운 머신을 네트워크에 더하거나, 다른 서브넷으로 옮기더라도 관리자나, 사용자가 해야 할 일은 단지 NIC에 케이블을 연결하는 것이다. 모든 것을 DHCP 데몬이 알아서 처리한다.
DHCP 이전에도 이런 기능을 수행하는 BOOTP(Bootstrap Protocol)라는 프로토콜이 있었다. DHCP는 BOOTP의 모든 기능을 포함하며(그대로 가져다 쓸 수도 있다, 아마 하위 호환성이라 부르던가..), TCP/IP와 관련된 더 많은 강력한 옵션들이 있다. 또, 영구 고정주소와 동적주소를 마음대로 사용할 수도 있다. DHCP를 사용하려면 커널이 멀티캐스트를 지원해야 한다.
셸 프롬프트에서 다음 명령을 통해 알아본다:
root@sle reply [30] # ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:40:05:36:8D:A6 inet addr:192.168.0.11 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 nterrupt:10 Base address:0x6c00
그리고, /etc/hosts 파일에 다음 한 줄을 추가한다.
255.255.255.255 all-ones
다음에 위에서 설정한 브로드캐스트 주소를 라우팅 테이블에 추가한다. -host all-ones 처럼 사용할 수도 있지만, 다른 대부분의 네트워크 설정에서처럼 IP 주소를 사용하는 것이 더 바람직하다:
route add -host 255.255.255.255 dev eth0
DHCP@Work, 왜?
DHCP는 귀찮은 단순 작업들을 더 간편하게 시스템에 적용하도록 만든다.
나는 600여 대의 워크스테이션이 설비된 곳에서 일한 적이 있다. 회사에서 일하게 된 첫 날에 나는 내 자신의 머신을 책상에 설치하고 네트워크에 연결했다. 그런 일들을 마치는데 그 덜 떨어진 네트워크 관리자 때문에 거의 30분이나 걸렸다.
그는 여전히 지역 회사에서 네트워크 서비스를 제공하며, (내 시스템에 고정적으로 연결되어 있어 그로서는 사용할 수 없는) 비어있는 IP 주소를 열심히 찾고 있을 것이다.
그는 C 클래스 네트워크 주소를(192.168.[1-3].[1-254]) 세 장 가득 프린트해서 가지고 있었다. 그 주소범위에는 750개가 넘는 IP 주소를 사용할 수 있다는 걸 계산하는데 뭐 대단한 고등수학이 필요한 것도 아니다. 그리고, 내가 속한 네트워크 세그먼트에는 255.
그의 작업:
1. 출력물에서 열린 슬롯을 찾는다.
2. 그 슬롯이 정말 열렸는지 키보드를 두드려, 모니터를 통해 확인한다.
3. 그 주소를 사용하는 머신이 정말 없는지 Ping 해본다.
4. 그 다음 IP 주소를 종이에 적어 내게 주고, 시스템에 입력한다.
그 날이 금요일이고, 그 다음 주 월요일 아침에 출근해서 나는 IP 충돌이 있다는 걸 알게 되었다. 흠.. 진짜 정확한 시스템이 아닌가.
그때까지도 내가 DHCP에 대해 알고 있는 모든 것은, 집에서 네트워크에 연결할 때 내 ISP로부터 동적 IP 주소를(dynamic IP address) 받도록 선택해야 한다는 것에 지나지 않았다. 나는 어떻게 작업해야 할지 아무 생각도 해낼 수 없었고, 더구나 DHCP를 사용하면 이 '문제'를 간단하게 해결할 수 있다는 것조차도 몰랐다. 결국 회사 안의 다른 네트워크 서비스 그룹에 억지로 합류했더니, 그들이 내게 가르쳐줬고, 우리는 모든 머신에 대해 전면적인 정면 공격을 감행했다.
DHCP는 오늘도 돌아가고 있다 ...
IP 주소부여 체계 (IP Numbering Schemes: )
일단 홈 네트워크에서 DHCP를 운용하기로 마음 먹었다면 재빠르게 움직이자.
번호부여 스키마를 계산하고 실제로 그 것을 시스템에 적용하자. 먼저 자신의 네트워크에서 눈에 보이는 IP 주소가 무엇인지 정확하게 알고 있어야 한다. 이 충고는 더 많은 머신들을 호스팅해야 하는 법인체에서는 더욱 중요하게 지켜야 한다. 어찌 되었든, 아래 예에서처럼 내가 홈 네트워크에서 사용한 방법과 유사하게 사용하면 잘 동작한다: 하면 잘 동작한다:
IP Address Range Hosts
* 주요 머신과 네트워크 장비 *
.001 라우터(혹시 라우터가 있다면)
.002 - .009 네트워크 장비(switches and hubs)
.010 - .075 서버들
.076 - .099 네트워크 프린터들
* 사용자의 워크스테이션 *
.100 - .254 DHCP range
혹시 위 예제와 비슷한 구조를 부여하면, 규정상 금지되어 있는 별난 IP 주소를 사용하려 하거나, 프린터가 당신 머신에 텔넷하려고 시도하는 것처럼 터무니없는 무언가를 하려고 하는 등 작업에 대한 로그를 더 손쉽게 살펴볼 수 있을 것 같은가? 흠.. 어림없는 일이고 그리고 정말 그렇게 생각했다면 보안에 대한 지난달 기사를 읽지 않았다고 분명히 드러내는 것이다.
준비가 되었으면 셸 프롬프트에서 다음 명령을 실행한다.
whereis dhcpd[Enter]
dhcpd가 설치되어 있다면 아래 예문과 비슷한 출력물을 보게 될 것이다. 그렇지 않다면, 먼저 DHCP를 설치해야 한다. DHCP를 설치한 다음에 이 기사로 돌아온다:
dhcpd: /usr/sbin/dhcpd /etc/dhcpd.conf /etc/dhcpd.leases /etc/dhcpd.leases~
譯註: DHCP 설치
리눅스에서는 ISC의 dhcpd를 사용한다. 인터넷을 통해 무료로 배포되는 것으로 리눅스는 물론 솔라리스 등 대부분 유닉스 시스템에서 실행된다. ISC(Internet Software Consortium) 홈페이지(http://www.isc.org/isc)에서 최신버전의 소스를 구할 수 있다. 다른 프로그램들과 마찬가지로 프로그램 소스가 놓인 디렉토리에서 ./configure 명령을 실행한다. 이 명령으로 Makefile이 만들어지면 make, make install을 순서대로 실행해 컴파일하고, 설치한다.
많은 사람들이 설치와 업그레이드가 편한 RPM 버전을 더 좋아하는데, 나도 리눅스월드에서 판매하는 레드햇 리눅스 6.1로부터 dhcp-2.0b1pl6-6.i386.rpm 패키지를 설치했다.
# rpm -Uvh RPMS/dhcp-2.0b1pl6-6.i386.rpm
/etc/dhcpd.conf:
서버 설정은 이 파일에서부터 시작한다. /etc/dhcpd.conf는 DHCP의 모든 것을 설정하는 열쇠이고 매우 간단한 구조를 가진다. 내 파일은 다음과 같다:
/etc/dhcpd.conf September 18, 1999 Author: Bill Mote default-lease-time 36000; max-lease-time 72000; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.10; option domain-name-servers 192.168.1.10; option domain-name "mynetwork.cxm"; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.254; }
譯註:/etc/dhcpd.conf
dhcpd.conf는 텍스트 형식의 파일로 대소문자를 구분한다.
① 임대시간
default-lease-time 36000;
클라이언트가 IP 주소를 임대하려는 시간에 대해 구체적으로 요청하지 않았을 때 기본임대시간을 초단위로 설정한다. 지정한 시간이 지나면 클라이언트가 연결되어 있는지 확인하고 계속 연결되어 있다면 이전에 부여한 IP 주소를 유지한다. ISP에서는 예문보다 더 짧은 시간을(10800 정도) 설정한다.
② 최대 임대시간
max-lease-time 72000;
주소를 사용할 수 있는 최대 시간을 초단위로 설정한다.
③ 옵션
option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.10; option domain-name-servers 192.168.1.10; option domain-name "mynetwork.cxm"; option interface-mtu 1500;
옵션들은 모두 option이라는 키워드로 시작한다.
라우터와 네임서버, 패킷 크기 등을 설정한다.
④ 서브넷
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.254; }
subnet에서는 IP 주소와 서브넷 매스크로 DHCP 서비스를 적용할 네트워크 범위를 정한다. range는 사용가능한 IP 주소 목록을 지정해서, 실제로 IP 주소를 대여할 수 있도록 한다.
range 문이 없으면 IP 주소를 임대할 수 없다.
예문에서처럼 첫 번째 주소 값이 범위의 첫 값이며, 두 번째 주소 값이 범위의 마지막 값이다. range 문을 여러 번 사용해서 비 연속적인 주소를 지정할 수도 있다. 예를 들면 다음과 같다:
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.120; range 192.168.1.200 192.168.1.254; }
⑤ 그 밖에,
get-lease-hostname true;
IP 주소와 함께 호스트이름도 임대한다. 임대하는 호스트이름은 DNS 설정에서 가져오므로 DNS 서버가 먼저 설정되어 있어야 한다. 이 기능이 설정되면 호스트 이름을 찾는 시간이 필요하므로 더 더뎌진다.
host 문으로 고정 IP 주소를 부여하도록 설정할 수도 있다. host 문에서는 아래 예문처럼 NIC의 하드웨어 주소를 사용한다.
host foo { hardware ethernet 00:40:05:36:8D:A6; fixed-address 192.168.1.100; }
group 문으로 각각 서로 다른 옵션을 사용하는 서브넷, 공유 네트워크, 호스트 등을 그룹화할 수 있다.
group { use-host-decl-names true; host foo { hardware ethernet 00:40:05:36:8D:A6; fixed-address 192.168.1.100; } host bar { hardware ethernet 00:50:04:BC:12:FC; fixed-address 192.168.1.111; } }
네트워크에 여러 개의 서브넷을 운영한다면 각 서브넷마다 DHCP 서버를 두는 것이 좋다. 이 방법은 서버의 부하를 줄여주고, 패킷이 쓸데 없이 이더넷을 돌아다닐 필요가 없어 트래픽도 줄여준다. 그 뿐만 아니라, 전원 불량이나 시스템 손상 등으로 DHCP서버에 문제가 생기더라도 그 피해를 최소한으로 줄일 수 있다.
/etc/dhcpd.leases:
이제 dhcp 서버에게 어디서부터 시작해야 하는지 알려 주어야 한다. 먼저 비어있는 leases 파일을 만들자. 셸 프롬프트에서 다음 명령을 입력하면 된다:
touch /etc/dhcpd.leases[Enter]
아래는 내 시스템에서 '실제로 사용 중인' dhcpd.leaes 파일이다. DHCP 클라이언트가 서버로부터 성공적으로 IP 주소를 얻기 전까지는 이 파일이 비어있을 것이다.
/etc/dhcpd.leases September 18, 1999 Author: Bill Mote lease 192.168.1.100 { starts 6 1999/09/18 17:27:36; ends 6 1999/09/18 17:37:36; hardware ethernet 00:60:08:e3:60:03; uid 01:00:60:08:e3:60:03; client-hostname "NoFear"; }
Let's go already!
드디어 고대하던 순간. 이제 dhcp 서버를 두드려 깨우고 클라이언트를 작동할 시간이다. 셸 프롬프트에 아래 명령을 입력한다:
/usr/sbin/dhcpd[Enter]
이 명령이 서버 쪽에서 할 일의 전부이다. 이제 클라이언트 설정을 하자.
譯註:/usr/sbin/dhcpd
dhcpd는 일반적으로 옵션없이 실행되지만 필요하다면 다음과 같은 옵션을 사용하기도 한다.
dhcpd는 일반적으로 옵션없이 실행되지만 필요하다면 다음과 같은 옵션을 사용하기도 한다.
dhcpd [-p port] [-f] [-d] [-q] [-cf config-file] [-lf lease-file] [if0 [...ifN]]
[-f] dhcpd가 포그라운드에서 실행되도록 한다.
[-d] 에러메시지를 syslogd로 보내는 대신 stderr로 보낸다.
[-cf config-file] dhcpd.conf 파일 대신에 다른 설정파일을 사용하도록 설정한다. 새로운 설정파일을 테스트할 때 사용한다.
[-lf lease-file] dhcpd.leases 파일 대신에 다른 이름을 가진 파일을 사용하도록 설정한다.
M$ client:
이 기사에서는 사용자가 리눅스 서버에 연결하기 위해 거의 대부분 M$ 머신을 사용한다고 가정할 것이다.
마이크로소프트 클라이언트는 환경설정이 정말 쉽다. 그저 다음 순서에 따라 마우스만 클릭하는 것으로 충분하다:
시작 -> 설정 -> 제어판 -> 네트워크
네트워크 설정 목록에서 랜카드에 연결된 TCP/IP 프로토콜을(전화접속이 아니다) 찾는다. 마우스 1번 버튼을 눌러 그 항목을 활성화하고 등록정보 명령버튼을 누른다. 그림이 글보다 더 쉽게 이해될 것 같아 아래에 TCP/IP을 어찌 해야 할지 설명하는 그림 몇 개를 넣는다:
M$ 머신이 리부트되면 바로, DHCP가 반길 것이다! DHCP에 대해 더 많은 것을 알고 싶으면 DHCP-minihow-to 문서를 읽으면 좋다. '반길 것이다'라고 문단의 첫 문장을 시작한 것은, 다음과 같은 몇 가지 이유가 있어서 이다.
DHCP와 Win98 SE (second edition? sales extender?) -- [Bill이 그의 비누곽 위에서 춤추는 것] 인상적인 것은 *모든이*들이, 그들의 집에서 인터넷 연결을 공유하기 위해서 Linux 박스를 세팅한다는 것이다. 마이크로소프트는 Win98 SE에 내장된 인터넷 연결 공유기능으로 간단한 절차에 따라 응답한다. 정말 솔직하게 말해서, 나는 이것을 매우 좋아한다. 우리 교회 컴퓨터들이 전화접속 하나로부터 작동하도록 설정했었고, 이 방법으로 시스템은 매우 잘 동작했다.
Win98의 ICS는 DHCP에 연결할 때 조금 다른 어떤 방법을 사용하는 것처럼 보일지도 모른다. 만약 DHCP 서버를 찾을 수 없다면 내가 집에서 사용하는 Win98 SE 머신이 NIC에 IP 주소를 부여한다. 지난 버전 Win9x는 IP 주소의 대여기간이 끝나지 않는 한 최근에 기억된 IP 주소를 사용할 것이다... 단지 그 뿐이다.
사용자의 Win98 SE 박스가 IP 주소를 가져오는 설정에 문제를 가지고 있다면 사용자는 아마도 영구 주소를 할당하고 싶어할지도 모르겠다. 사용자가 바라는 주소부여 스키마는 무엇인가?사용자는 주어진 범위의 처음과 끝 번호를 제외한 작은 영역을 지정할 수 있지만, 여전히 위에서처럼 기본 값은 .100이다.(예를 들어 .100- .105)
사용자가 여전히 DHCP에 의해 할당된 IP 주소를 가지기를 원한다면 다음 과정들을 따라 그렇게 할 수 있다:
▶ 사용자의 네트워크에서 Win98 SE 박스에 IP 주소를 부여한다.
이것은 단지 임시설정이니 걱정할 것 없다.
▶ 이틀쯤 기다려본다.
▶ DHCP로 돌아와 머신을 다시 설정한다.
한심한가? 그렇더라도, 나는 정말 말썽을 영원히 고치는 방법을 찾아본 적이 없다. 아마 문서화되지 않은 Win9x 레지스트리 조작 방법이 있을지도 모르겠다.. 누군가 그런 방법들을 알고 있다면 내게 e-mail을 보내주기 바란다.
다음 달에는 Linux 클라이언트 쪽에서 DHCP를 다루어 본다.
Copyright ⓒ 1999, JC Pollman, Bill Mote
Published in Issue 48 of Linux Gazette,
December 1999
By Jc Pollman and Bill Mote
윤봉환/ el@linuxlab.co.kr
날마다 사무실, 집으로 랩탑을 끌고 다녀야 하는데 그 때마다, 한번은 M$운영체로 부트해서 네트워크 설정을 집이나, 사무실에 맞게 설정한 다음 (시디를 넣어야 한다구 징징거릴 때도 있던데..), 그 다음에...음.. 재 부트한다?! 안타깝게도 나는 그랬다!
하지만 ,이제 사무실과 집에서 그다지 복잡하지 않은 네트워크 환경만 제대로 설정한다면, DHCP가 당신에게 최고의 새 친구가 될 것이다!
Disclaimer:
이 기사는 단행본, 하우투 문서들, 맨 페이지, 유즈넷 뉴스그룹, 그리고 셀 수 없는 시간을 키보드와 씨름하며 얻은 유용한 정보들을 제공한다. 비록 모든 주제에 대해 통달했다는 것을 뜻하지는 않지만, 초급자가 중급 사용자가 되는 발판이 될 것이다. 모든 예제들은 우리 홈 네트워크로부터 그대로 가져왔으므로 우리가 아는 한 잘 동작한다.
이 가이드를 어떻게 사용할까:
·【Enter】처럼 각 괄호에 담긴 단어들을 키보드에서 그 키를 누르거나
마우스 1번 버튼을 누르라는 뜻이다.
· {your name here}처럼 구불구불한 괄호안에 담긴 단어들은 사용자가
입력해야 할 “진짜”데이터를 뜻한다.
· 이탤릭체로(기울어진) 쓰여진 텍스트는 사용자자신이 셸 프롬프트에
써넣어야 할 명령을 뜻한다.
필요한 것들 Prerequisites:
이 가이드는 사용자의 시스템에 DHCP 2.0 최신버전이 설치되었으며, 로컬 IP 네트워크가 잘 작동하고 있다고 가정한다.
DHPC@HOME, 왜? 편한가.
내가 집에 왔을 때, 그리고 그 다음날 사무실로 다시 돌아갔을 때 매번 네트워크 설정을 바꾸는데 나는 아주 진저리가 났다. 그렇다고, 내 대신 그런 설정들을 관리할 특별한 유틸리티를 추가하는 것도 그다지 맘에 드는 방법은 아니었다. 그러다가 하루는 좋은 생각이 떠올랐다.
우리는 일할 때 대개 DHCP를 사용한다. 그럼, 어째서 홈 네트워크에서 DHCP를 사용할 생각을 못했을까! 홈 네트워크에서도 DHCP 서버가 로컬 네트워크 IP 주소, 필요한 DNS정보와 적절한 게이트웨이를 자동으로 내게 제공할 것이다.
譯 註 : DHCP
DHCP(Dynamic Host Configuration Protocol) 서버는 “로컬 네트워크 IP 주소, 필요한 DNS정보와 적절한 게이트웨이를 자동으로 제공”한다. 새로운 머신을 네트워크에 더하거나, 다른 서브넷으로 옮기더라도 관리자나, 사용자가 해야 할 일은 단지 NIC에 케이블을 연결하는 것이다. 모든 것을 DHCP 데몬이 알아서 처리한다.
DHCP 이전에도 이런 기능을 수행하는 BOOTP(Bootstrap Protocol)라는 프로토콜이 있었다. DHCP는 BOOTP의 모든 기능을 포함하며(그대로 가져다 쓸 수도 있다, 아마 하위 호환성이라 부르던가..), TCP/IP와 관련된 더 많은 강력한 옵션들이 있다. 또, 영구 고정주소와 동적주소를 마음대로 사용할 수도 있다. DHCP를 사용하려면 커널이 멀티캐스트를 지원해야 한다.
셸 프롬프트에서 다음 명령을 통해 알아본다:
root@sle reply [30] # ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:40:05:36:8D:A6 inet addr:192.168.0.11 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 nterrupt:10 Base address:0x6c00
그리고, /etc/hosts 파일에 다음 한 줄을 추가한다.
255.255.255.255 all-ones
다음에 위에서 설정한 브로드캐스트 주소를 라우팅 테이블에 추가한다. -host all-ones 처럼 사용할 수도 있지만, 다른 대부분의 네트워크 설정에서처럼 IP 주소를 사용하는 것이 더 바람직하다:
route add -host 255.255.255.255 dev eth0
DHCP@Work, 왜?
DHCP는 귀찮은 단순 작업들을 더 간편하게 시스템에 적용하도록 만든다.
나는 600여 대의 워크스테이션이 설비된 곳에서 일한 적이 있다. 회사에서 일하게 된 첫 날에 나는 내 자신의 머신을 책상에 설치하고 네트워크에 연결했다. 그런 일들을 마치는데 그 덜 떨어진 네트워크 관리자 때문에 거의 30분이나 걸렸다.
그는 여전히 지역 회사에서 네트워크 서비스를 제공하며, (내 시스템에 고정적으로 연결되어 있어 그로서는 사용할 수 없는) 비어있는 IP 주소를 열심히 찾고 있을 것이다.
그는 C 클래스 네트워크 주소를(192.168.[1-3].[1-254]) 세 장 가득 프린트해서 가지고 있었다. 그 주소범위에는 750개가 넘는 IP 주소를 사용할 수 있다는 걸 계산하는데 뭐 대단한 고등수학이 필요한 것도 아니다. 그리고, 내가 속한 네트워크 세그먼트에는 255.
그의 작업:
1. 출력물에서 열린 슬롯을 찾는다.
2. 그 슬롯이 정말 열렸는지 키보드를 두드려, 모니터를 통해 확인한다.
3. 그 주소를 사용하는 머신이 정말 없는지 Ping 해본다.
4. 그 다음 IP 주소를 종이에 적어 내게 주고, 시스템에 입력한다.
그 날이 금요일이고, 그 다음 주 월요일 아침에 출근해서 나는 IP 충돌이 있다는 걸 알게 되었다. 흠.. 진짜 정확한 시스템이 아닌가.
그때까지도 내가 DHCP에 대해 알고 있는 모든 것은, 집에서 네트워크에 연결할 때 내 ISP로부터 동적 IP 주소를(dynamic IP address) 받도록 선택해야 한다는 것에 지나지 않았다. 나는 어떻게 작업해야 할지 아무 생각도 해낼 수 없었고, 더구나 DHCP를 사용하면 이 '문제'를 간단하게 해결할 수 있다는 것조차도 몰랐다. 결국 회사 안의 다른 네트워크 서비스 그룹에 억지로 합류했더니, 그들이 내게 가르쳐줬고, 우리는 모든 머신에 대해 전면적인 정면 공격을 감행했다.
DHCP는 오늘도 돌아가고 있다 ...
IP 주소부여 체계 (IP Numbering Schemes: )
일단 홈 네트워크에서 DHCP를 운용하기로 마음 먹었다면 재빠르게 움직이자.
번호부여 스키마를 계산하고 실제로 그 것을 시스템에 적용하자. 먼저 자신의 네트워크에서 눈에 보이는 IP 주소가 무엇인지 정확하게 알고 있어야 한다. 이 충고는 더 많은 머신들을 호스팅해야 하는 법인체에서는 더욱 중요하게 지켜야 한다. 어찌 되었든, 아래 예에서처럼 내가 홈 네트워크에서 사용한 방법과 유사하게 사용하면 잘 동작한다: 하면 잘 동작한다:
IP Address Range Hosts
* 주요 머신과 네트워크 장비 *
.001 라우터(혹시 라우터가 있다면)
.002 - .009 네트워크 장비(switches and hubs)
.010 - .075 서버들
.076 - .099 네트워크 프린터들
* 사용자의 워크스테이션 *
.100 - .254 DHCP range
혹시 위 예제와 비슷한 구조를 부여하면, 규정상 금지되어 있는 별난 IP 주소를 사용하려 하거나, 프린터가 당신 머신에 텔넷하려고 시도하는 것처럼 터무니없는 무언가를 하려고 하는 등 작업에 대한 로그를 더 손쉽게 살펴볼 수 있을 것 같은가? 흠.. 어림없는 일이고 그리고 정말 그렇게 생각했다면 보안에 대한 지난달 기사를 읽지 않았다고 분명히 드러내는 것이다.
준비가 되었으면 셸 프롬프트에서 다음 명령을 실행한다.
whereis dhcpd[Enter]
dhcpd가 설치되어 있다면 아래 예문과 비슷한 출력물을 보게 될 것이다. 그렇지 않다면, 먼저 DHCP를 설치해야 한다. DHCP를 설치한 다음에 이 기사로 돌아온다:
dhcpd: /usr/sbin/dhcpd /etc/dhcpd.conf /etc/dhcpd.leases /etc/dhcpd.leases~
譯註: DHCP 설치
리눅스에서는 ISC의 dhcpd를 사용한다. 인터넷을 통해 무료로 배포되는 것으로 리눅스는 물론 솔라리스 등 대부분 유닉스 시스템에서 실행된다. ISC(Internet Software Consortium) 홈페이지(http://www.isc.org/isc)에서 최신버전의 소스를 구할 수 있다. 다른 프로그램들과 마찬가지로 프로그램 소스가 놓인 디렉토리에서 ./configure 명령을 실행한다. 이 명령으로 Makefile이 만들어지면 make, make install을 순서대로 실행해 컴파일하고, 설치한다.
많은 사람들이 설치와 업그레이드가 편한 RPM 버전을 더 좋아하는데, 나도 리눅스월드에서 판매하는 레드햇 리눅스 6.1로부터 dhcp-2.0b1pl6-6.i386.rpm 패키지를 설치했다.
# rpm -Uvh RPMS/dhcp-2.0b1pl6-6.i386.rpm
/etc/dhcpd.conf:
서버 설정은 이 파일에서부터 시작한다. /etc/dhcpd.conf는 DHCP의 모든 것을 설정하는 열쇠이고 매우 간단한 구조를 가진다. 내 파일은 다음과 같다:
/etc/dhcpd.conf September 18, 1999 Author: Bill Mote default-lease-time 36000; max-lease-time 72000; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.10; option domain-name-servers 192.168.1.10; option domain-name "mynetwork.cxm"; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.254; }
譯註:/etc/dhcpd.conf
dhcpd.conf는 텍스트 형식의 파일로 대소문자를 구분한다.
① 임대시간
default-lease-time 36000;
클라이언트가 IP 주소를 임대하려는 시간에 대해 구체적으로 요청하지 않았을 때 기본임대시간을 초단위로 설정한다. 지정한 시간이 지나면 클라이언트가 연결되어 있는지 확인하고 계속 연결되어 있다면 이전에 부여한 IP 주소를 유지한다. ISP에서는 예문보다 더 짧은 시간을(10800 정도) 설정한다.
② 최대 임대시간
max-lease-time 72000;
주소를 사용할 수 있는 최대 시간을 초단위로 설정한다.
③ 옵션
option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.10; option domain-name-servers 192.168.1.10; option domain-name "mynetwork.cxm"; option interface-mtu 1500;
옵션들은 모두 option이라는 키워드로 시작한다.
라우터와 네임서버, 패킷 크기 등을 설정한다.
④ 서브넷
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.254; }
subnet에서는 IP 주소와 서브넷 매스크로 DHCP 서비스를 적용할 네트워크 범위를 정한다. range는 사용가능한 IP 주소 목록을 지정해서, 실제로 IP 주소를 대여할 수 있도록 한다.
range 문이 없으면 IP 주소를 임대할 수 없다.
예문에서처럼 첫 번째 주소 값이 범위의 첫 값이며, 두 번째 주소 값이 범위의 마지막 값이다. range 문을 여러 번 사용해서 비 연속적인 주소를 지정할 수도 있다. 예를 들면 다음과 같다:
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.120; range 192.168.1.200 192.168.1.254; }
⑤ 그 밖에,
get-lease-hostname true;
IP 주소와 함께 호스트이름도 임대한다. 임대하는 호스트이름은 DNS 설정에서 가져오므로 DNS 서버가 먼저 설정되어 있어야 한다. 이 기능이 설정되면 호스트 이름을 찾는 시간이 필요하므로 더 더뎌진다.
host 문으로 고정 IP 주소를 부여하도록 설정할 수도 있다. host 문에서는 아래 예문처럼 NIC의 하드웨어 주소를 사용한다.
host foo { hardware ethernet 00:40:05:36:8D:A6; fixed-address 192.168.1.100; }
group 문으로 각각 서로 다른 옵션을 사용하는 서브넷, 공유 네트워크, 호스트 등을 그룹화할 수 있다.
group { use-host-decl-names true; host foo { hardware ethernet 00:40:05:36:8D:A6; fixed-address 192.168.1.100; } host bar { hardware ethernet 00:50:04:BC:12:FC; fixed-address 192.168.1.111; } }
네트워크에 여러 개의 서브넷을 운영한다면 각 서브넷마다 DHCP 서버를 두는 것이 좋다. 이 방법은 서버의 부하를 줄여주고, 패킷이 쓸데 없이 이더넷을 돌아다닐 필요가 없어 트래픽도 줄여준다. 그 뿐만 아니라, 전원 불량이나 시스템 손상 등으로 DHCP서버에 문제가 생기더라도 그 피해를 최소한으로 줄일 수 있다.
/etc/dhcpd.leases:
이제 dhcp 서버에게 어디서부터 시작해야 하는지 알려 주어야 한다. 먼저 비어있는 leases 파일을 만들자. 셸 프롬프트에서 다음 명령을 입력하면 된다:
touch /etc/dhcpd.leases[Enter]
아래는 내 시스템에서 '실제로 사용 중인' dhcpd.leaes 파일이다. DHCP 클라이언트가 서버로부터 성공적으로 IP 주소를 얻기 전까지는 이 파일이 비어있을 것이다.
/etc/dhcpd.leases September 18, 1999 Author: Bill Mote lease 192.168.1.100 { starts 6 1999/09/18 17:27:36; ends 6 1999/09/18 17:37:36; hardware ethernet 00:60:08:e3:60:03; uid 01:00:60:08:e3:60:03; client-hostname "NoFear"; }
Let's go already!
드디어 고대하던 순간. 이제 dhcp 서버를 두드려 깨우고 클라이언트를 작동할 시간이다. 셸 프롬프트에 아래 명령을 입력한다:
/usr/sbin/dhcpd[Enter]
이 명령이 서버 쪽에서 할 일의 전부이다. 이제 클라이언트 설정을 하자.
譯註:/usr/sbin/dhcpd
dhcpd는 일반적으로 옵션없이 실행되지만 필요하다면 다음과 같은 옵션을 사용하기도 한다.
dhcpd는 일반적으로 옵션없이 실행되지만 필요하다면 다음과 같은 옵션을 사용하기도 한다.
dhcpd [-p port] [-f] [-d] [-q] [-cf config-file] [-lf lease-file] [if0 [...ifN]]
[-f] dhcpd가 포그라운드에서 실행되도록 한다.
[-d] 에러메시지를 syslogd로 보내는 대신 stderr로 보낸다.
[-cf config-file] dhcpd.conf 파일 대신에 다른 설정파일을 사용하도록 설정한다. 새로운 설정파일을 테스트할 때 사용한다.
[-lf lease-file] dhcpd.leases 파일 대신에 다른 이름을 가진 파일을 사용하도록 설정한다.
M$ client:
이 기사에서는 사용자가 리눅스 서버에 연결하기 위해 거의 대부분 M$ 머신을 사용한다고 가정할 것이다.
마이크로소프트 클라이언트는 환경설정이 정말 쉽다. 그저 다음 순서에 따라 마우스만 클릭하는 것으로 충분하다:
시작 -> 설정 -> 제어판 -> 네트워크
네트워크 설정 목록에서 랜카드에 연결된 TCP/IP 프로토콜을(전화접속이 아니다) 찾는다. 마우스 1번 버튼을 눌러 그 항목을 활성화하고 등록정보 명령버튼을 누른다. 그림이 글보다 더 쉽게 이해될 것 같아 아래에 TCP/IP을 어찌 해야 할지 설명하는 그림 몇 개를 넣는다:
M$ 머신이 리부트되면 바로, DHCP가 반길 것이다! DHCP에 대해 더 많은 것을 알고 싶으면 DHCP-minihow-to 문서를 읽으면 좋다. '반길 것이다'라고 문단의 첫 문장을 시작한 것은, 다음과 같은 몇 가지 이유가 있어서 이다.
DHCP와 Win98 SE (second edition? sales extender?) -- [Bill이 그의 비누곽 위에서 춤추는 것] 인상적인 것은 *모든이*들이, 그들의 집에서 인터넷 연결을 공유하기 위해서 Linux 박스를 세팅한다는 것이다. 마이크로소프트는 Win98 SE에 내장된 인터넷 연결 공유기능으로 간단한 절차에 따라 응답한다. 정말 솔직하게 말해서, 나는 이것을 매우 좋아한다. 우리 교회 컴퓨터들이 전화접속 하나로부터 작동하도록 설정했었고, 이 방법으로 시스템은 매우 잘 동작했다.
Win98의 ICS는 DHCP에 연결할 때 조금 다른 어떤 방법을 사용하는 것처럼 보일지도 모른다. 만약 DHCP 서버를 찾을 수 없다면 내가 집에서 사용하는 Win98 SE 머신이 NIC에 IP 주소를 부여한다. 지난 버전 Win9x는 IP 주소의 대여기간이 끝나지 않는 한 최근에 기억된 IP 주소를 사용할 것이다... 단지 그 뿐이다.
사용자의 Win98 SE 박스가 IP 주소를 가져오는 설정에 문제를 가지고 있다면 사용자는 아마도 영구 주소를 할당하고 싶어할지도 모르겠다. 사용자가 바라는 주소부여 스키마는 무엇인가?사용자는 주어진 범위의 처음과 끝 번호를 제외한 작은 영역을 지정할 수 있지만, 여전히 위에서처럼 기본 값은 .100이다.(예를 들어 .100- .105)
사용자가 여전히 DHCP에 의해 할당된 IP 주소를 가지기를 원한다면 다음 과정들을 따라 그렇게 할 수 있다:
▶ 사용자의 네트워크에서 Win98 SE 박스에 IP 주소를 부여한다.
이것은 단지 임시설정이니 걱정할 것 없다.
▶ 이틀쯤 기다려본다.
▶ DHCP로 돌아와 머신을 다시 설정한다.
한심한가? 그렇더라도, 나는 정말 말썽을 영원히 고치는 방법을 찾아본 적이 없다. 아마 문서화되지 않은 Win9x 레지스트리 조작 방법이 있을지도 모르겠다.. 누군가 그런 방법들을 알고 있다면 내게 e-mail을 보내주기 바란다.
다음 달에는 Linux 클라이언트 쪽에서 DHCP를 다루어 본다.
Copyright ⓒ 1999, JC Pollman, Bill Mote
Published in Issue 48 of Linux Gazette,
December 1999
관련링크
댓글목록
등록된 댓글이 없습니다.