강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

리눅스서버와 케이블 모뎀 그리고 DHCP

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

icon01.giftitle70.gif


배철수/리눅스월드 발행인

 

1. 머리말

필자에게 6월은 바쁜 달이었다. 두 업체에 ADSL 공유서버를 설치하였고 모 ISP 업체에는 0141X 망에 연결되는 원클릭서비스에 사용될 PPP 서버를 리눅스에 설치했다. 그리고 여기에 소개하는 업체에는 리눅스서버를 구축하고 케이블모뎀을 리눅스에 연결하였다. ADSL 공유서버는 지난 호에 소개했으므로 이번 호에는 리눅스 서버구축 및 케이블 모뎀 연결 작업을 소개한다.

이 업체는 실명은 소개하지 않는다. 혹시 알려주면 케이블모뎀 회사에서 항의를 할 수도 있기 때문이다. 업체 이름은 그냥 타스 주식회사라고 부르겠다. 이 업체는 사진대여 전문업체이다. 즉 주로 광고회사를 상대로 사진대여를 전문으로 한다. 그런데 이 회사가 업무를 인터넷으로 전환하기 위해 새로운 회사를 신설했다. 즉 대여용 사진을 홈페이지에서 미리 사용자가 보고서 마음에 들면 이 회사의 원본 필름을 대여해 가도록 하는게 주 목적이다. 궁극적으로는 대여도 인터넷으로 할 예정이나 일차로는 견본을 인터넷으로 보여주는게 목표다. 새 회사는 그냥 ㈜감자라고 부르겠다.

기존에는 광고회사는 광고에 실을 사진이 필요하면 이 회사에 찾아와 일일이 원본 필름을 확대경으로 보고 선정하는 방식이었으나 이를 인터넷으로 전환하면 선정 작업은 인터넷으로 하고 대여 신청을 하면 필름을 우송해주면 되므로 일일이 찾아올 필요가 없다.

이 회사는 인터넷은 케이블모뎀으로 연결해 있고 내부 관리업무는 NT를 이용하고 있다. 그런데 케이블모뎀을 직접 허브에 연결하여 20여대의 피시에서 공유해 쓰고 있었다. 그러다 보니 한 사람이 쓰고 있을 때 다른 사람이 연결을 시도하면 기존 사용자는 연결이 끊긴다. 즉 공유가 안되고 있었다. 그래서 케이블모뎀을 리눅스에 연결하여 IP masq로 공유하는 작업도 함께 진행했다.

 

2. 네트워크 개요

필자가 설치한 네트워크 구조는 아래와 같다.

00-7-6.gif

리눅스서버에 랜카드를 3개 꼽고 첫번 랜카드(eth0)는 감자 회사의 랜에 연결하고 두번째(eth1)는 타스 회사에 연결한다. 그리고 세번째 카드(eth2)는 케이블모뎀에 연결한다. 감자의 네트워크 주소는 192.168.1.0, 타스의 네트워크 주소는 200.200.200.0 이다. 타스는 인터넷에 연결되어 있지 않으므로 200.200.200.0은 내부 어드레스이다. 그런데 이를 192.168.X.X의 내부 전용 주소를 사용하지 않은 이유는 기존에 설치된 내부 업무용 NT 서버의 주소가 200.200.200.5이기 때문이다. 즉 192.168.X 주소를 부여하려면 NT의 IP 주소 및 다른 클라이언트 주소를 모두 변경해야 하는데 이게 귀찮아 기존에 사용 중인 200.200.200.X 주소를 그대로 썼다.

 

3. 인터넷 연결

현재는 인터넷 연결을 케이블모뎀을 사용하므로 리눅스에 웹서버를 설치해도 인터넷에 서비스할 수는 없다. 케이블 모뎀은 변동 IP이므로 외부에서 연결할 수가 없다. 정확히 얘기하자면 연결을 할 수는 있지만 주소가 수시로 변동하므로 외부 사용자는 바뀐 주소를 알 수가 없어 연결할 수가 없다. 그래서 인터넷 연결 방법을 여러가지로 검토한 결과 한국통신의 ADSL Multi IP를 사용하기로 했다. 요금이 월 19만원이지만 업로드 속도가 512K까지 나온다고 돼 있으므로 당분간은 별 문제가 없다. (랜투랜 연결로 512k를 사용하려면 월 요금이 100만원이 넘는다)

