다음 이전 차례

7. 일반적인 PC 하드웨어 사용하기

7.1 ISDN

Integrated Services Digital Network (ISDN)은 일반적인 스위칭 방식의 디지탈 데이타 네트웍을 지칭하는 일련의 표준이다. ISDN `통화'는 목적지까지의 동기식 점대점(point-to-point) 연결을 생성한다. 보통 ISDN은 여러 개의 다른 채널로 불리되는 고속 연결 상에서 전달된다. 채널에는 서로 다른 두 형식이 있는데 `B 채널'은 실제로 사용자의 자료를 전달하며 `D 채널'은 ISDN의 연결을 만들거나 다른 기능들을 위해 교환하는 제어 정보들을 보내기 위해 사용된다. 한 예로 호주에서는 ISDN이 2Mbps의 연결 상에서 사용되는데 이 연결은 30개의 64kbps B 채널과 하나의 64kbps D 채널로 나뉜다. 한 번에 몇 개의 채널이든 쓰일 수 있으며 어떤 조합으로도 쓰일 수 있다. 예를 들어 30개의 서로 다른 목적지에 각 64kbps로 30개의 다른 연결을 만들거나 15개의 목적지에 각 128kbps(연결 하나당 두 채널)로 15개의 연결을 만들 수도 혹은 적은 수의 연결을 만들고 나머지는 안쓰는 채로 둘 수도 있다. 채널은 나가는 연결이나 들어오는 연결 어느 쪽으로도 쓰일 수 있다. ISDN의 본 목적은 전화 회사들에게 사용자들이 특정한 설정의 변경 없이 집이나 사무실에서 전화(디지탁 전화)와 데이타 통신을 모두 사용할 수 있는 서비스를 제공하도록 하는 것이었다.

컴퓨터를 ISDN 서비스에 연결하는 방법은 몇 가지가 있다. 이중 하나는 `Terminal Adaptor'라 불리는 장치를 사용하는 것인데 이 장치는 여러분이 ISDN 서비스를 신청할 때 전화회사에서 설치해 주는 Network Terminating Unit에 끼워지며 많은 직렬 인터페이스를 가지고 있다. 이 인터페이스들 중 하나가 연결을 만들고 설정을 하는 명령을 내리기 위해 사용되며 나머지는 연결이 되었을 때 데이타 써킷을 쓸 네트웍 장치들에 실제로 연결된다. 리눅스는 별다른 수정 없이도 이런 설정에서 작동하며 여러분은 Terminal Adaptor의 포트를 다른 직렬 장치 다루듯 다룰 수 있다. 다른 방법은 커널이 ISDN을 지원하는 방법인데 ISDN 카드를 리눅스 머신에 설치할 수 있도록 설계되었으며 리눅스 소프트웨어가 프로토콜을 직접 다루어서 연결을 스스로 만들도록 되어있다.

Kernel Compile Options:

        ISDN subsystem  --->
                <*> ISDN support
                [ ] Support synchronous PPP
                [ ] Support audio via ISDN
                < > ICN 2B and 4B support
                < > PCBIT-D support
                < > Teles/NICCY1016PC/Creatix support
        

Linux에서 구현된 ISDN은 많은 종류의 내장형 ISDN 카드들을 지원한다. 이들은 커널 설정 옵션에서 볼 수 있다.

이 카드들중 일부는 작동하기 위해서 다른 소프트웨어를 받아야 할 필요가 있다. 이를 위해 별도의 다른 유틸리티가 존재한다.

Linux의 ISDN 지원의 설정에 대한 자세한 사항은 /usr/src/linux/Documentation/isdn/ 디렉토리에서 볼 수 있으며 isdn4linux를 위한 FAQ를 www.lrz-muenchen.de에서 볼 수 있다.

PPP에 대한 주의점. PPP 프로토콜 관련 프로그램들은 동기식 직렬 연결과 비동기식 직렬 연결 모두에서 작동한다. 일반적으로 배포되는 Linux의 PPP 데몬인 `pppd'는 비동기 방식만 지원한다. ISDN 상에서 PPP를 사용하기 위해서는 특별히 수정된 버젼이 필요하다. 이를 찾을 수 있는 곳에 대한 자세한 정보도 위에 언급한 문서에 나와있다.

7.2 Linux-2.0에서의 PLIP

PLIP 장치 이름은 `plip0'과 `plip1', `plip2' 등이다.

Kernel Compile Options:

        Network device support  --->
            <*> PLIP (parallel port) support
        

plip (Parallel Line IP)는 직렬 포트 대신에 머신에 있는 병렬 프린터 포트를 쓴다는 점을 제외하곤 두 머신 간의 점대점(point to point) 네트웍 연결을 제공하기 위해 사용된다는 점에서 SLIP과 비슷하다(이 문서 뒷부분의 케이블 부분에서 케이블 그림이 제공된다). 병렬 포트에선 한 번에 하나 이상의 비트 전송이 가능하기 때문에 plip 인터페이스로 표준 직렬 장치보다 고속의 전송을 하는 것이 가능하다. 추가로 직렬 포트를 위해 비교적 비싼 16550AFN UART 포트를 사는 대신 간단한 병렬 포트인 프린터 포트를 사용할 수 있다. PLIP는 직렬 연결에 비해 CPU를 많이 사용하며 만약 값싼 이더넷 카드가 있다면 좋은 선택이 아니겠지만 달리 방법이 없을 경우 매우 잘 작동할 것이다. 연결이 잘 작동한다면 초당 20 킬로바이트의 전송률을 기대할 수 있다.

PLIP 장치 드라이버는 병렬 포트 하드웨어용 병렬 장치 드라이버와 충돌한다. 만약 두 드라이버를 모두 사용하고 싶다면 PLIP용 포트와 프린터 드라이버용 포트를 선택할 수 있도록 두 드라이버 모두 모듈로 컴파일해야 한다. 커널 모듈 설정에 대한 더 많은 정보를 위해선 ``Module mini-HOWTO''를 참조하라.

