PPP 서버 설치하기
- 랜 연결에서 PPPD 셋업까지 -

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

 

     

1. PPP 프로토콜의 개요.

    PPP(Point to Point Protocol)란 시리얼라인에 인터넷용 프로토콜인 TCP/IP를 싣기위해 IETF(Internet Engineering Task Force)에서 제정한 표준 규약이다. 이는 RFC(Request For Comments) 1332, 1334, 1661, 1662에 규정되어있다. PPP는 본래 IP 프로토콜을 전송하기 위해 만들어졌지만 IPX 등 다른 프로토콜도 동시에 전송 가능하므로 멀티 프로토콜을 필요로 하는 라우터에서도 사용되고있다. 또한 PPP는 전송매체와는 독립적으로 작동하므로 싱크, 어싱크 연결에서 모두 사용된다.

 

2. PPP 프로토콜의 탄생 배경

    인터넷의 초창기에는 TCP/IP 를 WAN(Wide Area Network)에서 사용하기 위해 전용회선과 고가의 전용장비를 사용하였다. 그러나 인터넷 사용이 확산되면서 한 두대의 개인용 피시를 인터넷에 연결하여 사용하려는 사람들이 늘었으나 이런 사용자들은 고가의 전용회선 및 장비를 갖출 능력이 없었다. 따라서 피시에서 흔히 통신용으로 사용되는 모뎀과 전화선으로 IP 프로토콜을 전송할 수 있는 방법이 필요하였고 이것이 바로 SLIP(Serial Line IP)와 PPP이다.
    SLIP은 PPP보다 먼저 탄생하였으나 이는 인터넷의 표준으로 제정되지는 않았고, SLIP의 단점을 보완한 PPP가 시리얼 라인에서 TCP/IP 프로토콜을 전송하는 인터넷 표준으로 채택되었다.

     

3. 리눅스에서 PPP 프로토콜

    리눅스는 커늘버전 1.X에서부터 PPP와 SLIP를 지원하고 있다. PPP의 경우는 커늘 드라이버와 데몬 프로그램(PPPD)으로 나누어져 있으며 커늘 레벨에서는 패킷 어셈블과 디스어셈블이 이루어지고 데몬은 링크와 인터페이스 셋업을 담당한다.
    PPP는 두 호스트간에 IP 패킷을 라우팅하는 기능만 담당할 뿐 어떤 어플리케이션이 두 호스트간에 실행되는 것이 아니다. 따라서 어느 쪽이 서버고 클라이언트인지의 구별이 없으나 편의상 연결을 시도하는 쪽은 클라이언트, 연결을 받아주는 쪽을 서버라고 구별한다.
    앞으로 설명하려는 리눅스에서의 PPP서버 구축법은 커늘 2.0.X 버전을 기준으로한다.

 