Multi IP는 공인 IP가 5 개이지만 (추가하면 요금이 증가한다) 이걸로 충분하다. 리눅스에만 공인 IP를 부여하고 다른 피시는 이 IP를 공유해서 쓰면 되기 때문이다. 공인 IP 한 개를 주는 My IP(월 9만원)를 사용해도 되지만 이는 업로드 최대속도가 384k 이므로 조금 비싸도 Multi IP를 사용하기로 했다. (ADSL Multi IP는 다운로드 속도가 2 Mbps 이지만 리눅스에 웹서버를 구축해 외부에 서비스할 때는 다운로드 속도는 중요하지 않다. 업로드 속도가 중요하다) ADSL은 신청했는데 Multi IP는 설치에 2 달을 기다려야 한단다. 그래서 당분간은 케이블모뎀을 그대로 사용하기로 했다.

 

4. 리눅스 서버 사양

필자에게 서버사양을 일임했으므로 필자가 직접 모든 부품을 구입해 서버를 조립하기로 했다. 회사에서 판매하는 피시들은 부품들을 싸구려로 쓰는 경우가 많아 믿을 수가 없기 때문이다. 이 서버는 앞으로 감자회사의 웹서버로 사용되므로 하드 디스크가 중요하다. 사진을 스캐닝해서 인터넷에 올리려면 보통 파일 한 개가 200k 정도는 된다. 그러면 1,000,000개이면 200 기가를 요한다.(이 회사의 필름이 백만장이라고 한다. 물론 이 필름을 다 스캐닝하자면 몇 년이 걸릴 것이다)

하드는 SCSI 방식을 사용하기로 했다. SCSI 하드는 확장성이 뛰어나기 때문이다.(IDE 하드는 피시 한 대에 4 개 밖에 못 연결하나 SCSI는 이런 제한이 없다) 아래가 서버 사양이다.

CPU : Pentium III 666 Mhz
Mother Board : Asus P3V4X
Memory : 128 Mega
CD Drive : LG 40X
SCSI 콘트롤러 : Adaptec AHA 2940UW
SCSI 하드( 2 개) : QUANTUM ATLAS_V_ 36_WLS (36기가)
랜카드
   1) 3c905(PCI)
   2) 3c509(ISA)
   3) rtl 8029(PCI)

마더보드를 Asus로 선택한 이유는 그냥 필자가 써본 경험으로 미루어 가장 안정적이었기 때문이다. 필자는 하드웨어 전문가가 아니므로 객관적인 자료는 제시하지 못하지만 지금까지 필자가 구축한 서버에서 Asus 보드가 가장 믿을만 했기 때문이다. P3V4X 모델을 선택한 것은 이 모델이 유일하게 133 Mhz 버스클락을 지원했기 때문이다. CPU를 700Mhz가 아닌 667Mhz로 선택한 것도 667Mhz가 버스클락을 133Mhz로 설정할 수 있기 때문이다.

리눅스를 웹서버로 사용하는 경우는 CPU 처리속도보다는 입출력 처리속도가 더 중요하다. 즉 하드디스크 억세스 속도와 버스클락이 보다 성능을 좌우한다. 그래서 100Mhz 버스클락에 700Mhz CPU를 다는 것보다 133Mhz 버스클락에 667Mhz CPU를 사용하는게 웹서버로는 보다 적당하다는게 필자의 견해다.

 

5. 서버 조립

1) SCSI 하드