일부 랩탑 컴퓨터들은 PLIP가 사용하는 특정 신호의 조합을 지원하지 않기 때문에 PLIP가 작동하지 않을 수 있다는 것을 명심하라. 그러나 프린터는 그런 조합을 쓰지 않는다.

리눅스의 plip 인터페이스는 Crynwyr Packet Driver PLIP와 호환이 되며 이른 여러분이 여러분의 리눅스 머신을 plip를 통해 tcp/ip 소프트웨어를 돌리고 있는 DOS 머신에 연결할 수 있다는 것을 의미한다.

커널 2.0.* 에선 plip 장치가 i/o port와 IRQ에 아래처럼 매핑된다.

        device  i/o     IRQ
        ------  -----   ---
        plip0   0x3bc   5
        plip1   0x378   7
        plip2   0x278   2
        

여러분의 병렬 장치가 위의 조합에 맞지 않는다면 ifconfig 명령의 `irq' 파라메타를 이용하여 포트의 IRQ를 바꿀 수 있다(ROM BIOS가 지원한다면 프린터 포트의 IRQ를 작동하도록 설정한다). 다른 방법으로 여러분이 모듈을 사용할 경우 insmod 명령에 ``io=''와 ``irq='' 옵션을 사용할 수도 있다. 예를 들어

        root# insmod plip.o io=0x288 irq=5
        

PLIP의 작동은 두 개의 제한시간에 의해 조절되는데 모두 대부분의 경우 기본값이 ok이다. 여러분이 매우 느린 컴퓨터를 가지고 있다면 이 값들을 증가시킬 필요가 있을 것이며 이럴 경우 증가시킬 타이머는 실제론 상대 컴퓨터에 있다. 커널을 다시 컴파일 하지 않고 이 타이머 설정을 바꿀 수 있도록 plipconfig 라는 프로그램이 존재한다. 이는 많은 리눅스 배포본에 포함되어 있다.

To configure a plip interface, you will need to invoke the following commands (or add them to your initialization scripts):

plip 인터페이스를 설정하기 위해선 아래 명령을 내린다(혹은 이 명령들을 초기화 스크립트에 추가할 수 있다).

        root# /sbin/ifconfig plip1 localplip pointopoint remoteplip
        root# /sbin/route add remoteplip plip1
        

이제 사용하는 포트는 I/O 주소가 0x378인 것이며 localplipremoteplip는 PLIP 케이블 상에서 사용될 IP 주소나 이름들이다. 나는 이 값을 /etc/hosts에 넣어 두었다.

        # plip entries
        192.168.3.1   localplip
        192.168.3.2   remoteplip
        

pointtopoint 파라메타는 SLIP에서와 같은 의미를 가지는데 연결의 다른 끝에 있는 머신의 주소를 지정한다.

In almost all respects you can treat a plip interface as though it were a SLIP interface, except that neither dip nor slattach need be, nor can be, used.

dipslattach 모두 쓰이지 않을 경우를 제외하곤 대부분의 경우 여러분은 plip 인터페이스를 SLIP 인터페이스처럼 다룰 수 있다.

PLIP에 대한 더 많은 정보는 ``PILP mini-HOWTO''에서 얻을 수 있다.

7.3 Linux-2.2에서의 PLIP

커널 2.1 버젼의 개발동안 병렬 포트에 대한 지원이 더욱 좋게 변경되었다.

Kernel Compile Options:

        General setup  --->
            [*] Parallel port support
        Network device support  --->
            <*> PLIP (parallel port) support
        

PLIP의 새 코드는 이전의 것처럼 작동한다 (앞의 부분에서처럼 ifconfigroute 명령을 똑같이 사용한다. 그러나 향상된 병렬 포트 지원 때문에 장치 초기화는 약간 다르다).

``첫번째'' PLIP 장치는 항상 ``plip0''라 불리며 이더넷 장치에서처럼 이 첫번째 장치는 시스템에 의해 잡히는 첫번째 장치이다. 실제로 사용되는 병렬 포트는 /proc/parpot에 나오는 것처럼 사용 가능한 포트들 중 하나이다. 예를 들어 한 개의 병렬 포트만 있다면 /proc/parport/0라는 단 한개의 디렉토리만 존재한 것이다.

커널이 포트의 IRQ를 찾지 못한다면 ``insmod plip''는 실패한다. 이런 경우 /proc/parport/0/irq에 알맞은 값을 직접 쓰고 insmod를 다시 실행한다.

병렬 포트 관리에 대한 완전한 정보는 Documentation/parport.txt에 있으며 이는 커널 소스의 일부이다.

7.4 PPP

PPP 장치 이름은 `ppp0', `ppp1' 등이다. 이 장치들은 첫 장치를 `0' 으로 시작해서 순서대로 번호가 부여된다.

Kernel Compile Options:

        Networking options  --->
            <*> PPP (point-to-point) support
        

PPP 설정은 PPP-HOWTO에서 자세히 다루어진다.

pppd를 이용해서 네트웍에 영구적인 연결을 유지하기

여러분이 네트웍에 반 영구적인 연결을 할 수 있을 만큼 운이 좋고 연결이 끊길 경우 자동으로 PPP 연결을 다시 만들도록 하고 싶다면 여기에 간단한 트릭이 있다.

아래 명령을 수행해서 PPP가 root 유저에 의해 시작될 수 있도록 설정한다.

# pppd
/etc/ppp/options 파일 안에 `-detach' 옵션을 설정하는 것을 주의한다. 그리고 아래 문장을 /etc/inittab 파일의 getty 정의 아래에 삽입한다.
pd:23:respawn:/usr/sbin/pppd
이는 init 프로그램으로 하여금 pppd를 실행 후 감시하면서 죽었을 경우 자동으로 재실행 하도록 해준다.

7.5 SLIP client

SLIP 장치는 `sl0', `sl1' 등으로 이름이 붙여지며 설정되는 첫 장치가 `0'을 부여받고 나머지가 설정되는 순서대로 일련의 번호를 부여받는다.