4. PPP서버를 랜(LAN)에 연결하기

    리눅스를 PPP서버로 사용하는 경우는 여러가지가 있겠지만 여기서는 가장 흔한 경우, 즉 랜투랜(LAN to LAN)으로 인터넷을 연결하여 사용 중인 회사의 랜에 리눅스 PPP서버를 설치하여 회사 직원이 집에서  피시와 전화선 및 다이얼업 모뎀을 써서 인터넷을 사용할 수 있게 해주는 경우를 기준으로 설명한다. 이때 PPP클라이언트, 즉 연결을 시도하는 피시의 운영체제는 WIN 3.1, WIN 95, 리눅스 어느 쪽도 상관이 없다.
    여기서 맨 처음 단계는 PPP서버를 회사의 랜에 연경하여 PPP서버에서 인터넷을 사용할 수 있어야 한다.

    아래에 랜 연결 작업단계를 살펴본다.

    a. PPP서버 하드웨어 사양

    피시를 PPP서버로만 쓴다면 높은 사양의 피시를 요하지 않는다. PPP는 거의 커늘에서 작업이 이루어지므로 하드디스크를 자주 억세스 하거나, 많은 메모리를 필요로 하지 않기 때문이다. 486급에 16메가의 메모리를 갖고 있으면 PPP서버로 충분하다고 본다.
    랜카드의 경우는 ISA 방식보다는 PCI 방식이 설치가 쉽다. 또 리눅스는 이더넷, 토큰링, 아크넷 등 3대 랜 표준을 모두 지원하므로 회사의 랜에 맞는 랜카드를 골라야 한다.

    PPP서버로 쓸 피시에서 가장 중요한 건 RS-232C 포트와 모뎀이다. RS-232C 포트는 보통 시리얼포트라고 부르는데 이 포트에 사용된 UART(Universal Asynchronous Receiver-Transmitter) 칩이 PPP 전송 속도를 좌우한다. UART 칩에는 세가지 종류가 있는데 8250, 16450, 16550 이다. 이중 8250과 16450은 시리얼포트 속도를 19,200bps 이상으로 올릴 수 없으므로 16550A 이상의 칩을 쓴 시리얼포트를 사용해야 한다.

    피시의 시리얼포트는 2개만 사용할 수 있으므로 3개 이상의 PPP를 동시에 써야 한다면 멀티포트 카드를 장착해야 한다. 멀티포트카드를 고를 때는 반드시 리눅스용 드라이버가 있는지를 확인해야 하며 멀티포트에 별도의 CPU가 있는 인텔리전트형 카드를 써야 여러개의 PPP데몬을 동시에 띄울 수 있다.
    모뎀의 경우는 내장형보다는 외장형이 값이 비싸지만 사용이 편하다. 즉 외장형 모뎀은 모뎀의 상태와 이상유무를 인디케이터나 판넬에서 보여주므로 PPP 연결이 잘 이루어지지 않을 때 그 원인을 파악하기 쉽다.

    b.  리눅스 설치 및 네트워크 설정

    다음은 피시에 리눅스를 설치해야 한다. 리눅스 설치는 배포본에 따라 다르며 간단히 설명할 수 있는 내용이 아니므로 여기서는 생략한다. 한가지 유의할건 설치시 PPPD 프로그램이 선택되어있는지를 확인해야 한다는 것이다. 보통은 PPPD 프로그램이 자동으로 설치에 포함되어 있지만 그렇지 않은 경우도 있다.
    리눅스에서는  랜카드에 IP address를 할당하고 라우팅 테이블을 구성하는 것은 보통은 설치시에 행해진다. 따라서 설치시 네트워크 셋업에 관한 질문에 답변하면 랜 관련 셋팅이 관련 파일에 저장된다. 그러나 만약 설치 후에 랜 관련 셋업을 바꾸려면 대개는 관련 파일을 직접 수동으로 수정해야 한다. 리눅스에서 랜카드에 IP address를 할당하는 명령은 ifconfig 이며, 라우팅 테이블 설정명령은 route 이다.
    이 두 명령은 슬랙웨어의 경우는 /etc/rc.d/rc.inet1에 데비안은 /etc/init.d/network에 들어있으며 부팅시에 자동으로 실행된다.

    아래는 debian의 network 파일 예이다.
     

    #! /bin/sh
    ifconfig lo 127.0.0.1
    route add -net 127.0.0.0
    IPADDR=192.168.1.1
    NETMASK=255.255.255.0
    NETWORK=192.168.1.0
    BROADCAST=192.168.1.255
    GATEWAY=192.168.1.254
    ifconfig eth0 ${IPADDR} netmask ${NETMASK} broadcast ${BROADCAST}
    route add -net ${NETWORK}
    route add default gw ${GATEWAY} metric 1

 

    * 192.168.x.x 는 인터넷에서 내부 랜 전용으로 할당한 주소이므로 인터넷과
      연결 안된 랜이나 파이어월 내부에서 사용할 수 있다.

    위에서 192.168.1.1은 C 클라스 주소 체계이므로 192.168.1 까지는 네트워크 주소이고, 마지막의 1은 호스트 주소이다. netmask는 인터넷 주소 중 네트워크 부분과 호스트 부분을 구분하는데 사용되므로 서브네트 마스킹을 않을 경우는 255.255.255.0이다. 호스트 주소 부분은 8bit이므로 0부터 255까지 256개이나 0번은 네트워크를 가르키고 255는 broadcast에 사용되므로 C 클라스에서는 총 254개의 호스트에 IP address를 부여할 수 있다.

    게이트웨이(gateway)는 두 네트워크와 동시에 연결된 라우터나 호스트를 말하는데  게이트웨이(gateway) 중 특히 중요한 건 디폴트 게이트웨이(default gateway)이다. 즉 해당 랜이나 연결된 다른 네트워크에서 주소를 찾을 수 없을 경우 무조건 패킷을 보내는 라우터를 디폴트게이트웨이라 부르는데, route add default gw가 default gateway를 지정하는 명령이다. 따라서 인터넷과 연결된 랜에서는 default gateway는 ISP(Internet Service Provider)와 연결된 라우터의 이더넷 쪽 주소이다.

    c. 랜카드 드라이버 올리기

    리눅스에서 랜카드에 ifconfig 명령으로 ip address를 할당하려면 그전에 커늘에서 그 랜카드에 인터페이스를 설정해야 한다. 예를 들어 이더넷 첫번째 랜카드의 인터페이스 네임은 eth0이다. 커늘에서 랜카드를 인식하려면(즉 인터페이스 네임을 설정하려면) 랜카드용 드라이버가 커늘에 들어있어야 한다. 리눅스 설치시 기본으로 설치되는 커늘에 포함된 랜카드 드라이버는 3com사의 3c509 카드이며 다른 랜카드는 커늘을 컴파일해서 해당 랜카드의 드라이버를 커늘에 포함시켜 주어야 한다.

    아래는 3COM 사의 3C509 랜카드가 커늘에서 인식되었을 경우의 부트 때의 메시지이다.(dmesg명령으로도 확인이 가능하다.)

    eth0: 3c509 at 0x300 tag 1, 10baseT port, address  00 60 8c ec 79 4f, IRQ 10

      1) eth0 는 첫번째 이더넷 카드라는 의미

      2) 0x300은 IO Address

      3) 10baseT는 랜카드의 포트중(3C509는 AUI와 10baseT 두개의 포트가
          있다) 10baseT 포트를 통해 패킷이 전송된다는 뜻

      4) address 이하는 그 랜카드의 이더넷 어드레스(48bit로 구성되며
          전세계에서 생산되는 모든 이더넷 랜카드는 고유의 이더넷 어드레스가
          부여된다)

      5) IRQ 10 은 인터럽트 10번이 사용된다는 뜻이다.

    랜카드 드라이버가 커늘에 들어있는데도 랜카드가 인식되지 않는 경우는 랜카드의 셋업이 리눅스 시스템에 장착된 다른 하드웨어와 IO Address, IRQ, DMA 등에서 충돌할 경우이다.
    PCI 용 랜카드는 PCI 슬롯에서 IRQ와 IO Address를 할당해주므로 충돌이 나는 경우가 드므나 ISA 방식의 경우는 다른 하드웨어와 충돌을 일으키는 경우가 많다.
    이때는 리눅스 시스템을 DOS로 부팅한 후 DOS용 랜카드 셋업 프로그램을 돌려 셋업을 다시 잡은 후 셋업이 문제가 없는지를 테스트 프로그램을 돌려 확인해 보아야 한다. 만약 랜카드가 PNP(Plug and Play)를 지원한다면 이를 disable 시키는게 좋다. 리눅스는 아직 PNP 지원이 불완전하기 때문이다.

    리눅스 커늘에는 극히 최근에 발표된 랜카드를 제외하고 거의 대부분의 랜카드 드라이버가 포함되어 있으므로 커늘 컴파일 단계에서 자신의 랜카드 모델에서 YES만 해주면 되나, 커늘 컴파일시 make config에 자신의 랜카드 모델이 안나오면 인터넷에서 자신의 랜카드 드라이버를 구해서 커늘을 패치해야 한다. 최신 랜카드 드라이버는 주로 NASA(미 항공우주국)의 홈페이지에 있다.  

    이상의 과정을 거친후 리부팅하면 리눅스는 랜에 연결된다.
    랜 연결 및 라우팅 테이블이 정확한지를 파악하려면 ifconfig와 netstat -nr 명령을 준다.

     

    www:~> /sbin/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:184027 errors:0 dropped:0 overruns:0
    TX packets:184027 errors:0 dropped:0 overruns:0

    eth0 Link encap:10Mbps Ethernet  HWaddr 00:60:97:21:62:04
    inet addr:210.124.153.1  Bcast:210.124.153.255  Mask:255.255.255.0
    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    RX packets:339158 errors:0 dropped:0 overruns:0
    TX packets:305127 errors:0 dropped:0 overruns:0
    Interrupt:11 Base address:0x320

    www:~> netstat -nr
    Kernel IP routing table
    Destination      Gateway      Genmask        Flags  MSS Window  irtt   Iface
    210.124.153.0  0.0.0.0        255.255.255.0  U      1500  0           0    eth0
    127.0.0.0         0.0.0.0        255.0.0.0         U      3584  0           0    lo
    0.0.0.0     210.124.153.254  0.0.0.0           UG     1500  0           0    eth0

 

    위에서 마지막 줄의 0.0.0.0 줄은 default gateway 를 지정하는 부분이다.
    즉 210.124.153.254는  ISP와 연결된 라우터의 이더넷 포트 IP Address 이다.

    이상으로 PPP 서버가 랜에 연결되지만 리눅스에서 인터넷을 연결하려면 다른 몇 개의 파일을 수정 해주어야 한다. 물론 이 파일도 리눅스 설치시 네트워크 셋업에 관한 질문에 정확히 대답하였으면 수정의 필요가 없지만 나중에 랜 관련 셋업이 바뀔 경우에는 관련 파일을 수동으로 수정해 주어야 한다.

    리눅스 시스템이 인터넷에  연결되기 위해 필요한 다른 파일들을 보면

      - /etc/host.conf

      order hosts,bind
      multi on

    위는 호스트 이름으로 ip address를 찾을 때 첫번째는 /etc/hosts 파일을, 그 다음은 DNS 서버를 참조하라는 뜻이다.

      - /etc/resolv.conf

      search linuxlab.co.kr
      nameserver 168.126.63.1

    위에서 search는 사용자가 호스트네임만 지정하였을 경우 뒤에 덧붙일 도메인네임이며 nameserver는 그 랜에서 사용하는 네임서버의 주소이다.

    마지막으로 리눅스서버에서 telnet 이나 ping 명령으로 인터넷 연결을 테스트해 보아야 한다. 예를 들면 하이텔을 인터넷을 통해 연결하는 명령은 telnet home.hitel.co.kr이다. 하이텔이 연결되면 일단 ppp 서버의 인터넷 연결은 끝났다. 만약 PPP서버를 메일서버나 웹서버로 겸하고 싶다면 PPP서버의 호스트네임과 ip address를 네임서버에 등록해 주어야 한다.

 

