노무현 대통령 배너


2006. 4. 4. 23:33

[본문스크랩] 리눅스 인터넷서버 설치기(I)

- 준비 작업 -

순서(I)

    들어가기 전에
    하드웨어 점검
    - 하드디스크
    - 랜카드
    - SCSI 콘트롤러

    인터넷 연결 준비
    - co-lan 연결 테스트
    - 도메인네임 신청

    백업
    CMOS 셋업
    주변기기 점검

들어가기전에

    이글은 리눅스 사용자들에게 리눅스로 인터넷 서버를 구축하는데 참고하도록 리눅스 시스템을 실제로 인터넷에 연결하여 각종 서버용 프로그램을 셋업하는 과정을 이야기 형식으로 기록하려고 한다. 연결할 서버 이름은 앞으로 진이(jinnee)라고 부르기로 하겠다.

    왜 “진이”라고 이름 지었는지 특별한 이유는 없다. 예전에 본인이 즐겨 보았던 TV 프로인 “내사랑 지니” 때문인 줄도 모르고 황진이의 진이를 말하는 지도 모른다. 그냥 남자 이름보다는 그래도 여자 이름이 조금은 부드럽고 기억하기도 쉬울 것 같아서 이다.
    (혹시 여성 단체에서 항의를 하지는 않겠죠?)

    진이는 구닥다리 486 피시로서 조립품이다. 본인이 이곳 저곳서 그동안 사 모은 부품으로 만들었다. 얼마나 구식인지 EIDE가 지원이 안되어 리눅스가 깔릴 1.6기가 하드를 연결하기 위해 대만제 EIDE 콘트롤러를 달아야 할 정도이다.

