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

리눅스에서의 시리얼 통신-PPP

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

icon01.giftitle81.gif

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

 

필자가 리눅스월드 창간호(1997년 10월호)에 PPP 서버에 대한 글을 쓴 이후 PPP 버전이 많이 업데이트 되어 맞지 않는 부분도 많고 빠진 부분도 있어 글을 다시 쓴다.

앞으로의 글 전개는 아래 순서를 따르겠다.

리눅스에서 PPP를 사용하는 경우는 크게 나누어 서버로 사용하는 경우와 클라이언트로 사용하는 경우이다. 그런데 PPP는 클라이언트/서버 방식의 어플리케이션이 아니라 프로토콜이므로 클라이언트와 서버란 구분이 없다. 그래서 리눅스의 PPP 옵션 파일에 지정한 내용은 리눅스를 서버 및 클라이언트 어느 쪽으로 설정해도 모두 적용된다. 단지 편의상  PPP 연결을 요청하는 쪽을 클라이언트, 연결을 받아 주는 쪽을 서버라 부를 따름이다.

리눅스를 PPP 서버로 설정하는 경우는 클라이언트 피시는 윈도우인 경우로 가정하겠다. 그리고 리눅스를 PPP 클라이언트로 설정하는 경우는 서버도 리눅스인 경우를 대상으로 한다. 그렇다고 서버가 리눅스가 아니면 연결되지 않는다는 뜻이 아니다. PPP는 인터넷의 표준 규약이므로 서버가 유닉스이든 리눅스이든 NT든 차이가 없다고 보아야 한다. 단지 서버 및 버전에 따라 일부 기능이 구현되지 않거나 약간 설정이 다를 뿐이다.

 

리눅스를 PPP 서버로 설정하기

리눅스를 PPP 서버로 사용하는 가장 흔한 경우는 윈도우 클라이언트에게 인터넷 연결을 제공하는 경우이다. 즉, PPP에 TCP/IP 프로토콜을 싣는 경우이다. PPP는 IPX 같은 다른 프로토콜도 동시에 실을 수 있다. 윈도우의 전화접속 어뎁터가 PPP를 말하는데 여기의 등록정보를 보면 ppp가 IPX를 지원하는걸 알 수 있다. (IPX는 노벨의 네트웨어에서 사용되는 프로토콜이다.)

 < 그림 1>

 00-9-4.gif

리눅스가 랜(이더넷)으로 인터넷에 연결되어 있고 리눅스의 시리얼포트에 모뎀과 전화선을 연결해 PPP서버로 설정하면 클라이언트에게 인터넷 연결 서비스를 제공해 줄 수 있다. 즉 다이얼업 PPP 이다. 전용선인 경우도 PPP 부분은 거의 같다.

1.  다이얼업 PPP서버 설정

이 글은 초보자를 위해 상세히 설명하겠다. 모뎀통신을 많이 해 본 사람은 조금 지루하더라도 참기 바란다. 이 글에서든 예는 모뎀이 com3(ttyS2)에 연결된 경우이다.(리눅스랩 사무실에 설치되어 있다.)

리눅스에 모뎀을 연결해 다이얼업 PPP 서버로 설정해서  윈도우 사용자에게 PPP 연결을 제공하려면 세 가지 절차가 필요하다.

1) 모뎀 및 시리얼포트 설정
2) getty 설정
3) ppp 옵션 지정 이다.

1.1  모뎀 및 시리얼포트 설정

1) 모뎀

ppp 연결을 해주려면 윈도우 사용자가 전화를 걸면 리눅스의 모뎀이 전화를 받아야 한다. 일반적인 getty 프로그램(전화를 받아 두 모뎀을 연결해 주는 프로그램)은 모뎀을 자동응답으로 설정해서 모뎀에 전화가 걸려오면 모뎀이 무조건 전화를 받고서 두 모뎀 간에 핸드쉐이킹이 진행된다. 즉 모뎀을 자동응답으로 설정해야 한다.(ats0=1)

그런데 getty 프로그램 중 mgetty 는 모뎀을 자동응답으로 설정하지 않는다. 즉, ats0=0 이다. 그러면 전화가 걸려올 때 어떻게 전화를 받느냐고요? 음성 통화에서 전화가 걸려오면 벨이 울리겠죠? 모뎀도 벨이 울리는걸 알 수가 있죠. 즉, Ring 신호를 모뎀에서 감지합니다. 그러면 컴퓨터, 즉 mgetty에게 지금 나에게 링 신호가 들어온다고 보고 하지요. 그러면 mgetty는 '전화를 받아요' 하는 명령을 줍니다.(ata) 그럼 모뎀은 전화를 받고 핸드쉐이킹을 진행합니다.