5. PPPD 설치와 커늘 컴파일

    PPP서버를 인터넷과 연결하였으면 커늘에 ppp드라이버를 올리고 pppd 프로그램을 설치해 주어야 한다.

    a. pppd 컴파일 및 설치

    pppd는 리눅스 설치시 포함되어 설치되지만, 만약 구버전의 pppd를 업그레이드하거나 리눅스 설치시 pppd를 넣지 않았다면 pppd를 설치해야 한다.
    현재 pppd의 최신버전은 ppp-2.2.0f 이며
    ftp://sunsite.unc.edu/pub/Linux/system/network/serial/ppp에서 anonymous ftp로 받을 수 있다.
    이 디렉토리에 있는 ppp-2.2.0f.tar.gz 파일을 다운받아 적당한 디렉토리에 넣고 아래 명령을 준다.

      tar zxvf ppp-2.2.0f.tar.gz

    그러면 ppp-2.2.0f라는 디렉토리가 만들어지고 그 안에 ppp 소스를 비롯한 README 파일들이 위치한다. 컴파일 및 인스톨은 README 및 README.linux 파일에 잘 나와있다.
    pppd를 컴파일을 하려면 커늘 소스가  /usr/src/linux 에 있어야 한다. 이유는 ppp는 커늘에 드라이버가 위치하기 때문이다.

    컴파일 순서

    - ./configure
    - make kernel
    - 커늘을 다시 만듬
       아래에 다시 설명함.
    - make
    - make install
       이 단계에서 pppd, chat 명령 등이 /usr/sbin 디렉토리에 복사된다.
    - 리부팅

    c.  커늘 컴파일

    리눅스 인스톨시 pppd를 설치했어도 반드시 커늘을 다시 컴파일해서 설치해주어야 ppp를 쓸 수 있다.
    보통 설치시 제공되는 커늘에는 ppp 드라이버가 들어있지 않기 때문이다.

    커늘 컴파일 방법은 아래와 같다.

      1. 커늘 소스를 /usr/src에서 푼다.

      2. linux라는 디렉토리가 생성되고 그 안에 README라는 파일이 있는데
          이 파일에 커늘 컴파일 단계가 나와있다.

      3. 커늘을 컴파일이 끝나면 /usr/src/linux/arch/i386/boot 디렉토리에
          zImage 란 새로운 커늘이 생성되는데 이를 보통 root 디렉토리에
          vmlinuz 란 이름으로 복사한후 lilo 명령을 수행한다. 단 부트 커늘
         이름 및 위치는 /etc/lilo.conf에서 달리 정할 수 있으므로 lilo.conf를
         미리 확인해야 한다.
         ppp 서버를 만들려면 커늘 컴파일에서 최소한 아래 부분은 yes로
         답해야 한다.
       

    TCP/IP networking (CONFIG_INET) [Y/n/?]
    IP: forwarding/gatewaying (CONFIG_IP_FORWARD) [Y/n/?]
    Network device support (CONFIG_NETDEVICES) [Y/n/?]
    PPP (point-to-point) support (CONFIG_PPP) [Y/m/n/?]
    Ethernet (10 or 100Mbit) (CONFIG_NET_ETHERNET) [Y/n/?]

     

    ppp드라이버가 커늘에 설치되었으면 부팅시 아래 메시지가 나온다.
     

    PPP Dynamic channel allocation code copyright 1995 Caldera, Inc.
    PPP line discipline registered.

     