하드웨어 점검

    리눅스를 깔려면 먼저 하드웨어부터 꼼꼼히 챙겨야한다. 리눅스에 연결되는 장치가 PCI 타입이면 덜하지만 ISA 타입이라면 이 부분에 특히 신경써야한다.

    - 하드디스크

      진이에는 이미 EIDE의 Primary Master에 연결된 IBM 1.6기가에 데비안 리눅스 1.2 버전이 깔려 있지만 이번 기회에 이 데비안 버전을 2.1로 바꾸고 모든 프로그램도 다시 설치하려고 한다. 하지만 이 드라이브에는 중요한 파일들이 많이 들어 있어 그냥 지울 수 없고 또 나중에 데비안 1.2로 부팅할 필요가 생길지 몰라 Secondary Master에 330메가 하드를 하나 더 달아 IBM 1.6기가 하드를 그대로 복사하기로 했다.(부팅에 필수적인 부분만)

      단순히 파일만 복사하는게 아니라 부팅이 가능하도록 구성하여 필요시에는 이 백업하드에서 부팅할 수 있게 한다.

      ◆ 참고 : 리눅스에서 하드디스크 콘트롤러가 EIDE 방식이면 하드를 네개를 달 수 있다. 도스나 윈95에서는 하드를 2개 이상 달더라도 무조건 C: D: ..이런식으로 부르나 리눅스에서는 하드가 어디에 연결되느냐에 따라 고정된 이름을 갖는다.

      마더보드를 잘 보면 하드디스크를 연결하는 케이블을 두군데 꼽게 되어있다. 거기에 primary와 secondary라고 각각 표시돼 있을 것이다. (보드에 표시가 안돼 있으면 보드 매뉴얼에 있다) 각각에 두 개씩의 하드를 연결할 수 있다.(하드 대신 CD 드라이브를 연결할 수 있다.) 이 중 하나는 master 하나는 slave라고 부른다.

      primary 와 secondary는 케이블을 어디에 꼽느냐에 따라 결정되지만 master와 slave는 하드나 CD-ROM 드라이브에서 점퍼를 조정해서 결정한다. 한 케이블에 두개의 하드를 연결할 경우 반드시 하드디스크 점퍼를 조정해 하나는 master 하나는 slave로 지정해야 한다. 둘 다 master나 slave로 조정하면 부팅에서 문제가 발생한다.

      하드가 두개라도 하나는 primary에 연결하고 하나는 secondary로 연결하면 둘다 master로 조정한다. cd 드라이브도 마찬가지다.

      리눅스에서 하드디스크의 이름은 아래와 같다.(cd도 동일하다)

        primary master : /dev/hda
        primary slave : /dev/hdb
        secondary master : /dev/hdc
        secondary slave : /dev/hdd

      일반적으로 하드와 cd-rom 드라이브가 한 개씩인 피시에서는 하드를 primary master에 cd 드라이브를 secondary master에 연결한다.

    - 랜카드

      진이에는 랜카드를 꼽아 사무실의 다른 피시들과 랜을 구성하였다. 랜은 이더넷이고 허브와 UTP 케이블을 이용한 star 구조이다. 속도는 10Mbps이다.

      랜카드는 3com 3c509-tp를 사용했고이 카드는도스용 셋업 프로그램을 사용하여 아래처럼 구성했다.

        IRQ : 10
        I/O address : 0x300

      ◆ 참고 : 리눅스에서 랜카드를 사용하려면 우선 PNP를 disable 시키는게 중요하다.Enable 시키는 경우 리눅스에서의 셋업이 무척 힘들다. 랜카드(ISA 타입)를 셋업할 때는 도스용 셋업 프로그램을 돌려 IRQ와 IO Address를 자동으로 잡아본다. 그런후 irq와 io address가 얼마로 잡히는지를 꼭 기록해야 한다. 이는 다른 장치를 추가로 꼽을 때 필요하다. 자동으로 잡을 때 주의할 점은 IRQ를 3이나 4로 잡으면 안된다는 것이다. 이 둘은 시리얼 포트에서 사용하므로 나중에 모뎀이나 시리얼 마우스를 연결할 때 문제가 생긴다. 따라서 3이나 4를 잡아주면 수동으로 조정해서 다른 IRQ로 바꾼다.

      가능한 IRQ 번호는 5, 9, 10, 11, 12 등이다. 그러나 12는 ps/2 마우스를 쓴다면 사용 할수 없다. 9번도 별로 권하지 않는다. 10번도 사운드카드에서 사용하는 경우가 있다. IRQ를 수동으로 잡았으면 꼭 diagnostic 프로그램을 돌려 테스트를 해야 한다.

      또 어떤 마더보드(PCI 지원)의 경우는 ISA 랜카드를 꼽을 경우 CMOS 셋업의 PCI 난에 그 랜카드에서 사용하는 IRQ 번호를 ISA로 바꾸어야 한다.

    - SCSI 콘트롤러

      진이에는 adaptec사의 aha-1542cf scsi 콘트롤러를 달았다. 이유는 SCSI cd-rom과 scsi 하드를 연결하기 위해서이다. SCSI CD 드라이브는 리눅스 설치에 필요해서이고 SCSI 1기가 하드는 백업용이다. 즉 /dev/hda에 설치된 리눅스 파일 중 중요한 파일(/usr)을 시스템이 한가한 새벽에 정기적으로 백업해둔다. 그래서 /dev/hda가 이상이 생기면 /dev/hdc의 350메가 하드에 설치된 또다른 리눅스로 부팅하고 scsi 하드를 /usr에 마운트하면 즉시 정상 가동이 가능하기 때문이다. 여기에 소요되는 시간은 /dev/hdc 하드 케이블 연결을 변경하는 시간이므로 5분이면 족하다.

      SCSI 콘트롤러도 ISA 타입이므로 irq와 io address를 지정해 주어야하는데 aha-1542의 경우 부팅시 ctrl+a 를 눌러 irq와 io address를 지정한다.
      랜카드와 충돌되지 않도록 아래처럼 지정했다.

        Irq : 11
        IO address : 0x330

        Scsi 하드 : id 2번
        Scsi CD : id 3번

      ◆ 참고 : scsi 장치를 두개 이상 연결할 경우 터미네이션에 주의해야 한다.즉 scsi 케이블중간에 연결되는 장치는 터미네이션을 disable 하고 마지막에 연결하는 장비는 터미네이션을 enable 해야한다. scsi id 는 장치 연결 순서와 무관하게 중복되지않게 지정하면 된다. (7번은 보통 scsi 콘트롤러가 사용한다)

      여기에 진이의 하드웨어 구성을 요약했다.

        마더보드 : micronics MX30
        CPU : 486DX2-66
        메모리 : 48메가(16m*3)
        FDD : 3.5인치
        랜카드 : 3COM 3C509-TP
        2 serial
        1 parallel
        하드디스크
        - primary master : IBM 1.6 giga
        - secondary master : wdc 325메가
        - SCSI : seagate 1 giga

        CD-ROM 드라이브 : SONY CDU-76S(scsi 방식)
        SCSI controller : Adaptec AHA-1542cf