이 방법의 이점은 mgetty가 어떤 사유로 다운되면 전화를 받지 않는다는 거죠. 즉 사용자에게 불필요한 전화비 지출을 막는 의미가 있죠. 다른 getty는 getty가 다운돼도 모뎀은 무조건 연결하므로 사용자에게 불필요한 전화비 지출을 초래할 수 있다는 겁니다. 역시 독일 사람들의  절약정신이 들어 있죠. (getty가 가동이 되지 않으면 다른 getty 프로그램에서도 모뎀은 전화를 받지 않는다. 이유는 getty가 가동되지 않으면 DTR 신호가 켜지지 않으며 DTR 신호가 꺼져 있으면 모뎀은 전화를 안 받도록 설정되어 있기 때문이다. 단 이렇게 되려면 모뎀 설정에 &d2 가 들어 가야 한다. 이를 &d0s0=1로 하면 피시가 꺼져 있어도 모뎀이 전화를 받는다. 혹시 귀찮은 장난 전화가 자주 온다면 이 방법을 써 보시길.)

전화를 거는 윈도우에서는 모뎀을 자동응답으로 설정할 필요가 없다.(설정해도 되지만 이렇게 하면 외부에서 전화를 걸면 모뎀이 받으므로 음성통화를 할 수 없겠죠?)

2) 시리얼 포트

시리얼 포트를 설정하려면 모뎀이 연결된 시리얼포트의 장치명을 먼저 알아야 한다. 다음에 부팅시에 자동으로 시리얼 포트의 IRQ, IO Address, 속도, 플로우 컨트롤을 지정해야 한다.

피시에는 기본으로 두 개의 시리얼포트가 들어 있고 CMOS 셋업에서 IRQ와 IO address 를 지정하는데 리눅스는 자동으로 이를 감지하므로 별도의 설정은 필요 없다.

그러나 요즘은 모뎀이 56k 이므로 시리얼 포트의 최고속도를 115,200bps로 맞추어야 하는데 이는 별도의 설정이 필요하다. 또 내장모뎀을 사용하면서 IRQ를 디폴트 값으로 사용하지 않고(com1 com3는 4, com2, com4 는 3) 다른 값으로 사용하려면 역시 별도의 설정이 필요하다.

아래 필자의 사무실에 있는 PPP 서버의 시리얼 포트 셋업(내장모뎀은 시리얼포트를 흉내낸다.) 을 보자. 모뎀은 로보틱스 Sportster 56k 내장모뎀이고 포트는 com3 (0x2f8), IRQ는 5번이다.

아래 내용은 /etc/rc.boot/0setserial에 지정돼 있다.(데비안임)
 

${SETSERIAL} -b /dev/ttyS2 irq 5 port 0x3E8 skip_test autoconfig spd_vhi

* 레드햇이라면 /etc/rc.d/rc.serial 파일에 아래처럼 지정한다.

#!/bin/bash
/bin/setserial -b /dev/ttyS2 irq 5 port 0x3E8 skip_test autoconfig spd_vhi

다음에 chmod 755 /etc/rc.d/rc.serial 명령을 준다.

 

(1)  /dev/ttyS2 : com3 장치명이다.

(2)  irq 5 : 인터럽트 5번을 사용한다는 뜻이다. 주의할 건 대부분의 내장모뎀은 com3
      로 설정하면 irq는 디폴트 값인 4를 사용한다. 그런데 이렇게 하면 com1
      (/dev/ttyS0)의 irq와 같아서 com1에는 다른 장치를 연결할 수 없다. 그래서
      필자는 내장모뎀의 IRQ를 5로 지정했다. (물론 내장모뎀의 점퍼를 조정해야 한다.)

(3)  port 0x3E8 : com3의 IO Address 이다. 표준시리얼 포트의 경우는 com4
      (/dev/ttyS3)까지는 IO Address가 지정되어 있으므로 변경하면 안된다.

(4)  spd_vhi : 시리얼포트의 최고 속도를 115,200bps로 지정한다.
      통신프로그램에서도 같이 지정해야 효력이 있다. 모뎀속도(선로속도)가 14.4k라면
      시리얼포트 속도를 57,600 bps로 지정해야 한다.(spd_hi)

 *   시리얼 포트 설정이 올바른지 확인하려면 아래 명령을 준다.
 

churlsu:/etc/rc.boot# setserial -a /dev/ttyS2
/dev/ttyS2, Line 2, UART: 16550A, Port: 0x03e8, IRQ: 5
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000, closing_wait2: infinte
        Flags: spd_vhi skip_test

 

*   모뎀이 정상적으로 작동하는지 확인하려면 minicom 프로그램을 사용한다.

minicom -s 명령을 주고서

Serial port setup 메뉴에서

A -    Serial Device      : /dev/ttyS2
E -    Bps/Par/Bits       : 115200 8N1

를 지정하고서 Save setup as dfl 메뉴를 선택하고 Exit 한 후 minicom 명령을 가동한다. 아래처럼 나오면 모뎀이 정상으로 작동한다.
 

Welcome to minicom 1.82

OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Nov  6 1998, 17:55:03.

Press CTRL-A Z for help on special keys

ATZ
OK


(마지막의 OK가 중요하다. 만약 OK가 안나오면 at <enter>해서 OK가 나오는가 볼 것. 나오면 모뎀이 정상으로 작동하고 있음)

ati4 명령(로보틱스) 또는 at&v(기타 모뎀) 을 주면 아래처럼 모뎀의 설정 값이 나온다.
 