서버를 조립하기 위해 우선 용산 선인상가의 SCSI 하드 전문점에 갔다. 그런데 퀀텀이나 시게이트 36 기가 SCSI 하드 가격을 물으니 어디에 쓸거냐고 묻는다. 그래 리눅스 서버 조립에 사용한다고 하니 퀀텀이나 시게이트 36기가는 리눅스에 사용할 수 없고 IBM 하드만 된다는 주인의 대답이다. 무슨 날벼락 같은 소리? 아직까지 리눅스가 설치되지 않는 SCSI 하드를 본적이 없다고 대답하니 주인 왈 ‘퀀텀 Atlas 36기가 100 개를 리눅스용으로 납품했다가 설치가 안돼 모두 반품하고 IBM SCSI 하드로 교체해 주었다’나. (사실일까?) 그러면서 퀀텀이나 시게이트 36기가 SCSI 하드에 리눅스 설치해 보았냐고 묻는다. 그러니 말문이 막힌다. 9기가와 18기가 IBM SCSI 하드는 원클릭서버에서 사용해 보았지만 36기가는 아직 설치해 보지 않았기 때문이다. 하지만 주인의 말은 무시하기로 했다. SCSI 하드 중 리눅스가 설치되지 않는 모델이 있다는 말을 들은 적이 없기 때문이다.

어쨌든 SCSI 하드는 다른 점포에서 구입했다. 그 주인의 말을 듣고는 그 점포에서는 SCSI 하드를 사고 싶지 않았기 때문이다. 하드 값이 개당 100만원이 넘었다. 필자가 구입해 본 하드 중 가장 고가였다. 어쨌든 퀀텀 36 기가 SCSI 하드는 지금 잘 돌아가고 있지만 100개를 리눅스가 설치가 안돼 반품 받았다는 그 SCSI 하드 판매점 주인의 말은 정말 황당한 이야기 중의 하나다.

아래가 부트시의 SCSI 하드 부분이다.
 

Detected scsi disk sda at scsi0, channel 0, id 0, lun 0
(scsi0:0:1:0) Synchronous at 20.0 Mbyte/sec, offset 8.
Vendor: QUANTUM    Model: ATLAS_V_36_WLS    Rev: 0200
Type: Direct-Access                       ANSI SCSI revision: 03
Detected scsi disk sdb at scsi0, channel 0, id 1, lun 0
scsi : detected 2 SCSI disks total.
SCSI device sda: hdwr sector= 512 bytes. Sectors= 71722776 [35020 MB] [35.0 GB]
SCSI device sdb: hdwr sector= 512 bytes. Sectors= 71722776 [35020 MB] [35.0 GB]

 

2) 랜카드

감자회사의 네트워크 구축은 100 메가 스위칭허브(3 com 16포트)를 사용했다. 그래서 랜카드도 처음에는 3com 3c905b Txnm 모델을 사용하려고 계획했다. 네트워크 장비는 호환성 문제는 거의 없지만 허브와 랜카드를 같은 회사 제품을 사용하는게 가장 무난하기 때문이다. 그런데 커널 2.2.14에 3com 사에서 다운받은 3c905b 드라이버 파일을 패치해서 커널을 컴파일해 랜카드가 인식은 되나 무슨 이유인지 ping이나 다른 호스트로 연결하면 패킷에 에러가 나고 연결이 제대로 이루어 지지 않았다. 다른 설정을 아무리 살펴도 전혀 문제가 없는데 네트워크 연결에서 문제가 발생했다. 그래서 랜카드를 3c905 tpo 모델로 변경하니 아무런 문제가 없다. 결국 랜카드, 마더보드, 랜카드 드라이버 셋 중 하나의 문제인데 어느 쪽 요인인지는 알 수가 없다. 필자가 리눅스를 사용한 이래로 한번도 리눅스에서 랜카드를 설치하는데 실패해 본 적이 없는데 3com 3c905b txnm 모델은 필자의 첫 실패로 기록되었다. 그 전에도 한 두번 있었지만 그 경우는 랜카드 불량으로 결론이 났다. 그러나 3c905b 모델은 랜카드 불량은 아니었다. (윈도우에서 설치에는 문제가 없었다. 단 약간 불안하다.)

하나 의심이 가는 부분이 있다. 서버를 도스로 부팅해 3c905b 도스 셋업 디스크를 가동하면 프로그램 가동이 안되었다. 이로 미루어 하드웨어 쪽 문제일 가능성이 큰데 알 수는 없다. 당초 계획과는 달리 랜카드 3 개를 모두 다른 모델을 사용했다. 아래가 dmesg 출력이다.
 