Kernel Compile Options:

        Network device support  --->
            [*] Network device support
            <*> SLIP (serial line) support
            [ ]  CSLIP compressed headers
            [ ]  Keepalive and linefill
            [ ]  Six bit SLIP encapsulation
        

SLIP(Serial Line Internet Protocol)은 직렬 연결 상에서 tcp/ip를 사용하도록 해 주며 이 연결은 모뎀을 이용한 전화선 혹은 비슷한 류의 다른 임대선일 수 있다. 물론 SLIP을 쓰기 위해선 근처의 SLIP-server에 접근할 수 있어야 한다. 전 세계의 수많은 대학과 기업들이 SLIP 연결을 지원한다.

Slip은 IP 데이타그램의 전송을 위해 직렬 포트를 사용한다. 이를 위해 직렬 장치에 대한 제어권을 획득해야 한다. Slip 장치는 sl0, sl1 등으로 이름이 붙여진다. 이 이름들이 어떻게 직렬 장치로 할당될까? 네트워킹 코드는 직렬 장치를 SLIP 장치로 바꾸기 위해 ioctl (i/o control) 이라 불리는 것을 사용한다. 이를 할 수 있는 두 개의 프로그램이 제공되는데 dipslattach이다.

dip

dip (Dialup IP)는 직렬 장치의 속도를 조절하고 연결의 다른 쪽으로 전화를 걸도록 모뎀에게 명령을 내리고 원격 서버에 자동으로 로긴하며 서버에서 보내진 메시지를 자동으로 찾아서 그 안에서 현재 장치의 IP 주소 같은 정보를 뽑아내고 직렬 포트를 SLIP 모드로 바꾸기 위해 필요한 ioctl 명령을 실행하는 등의 일을 하는 매우 유용한 프로그램이다. dip은 강력한 스크립팅 기능을 가지고 있으며 이를 이용해서 로긴 과정을 자동화할 수 있다.

metalab.unc.edu에서 이 프로그램을 구할 수 있다.

설치하기 위해선 아래와 같이 한다.

        user% tar xvzf dip337o-uri.tgz
        user% cd dip-3.3.7o
        user% vi Makefile
        root# make install
        

Makefileuucp라는 그룹이 존재한다고 가정하나 여러분의 설정에 따라 dip이나 SLIP으로 이를 변경할 수 있다.

slattach

dip과는 반대로 slattach은 매우 단순한 프로그램으로 사용하기엔 매우 쉽지만 dip과 같은 복잡성은 없다. 스크립팅 기능도 없으며 이를 이용해선 직렬 장치를 SLIP 장치로 설정하는 것만 할 수 있다. slattach은 여러분이 필요한 모든 정보를 알고 있고 이 프로그램 실행 전에 직렬 연결이 성립되어 있다고 가정한다. slattach은 물리적인 케이블이나 임대 선 같은 서버로의 영구적 연결을 사용하는 경우에 쓰기에 좋다.

어느 경우에 어떤 것을 사용하나 ?

여러분은 SLIP 서버로 머신을 연결하는 데에 다이얼업 모뎀이나 임시 선을 사용하는 경우엔 dip을 쓰는 것이 좋다. 머신과 서버간에 지속적인 연결이 가능하며 연결을 만들 별다른 일이 필요하지 않을 경우엔 slattach을 쓰는 것이 좋다. 자세한 사항은 `Permanent Slip connection' 부분을 참고하라.

SLIP 설정은 이더넷 인터페이스 설정과 매우 비슷하다 (위의 `이더넷 장치 설정' 부분을 읽어라). 그러나 중요한 몇 가지 차이점이 있다.

무엇보다도 연결의 양 끝에 한 개씩, 네트웍 상에 총 두 개의 호스트만이 있다는 점에서 SLIP 연결은 이더넷 네트웍과 다르다. 케이블 연결만으로도 금방 사용이 가능한 이더넷과는 달리 SLIP은 연결의 종류에 따라 특정한 방법으로 네트웍 연결을 초기화 해줘야 한다.

dip을 사용하는 경우 초기화는 일반적으로 부팅시가 아닌 연결을 사용할 수 있게 된 후의 어느 시점에 행해진다. 이 과정을 자동화 하는 것도 가능하다. slattach을 사용한다면 rc.inet1 안에 초기화 부분을 추가할 수 있으며 이에 대해선 곧 설명할 것이다.

SLIP 서버에는 크게 두 종류가 있는데 동적 IP 주소 서버와 정적 IP 주소 서버이다. 거의 모든 SLIP 서버는 여러분에게 연결 시에 사용자 이름과 암호를 써서 로긴하도록 할 것이다. dip은 이런 로긴 과정을 자동으로 다룰 수 있다.

전화선과 DIP을 이용한 정적 SLIP 서버로의 연결.

정적 SLIP 서버는 여러분에게 고정되며 다른 사람과 겹치지 않는 하나의 IP 주소를 제공한다. 서버로 연결될 때마다 여러분의 SLIP 포트는 이 주소로 설정된다. 정적 SLIP 서버는 모뎀 연결에 응답하면서 사용자 이름과 암호를 물어볼 것이고 곧 여러분의 IP 주소로 가는 데이타그램들을 그 연결을 통해 보내줄 것이다. 정적 서버를 사용한다면 여러분의 호스트명과 IP 주소에 대한 엔트리를 /etc/hosts 안에 넣어 둘 수 있다. 또한 rc.inet2, host.conf, resolv.conf, /etc/HOSTNAME, rc.local 같은 파일들도 설정할 수 있다. SLIP 연결시에 인터페이스의 설정에 대한 모든 일은 dip이 해주므로 rc.inet1 을 설정할 때 SLIP 연결에 대한 별다른 사항을 넣을 필요가 없다는 것을 명심하라. 여러분은 dip에 알맞은 값들을 넘겨줘야 하며 이 프로그램은 모뎀이 연결을 만들도록 하고 SLIP 서버에 로긴한 후에 인터페이스를 자동으로 설정할 것이다.