U.S. Robotics 56K FAX INT Settings...

B0  E1  F1  L1  M1  Q0  V1  X4  Y0
BAUD=115200  PARITY=N  WORDLEN=8
DIAL=PULSE   ON HOOK

&A3  &B1  &C1  &D2  &H1  &I0  &K1
&M4  &N0  &P1  &R2  &S0  &T5  &U0  &Y1

S00=000  S01=000  S02=128  S03=013  S04=010  S05=008  S06=002
S07=060  S08=003  S09=006  S10=014  S11=070  S12=050  S13=001
S15=000  S16=000  S18=000  S19=004  S21=010  S22=017  S23=019
S25=005  S27=000  S28=008  S29=020  S30=000  S31=128  S32=002
S33=000  S34=000  S35=000  S36=014  S38=000  S39=012  S40=002
S41=000  S42=000

LAST DIALED #:


위에서 E1 Q0 V1 S00=000 이 넷이 필히 지정돼야 PPP 연결에 지장이 없다. 만약 이렇게 안나오면 ate1q0v1s0=0&w 명령을 주어서 설정 값을 바꾼다. 다른 값들에 대한 설명은 이전의 글을 참고 하기 바란다.

1.2  getty 설정

getty는 시리얼포트를 감시하고 있다가 모뎀이 상대 모뎀과 연결됐다는 메시지를 보내면 login: 프롬프트를 띄우고 상대에게서 계정과 패스워드를 입력 받아 이를 login 프로그램에게 넘겨주는 프로그램이다. 여기서는 mgetty를 기준으로 설명한다.

mgetty는 모든 배포본에 기본으로 들어 있으므로 여기서 설치 방법은 설명하지 않는다. 단지 배포본마다 실행 파일 및 설정 파일 위치가 다르므로 여기서는 mgetty 소스를 직접 다운 받아 설치한 경우를 대상으로 설명한다. 2000년 5월호에 다이얼인 설정에 mgetty 설정은 설명했으므로 이를 참고 하기 바란다. PPP 연결에서도 이 설정을 그대로 사용한다. 단지 Auto PPP를 사용하려면 컴파일시 소스를 수정하는 걸 잊지 말기를.(모든 배포본에 들어 있는 mgetty는 Auto PPP 옵션이 포함돼 있다.)

getty 프로그램은 /etc/inittab 파일에서 활성/비활성화할 수 있다. 리눅스에서 inittab 파일은 매우 중요한 파일이므로 수정할 때는 주의해야 한다. 일반적으로 getty 프로그램은 모뎀 연결이 완료되면 계정과 패스워드를 입력 받아 login 프로그램에게 이를 넘겨 주고 대기 상태로 들어간다. login 프로그램은 패스워드 파일에서 패스워드를 확인해 맞으면 패스워드 파일에 지정된 쉘프로그램(/bin/bash)를 가동한다. ppp 연결의 경우는 보통은 /bin/bash 대신에 pppd를 가동하도록 수정하는 방법을 쓴다.

그러나 mgetty에서 Auto PPP 옵션을 넣었으면 이 과정이 달라진다. 즉 계정 입력을 먼저 login.config 파일에서 검사한다. 만약  /AutoPPP/란 계정 명이 들어오면 바로 login.config 파일에 지정한 pppd 프로그램을 실행하고 그 외의 경우는 /bin/login프로그램을 실행한다.

패스워드 파일에서 pppd를 가동하는 경우는 아래와 같다.
 

bae:x:500:500:bae churlsu:/home/bae:/usr/sbin/pppd

 

여기서 마지막의 /bin/bash 대신 /usr/sbin/pppd를 지정하는 것이다. 그러면 bae라는 계정으로 로그인하면 pppd가 실행된다.

이 방법의 이점은 로그인 과정에서 패스워드 파일을 사용해 사용자 인증을 하므로 설정이 쉽고 다이얼업 서비스 제공시 한 계정으로 여러 곳에서 동시에 사용하는 것을 막기가 쉽다는 점이다. 단점은 윈도우 사용자의 경우 연결 절차가 복잡해 진다.(리눅스에서는 스크립트를 사용하므로 상관없다. 물론 윈도우에도 스크립트 기능이 있다고 하나 필자는 사용법을 모른다.)

Auto PPP를 사용해서 사용자가 로그인 과정을 거치지 않고 getty에서 바로 pppd를 띄우는 방법은 전용선으로 연결하는 경우처럼 사용자 인증이 필요 없는 경우 좋은 방법이다. 또 클라이언트가 윈도우인 경우 전화접속 네트워킹에 계정과 암호만 넣고 연결을 누르면 바로 연결이 되므로 사용하기 쉽다. 단점은 사용자 인증을  PAP이나 CHAP을 사용해야 하므로 다이얼업 PPP의 경우 하나의 계정과 패스워드를 부여 받아 여러 곳에서 동시에 사용하는 경우 이를 막기가 매우 힘들다는 점이다. (방법이 없는 건 아니나 무척 복잡하다.)