6. 시리얼포트 셋업

    PPP 접속에 사용될 모뎀이 연결될 시리얼포트에 38,400bps 이상의 속도를 내려면 시리얼포트에 사용된 UART 칩이 16550A 이상이어야 하며, 이는 부팅시의 메시지나 dmesg 명령으로 확인할 수 있다.
    멀티포트카드는 별도로 제공되는 드라이버 파일을 설치해야 한다. 그러나 일부 멀티포트카드는 커늘에 드라이버가 포함되어있다. 

      tty00 at 0x03f8 (irq = 4) is a 16550A

    위의 부트 메시지는 시리얼포트 1번(0x3f8) 의 IRQ가 4이고 UART 칩이 16550A 임을 보여주고 있다.
    리눅스에서 시리얼포트의 장치명은 cua와 ttyS 두 가지가 있는데 보통 cua는 dial-out 에 ttyS는 dial-in 에 사용된다.
    14.4k 이상의 고속 모뎀을 쓸 경우는 시리얼포트에 하드웨어플로우 콘트롤(RTS/CTS)을 설정해 주어야 하는데 이는 아래 명령이 필요하다.
    (아래는 시리얼포트 1번을 쓰는 경우이다.)

      /bin/stty crtscts < /dev/ttyS0

    다음에 시리얼포트 속도를 57,600이나 115,200bps로 설정하려면 setserial 명령이 필요하다.

      /bin/setserial /dev/ttyS0 spd_vhi

    위에서 spd_vhi는 시리얼포트 속도를 115,200bps로 설정할 때이고 57,600bps라면 spd_hi 명령을 준다.
    setserial 명령 수행 결과를 확인하려면 아래처럼 명령을 준다
     

    churl:/etc/ppp$ setserial /dev/ttyS0
    /dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4, Flags: spd_vhi

     

    다이얼업 모뎀의 경우는 최대 4배까지 데이타 압축이 이루어질 수 있으므로 14.4k 모뎀은 시리얼포트 속도를 57.6k로 28.8k 모뎀은 115.2k로 맞추는게 좋다.
    위 두명령은 부팅시마다 실행되어야 하므로 debian의 경우라면 /etc/init.d/boot 파일에 위 두 명령을 넣으면 된다.

 