3c59x.c:v0.99H 11/17/98 Donald Becker http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html
eth0: 3Com 3c905 Boomerang 100baseTx at 0xa400, 00:60:97:ba:d9:8c, IRQ 5
   8K word-wide RAM 3:5 Rx:Tx split, autoselect/MII interface.
   MII transceiver found at address 24, status 786f.
   Enabling bus-master transmits and whole-frame receives.
ne2k-pci.c:vpre-1.00e 5/27/99 D. Becker/P. Gortmaker http://cesdis.gsfc.nasa.gov/linux/drivers/ne2k-pci.html
ne2k-pci.c: PCI NE2000 clone ‘RealTek RTL-8029’ at I/O 0xa800, IRQ 10.
eth1: RealTek RTL-8029 found at 0xa800, IRQ 10, 00:50:BF:15:DF:A0.
eth2: 3c509 at 0x300 tag 1, 10baseT port, address 00 20 af 11 72 7f, IRQ 11.
3c509.c:1.16 (2.2) 2/3/98 becker@cesdis.gsfc.nasa.gov.
eth2: Setting Rx mode to 1 addresses

.

그런데 알 수 없는 건 3c905 isa 랜카드가 커널에 코드를 넣었는데도 인식이 안되었다. 그런데 모듈로 올리면 인식이 된다. 다른 리눅스에서 테스트해 보니 3c90X (PCI)랜카드가 설치된 경우 3c509 isa 랜카드는 모듈로 올려야만 인식이 되고 커널 컴파일로는 안된다.

 

6. 서버 네트워크 셋업

리눅스 서버에는 데비안 2.1을 사용했다. 아무래도 데비안이 안정성이 높기 때문이다. 삼바를 설치해 타스와 감자 양쪽 랜의 모든 피시에서 리눅스 서버의 하드를 공유하도록 했다. 서버의 네트워크 셋업은 아래와 같다.
 

linux:/var/log# cat /etc/init.d/network
#! /bin/sh
ifconfig lo 127.0.0.1
route add -host 127.0.0.1 dev lo
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
GATEWAY=
ifconfig eth0 ${IPADDR} netmask ${NETMASK} broadcast ${BROADCAST}
route add -net ${NETWORK} dev eth0
route add -host ${IPADDR} dev eth0
ifconfig eth1 200.200.200.253 netmask 255.255.255.0 broadcast 200.200.200.255
route add -net 200.200.200.0 dev eth1
route add -host 200.200.200.253 dev eth1

 

7. DHCP 클라이언트 설치

리눅스에서 세번째 랜카드(eth2 : 3c509)에는 케이블모뎀이 연결되므로 DHCP 클라이언트 프로그램을 가동해 주어야 한다. DHCP 클라이언트 프로그램은 여러가지가 있으나 dhcpcd를 사용했다. 커널을 컴파일해 사용하는 경우 DHCP 클라이언트를 사용하려면 아래 커널옵션이 필요하다.(디폴트 커널에 이미 들어 있다)
 

# Networking options
#CONFIG_PACKET=y

 

1) dhcpcd 다운받기
아래 사이트에서 다운 받을 수 있다.
.
ftp://ftp.phystech.com/pub/ (Primary site)
.
http://www.cps.msu.edu/~dunham/out/
 

churlsu:/usr/src# ftp ftp.phystech.com
Connected to phystech.com.
220 darkstar.phystech.com FTP server (Version wu-2.6.0(4) Fri Jan 21 21:59:46 EST 2000) ready.
Name (ftp.phystech.com:root): ftp
331 Guest login ok, send your complete e-mail address as password.
Password:
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 CWD command successful.
ftp> ls -l
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 6237
-------
-rw-r--r-- 1 0 0 241828 May 10 22:31 dhcpcd-1.3.18-pl8.tar.gz

 