이하 mgetty로 Auto PPP를 설정하는 경우의 설정법이다.(아래에서 관련 파일이 위치한 디렉토리는 mgetty를 컴파일해 설치한 경우의 위치이다. 배포본에 들어 있는 mgetty를 사용한다면 디렉토리 위치가 다르다. find 명령으로 찾아 보기 바란다.)

(1)  mgetty를 새로 컴파일하는 경우 Makefile 을 수정해 AUTO_PPP 옵션을
      넣는다.

(2)  /etc/inittab 파일에 아래 줄을 넣는다.

      s2:23:respawn:/usr/local/sbin/mgetty ttyS2

      (여기서 맨 앞의 s2는 inittab 파일 내의 다른 줄에서 중복해서 사용하면
      안된다.)

(3)  /usr/local/etc/mgetty+sendfax/mgetty.config 에 아래처럼 지정한다.
 

port ttyS2
debug 5
term vt100
rings 2
speed 115200
modem-check-time  -1
data-only yes
modem-type data

 

a.  port ttyS2 는 지정 않아도 된다. 단 모뎀이 여러 개 연결된 경우 port 이하는
     그 포트에 연결된 모뎀에만 적용되는 옵션이다. 예를 들어 모뎀의 최고
     속도가 다르다면 port 이하에 speed 명령으로 속도를 달리 지정하면 된다.

b.  debug 를 넣으면 모뎀 연결 과정이 /var/log/mgetty.ttyS? 파일에
     기록되므로 연결이 이루어 지지 않을 때 원인 파악이 쉽다.  

c.  term vt100 은 터미널 타입을 지정한다.

d.  rings 2 는 두 번 벨이 울리면 모뎀이 전화를 받으라는 뜻.

e.  speed 는 시리얼 포트 속도이다.(모뎀속도가 아니다. 우리가 흔히 말하는
     56k 모뎀은 모뎀속도 또는 선로속도를 말한다.) 여기에 지정한 속도는
     시리얼포트 속도 지정(setserial) 에서 지정한 속도와 같아야 한다.(spd_vhi)

f.  modem-check-time  -1 : 모뎀 중에서 일부 모뎀이 오래 켜 두면 disable
    되는 경우가 있는데 이런 모뎀에는 값을 3600 정도로 준다.
    -1은 필요 없단 뜻

g.  data-only yes  : 모뎀이 팩스 수신용으로 사용 안되면 지정하는게 좋다.
     팩스 송신과는 관계없다.

h.  modem-type data : 위와 같다.

(4) /usr/local/etc/mgetty+sendfax/login.config 파일에 아래처럼 지정한다.
 

/AutoPPP/ -  @  /usr/sbin/pppd auth -chap +pap debug
*       -       -       /bin/login @

 

첫째 줄의 의미는 /AutoPPP/ 란 입력이 들어오면 pppd를 가동하라는 뜻이다.(윈도우에서 이 글자가 날아온다.)  pppd 이하는 pppd의 옵션이다. auth -chap +pap 사용자 인증에 PAP를 사용한다는 뜻이다. 즉 윈도우의 전화접속 네트워킹의 계정명과 패스워드를 /etc/ppp/pap-secrets 파일에서 확인하겠다는 뜻이다.

이때의 /etc/ppp/pap-secrets 파일의 내용은 아래와 같다.
 

hansol   *    pass   *

 

hansol 은 윈도우의 전화접속 네트워크 사용자 난에 입력하는 내용이고 pass 는 암호 난에 넣을 내용이다.

만약 pap-secrets 파일을 사용하지 않고 리눅스의 패스워드 파일을 사용자 인증에 사용한다면 이 때는 login 옵션을 추가해야 한다. 즉 아래처럼 설정한다.
 

/AutoPPP/ -  @  /usr/sbin/pppd auth -chap +pap login debug

 

이 경우는 pap-secrets 파일은 지우던지 또는 아래처럼 지정한다.(ppp 버전에 따라 둘 중 하나가 적용된다.)
 

*   *   ""    *

 

둘째 줄은 PPP 연결이 아닌 경우는 login 프로그램을 실행하라는 뜻이다. 즉 쉘어카운트로 연결한다.

*  리눅스를 ppp 클라이언트로 사용해 AUTO PPP 로 설정된 리눅스 PPP 서버로
   자동 연결하는 쉘스크립트를 만들 때는 login: 프롬프트에 /AutoPPP/를
   입력하도록 스크립트를 만들어야 한다. 이 때의 login: 프롬프트는 login
   프로 그램에서 출력 하는게 아니고 mgetty에서 출력한다. mgetty는
   /AutoPPP/ 란  입력이 들어오면 login.config에 지정된 pppd 프로그램을
   실행한다. 윈도우의 전화접속 네트워킹도 연결시 /AutoPPP/ 란 글자를
   전송해 준다.

여기까지 진행했다면 윈도우에서 전화를 걸면 운이 좋으면 PPP 연결까지 진행될거고 운이 나쁘다면 전화 연결과 동시에 끊길 것이다. 끊긴다면 원인은 커널에 ppp 지원이 안 들어가 있는 경우이거나 ppp 옵션이 잘못 된 것이다.