7. getty 프로그램 설치

    리눅스에서 PPP 접속을 하려면 우선 두 모뎀간에 연결이 이루어져야 하며, 모뎀이 전화를 받을려면  getty 프로그램이 필요하다. 이하는 mgetty 프로그램을 기준으로 getty 프로그램 설치 과정을 설명한다.
    mgetty는
    http://www.leo.org/~doering/mgetty에서 구할 수 있고 자세한 매뉴얼도 나와있다. mgetty는 모뎀외에도 fax 송수신 기능도 있다. 대부분의 리눅스 배포본에도 mgetty가 포함되어 있다.
    mgetty를 컴파일하려면 소스의 압축을 푼 후 policy.h-dist를 policy.h로 복사하고 make, make install 명령을 주면 된다. mgetty 실행 파일은 /usr/local/sbin/mgetty이며 환경 설정 파일은 /usr/local/etc /mgetty+sendfax/mgetty.config 이다.

    아래는 시리얼포트 1번(ttyS0)에 포트속도를 115,200bps로 설정한 경우의 mgetty.config 파일 예이다.
     

    debug 5
    port-group uucp
    port-mode 0664
    modem-check-time 43200

    #
    port ttyS0
    data-only yes
    modem-type data
    speed 115200
    term vt100

 

    다음에 /etc/inittab에 다음 줄을 넣는다.

      m1:2345:respawn:/usr/local/sbin/mgetty ttyS0

    위에서 m1은 구별자로서 inittab 파일내에 다른 줄의 맨앞에서 사용하지 않아야 한다.

    이상으로 mgetty 설치가 끝났으면 minicom 이나 kermit 프로그램을 사용하여 모뎀에 ats0=0&w 명령을 준다. 즉, mgetty는 다른 getty 프로그램과 달리 수신모뎀 즉 mgetty가 설치된 포트에 연결된 모뎀을 자동 응답으로 설정하지 않아야 작동한다. 또한 mgetty에서는 모뎀에 ate1q0v1 명령을 필수적으로 주어야 한다.

    모든 준비가 끝났으면 init q 명령을 준다. 이상이 없다면 외장모뎀의 경우 TR( Terminal Ready)에 불이 들어오고 다른 피시에서 리눅스로 전화를 연결하면 login 프롬프트가 뜬다.
    이상으로 리눅스가 전화를 받을 수 있게 되었으므로 다음 단계는 사용자명과 패스워드를 확인하고 맞으면 pppd 데몬을 띄우는 과정이다.

 