여러분이 사용하는 서버가 위와 같이 동작한다면 dip을 알맞게 설정하기 위해 `Dip 사용하기' 부분으로 넘어가도 된다.

전화선과 DIP을 이용한 동적 SLIP 서버로의 연결.

동적 SLIP 서버는 여러분이 로긴할 때마다 수많은 주소들 중에 임의의 IP 주소를 여러분에게 할당해 준다. 따라서 여러분이 매번 특정한 주소를 가진 다는 것을 보장할 수 없으며 현재 받은 주소도 여러분이 연결을 끊은 후에는 다른 누군가가 사용할 수도 있다. 이런 SLIP 서버를 설정하는 네트웍 관리자는 SLIP 서버가 사용할 주소 풀(pool)을 가지고 있으며 새로운 연결이 들어올 때마다 사용되지 않는 주소중 하나를 고르고 접속자를 로긴 과정으로 이끈 후에 할당된 IP 주소를 포함하는 환영 메시지를 보내주고 그 IP 주소를 연결이 되어 있는 동안 사용하도록 한다.

이런 종류의 서버에 대한 설정도 정적 서버의 경우와 비슷하나 서버가 할당해 준 IP 주소를 받을 경우 그 값으로 SLIP 장치를 설정해 주는 과정이 추가되어야 한다.

역시 dip이 필요한 힘든 일들을 모두 해주며 새 버젼은 로긴 과정뿐만 아니라 자동으로 환영 메시지 안의 IP 주소를 읽어서 SLIP 장치를 이 값으로 설정해 주는 것을 자동으로 해줄 만큼 쓸만한다.

여러분의 SLIP 서버가 이와 같이 동작한다면 dip을 알맞게 설정하는 법을 보기 위해 `Dip 사용하기' 부분으로 이동해도 된다.

DIP 사용하기.

앞에서 설명한 것처럼 dip은 SLIP 서버로 연결 요청과 로긴, 연결 수립, 알맞은 ifconfigroute 명령으로의 SLIP 장치 설정을 자동화 하고 둔산화 해주는 강력한 프로그램이다.

근본적으로 dip을 사용하기 위해선느 `dip script'를 만들어야 하는데 이 스크립트는 여러분이 dip이 하길 원하는 작업들을 수행하는 방법을 dip에게 알려주는 명령들의 단순한 목록이다. 작동하는 방식을 보기 위해선 dip과 같이 제공되는 sample.dip을 보면 된다. dip 은 많은 옵션을 가진 매우 강력한 프로그램이다. 여기에서 모든 것을 다루는 대신에 여러분은 man 페이지나 dip과 같이 제공되는 샘플 파일들과 README를 볼 것은 권한다.

sample.dip 스크립트는 여러분이 정적 SLIP 서버를 사용한다고 가정하고 있다. 따라서 여러분의 IP 주소가 무엇인지 먼저 알고 있어야 한다. 동적 SLIP 서버인 경우를 위해 dip의 새 버젼들은 동적 서버가 할당해 준 IP 주소를 자동으로 읽어들여 SLIP 장치를 설정해 주는 데에 사용할 수 있는 명령을 제공한다. 아래의 예제는 dip337j-uri.tgz에 들어있는 sample.dip을 약간 수정한 것이며 여러분에게 좋은 시작점이 될 것이다. 이 예제를 /etc/dipscript로 저장한 후에 여러분의 설정에 맞도록 수정할 수도 있다.

#
# sample.dip    Dialup IP connection support program.
#
#               This file (should show) shows how to use the DIP
#       This file should work for Annex type dynamic servers, if you
#       use a static address server then use the sample.dip file that
#       comes as part of the dip337-uri.tgz package.
#
#
# Version:      @(#)sample.dip  1.40    07/20/93
#
# Author:       Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
#

main:
# Next, set up the other side's name and address.
# My dialin machine is called 'xs4all.hacktic.nl' (== 193.78.33.42)
get $remote xs4all.hacktic.nl
# Set netmask on sl0 to 255.255.255.0
netmask 255.255.255.0
# Set the desired serial port and speed.
port cua02
speed 38400

# Reset the modem and terminal line.
# This seems to cause trouble for some people!
reset

# Note! "Standard" pre-defined "errlevel" values:
#  0 - OK
#  1 - CONNECT
#  2 - ERROR
#
# You can change those grep'ping for "addchat()" in *.c...

# Prepare for dialing.
send ATQ0V1E1X4\r
wait OK 2
if $errlvl != 0 goto modem_trouble
dial 555-1234567
if $errlvl != 1 goto modem_trouble

# We are connected.  Login to the system.
login:
sleep 2
wait ogin: 20
if $errlvl != 0 goto login_trouble
send MYLOGIN\n
wait ord: 20
if $errlvl != 0 goto password_error
send MYPASSWD\n
loggedin:

# We are now logged in.
wait SOMEPROMPT 30
if $errlvl != 0 goto prompt_error

# Command the server into SLIP mode
send SLIP\n
wait SLIP 30
if $errlvl != 0 goto prompt_error

# Get and Set your IP address from the server.  
#   Here we assume that after commanding the SLIP server into SLIP
#   mode that it prints your IP address
get $locip remote 30
if $errlvl != 0 goto prompt_error

# Set up the SLIP operating parameters.
get $mtu 296
# Ensure "route add -net default xs4all.hacktic.nl" will be done
default

# Say hello and fire up!
done:
print CONNECTED $locip ---> $rmtip
mode CSLIP
goto exit

prompt_error:
print TIME-OUT waiting for sliplogin to fire up...
goto error

login_trouble:
print Trouble waiting for the Login: prompt...
goto error

password:error:
print Trouble waiting for the Password: prompt...
goto error

modem_trouble:
print Trouble occurred with the modem...
error:
print CONNECT FAILED to $remote
quit

exit:
exit

위의 예제는 여러분이 동적 SLIP 서버에 연결한다고 가정하고 있으며 만약 정적 SLIP 서버를 사용한다면 dip337j-uri.tgz에 들어있는 sample.dip가 잘 작동할 것이다.

dipget $local 명령을 만나면 연결에서 들어오는 텍스트 안에서 IP 주소처럼 보이는, 다시 말해 `.' 문자로 분리된 숫자열들을 찾는다. 이 수정사항은 동적 SLIP 서버와 동작하기 위해서 들어가며 이로 인해 서버에 의해 할당된 IP 주소를 읽어들이는 과정이 자동화될 수 있다.