인터넷 연결 준비 작업

    진이를 인터넷과 연결하는데는 한국통신의 co-lan 57.6k를 사용한다. co-lan은 VDM이란 장비를 써서 기존의 음성전화선을 데이터 통신 겸용으로 사용하므로 별도의 전용선 배선이 불필요해 구내 배선이 부족 한 경우 쓸만한 해결책이다.

    VDM과 진이의 com2 시리얼포트(9핀)는 RS-232C 케이블로 연결했다. 케이블도 VDM에 딸려나온다. co-lan 연결은 ip address가 한 개만 나온다. 즉 호스트 접속이다. 따라서 인터넷 공식 어드레스는 진이에게만 부여되므로 진이와 랜으로 연결된 다른 피시들이 인터넷을 사용할려면 그 피시에는 내부 전용 ip address를 부여하고 진이에는 ip masquerade나 proxy server를 설치해야 한다.

    TT선으로 인터넷을 연결하는 경우도 호스트 접속이다. 그러나 lan to lan 으로 인터넷을 연결해서 리눅스를 인터넷 서버로 사용하는 경우라면 약간 달라진다.

      1. co-lan 연결 테스트

      co-lan PPP 연결 테스트는 기존의 데비안 1.2에 들어있는 minicom을 사용했다.. 우선 시리얼포트에서 57,600bps 속도를 지원하도록 하기위해 아래 명령을 주었다.

        /bin/setserial /dev/ttyS1 spd_hi

      (주의 : 이 명령은 피시를 리부팅하면 효력이 사라진다)

      확인을 하려면 아래 명령을 주라

        hyunah:/etc/ppp$ /bin/setserial -a /dev/ttyS1
        /dev/ttyS1, Line 1, UART: 16550A, Port: 0x02f8, IRQ: 3
        Baud_base: 115200, close_delay: 50, divisor: 0
        Flags: spd_hi skip_test

      위의 Flags:spd_hi가 나오면 맞다.

      다음 minicom -s 명령을 사용 미니컴 사용 환경을 아래처럼 바꾸었다

        [Serial port setup]
        A - Serial Device : /dev/ttyS1
        B - Lockfile Location : /var/lock
        C - Callin Program:
        D - Callout Program:
        E - Baud/Par/Bits : 57600 8N1
        F - Hardware Flow Control : No
        G - Software Flow Control : No

        [Modem and dialing parameter setup]
        A - Init string ......... ~^M~

      (VDM은 데이터 압축기능이 없으므로 플로우컨트롤을 사용할 필요가 없다)

      이렇게 고치고 “Save setup as dfl” 로 환경을 저장 후 minicom을 가동하면 아래와 같은 메시지가 뜬다.(안뜨면 VDM을 껏다 켜서 약 20초 정도 기다려본다. 그래도 안뜨면 co-lan 연결에 문제가 있다).

        STATION ID - NJB1/84/13.1

        **** Welcome to CO-LAN ****
        Help Desk : 080-023-2299
        DESTINATION:

      한국통신에서 부여한 계정명(ppph..-u????)을 입력하면 패킷이 뜬다. 아래와 같다.

        DESTINATION: ppph..-u?????(이 부분은 감추었음)
        PPP ready
        ~y}#.!}!} } }$}-i~~y}#.!}!}!} }$Nu~~y}#.!}!}”} }$uZ~~y}#.!}!}#} }$i} ~~y}#.~

      ctrl+a q 를 눌러 통신 연결을 유지한 채 minicom을 빠져나와 아래 스크립트를 가동한다.

        #!/bin/bash
        /usr/sbin/pppd /dev/ttyS1 57600 noipdefault defaultroute

      자세히 VDM을 들여다 보면 TD와 RD가 여러번 반짝거린다. ifconfig 명령으로 ppp 연결 여부를 확인할 수 있다.

      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:171 errors:0 dropped:0 overruns:0
      TX packets:171 errors:0 dropped:0 overruns:0

      eth0 Link encap:10Mbps Ethernet HWaddr 00:60:8C:EC:79:4F
      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:8832 errors:0 dropped:0 overruns:0
      TX packets:6617 errors:0 dropped:0 overruns:0
      Interrupt:10 Base address:0x300

      ppp0 Link encap:Point-Point Protocol
      inet addr:168.126.127.6 P-t-P:168.126.127.1 Mask:255.255.0.0
      UP POINTOPOINT RUNNING MTU:1500 Metric:1
      RX packets:7466 errors:0 dropped:0 overruns:0
      TX packets:9856 errors:0 dropped:0 overruns:0

      /var/log/daemon.log를 보면 아래와 같다.

      ppd[14410]: pppd 2.3.5 started by root, uid 0
      ppd[14410]: Using interface ppp0
      ppd[14410]: Connect: ppp0 <--> /dev/ttyS1
      ppd[14410]: sent [LCP ConfReq id=0x1 ppd[14410]: rcvd [LCP ConfReq id=0x3 ppd[14410]: sent [LCP ConfAck id=0x3 ppd[14410]: rcvd [LCP ConfAck id=0x1 ppd[14410]: sent [LCP EchoReq id=0x0 magic=0x2dc68fd]
      ppd[14410]: sent [IPCP ConfReq id=0x1 ]
      ppd[14410]: rcvd [IPCP ConfReq id=0xb2 ]
      ppd[14410]: sent [IPCP ConfAck id=0xb2 ]
      ppd[14410]: rcvd [LCP EchoReq id=0x4 magic=0x37486fba]
      ppd[14410]: sent [LCP EchoRep id=0x4 m

      agic=0x2dc68fd]
      ppd[14410]: sent [IPCP ConfReq id=0x1 ]
      ppd[14410]: rcvd [IPCP ConfNak id=0x1 ]
      ppd[14410]: sent [IPCP ConfReq id=0x2 ]
      ppd[14410]: rcvd [IPCP ConfAck id=0x2 ]
      ppd[14410]: local IP address 168.126.127.6
      ppd[14410]: remote IP address 168.126.127.1

      위에서 168.126.127.1은 co-lan 측의 ip address이고 168.126.127.6은 진이에게 부여된 ip address이다.

      ppp 연결이 이루어 졌으므로 인터넷 연결 준비는 완료되었다.

      ◆ 참고 : daemon.log를 자세히 보면 아래 메시지가 1분에 하나씩 계속뜬다.

        May 23 16:20:19 server pppd[14410]: rcvd [LCP EchoReq id=0x9 magic=0x37486fba]
        May 23 16:20:19 server pppd[14410]: sent [LCP EchoRep id=0x9 magic=0x2dc68fd]
        May 23 16:21:20 server pppd[14410]: rcvd [LCP EchoReq id=0xa magic=0x37486fba]
        May 23 16:21:20 server pppd[14410]: sent [LCP EchoRep id=0xa magic=0x2dc68fd]
        May 23 16:22:21 server pppd[14410]: rcvd [LCP EchoReq id=0xb magic=0x37486fba]
        May 23 16:22:21 server pppd[14410]: sent [LCP EchoRep id=0xb magic=0x2dc68fd]

      여기서보면 “rcvd[LCP EchoReq”가 나온다. 이는 리눅스쪽으로 co-lan ppp 서버가 연결 여부를 체크하는 패킷이다. 거기에대해 “sent [LCP EchoRep”는 리눅스가 co-lan 서버로 연결이 이상 없다는 답신을 하고 있다. 만약 co-lan 서버에서 3번 LCP EchoReq를 보냈는데도 리눅스에서 답신을 않으면 co-lan 서버는 리눅스 서버와의 연결이 끊긴걸로 가정하고 ppp 연결을 중단한다. 즉 DESTIONATION: 을 다시 내보낸다.

      개인적인 의견으로는 이 간격이 1분이면 너무 적다고 생각한다. 왜냐하면 이 패킷도 회선을 사용하므로 너무 자주 보내면 회선 용량을 소모하기 때문이다. ppp 옵션 중 “lcp-echo-interval n”으로 이 간격을 조정할 수 있지만 리눅스에서 조정은 의미가 없다. ppp 연결을 해주는 co-lan에서 조정해야 한다.

      ◆ 참고 : co-lan은 원래 인터넷 연결이 주목적이 아니라 별도의 전용선 설치 없이 음성전화선으로 본사와 지사간의 네트워크 구축을 위해 사용할 목적으로 개발되었다. 즉 음성전화선에는 음성 통화용으로 사용되지 않는 높은 주파수 대역이 있는데 이 부분에 데이터를 실어 보내는 방식이다. 여기에는 VDM(voice data multiplexer)라는 장비가 사용된다.

      피시의 시리얼포트에서 나오는 데이터 신호와 전화기의 음성신호가 혼합되어 보내는 쪽 VDM에서 전화선에 실어서 보내면, 받는쪽 VDM에서 이를 다시 음성신호와 데이터 신호로 나누어 피시와 음성전화기로 보내준다. 음성신호와 데이터신호가 차지하는 주파수 대역이 다르므로 동시에 두 가지를 사용해도 속도저하나 음질저하가 발생하지 않으므로 이 두 가지를 동시에 사용할 필요가 있을 때는 유용한 해결책이다.

      VDM 은 통신비 절약에 유용한 해결책이 될 수 있다. 예를 들어 서울에 본사가 있고 부산에 지사가 있는 경우 두 사무소간에 음성통화가 많으면 음성통화 전용선을 신청해서양쪽에 교환대를 설치하여 구내전화처럼 사용하는 경우가 많다. 이때 이선 양쪽에 VDM을 설치한다면 이 선 한 개로 데이터 통신까지 겸할 수 있는 것이다.본사에 인터넷이 연결돼 있다면 지사에 본사의 인터넷을 연장해 주는 것도 당연히 가능하다.

      2. 도메인네임(domain name) 신청

      진이가 한국통신에서 고정 IP를 받는데는 어려움이 많았다. 하마터면 탄생이 어려울 뻔 했다. 한국통신의 co-lan 57.6k과 115.2k 인터넷 서비스는 올해부터 시작했는데 변동 IP 요금은 결정되었으나(월 12,000원) 고정 IP 접속은 요금이 책정되지 않았다는 것이다. 그런데 19.2k에서의 고정 IP 접속은 요금이 나와있다.( 할인시 80,000원 가량, 이는 co-lan 요금과는 별개다) 전화국에서는 요금이 책정되지 않았으니 서비스 신청을 받을 수 없다고 한다.

      고정 IP 배정 요금을 속도에 따라 달리 한다는 건 이치에 맞지를 않다. 연결속도가 빠르다고 해서 고정 IP 부여하는 비용이 더 들거나 관리가 더 어려워 지는 것도 아니라고 보기 때문이다.

      회선 비용이야 속도가 빨라지면 당연히 회선 관리도 어렵고 장비도 비싸지므로 요금을 더 받아야 겠지만, 고정 IP 부여는 분명 다르다.

      그래서 한국통신의 관련부서마다 수 차례씩 거의 20여 통화를 하고 나서야 본사 고충 처리 센터 비슷한 곳에서 19.2k와 같은 요금을 적용해서 고정 IP를 부여해 주겠다는 연락을 받았다.

      고정 IP를 받았으므로 다음은 도메인네임 신청이다. 도메인네임은 한국전산원에서 관장하지만 한국통신을 경유해서 신청해야 한다. 이때 필수적으로 도메인네임과 primary 네임서버, secondary 네임서버를 지정해야 한다. 그리고 전산원에 등록되는 초기 호스트의 이름도 신청해야 한다. 만약 지정을 않으면 ns.????.co.kr로 지정한다. 나중에 전산원에서 도메인네임과 관련하여 메일을 보낼 때는 이 호스트 이름(즉 root@ns.????.co.kr)로 메일을 보내니 주의해야 한다.

      Primary 네임서버는 jinnee의 어드레스 즉 168.126.127.6으로 secondary 네임서버는 목포넝쿨인터넷 웹서버로 지정했다. 도메인네임은 linuxjournal.co.kr 초기 호스트는 linux 즉 linux.linuxjournal.co.kr로 지정했다.

      진이 서버의 전산원에 등록된 호스트네임은 linux.linuxjournal.co.kr이지만 리눅스에서의 hostname은 “jinnee”를 사용 할 예정이다. 즉 jinnee 는 /etc/hostname에 들어갈 이름이다(이는 데비안의 경우이다). 여러분이 telnet jinnee.linuxjournal.co.kr 하면 login:프롬프트 앞에 jinnee라는 이름이 나타날 것이다. 이는 네임서버에서 지정하면 가능하다.

      ◆ 참고 : linuxjournal.com은 미국에서 리눅스 전문지인 “리눅스 저널”을 발행하는 SSC사의 도메인네임이다.(ssc.com도 쓴다) 이 도메인과 혼동하지 마시길.

백업

    진이의 첫번째 하드(/dev/hda)를 그대로 두번째 하드(/dev/hdc)에 복사해야한다. 이유는 첫번째 하드의 파일 중에 지워서는 안되는 파일이 있고 혹시 첫번째 하드에 문제가 생길시 두번째 하드로 부팅하기 위함이다.

    우선 첫번째 하드의 내용 중 부팅에 상관없는 데이터 파일 들을 SCSI 하드 두번째 파티션에 넣었다. SCSI 하드는 두개의 파티션으로 나누어져있는데 앞 500메가(즉 /dev/sda1)은 이미 DOS로 포맷되어 도스 파일들이 저장되어있다.

      두번째 파티션에 리눅스 파일을 넣는건 2 단계를 거친다.

      1. fdisk /dev/sda : 여기에서 남아있는 500메가를 리눅스 파티션으로 잡아준다. /dev/sda2가 파티션 이름이다.

      2. mke2fs -c /dev/sda2 : 두번째 파티션을 리눅스의 기본 파일 시스템인 ext2 파일 시스템으로 포맷한다. 여기서 -c는 bad block을 체크하는 옵션이다.

      3. 이제 이 파티션을 /mnt에 마운트하고 (mount /dev/sda2 /mnt) /hda의 파일 중 일부를 여기에 복사했다.

      다음에는 백업을 한 파일은 지우고 첫번째 하드를 두번째 하드로 복사하는 단계이다. 이부분은 원래 이곳에 쓸려고 하였으나 설명할 내용이 길고 여러 사람이 쓸 일이 있을것 같아 별도로 분리했다. 다음의 백업 하드디스크 만들기 글을 참고하면 된다.

CMOS 셋업

    이제 cmos 셋업을 점검해야한다.

    1. 3.5인치 FDD를 A 드라이브로 만들것. (셋업에서 A, B 스왑을 이용하지 말고 안의 케이블을
    변경할것)
    2. 모든 설치가 완료될때까지는 부팅순서를 A -> C 로 할것.
    3. 하드디스크 콘트롤러가 EIDE이면 LBA모드로 할것.
    4. CPU internal 및 external cache를 제외한 모든 캐쉬는 disable
    5. 모든 shadow는 disable
    6. local memory 15-16M hole ---> 이런 비슷한 내용이 있으면 disable
    7. Virus protection : 이부분은 disable 할것
    8. Advanced Power Management : 이분에서는 하드디스크를 doze, standby, suspend, sleep 모드로하는 셋업을 잡으면 안된다.

주변기기 확인

    요즘 나오는 주변기기는 거의 리눅스에서 지원되지만 아직 일부는 그렇지 않다. 예를들면 윈도우 또는 윈95 전용이란 단서가 붙는 장치는 일단 리눅스에서 사용할 수 없다. 대표적인게 윈95 전용모뎀과 윈95전용프린터이다. 언젠가는 이들도 리눅스용 드라이버가 나오겠지만 아직은 기다려야 한다.