8. PPP에서 IP address 할당

    다른 피시가 PPP서버로 PPP로 연결할 때 그 피시에  한개의 IP address가 할당된다. 그런데 IP address를 할당할 때 두가지 방법이 가능하다. 하나는 동적 IP address 할당으로서 연결시마다 사용자의 IP address가 바뀌는 경우이다. 예를 들어 리눅스 시스템에 4개의 시리얼포트가 있고 4개의 전화선이 연결돼 있다면 첫번째 포트에 연결된 전화번호에 대표전화를 부여하면 사용자가 전화를 걸때 사용않는 포트가 전화를 받게 되고 사용자는 그 포트에 할당된 IP address를 배정받는 방식이다. 이 경우는 포트수만큼 IP address가 필요하다.

    다이얼업모뎀 사용자는 전화비가 많이 나가므로  항상 연결하여 놓고 고정 IP를 사용할 수 없으므로 ppp서버는 대부분 이 방식을 쓴다. 그러나 드문 경우이겠지만 만약 사용자가 다이얼업으로 연결하면서도 항상 고정된 IP address를 요청한다면 이때는 사용자만큼 IP address가 필요하다. 사용자가 특정 포트에 전용선을 연결하여 사용하는 경우는 사용자는 항상 고정 IP address를 배정받는다.

 

9.  ppp 계정 만들기

    mgetty에는 컴파일시 autoppp라는 옵션을 부여하면 전화 연결과 동시에 ppp 접속이 이루어지지만 대부분의 경우 연결 상대방의 ppp 사용 권한을 파악하기위해 패스워드 파일에서  ppp 사용자명과 패스워드를 확인 후 pppd를 띄운다. 사용자의 PPP 계정을 만들 때 쉘어카운트와 다른 점은 login shell을 /usr/sbin/pppd 로 지정한다는 점이다.

 