위의 예제는 SLIP 연결을 통하는 기본 라우트를 자동으로 만들 것이며 이를 원치 않고 기본 라우터로 사용할 이더넷 연결이 있다면 스크립트에서 default 명령을 삭제해야 한다. 스크립트의 실행이 끝난 후 ifconfig 명령을 수행시켜 보면 sl0이라는 장치를 볼 수 있을 것이다. 이것이 SLIP 장치이다. dip 명령이 수행된 후라도 ifconfigroute 명령을 사용해서 설정을 수동으로 바꿀 수 있다.

dipmode 명령을 통해서 여러 개의 프로토콜 중에서 사용할 것을 선택할 수 있도록 해주며 가장 많이 쓰이는 것은 압축 기능이 있는 SLIP에 쓰이는 cSLIP이다. 중요한 것은 연결의 양 쪽이 모두 동일한 것을 사용해야 하며 따라서 여러분이 사용하는 서버와 같은 것을 사용해야 한다.

위의 예제는 매우 안정적이며 대부분의 오류들에 대처할 수 있다. 추가 정보를 위해선 dip의 man 페이지를 참고하라. 예를 들어 여러분은 미리 정해진 일정 시간동안 연결 수립이 안되면 서버로 다시 전화를 걸도록 하거나 하나 이상의 서버를 차례대로 시도 하도록 하는 등의 일을 스크립트로 만들 수 있다.

임대선과 slattach를 이용한 영구적인 SLIP 연결.

여러분이 두 머신간에 케이블 연결을 사용하거나 임대선을 쓰는 등의 영구적인 직렬 연결을 사용할 수 있다면 직렬 연결을 만들기 위해서 dip을 사용하며 생기는 모든 어려움들을 감수할 필욘 없다. slattach은 단지 연결을 설정하는 기능만을 갖춘 매우 간단한 프로그램이다.

연결이 영구적일 것이므로 rc.inet1 파일 안에 명령들을 추가할 수도 있다. 영구적인 연결에 있어 근본적으로 필요한 것은 직렬 장치를 알맞은 속도로 설정하고 직렬 장치를 SLIP 모드로 바꾸는 것 뿐이다. slattach은 이러한 것을 하나의 명령으로 가능하도록 해준다. 아래의 코드를 rc.inet1 파일에 추가하라.

        #
        # Attach a leased line static SLIP connection
        #
        #  configure /dev/cua0 for 19.2kbps and cslip
        /sbin/slattach -p cslip -s 19200 /dev/cua0 &
        /sbin/ifconfig sl0 IPA.IPA.IPA.IPA pointopoint IPR.IPR.IPR.IPR up
        #
        # End static SLIP.
        

설명 :

IPA.IPA.IPA.IPA

여러분의 IP 주소를 나타낸다.

IPR.IPR.IPR.IPR

반대편 끝의 IP 주소를 나타낸다.

slattach은 할당되지 않은 첫번째 SLIP 장치를 지정된 직렬 장치에 할당한다. slattachsl0에서부터 시작한다. 따라서 맨 처음 slattach은 SLIP 장치 sl0을 지정된 직렬 장치에 할당하고 다음엔 sl1을 할당한다.

slattach-p 인자를 가지고 여러 가지의 프로토콜을 설정할 수 있도록 해준다. 압축을 사용할 것인지 아닌지에 따라 SLIP이나 cSLIP 중 하나를 사용할 것이며 연결의 양 끝이 모두 같은 것을 사용해야 한다는 것을 명심한다.

7.6 SLIP 서버.

여러분이 네트웍에 연결되어 있고 다른 사람이 전화를 걸고 들어와서 네트웍 서비스를 사용 가능하도록 하고 싶은 머신이 있다면 그 머신을 서버로 설정할 필요가 있다. 직렬 연결 프로토콜로 SLIP을 쓰길 원한다면 여러분의 리눅스 머신을 SLIP 서버로 설정하는 데에는 크게 세 가지 옵션이 있다. 내가 좋아하는 것은 처음 설명되는 sliplogin을 사용하는 것인데 이는 이 방법이 이해하고 설정하기 가장 쉽기 때문이다. 그러나 여기에선 모든 방법을 간단히 섦여할 것이며 여러분이 알맞은 것을 선택할 수 있다. -->

sliplogin을 사용하는 SLIP 서버.

sliplogin은 터미날 연결을 SLIP 연결로 바꿔 주어 SLIP 사용자 용으로 일반 로긴 쉘 대신에 사용할 수 있는 프로그램이다. 이 프로그램은 여러분의 리눅스 머신을 사용자가 접속할 때마다 같은 주소를 받게 하는 정적 주소 서버나 접속할 때마다 가능한 주소를 할당해서 쓰게 하는 동적 주소 서버로 설정할 수 있다.

접속자는 표준 로긴 과정처럼 사용자 이름과 암호를 입력할 것이나 로긴 이후에 쉘을 받는 대신 sliplogin이 실행되어서 접속한 사용자의 로긴 이름에 해당하는 엔트리를 설정 파일(/etc/slip.hosts)에서 검색한다. 엔트리가 찾아지면 연결을 8비트 클린 연결로 설정한 후 SLIP 연결로 변환하기 위해 ioctl을 사용한다. 이 과정이 끝나면 설정의 마지막 단계가 진행되는데 이 단계에서 sliplogin은 쉘 스크립트를 실행하여 SLIP 인터페이스를 알맞은 IP 주소와 netmask로 설정하고 적당한 라우팅 세팅을 한다. 이 스크립트는 일반적으로 /etc/slip.login이나 특정 접속자에게 특정한 초기화가 필요하다면 getty에서처럼 /etc/slip.login.loginname의 설정 스크립트를 만들어서 기본 스크립트 대신 실행되도록 할 수도 있다>