2) tar zxvf dhcpcd-1.3.18-pl8.tar.gz
3) cd dhcpcd-1.3.18-pl8
4) make
끝에 아래 메시지가 나온다.
 

-rwxr-xr-x 1 root root 228000 Jun 20 01:33 dhcpcd

 

5) make install
아래 메시지가 나온다.
 

mv: /sbin/dhcpcd: No such file or directory
install -c -m 0500 dhcpcd /sbin
install -c -m 0444 dhcpcd.8 /usr/man/man8
mkdir -p /etc/dhcpc
rm -f /etc/dhcpc/*.cache

 

여기까지 마치면 실행 파일이 만들어진다.
(/sbin/dhcpcd)

 

8. 모듈 올리기

모듈은 3c509 랜카드 모듈과 IP Masquerade 모듈을 올렸다. /etc/modules에 지정했다.
 

linux:~# cat /etc/modules
3c509
ip_masq_ftp
ip_masq_irc
ip_masq_raudio

linux:/lib/modules/2.2.14# lsmod -l
Module               Size   Used by
ip_masq_raudio   2624     0
ip_masq_irc        1232     0  (unused)
ip_masq_ftp        2096     0
3c509                5372     1

 

9. IP Masquerade 설정

두 랜에서 케이블 모뎀의 인터넷 연결을 공유하기 위해 IP forwarding을 enable해 주었고 IP Masquerade를 설정했다. /etc/rc.boot 디렉토리에 넣었다.
 

linux:/etc/rc.boot# cat 11ip_foward
#!/bin/bash
echo “1” > /proc/sys/net/ipv4/ip_forward

linux:/etc/rc.boot# cat 21ipchains
#!/bin/bash
/sbin/ipchains -P forward DENY
/sbin/ipchains -A forward -s 192.168.1.0/24 -j MASQ
/sbin/ipchains -A forward -s 200.200.200.253/24 -j MASQ

 

10. 부팅시 dhcp 클라이언트가 자동실행되도록 했다.
 

linux:/etc/rc.boot# cat 31dhcp
#!/bin/bash
/sbin/dhcpcd -d -t 90 eth2

 

위에서 -d 옵션은 debug 메시지를 출력하라는 뜻이다. 그러면 /var/log/syslog 파일에 자세한 메시지가 나온다.

-t 90 은 DHCP 서버로부터 응답을 대기하는 시간을 90초로 설정한다. 디폴트는 60초이다.
eth2는 DHCP 서버로부터 IP를 받을 인터페이스 이름이다.

 

11. 연결

이상과 같이 지정하고 리부팅하면 DHCP 서버로부터 eth2에 IP 주소가 부여된다.
연결 확인은 ifconfig 명령으로 eth2에 주소가 나오는지 확인하는 것이다.

1) 아래는 ifconfig 결과이다.
 

linux:/var/log# ifconfig
lo     Link encap:Local Loopback
        inet addr:127.0.0.1 Mask:255.0.0.0
        UP LOOPBACK RUNNING MTU:3924 Metric:1
        RX packets:283 errors:0 dropped:0 overruns:0 frame:0
        TX packets:283 errors:0 dropped:0 overruns:0 carrier:0
        Collisions:0

eth0  Link encap:Ethernet HWaddr 00:60:97:BA:D9:8C
        inet addr:192.168.1.1 Bcast:192.168.1.255            Mask:255.255.255.0
        UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
        RX packets:97179 errors:0 dropped:0 overruns:0 frame:0
        TX packets:142893 errors:0 dropped:0 overruns:0 carrier:0
        Collisions:0
        Interrupt:5 Base address:0xa400

eth1  Link encap:Ethernet HWaddr 00:50:BF:15:DF:A0
        inet addr:200.200.200.253 Bcast:200.200.200.255            Mask:255.255.255.0
        UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
        RX packets:60747 errors:0 dropped:0 overruns:0 frame:0
        TX packets:72348 errors:0 dropped:0 overruns:0 carrier:0
        Collisions:114
        Interrupt:10 Base address:0xa800

eth2  Link encap:Ethernet HWaddr 00:20:AF:11:72:7F
        inet addr:210.221.95.74 Bcast:210.221.95.255         Mask:255.255.255.0
        UP BROADCAST NOTRAILERS RUNNING MTU:1500 Metric:1
        RX packets:270908 errors:0 dropped:0 overruns:0 frame:0
        TX packets:151100 errors:0 dropped:0 overruns:0 carrier:0
        Collisions:5295
        Interrupt:11 Base address:0x300

 

2) 연결과정은 /var/log/syslog에서 볼 수 있다.
 

Jun 20 12:57:16 www dhcpcd[182]: broadcasting DHCP_DISCOVER
Jun 20 12:57:21 www dhcpcd[182]: broadcastAddr option is missing in DHCP server response. Assuming 210.219.177.255
Jun 20 12:57:21 www dhcpcd[182]: broadcasting second DHCP_DISCOVER
Jun 20 12:57:21 www dhcpcd[182]: DHCP_OFFER received from (210.117.65.82)
Jun 20 12:57:21 www dhcpcd[182]: broadcasting DHCP_REQUEST for 210.219.177.25
Jun 20 12:57:22 www dhcpcd[182]: DHCP_ACK received from (210.117.65.82)
Jun 20 12:57:22 www kernel: eth2: Setting Rx mode to 1 addresses.

 

2) ps ax 명령을 주면 아래 줄이 나온다.
 

99 ? S 0:00 /sbin/dhcpcd -d -t 90 eth2

 

3) netstat -r 결과이다.
 

linux:/var/log# netstat -nr
Kernel IP routing table
Destination          Gateway      Genmask           Flags   MSS   Window   irtt   Iface
192.168.1.1         0.0.0.0     255.255.255.255     UH        0        0          0     eth0
200.200.200.253  0.0.0.0     255.255.255.255     UH        0        0          0     eth1
127.0.0.1            0.0.0.0     255.255.255.255     UH        0        0          0      lo
200.200.200.0     0.0.0.0     255.255.255.0          U         0        0          0      eth1
192.168.1.0         0.0.0.0     255.255.255.0          U        0         0          0     eth0
210.221.95.0       0.0.0.0     255.255.255.0          U        0         0          0      eth2
0.0.0.0           210.221.95.1      0.0.0.0              UG       0         0          0      eth2

 

4) /etc/resolv.conf 파일이 아래처럼 변한다.
 

linux:/var/log# cat /etc/resolv.conf
domain joongang.thrunet.com
nameserver 210.117.65.1
nameserver 210.117.65.2
search joongang.thrunet.com

 

5) /var/log/debug 파일에는 연결동안에 1 시간 간격으로 리눅스의 DHCP 클라이언트에서
    DHCP서버로 IP주소 부여신청이 이루어진다.
 

Jun 26 08:55:34 www dhcpcd[99]: sending DHCP_REQUEST for 210.221.95.74 to 210.117.65.82
Jun 26 08:55:37 www dhcpcd[99]: DHCP_ACK received from (210.117.65.82)
Jun 26 09:55:37 www dhcpcd[99]: sending DHCP_REQUEST for 210.221.95.74 to 210.117.65.82
Jun 26 09:55:37 www dhcpcd[99]: DHCP_ACK received from (210.117.65.82)

 

12. 마치면서

필자가 이번에 리눅스서버를 직접 조립 및 설치하면서 느낀 점은 자만은 금물이라는 점이다. 필자가 리눅스를 시작한 이래 한번도 랜카드 설치에 실패한 적이 없는데 이번에 처음으로 랜카드를 설치하지 못해 다른 모델로 바꾸었다. 물론 필자가 모르는 다른 요인이 있겠지만 어쨌든 꾸준히 새로 나온 제품에 대한 정보를 접해야 한다. 참고로 3c905b txnm 모델의 랜카드가 다른 마더보드에서는 문제없이 리눅스에서 사용 가능했다. 단지 필자가 사용한 보드에서만 문제가 있었다. 그에 대한 해답을 알면 나중에 공개하겠다.


관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,046 명
  • 현재 강좌수 :  35,864 개
  • 현재 접속자 :  121 명