10. PPP 옵션

    PPPD는 여러 파일에서 옵션을 지정할 수 있는데 옵션 실행 순서는 다음과 같다.

      1) /etc/ppp/options
      2) ~/home/.ppprc
      3) /etc/ppp/options.tty??

    위에서 ~/home/는 사용자의 홈디렉토리를 말한다. options.tty??은 ppp 연결이 이루어지는 포트명을 말한다. 두 파일에서 서로 중복하여 지정시는 나중에 나온 파일의 옵션이 우선한다.

    options는 모든 ppp 접속시에 실행되므로  pppd에 공통적인 옵션만 지정하며 .ppprc는 특정 사용자에게만 실행되므로 그 사용자에게만 필요한 옵션을 지정한다. 예를 들어 어느 사용자에게 항상 고정된 IP address를 배정하고 싶으면 그 사용자의 ppp계정 홈디렉토리에 .ppprc를 만들어 여기에 ip address를 지정해주면된다. 그러면 사용자의 연결 포트가 바뀌어도 ip address는 바뀌지 않는다. options.tty??에서 tty??은 연결포트의 dial-in 장치명이다. 시리얼포트 1번은 options.ttyS0 이다. 이 파일에는 그 포트에만 필요한 옵션을 지정한다. 예를들어 포트별로 모뎀 속도가 다를 경우 이 파일에서 속도를 지정해주면 된다.

    PPPD의 옵션은 상당히 많으므로 자세한 사항은 man pppd명령으로 확인하기 바라며 아래는 자주 쓰이는 옵션을 위주로 설명한다.

      /etc/ppp/options

      lock
      modem
      crtscts

    - lock  : ppp접속이 이루어지는 동안 다른 프로그램이 그 시리얼포트를 사용
                할 수 없도록 lock 파일을 만들어준다. lock 파일은 /var/lock
                디렉토리에 LCK..tty?? 파일로 만들어진다.

    - modem  : 모뎀포트라는 뜻으로 상대가 모뎀 연결을 종료하면 전화를
                      끊는다.

    - crtscts   : 하드웨어플로우컨트롤(RTS/CTS)을 사용한다.

     

    /etc/ppp/options.ttyS0

    -detach

    asyncmap 0

    115200

    mru 552

    mtu 552

    proxyarp

    :192.168.1.3

     

    1)  -detach : pppd 프로그램이 백그라운드로 실행되지 않도록하는 역할을 담당한다.

    2) asyncmap 0 : 시리얼라인에서 송신되어서는 않될 콘트롤캐릭터(ASCII 31 이하)를 지정한다. 예를들어 XON XOFF 플로우컨트롤을 사용하는 모뎀에서 XON XOFF 문자가 그대로 전송되면 모뎀이 데이타전송을 중단한다.
    이 경우 asyncmap에 이를 지정하면 이 캐릭터는 2byte escape 시퀀스로 보내진 후 상대 ppp에서 복원된다. asyncmap 에 FFFF를 지정하면 모든 콘트롤캐릭터가 2byte로 보내지므로 전송 속도가 떨어진다.

    3) 115200 : 전송 속도를 지정한다. 이속도는 setserial 및 getty에서 지정한 포트 속도와 일치시켜야 한다.

    4) mru (maximum receive unit) : 전송받는 최대의 패킷 크기(바이트)를 지정한다. 고속모뎀에서는 552byte를 주로 쓴다.

    5) mtu (maximum transmit unit) : 전송하는 최대의 패킷 크기(바이트)를 지정한다. 고속모뎀에서는 552byte를 주로 쓴다.

    *. FTP를 주로쓰면 mru, mtu가 높은게 좋고 WEB이나 Telnet에서는 낮은게 좋다.

    6) proxyarp : PPP서버가 랜을 통해 인터넷과 연결돼 있을 경우에만 필요하며 클라이언트에는 필요가 없는 옵션이다. 만약 이 옵션이 없으면 클라이언트는 오직 PPP서버와만 연결이되고 PPP서버와 같은 랜에 있는 다른 호스트나 인터넷 쪽으로는 연결이 되지 않는다.

    7) :192.168.1.3 : PPP에서 자신의 IP address 와 상대의 address를 지정하는 명령은 ABCD:WXYZ 이다. ABCD는 자신의 IP Address이며 WXYZ는 상대방(클라이언트)의 address 이다. 랜에 연결된 PPP서버의 경우 이미 이더넷포트에 IP address가 지정되어있으므로 자신의 어드레스를 생략하면 PPP는 서버의 PPP 어드레스로 이더넷에 부여된 IP address를 같이 사용한다.
    따라서 이 경우는 /etc/hosts 에 자신의 어드레스 및 호스트명이 등록되어있어야 한다.

 