sliplogin이 여러분에게 알맞게 작동하도록 하기 위해 설정해야 할 파일은 3 4개가 있다. 여기에서 소프투웨어를 구하는 방법과 장소, 그리고 각각을 설정하는 방법을 자세히 설명할 것이다. 필요한 파일들은 아래와 같다.

sliplogin을 얻는 곳

여러분은 이미 배포본의 일부로 sliplogin 패키지를 가지고 있을 수도 있으나 그렇지 않다면 metalab.unc.edu 에서 sliplogin을 구할 수 있다. 이 tar 파일은 소스와 이미 컴파일 된 바이너리, man 페이지를 모두 포함하고 있다.

허가된 사용자에게만 sliplogin을 실행할 수 있도록 하기 위해선 /etc/group 파일에 아래와 같은 엔트리를 추가해야 한다.

 ..
slip::13:radio,fred
 ..

sliplogin 패키지를 인스톨하면 Makefilesliplogin 프로그램의 소유자 그룹을 slip으로 변경하여 이 그룹에 속한 사용자만이 이 프로그램을 쓸 수 있도록 한다. 위의 예제는 radiofred라는 사용자에게만 sliplogin을 실행할 수 있도록 하는 것이다.

바이너리 파일을 /sbin에, man 페이지를 8번 섹션에 설치하려면 아래와 같이 한다.

# cd /usr/src
# gzip -dc .../sliplogin-2.1.1.tar.gz | tar xvf -
# cd sliplogin-2.1.1
# <..edit the Makefile if you don't use shadow passwords..>
# make install

설치 전에 바이너리 파일을 다시 컴파일하길 원하면 make install 이전에 make clean을 추가한다. 바이너리 파일들을 다른 곳에 설치하고 싶다면 Makefileinstall 규칙을 수정하면 된다.

추가 정보를 위해선 패키기에 함께 들어 있는 README 파일들을 참고하라.

SLIP 호스트에서의 /etc/passwd 설정.

보통 /etc/passwd 파일 안에 SLIP 접속자에 대한 특별한 로긴 엔트리를 넣어야 한다. 흔히 쓰이는 방법은 접속지 호스트의 호스트명 앞에 대문자 `S'를 붙이는 것이다. 예를 들어 radio라는 호스트에서 접속한다면 /etc/passwd에 아래와 같은 엔트리를 추가한다.

Sradio:FvKurok73:1427:1:radio SLIP login:/tmp:/sbin/sliplogin

잘 동작하기만 한다면 이 계정의 이름 자체는 중요한 것이 아니다.

주의할 것은 접속자가 이 머신으로부터 쉘을 받을 것이 아니므로 특정한 홈 디렉토리를 가질 필요가 없다는 것이다. 따라서 /tmp를 쓰는 것은 좋은 선택이다. 또한 일반 로긴 쉘 대신 sliplogin이 사용되었다는 것을 주의한다.

/etc/slip.hosts의 설정

sliplogin은 접속자를 위한 자세한 설정 사항을 얻기 위해 로긴 이름에 해당하는 엔트리를 /etc/slip.hosts 파일에서 찾는다. 이 파일은 접속자에게 부여되어 알맞게 설정되는 IP 주소와 netmask를 지정하는 곳이다. radio라는 접속자 호스트에 대한 정적인 설정과 albert라는 접속자 호스트에 대한 동적 설정에 대한 예제 엔트리가 아래에 있다.

#
Sradio   44.136.8.99   44.136.8.100  255.255.255.0  normal      -1
Salbert  44.136.8.99   DYNAMIC       255.255.255.0  compressed  60
#

/etc/slip.hosts 파일의 엔트리들:

  1. 접속자의 로긴 명.
  2. 서버 머신, 다시 말해 이 머신의 IP 주소.
  3. 접속자가 할당받을 IP 주소. 이 필드가 DYNAMIC이라면 IP 주소는 다음에 설명될 /etc/slip.tty 파일에 들어있는 정보에 근거해서 할당된다. 주의사항: 이것이 제대로 작동하려면 적어도 1.3 버젼 이상의 것을 사용해야 한다.
  4. 접속자 머신에 부여될 netmask. dotted decimail notation으로 표기되며 예를 들어 255.255.255.0은 C 클래스 네트웍의 mask다.
  5. 압축이나 다른 slip의 기능들을 키고 끄도록 하는 slip 모드 설정. 가능한 값은 "normal"이나 "compressed"이다.
  6. 연결이 끊기지 않고 아이들(데이타그램 이동이 없는) 상태로 있을 수 있는 시간을 지정하는 타임아웃 값. 음수인 경운 이 기능을 끈다.
  7. 추가적인 인자들.

주의사항: 두 번째와 세 번째 필드엔 점으로 분리되는 십진수로 표기되는 IP 주소나 호스트명 어느 것이나 쓸 수 있다. 호스트명을 쓰는 경우엔 그 호스트명하는 IP 주소를 찾을 수 있어야 한다. 그렇지 않다면 스크립트 실행이 실패할 것이다. 이는 그 호스트로 텔넷을 해 봄으로써 시험해 볼 수 있으며 `Trying nnn.nnn.nnn...'과 같은 메시지가 나오면 여러분의 머신이 그 호스트명에 해당하는 IP 주소를 찾을 수 있는 것이다. `Unknown host' 메시지가 나오면 찾을 수 없는 것이다. IP 주소를 찾을 수 없을 경우 IP 주소를 사용하거나 name resolver의 설정을 수정해야 한다(Name Resolution 부분을 참고하라).