1.3  ppp 옵션 설정

1) 커널 ppp 코드 확인

pppd를 사용하기 전에 우선 커널에 ppp 코드가 들어 있는지 확인해야 한다. 커널을 컴파일해서 사용하는 경우 특히 이점을 항상 확인해야 한다. dmesg 명령을 주어 아래 라인이 나오면 커널에 ppp 코드가 들어 있다.

PPP: version 2.3.7 (demand dialling)
TCP compression code copyright 1989 Regents of the University of California
PPP line discipline registered.

배포본에 디폴트로 들어 있는 커널의 경우 ppp를 연결하면 ppp 모듈이 자동으로 올라온다.
커널에 ppp 지원이 빠져 있으면 /var/log/ppp.log 에 아래처럼 메시지가 나온다.
(단 이 경우는 /etc/syslog.conf에 아래 줄이 들어 있어야 한다.)

daemon.*                /var/log/ppp.log
 

Aug 27 19:55:21 churlsu pppd[265]: This system lacks kernel support for PPP.  This could be because the PPP kernel module could not be loaded, or because PPP was not included in the kernel configurati on.  If PPP was included as a module, try `/sbin/modprobe -v ppp'.  If that fails, ...

 

2) IP forwarding 지정

PPP 서버는 게이트웨이 역할을 하므로 ip forwarding 을 지정해야 한다. 데비안이라면 /etc/rc.boot 디렉토리에 아래 스크립트를 만들어 넣는다.
 

#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward

 

레드햇은 이전에는 /etc/sysconfig/network 파일에 지정하면 가능했는데 6.2에서는 안된다.  rc.local 파일에 위의 echo 이하를 넣어야 한다.

3) 옵션 파일

pppd 옵션은 /etc/ppp 디렉토리에 있는 options 파일과 options.ttyS? 파일에서 지정한다. 그리고 pppd를 가동하는 명령 행에서도 지정한다.

Auto PPP 의 경우는 /usr/local/etc/mgetty+sendfax/login.config 파일의
/AutoPPP/ -  @  /usr/sbin/pppd auth -chap +pap login debug 라인에서 pppd 이후가 옵션이다. 우선 순위는 명령 행 지정이 최 우선이고 options 파일에서의 지정이 맨 나중이다.

로그인 후 pppd를 가동하는 방법(passwd파일에서 가동하는 방법)의 경우는 로그인 계정의 .ppprc 파일에서도 지정 가능하다.

그 외에 ppp 연결이 안되는 경우는 인증(PAP)이 잘못된 경우이다. 윈도우에서 사용자 확인 중 메시지에서 끊기면 인증이 잘못돼 있다.

pap-secrets 파일 설정이 잘못되어 있다면 ppp.log 파일에 아래처럼 나올 것이다.
 

Aug 27 20:51:32 churlsu pppd[200]: The remote system is required to authenticate itself
Aug 27 20:51:32 churlsu pppd[200]: but I couldn't find any suitable secret (password) for it to use
to do so.
Aug 27 20:51:32 churlsu pppd[200]: (None of the available passwords would let it use an IP address.

 

이제 ppp 옵션을 지정하자.

/etc/ppp/options 파일에 아래처럼 지정한다.
 

modem
crtscts
bsdcomp 15
deflate 15
115200
asyncmap 0
proxyarp
idle 300
ms-dns 211.192.58.170


1)
modem :  시리얼포트에 연결된 장치가 모뎀임.

2) crtscts :  하드웨어 플로우 컨트롤을 사용

3) bsdcomp 15 : 압축 최대(메모리가 적으면 지정하지 말 것

4) deflate 15 : 위와 같음

5) 115200 : 연결속도임 (setserial 및 mgetty에 지정한 속도와 일치 시켜야 한다.)

6) asyncmap 0  : 콘트롤캐릭토( ASCII 31 이하)를 2 바이트로 변환하지 않고 보낸다.     통신 속도가 빨라진다. 지정하지 않으면 모든 콘트롤 캐릭터가 2 바이트로 보내져
    속도가 10% 정도 느려진다.

7) proxyarp : PPP 서버가 랜으로 인터넷에 연결된 경우(이더넷 랜카드가 있는  경우)
    에만 필요하다. ARP 와 관련이 있다. 만약 PPP 서버가 다른 시리얼 포트를 통해
    인터넷에 연결되어 있다면 이 옵션을 넣지 말 것.

8)  idle 300 : 5분 (300초) 동안 클라이언트와 데이터 전송이 없으면 PPP 연결을
    끊는다.

9) ms-dns 211.192.58.170  :  클라이언트에게 할당하는 DNS 서버 주소이다.

    /etc/ppp/options.ttyS2 파일에는 아래처럼 지정한다.
 

211.192.xx.170:210.192.xx.172


앞의 주소는 리눅스 서버의 이더넷카드(eth0)에 부여된 주소이고 뒤의 주소는 클라이언트(윈도우)에 부여할 주소이다. 앞은 생략 가능하나 넣는게 좋다.

1.4  연결

이제 모든 설정은 끝났다. 윈도우에서 전화접속 네트워킹을 설정하고 pap-secrets 파일에 지정한 계정(hansol)과 암호(pass)를 넣고 연결을 누르면 전화가 연결되고 "사용자 확인 중 " 메시지에 이어 "네트워크에 로그인 중 .." 이런 메시지가 나올 것이다. 다음 연결이 완료되면 전화접속 네트워크 창이 사라지고 다른 창이 나온다.

윈도우의 실행 명령에서 winipcfg 명령을 주면 윈도우에 부여된 주소가 나온다.

아래와 같다.

<그림 2>

00-9-6.gif

리눅스에서는 아래처럼 ppp.log 파일에 기록된다.
 

Aug 27 20:56:00 churlsu pppd[232]: pppd 2.3.11 started by /AutoPPP/, uid 0
Aug 27 20:56:00 churlsu pppd[232]: Using interface ppp0
Aug 27 20:56:00 churlsu pppd[232]: Connect: ppp0 <--> /dev/ttyS2
Aug 27 20:56:00 churlsu pppd[232]: sent [LCP ConfReq id=0x1 <asyncmap 0x0>
<auth pap> <magic 0x217a5f86> <pcomp> <accomp>]
0x217a5f86> <pcomp> <accomp>]
Aug 27 20:56:03 churlsu pppd[232]: rcvd [LCP ConfReq id=0x4 <asyncmap 0xa0000>
<magic 0xc8306e> <pcomp> <accomp>]
Aug 27 20:56:03 churlsu pppd[232]: sent [LCP ConfAck id=0x4 <asyncmap 0xa0000>
<magic 0xc8306e> <pcomp> <accomp>]
Aug 27 20:56:03 churlsu pppd[232]: rcvd [PAP AuthReq id=0x1 user="hansol"
password=<hidden>]
Aug 27 20:56:03 churlsu pppd[232]: sent [PAP AuthAck id=0x1 "Login ok"]
Aug 27 20:56:03 churlsu pppd[232]: sent [IPCP ConfReq id=0x1 <addr 211.192.58.170>
<compress VJ 0f 01>]
Aug 27 20:56:03 churlsu pppd[232]: rcvd [IPCP ConfReq id=0x1 <compress VJ 0f 01>
<addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-wins 0.0.0.0> <ms-dns3 0.0.0.0>
<ms-wins 0.0.0.0>]
Aug 27 20:56:03 churlsu pppd[232]: sent [IPCP ConfRej id=0x1 <ms-dns1 0.0.0.0>
<ms-wins 0.0.0.0> <ms-dns3 0.0.0.0> <ms-wins 0.0.0.0>]
Aug 27 20:56:03 churlsu pppd[232]: rcvd [CCP ConfReq id=0x1 < 12 06 00 00 00 01>
< 11 05 00 01 04>]
Aug 27 20:56:03 churlsu pppd[232]: sent [CCP ConfReq id=0x1]
Aug 27 20:56:03 churlsu pppd[232]: sent [LCP ConfAck id=0x4 <asyncmap 0xa0000>
<magic 0xc8306e> <pcomp> <accomp>]
Aug 27 20:56:03 churlsu pppd[232]: rcvd [PAP AuthReq id=0x1 user="hansol"
password=<hidden>]
Aug 27 20:56:03 churlsu pppd[232]: sent [PAP AuthAck id=0x1 "Login ok"]
Aug 27 20:56:03 churlsu pppd[232]: sent [IPCP ConfReq id=0x1 <addr 211.192.58.170>
<compress VJ 0f 01>]
Aug 27 20:56:03 churlsu pppd[232]: rcvd [IPCP ConfReq id=0x1 <compress VJ 0f 01>
<addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-wins 0.0.0.0> <ms-dns3 0.0.0.0>
<ms-wins 0.0.0.0>]
Aug 27 20:56:03 churlsu pppd[232]: sent [IPCP ConfRej id=0x1 <ms-dns1 0.0.0.0>
<ms-wins 0.0.0.0> <ms-dns3 0.0.0.0> <ms-wins 0.0.0.0>]
Aug 27 20:56:03 churlsu pppd[232]: rcvd [CCP ConfReq id=0x1 < 12 06 00 00 00 01>
< 11 05 00 01 04>]
Aug 27 20:56:03 churlsu pppd[232]: rcvd [IPCP ConfReq id=0x2 <compress VJ 0f 01>
<addr 0.0.0.0>]
Aug 27 20:56:03 churlsu pppd[232]: sent [IPCP ConfNak id=0x2 <addr 210.192.58.172>]
Aug 27 20:56:03 churlsu pppd[232]: rcvd [CCP ConfAck id=0x1]
Aug 27 20:56:03 churlsu pppd[232]: rcvd [CCP ConfReq id=0x2]
Aug 27 20:56:03 churlsu pppd[232]: sent [CCP ConfAck id=0x2]
Aug 27 20:56:04 churlsu pppd[232]: rcvd [IPCP ConfReq id=0x3 <compress VJ 0f 01>
<addr 210.192.58.172>]
Aug 27 20:56:04 churlsu pppd[232]: sent [IPCP ConfAck id=0x3 <compress VJ 0f 01>
<addr 210.192.58.172>]
Aug 27 20:56:04 churlsu pppd[232]: local  IP address 211.192.58.170
Aug 27 20:56:04 churlsu pppd[232]: remote IP address 210.192.58.172
Aug 27 20:56:04 churlsu pppd[232]: Script /etc/ppp/ip-up started (pid 243)

                     (일부는 생략했다.)

 

2.  전용선에서 PPP 서버 설정

클라이언트가 전용선으로 서버에 연결된 경우는 mgetty.config 파일 설정이 달라진다.

즉 아래 세가지만 지정하면 된다.

direct yes
toggle-dtr no
speed 57600

나머지는 다이얼업과 같다.

전용선의 경우 getty 를 거치지 않고 pppd 만 가동해도 PPP 연결이 가능하다. 예전에 이에 관한 글을 썻다.

 

리눅스 PPP 클라이언트 설정

리눅스를 PPP 클라이언트로 설정하는 방법은 예를들어 설명하겠다. 아래는 아이쎈에서 제공하는 슈퍼클릭 서비스를 리눅스로 연결하는 경우의 예이다. 아이쎈(http://www.issan.net)에서 제공하는 슈퍼클릭 서비스는 원클릭 서비스의 일종으로 윈도우용 원클릭 프로그램을 제공하지만 리눅스에서도 스크립트 파일 한 개로 연결할 수 있다.

아래 설명을 보면 연결 절차가 복잡한 것처럼 보이지만 대부분의 배포본에는 이미 기본 설정이 들어 있으므로 몇 가지만 조정하면 된다.  아이쎈의 슈퍼클릭 서비스에 사용되는 PPP 서버는 리눅스를 사용하고 있으며 리눅스랩에서 구축하였다.(2000 8월호 참조)

 

1. 환경 :

1.1 배포본 : 모든 배포본에서 사용 가능

1.2 사용 모뎀

무관함. 단 이 글의 예는 USRobotics sportster 내장모뎀이며 모뎀의 com 포트는 3번  irq는 5번인 경우이다..

 

2. 시리얼포트 셋업

아래는 내장모뎀의 시리얼포트(com3)의 irq를 5번으로 변경하고 시리얼포트의 최고속도를 115200bps로 설정하는 명령이다. (모뎀이 28.8k 이상이어야 한다.) 부팅 때 마다 자동 실행되도록 레드햇의 경우는 rc.local 파일에 아래 줄을 추가하고 데비안은 /etc/rc.boot 디렉토리의 0setserial 파일을 수정한다. 모뎀이 com1 에 연결돼 있다면 ttyS0,  com2라면 ttyS1을 지정해야 한다. 일반 모뎀은 보통 irq 부분은 별도로 지정할 필요가 없다.

2.1 레드햇
 

/etc/rc.d/rc.serial에 아래 줄 넣음
/bin/setserial  /dev/ttyS2 irq 5 spd_vhi

 

2.2 데비안

/etc/rc.boot/0setserial에서 아래 줄을 찾아 수정
 

${SETSERIAL} -b /dev/ttyS2 irq 5 port 0x3E8 skip_test autoconfig spd_vhi

 

2.3 확인

리부팅 해서 아래 명령을 줌.
 

setserial -a /dev/ttyS2

 

아래처럼 나와야 한다.
 

/dev/ttyS2, Line 2, UART: 16550A, Port: 0x03e8, IRQ: 5
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000, closing_wait2: infinte
        Flags: spd_vhi skip_tes


*   IRQ: 5, Baud_base: 115200, Flags: spd_vhi 가 나와야 한다.

 

3.  모뎀 작동 여부 확인

3.1 minicom -s 명령으로 minicom 을 가동해서 아래처럼 환경 수정

1) serial port setup 에서
 

. serial device : /dev/ttyS2
. Bps  : 115200

 

2) Save setup as dfl 로 저장 후 종료

*. minicom 이 설치가 안되어 있으면 레드햇의 경우 CD 1번을 마운트 후
RPM 디렉토리에서 아래 명령으로 설치

rpm -i  minicom-1.83..

3.2  minicom을 가동해서 01412 를 연결한다.

minicom  <enter> 해서 화면에 OK가 나와야 함.

atdt01412 <enter> 해서 01412에 연결돼는 지 확인. 연결되면 다음으로.

* ISDN 전화의 경우는 01412에 전화가 걸리지 않는다. 이때는 01411을 사용할 것.

 

4. 리눅스의 라우팅 테이블에 디폴트게이트웨이가 설정돼 있으면 지울 것..

PPP 로 인터넷을 연결시는 디폴트게이트웨이가 PPP 서버여야 한다.(여기서는 아이쎈 리눅스서버) 그래서 ppp 클라이언트(사용자 피시)에 이미 디폴트게이트웨이가 설정되어 있으면 연결이 안된다. 디폴트게이트웨이가 설정돼 있는지를 확인하는 방법은 아래와 같다.

netstat -nr 명령을 준다.

아래처럼 마지막 라인에 0.0.0.0 으로 시작하는 줄이 있으면 디폴트게이트웨이가 설정되어 있다.
 

[root@jinnee/root]#netstat -nr
Kernel IP routing table
Destination     Gateway       Genmask           Flags   MSS   Window irtt Iface
192.168.1.5     0.0.0.0       255.255.255.255   UH      0 0         0 eth0
192.168.1.0     0.0.0.0       255.255.255.0        U       0 0         0 eth0
127.0.0.0        0.0.0.0       255.0.0.0               U       0 0         0 lo
0.0.0.0         192.168.1.1     0.0.0.0               UG      0 0         0 eth0

 

디폴트게이트웨이 제거

1) 일시적 제거

일시적으로 제거하는 방법이다. (리부팅하면 효력이 사라진다.)

route del  default

2) 영구 제거

- 레드햇의 경우

/etc/sysconfig/network 파일에서 GATEWAY= 에 지정된 IP 어드레스를 지움.

 

NETWORKING=yes
FORWARD_IPV4=yes
HOSTNAME=jinnee
DOMAINNAME=urizip.com
GATEWAY=
GATEWAYDEV=eth0

 

- 데비안의 경우

/etc/init.d/network 파일의 아래 줄을 제거(맨 앞에 #를 넣음)
 

#[ "${GATEWAY}" ] && route add default gw ${GATEWAY} metric 1


 

5. ppp 옵션 설정

통신속도, 압축방법 등을 지정한다. /etc/ppp 디렉토리의 options 파일에 아래 내용을 넣는다. 다른 내용은 지움. (이 파일이 없으면 새로 만듬)

 

lock
modem
crtscts
bsdcomp 15
deflate 15
115200


 

6. pap-secrets 파일 만듦.

아이쎈의 PPP 서버에서는 사용자 인증(사용자가 정당한 사용자 인지 체크하는 것) 에 pap을 사용한다. 리눅스에서 pap 인증을 지정하는 파일은 /etc/ppp/pap-secrets 파일이다. 이 파일에 아이쎈에서 부여한 계정과 패스워드를 넣는다.  계정을 발급 받으려면 아이쎈의 홈페이지를 참고 할 것.

계정명   *    패스워드

* 이 파일은 다른 사용자가 볼 수 없도록 "chmod  600 " 명령을 준다.

 

7. ppp 자동연결 스크립트 작성

이 스크립트는 01412 번으로 전화를 걸어 메뉴에서 "2"번을 선택 후 "issan"을 입력해 주고 아이쎈의 ppp 서버에서 pppd 데몬이 뜨면 자신의 pppd를 실행해주는 스크립트이다.(파일 이름을 issan 이라 하자.)
 

#!/bin/bash
/usr/sbin/pppd  connect \
'/usr/sbin/chat -t 60  "" atx1 OK atdt01412 X 2 X issan' \
/dev/ttyS2 noipdefault defaultroute

 

* \앞에 공백이 필요하다.

이 파일은 실행모드여야 한다

chmod  755 issan  <enter>

 

8. 연결 실행

위의 스크립트(issan)가 저장된 디렉토리에서 ./issan <enter> 하면 연결된다.

 

9. 연결 확인

PPP 연결이 이루어 졌는지를 확인하는 방법이다.

9.1 ifconfig 명령에서 아래처럼 나와야 한다.

 

eth0    Link encap:Ethernet  HWaddr 00:00:21:E6:B0:45
          inet addr:192.168.1.5  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1238 errors:0 dropped:0 overruns:0 frame:0
          TX packets:650 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:9 Base address:0x300

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:18 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0

ppp0   Link encap:Point-to-Point Protocol
          inet addr:210.115.4.12  P-t-P:210.115.4.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:576  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10

(ppp0 ... 이하의 줄이 추가된다.)

 

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

664 ttyS2  S  0:00 /usr/sbin/pppd connect /usr/sbin/chat -t 60 "" atx1 OK atdt0141

 

9.3 netstat  -nr 명령을 주면 아래처럼 나와야 한다.(끝이 ppp인 라인이 두 개 나온다.)
 

Kernel IP routing table
Destination     Gateway         Genmask            Flags   MSS Window  irtt Iface
192.168.1.5     0.0.0.0         255.255.255.255    UH        0 0  0            eth0
210.115.4.2     0.0.0.0         255.255.255.255    UH        0 0  0           ppp0
192.168.1.0     0.0.0.0         255.255.255.0         U         0 0  0            eth0
127.0.0.0        0.0.0.0         255.0.0.0                U         0 0   0             lo
0.0.0.0         210.115.4.2     0.0.0.0                  UG        0 0  0           ppp0


 

10. 연결 끊기 

위의 "9.2" ps ax 명령 출력에서  맨 앞에 나오는 숫자(PID를 kill 명령 뒤에 넣는다.
 

kill  664


관련자료

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

공지사항


뉴스광장


  • 현재 회원수 :  60,042 명
  • 현재 강좌수 :  35,846 개
  • 현재 접속자 :  103 명