11. PPP 클라이언트 셋업

    ppp 클라이언트가 리눅스라면 다른 과정은 ppp서버와 같다. 단지 옵션 부분만 달라진다. (물론 랜에 연결 안돼 있으면 랜 연결 과정은 필요없다)

    클라이언트의 경우는 ppp 연결이 한개만 이루어지므로 /etc/ppp/options 파일에 ppp 옵션을 지정하는게 좋다. 나머지는 ppp 연결 쉘스크립트에 넣는다.

    /etc/ppp/options에 필요한 옵션은 아래와 같다.

      lock
      debug
      lcp-echo-interval 240
      lcp-echo-failure  5

    ppp 연결 쉘스크립트는 다음과 같다.

     

    #!/bin/bash
    /usr/sbin/pppd connect '/usr/sbin/chat -v \
    "" atdt4565690 ogin: ppplogin sword: ****' \
    /dev/ttyS0 115200 crtscts modem \
    noipdefault defaultroute

     

    자세히 설명하면

    1)  connect : 전화 연결시 사용할 명령을 지정하는데 한개의 파리메타만을 필요로 하므로 여러개의 변수를 넣을때는 컴마로 묶는다.

    2)  /usr/sbin/chat : 모뎀과 대화 형식으로 명령을 수행하는 프로그램임.

    3) "" : chat는 먼저 상대방 즉 시리얼포트로부터 어떤 문자열이 전송되기를 기다려 다음 액션을 취하므로 "" 을 넣는다. 즉 모뎀으로부터 아무런 전송도 없다는 뜻임.

    4)  atdt456-5690 : 모뎀에게 PPP서버의 전화번호를 누르는 명령임.

    5)  ogin : PPP서버가 전화를 받으면 getty 프로그램에서 login: 프롬프트를 보낸다.

    이하 패스워드 입력까지 끝나면 pppd 프로그램이 실행되며 /dev/ttyS0 이하는 PPPD에 건내주는 옵션이다.

    다른 옵션은 서버의 옵션과 동일하나 다른 부분은 noipdefault  와 defaultroute 이다.
    noipdefault는 PPP 클라이언트에게 할당되는 ip address를 서버에서 지정한다는 뜻이다. 즉 서버의 옵션에 클라이언트의 ip address 를 지정하는 부분이 있다는 뜻이다.
    defaultroute는 클라이언트에서 행선지를 모르는 모든 패킷을 서버쪽으로 보내겠다는 뜻이다. 즉 디폴트게이트웨이를 서버의 IP address로 지정한다는 뜻이다. 클라이언트는 서버를 통해 인터넷을 사용하므로 행선지를 모르는 패킷이 서버쪽으로 보내져야 인터넷 연결이 가능하기때문이다.

    그런데 만약 클라이언트가 랜에 연결돼 있어서 리눅스 설치시의 네트워크 셋업에서 게이트웨이를 리눅스 자신의 랜카드 IP 어드레스로 지정하였거나 또는 클라이언트가 속한 랜의 다른 라우터로 지정하였으면 네트워크 설정파일(슬랙웨어라면 /etc/rc.d/rc.inet1)에 디폴트게이트웨이가 이미 지정되어 있다.
    PPPD는 연결시 이미 디폴트게이트웨이가 설정돼 있으면 위의 defaultroute 명령을 무시한다. 즉 디폴트게이트웨이를 PPP서버쪽으로 변경하지 않는다. 따라서 클라이언트는 서버와만 연결되고 서버의 랜을통해 인터넷으로 나가지 못하는데 이때는 위의 네트워크 설정파일에서 route add default gw A.B.C.D 부분을 찾아 마킹하면 해결된다.

    * PPP 자동 재연결 쉘스크립트

    TT선 또는 CO-LAN 등의 전용선으로 PPP 접속을 하는 경우 회선 문제나 서버의 리부팅 등으로  PPP 연결이 끊기는 경우가 가끔 있다. 클라이언트에 메일서버나 웹서버를 운영하는 경우  PPP 연결이 끊긴걸 모르고 지나치면 심각한 문제이다. 그렇다고 수시로 연결 여부를 확인할 수도 없다.

    아래 방법을 쓰면 PPP 연결이 끊기면 30초 이내에 자동 재연결이 이루어지니 설치하여 사용하길 바란다. 필자가 예전에 co-lan을 쓸 때 유용하게 사용하였다.
    슬랙웨어라면 우선 /etc/rc.d/rc.local 파일에 아래줄을 추가한다.

      /sbin/redial &

    (마지막의 &가 중요하다)

    다음 /sbin에 아래 내용의 redial 파일을 만들고 chmod 755 redial 명령을 준다
     

    #!/bin/bash

    while true
    do
    echo 'Attempting connection at'
    date

    /usr/sbin/pppd -detach connect '/usr/sbin/chat -v \
    "" atdt4565690 ogin: ppplogin sword: ****' \
    /dev/ttyS0 115200 crtscts modem \
    noipdefault defaultroute

    echo 'Lost connection at'
    date
    sleep 30
    done

     

    위에서 /usr/sbin/pppd 이하는 각자의 시스템에 맞게 수정하여야 하나 -detach 옵션은 필히 있어야 한다.

    이제는 ppp 연결이 끊길 걱정을 않아도 될 겁니다.




▲ top

home으로...