가장 일반적인 slip 모드는 다음과 같다.

normal

to enable normal uncompressed SLIP.

compressed

to enable van Jacobsen header compression (cSLIP)

보통 이 두 모드는 상호 배타적이며 어느 쪽이든 사용할 수 있다. 다른 옵션들에 대한 자세한 정보는 man 페이지를 참고하라.

/etc/slip.login 파일의 설정.

sliplogin/etc/slip.hosts를 검색하여 해당 엔트리를 찾은 후에 실제로 SLIP 인터페이스를 IP 주소와 netmask로 설정하기 위해 /etc/slip.login 파일을 실행한다. sliplogin페키지와 함께 제공되는 /etc/slip.login 파일 예제는 아래와 같다.

#!/bin/sh -
#
#       @(#)slip.login  5.1 (Berkeley) 7/1/90
#
# generic login file for a SLIP line.  sliplogin invokes this with
# the parameters:
#     $1       $2       $3    $4, $5, $6 ...
#   SLIPunit ttyspeed   pid   the arguments from the slip.host entry
#
/sbin/ifconfig $1 $5 pointopoint $6 mtu 1500 -trailers up
/sbin/route add $6
arp -s $6 <hw_addr> pub
exit 0
#

여러분은 이 스크립트가 단순히 ifconfigroute 명령만을 사용하여 SLIP 장치를 해당 IP 주소와 원격지 IP 주소, netmask를 가지고 설정하고 SLIP 장치를 통한 라우팅을 만든 다는 것을 알 수 있다. slattach 명령을 사용하는 경우와 똑같다.

서버 머신과 같은 이더넷 상의 다른 호스트들이 접속해 온 호스트에 닿을 수 있도록 하기 위해선 Proxy ARP을 써야 한다는 것을 주의해야 한다.

/etc/slip.logout 파일의 설정.

접속이 끊겼을 경우 여러분은 직렬 장치가 보통 상태로 되돌아 가서 이후의 접속자들이 정확히 로긴할 수 있기를 원할 것이다. 이는 /etc/slip.logout 파일을 이용하면 가능하다. 이 파일은 형식이 매우 간단하며 /etc/slip.login 파일과 같은 인자들을 가지고 호출된다.

        #!/bin/sh -
        #
        #               slip.logout
        #
        /sbin/ifconfig $1 down
        arp -d $6
        exit 0
        #
        

이 파일이 하는 일은 앞에서 만들어진 라우팅 정보를 지우기 위해 인터페이스의 작동을 `정지시키는' 일이 전부이다. 또한 proxy arp들을 지우기 위해 arp 명령도 사용하는데 만약 여러분의 서버 머신이 이더넷 포트를 가지고 있지 않다면 이 스크립트엔 arp 명령은 필요 없다.

/etc/slip.tty 파일의 설정.

동적 IP 주소 할당을 사용한다면 (/etc/slip.hosts 파일 안에 어떤 호스트라도 DYNAMIC 으로 설정했다면) 어떤 포트에 어떤 주소가 할당될 것인지에 대한 목록을 갖도록 /etc/slip.tty 파일을 설정해야 한다. 이 파일은 사용자에게 주소를 동적으로 할당할 경우에만 필요하다.

이 파일은 SLIP 연결을 지원하는 tty 장치들과 그 포트로 접속해 들어온 사용자에게 배정될 IP 주소들을 열거해 놓은 테이블이다.

형식은 다음과 같다.

# slip.tty    tty -> IP address mappings for dynamic SLIP
# format: /dev/tty?? xxx.xxx.xxx.xxx
#
/dev/ttyS0      192.168.0.100
/dev/ttyS1      192.168.0.101
#

이 테이블은 /dev/ttyS0 포트로 접속해 들어왔으며 /etc/slip.hosts 파일의 원격지 주소 필드가 DYNAMIC로 설정된 사용자에게 192.168.0.100 주소를 할당한다는 것을 의미한다.

이런 방식으로 특정 주소가 지정되어 있지 않은 모든 사용자에게 포트 하나당 한 주소만 할당해야 한다. 이는 낭비를 줄이기 위해 필요한 주소의 수를 최소로 할 수 있도록 해준다.

dip을 쓰는 SLIP 서버

아래의 정보들은 dip의 man 페이지에서 구한 것이라는 것을 먼저 말하고 싶다. man 페이지에는 리눅스를 SLIP 서버로 사용하는 방법이 간단히 설명되어 있다. 아래 내용은 dip337o-uri.tgz 페키지에 대한 것이며 다른 버젼에선 제대로 작동하지 않을 수도 있다는 것도 주의해야 한다.

dip은 들어오는 연결에 대한 작동 모드(input mode)를 가지고 있다. 이 모드에선 dip을 실행한 접속자에 대항하는 엔트리를 찾아서 직렬 연결을 /etc/diphosts 파일 안에 있는 해당 정보에 따라 SLIP 연결로 설정한다. 이 모드는 dipdiplogin으로 실행시켜서 사용할 수 있다. 따라서 이런 방법을 쓰면 로긴 쉘로 diplogin을 사용하는 특별한 계정을 만드는 것만으로 dip을 SLIP 서버로 사용할 수 있다.

가장 먼저 해야 할 일은 아래처럼 심볼릭 링크를 만드는 것이다.

# ln -sf /usr/sbin/dip /usr/sbin/diplogin

그리곤 /etc/passwd 파일과 /etc/diphosts 파일 모두에 엔트리들을 추가해야 하는데 이 엔트리들의 형식은 아래와 같다.

dip을 가지고 리눅스를 SLIP 서버로 설정하기 위해서 접속자들을 위해서 (input mode로 작동하는)dip을 로긴 쉘로 사용하는 특별한 SLIP 계정을 만들어야 한다. 흔히 사용되는 방법은 모든 SLIP 계정을 대문자 `S'로 시작하도록 하는 것이다. 예를 들면 `Sfredm' 처럼.

SLIP 사용자에 대한 /etc/passwd 엔트리의 예제가 아래에 있다.

Sfredm:ij/SMxiTlGVCo:1004:10:Fred:/tmp:/usr/sbin/diplogin
^^         ^^        ^^  ^^   ^^   ^^   ^^
|          |         |   |    |    |    \__ 로긴 쉘로 쓰이는 diplogin
|          |         |   |    |    \_______ 홈 디렉토리
|          |         |   |    \____________ 사용자 이름
|          |         |   \_________________ 사용자 그룹 ID
|          |         \_____________________ 사용자 ID
|          \_______________________________ Encrypted User Password 
\__________________________________________ Slip 사용자 로긴 명

사용자가 접속한 후 사용자 확인이 끝나면 login 프로그램은 diplogin을 실행시킨다. diplogin이라는 이름으로 수행되면 dip은 자신이 로긴 쉘로 사용되고 있다는 것을 자동으로 알게 된다. diplogin으로 실행될 때 가장 먼저 하는 것은 자신을 실행시킨 사용자의 userid를 얻기 위해 getuid() 펑션 콜을 호출하는 것이다. 그리곤 userid나 접속이 들어온 tty 이름 중 어느 하나에 해당되는 엔트리를 /etc/diphosts 파일에서 찾아 가장 먼저 발견되는 것을 가지고 연결을 설정한다. diphosts 파일 내에 사용자에 대한 엔트리를 추가할지 혹은 기본 설정을 쓰도록 할 지에 대한 판단에 따라 여러분은 정적 주소를 받는 사용자와 동적으로 주소를 받는 사용자를 모두 수용하는 서버를 만드는 것처럼 만들 수 있다.

dip은 접속을 받아들이는 모드에서 실행될 때 자동으로 `Proxy-ARP' 엔트리를 추가하므로 이를 수동으로 추가하는 것에 대해 신경쓸 필욘 없다.

/etc/diphosts의 설정.

/etc/diphostsdip이 원격지 호스트에 대한 설정 사항을 찾아보기 위해 사용된다. 이 원격지 호스트들은 리눅스 머신으로 접속을 해 오는 사용자들일 수도 있고 여러분이 리눅스 머신으로 접속을 해 들어가는 머신일 수도 있다.

/etc/diphosts의 일반적인 형식은 아래와 같다:

 ..
Suwalt::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:CSLIP,1006
ttyS1::145.71.34.3:145.71.34.2:255.255.255.0:Dynamic ttyS1:CSLIP,296
 ..

필드 설명:

  1. login name: getpwuid(getuid())의 리턴 값이나 tty 명
  2. unused: compat. with passwd
  3. Remote Address: 접속해 오는 호스트의 IP 주소, 숫자나 이름
  4. Local Address: I이 머신의 IP 주소, 역시 숫자나 이름
  5. Netmask: dotted decimal notation 으로
  6. Comment field: 원하는 사항을 여기에 삽입.
  7. protocol: Slip, CSlip 등등
  8. MTU: 십진수

원격 SLIP 사용자에 대한 /etc/net/diphosts의 한 예가 아래에 있다:

Sfredm::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:SLIP,296

이는 원격지 주소는 145.71.34.1로, MTU는 296으로 하여 SLIP 연결을 설정한다.

혹은

Sfredm::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:CSLIP,1006

원격지 주소는 145.71.34.1로 MTU는 1006으로 하여 cSLIP 가능한 연결을 설정한다.

따라서 정적으로 할당된 IP 주소를 받을 사용자들은 모두 /etc/diphosts 안에 엔트리를 가져야 한다. 특정 포트로 들어오는 사용자들의 자세한 설정이 동적으로 할당되도록 하려면 tty 장치에 대한 엔트리를 추가해야 하며 사용자에 대한 엔트리를 설정해선 안된다. 또한 명심해야 할 것은 사용자들이 어떤 모뎀으로 접속해 들어오든 알맞은 설정을 쓸 수 있도록 하기 위해서 접속에 사용되는 모든 tty 장치에 대해 적어도 하나의 엔트리를 만들어야 한다는 것이다.

접속해 들어올 때 사용자는 SLIP 로긴 id와 암호를 입력할 수 있는 일반적인 로긴 과 패스워드 프롬프트를 받게 된다. 사용자가 인증되면 특별한 메시지를 받지 않고 사용자 쪽은 SLIP 모드로 전환된다. 이제 사용자는 SLIP 연결이 가능하며 diphosts 파일로 부터 받아지는 해당 인자들로 설정이 된다.

dSLIP 패키지를 쓰는 SLIP 서버.

Matt Dillon <dillon@apollo.west.oic.com>은 다이알-인 뿐 아니라 다이알-아웃 SLIP도 지원하는 페키지를 만들었다. Matt의 패키지는 연결을 관리하는 작은 프로그램들과 스크립트들의 묶음이다. 스크립트들 중 적어도 하나가 tcsh 을 필요로 하므로 이를 설치해야 한다. 또한 한 스크립트에서 expect을 필요로 하기 때문에 Matt은 이 유틸리티의 실행 파일도 제공한다. 이 패키지를 여러분의 기호에 맞게 작동하도록 하려면 expect에 대한 약간의 경험이 필요할 것이나 없다고 해서 패키지를 사용치 못하는 것은 아니다.

Matt이 README 파일에 설치 순서에 대해 잘 설명해 놓았으므로 여기서 굳이 그 과정을 반복하진 않겠다.

아래의 홈 사이트에서 dSLIP 패키지를 구할 수 있다:

apollo.west.oic.com

/pub/linux/dillon_src/dSLIP203.tgz

혹은 아래에서도 구할 수 있다:

metalab.unc.edu

/pub/Linux/system/Network/serial/dSLIP203.tgz

make install을 하기 전에 README 파일을 읽고 /etc/passwd/etc/group 엔트리들을 만들도록 한다.


다음 이전 차례