리눅스에서의 시리얼 통신-PPP
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 8,930 조회
- 0 추천
- 목록
본문
배철수 / 리눅스월드 발행인 | ||||||||||||||||||||||||||||||
필자가 리눅스월드 창간호(1997년 10월호)에 PPP 서버에 대한 글을 쓴 이후 PPP 버전이 많이 업데이트 되어 맞지 않는 부분도 많고 빠진 부분도 있어 글을 다시 쓴다. 앞으로의 글 전개는 아래 순서를 따르겠다. 리눅스에서 PPP를 사용하는 경우는 크게 나누어 서버로 사용하는 경우와 클라이언트로 사용하는 경우이다. 그런데 PPP는 클라이언트/서버 방식의 어플리케이션이 아니라 프로토콜이므로 클라이언트와 서버란 구분이 없다. 그래서 리눅스의 PPP 옵션 파일에 지정한 내용은 리눅스를 서버 및 클라이언트 어느 쪽으로 설정해도 모두 적용된다. 단지 편의상 PPP 연결을 요청하는 쪽을 클라이언트, 연결을 받아 주는 쪽을 서버라 부를 따름이다. 리눅스를 PPP 서버로 설정하는 경우는 클라이언트 피시는 윈도우인 경우로 가정하겠다. 그리고 리눅스를 PPP 클라이언트로 설정하는 경우는 서버도 리눅스인 경우를 대상으로 한다. 그렇다고 서버가 리눅스가 아니면 연결되지 않는다는 뜻이 아니다. PPP는 인터넷의 표준 규약이므로 서버가 유닉스이든 리눅스이든 NT든 차이가 없다고 보아야 한다. 단지 서버 및 버전에 따라 일부 기능이 구현되지 않거나 약간 설정이 다를 뿐이다.
리눅스를 PPP 서버로 설정하기 리눅스를 PPP 서버로 사용하는 가장 흔한 경우는 윈도우 클라이언트에게 인터넷 연결을 제공하는 경우이다. 즉, PPP에 TCP/IP 프로토콜을 싣는 경우이다. PPP는 IPX 같은 다른 프로토콜도 동시에 실을 수 있다. 윈도우의 전화접속 어뎁터가 PPP를 말하는데 여기의 등록정보를 보면 ppp가 IPX를 지원하는걸 알 수 있다. (IPX는 노벨의 네트웨어에서 사용되는 프로토콜이다.) < 그림 1>
리눅스가 랜(이더넷)으로 인터넷에 연결되어 있고 리눅스의 시리얼포트에 모뎀과 전화선을 연결해 PPP서버로 설정하면 클라이언트에게 인터넷 연결 서비스를 제공해 줄 수 있다. 즉 다이얼업 PPP 이다. 전용선인 경우도 PPP 부분은 거의 같다. 1. 다이얼업 PPP서버 설정 이 글은 초보자를 위해 상세히 설명하겠다. 모뎀통신을 많이 해 본 사람은 조금 지루하더라도 참기 바란다. 이 글에서든 예는 모뎀이 com3(ttyS2)에 연결된 경우이다.(리눅스랩 사무실에 설치되어 있다.) 리눅스에 모뎀을 연결해 다이얼업 PPP 서버로 설정해서 윈도우 사용자에게 PPP 연결을 제공하려면 세 가지 절차가 필요하다. 1) 모뎀 및 시리얼포트 설정 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에 지정돼 있다.(데비안임)
(1) /dev/ttyS2 : com3 장치명이다. (2) irq 5 : 인터럽트 5번을 사용한다는 뜻이다. 주의할 건 대부분의 내장모뎀은 com3 (3) port 0x3E8 : com3의 IO Address 이다. 표준시리얼 포트의 경우는 com4 (4) spd_vhi : 시리얼포트의 최고 속도를 115,200bps로 지정한다. * 시리얼 포트 설정이 올바른지 확인하려면 아래 명령을 준다.
* 모뎀이 정상적으로 작동하는지 확인하려면 minicom 프로그램을 사용한다. minicom -s 명령을 주고서 Serial port setup 메뉴에서 A - Serial Device : /dev/ttyS2 를 지정하고서 Save setup as dfl 메뉴를 선택하고 Exit 한 후 minicom 명령을 가동한다. 아래처럼 나오면 모뎀이 정상으로 작동한다.
ati4 명령(로보틱스) 또는 at&v(기타 모뎀) 을 주면 아래처럼 모뎀의 설정 값이 나온다.
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를 가동하는 경우는 아래와 같다.
여기서 마지막의 /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 에 아래처럼 지정한다.
a. port ttyS2 는 지정 않아도 된다. 단 모뎀이 여러 개 연결된 경우 port 이하는 b. debug 를 넣으면 모뎀 연결 과정이 /var/log/mgetty.ttyS? 파일에 c. term vt100 은 터미널 타입을 지정한다. d. rings 2 는 두 번 벨이 울리면 모뎀이 전화를 받으라는 뜻. e. speed 는 시리얼 포트 속도이다.(모뎀속도가 아니다. 우리가 흔히 말하는 f. modem-check-time -1 : 모뎀 중에서 일부 모뎀이 오래 켜 두면 disable g. data-only yes : 모뎀이 팩스 수신용으로 사용 안되면 지정하는게 좋다. h. modem-type data : 위와 같다. (4) /usr/local/etc/mgetty+sendfax/login.config 파일에 아래처럼 지정한다.
첫째 줄의 의미는 /AutoPPP/ 란 입력이 들어오면 pppd를 가동하라는 뜻이다.(윈도우에서 이 글자가 날아온다.) pppd 이하는 pppd의 옵션이다. auth -chap +pap 사용자 인증에 PAP를 사용한다는 뜻이다. 즉 윈도우의 전화접속 네트워킹의 계정명과 패스워드를 /etc/ppp/pap-secrets 파일에서 확인하겠다는 뜻이다. 이때의 /etc/ppp/pap-secrets 파일의 내용은 아래와 같다.
hansol 은 윈도우의 전화접속 네트워크 사용자 난에 입력하는 내용이고 pass 는 암호 난에 넣을 내용이다. 만약 pap-secrets 파일을 사용하지 않고 리눅스의 패스워드 파일을 사용자 인증에 사용한다면 이 때는 login 옵션을 추가해야 한다. 즉 아래처럼 설정한다.
이 경우는 pap-secrets 파일은 지우던지 또는 아래처럼 지정한다.(ppp 버전에 따라 둘 중 하나가 적용된다.)
둘째 줄은 PPP 연결이 아닌 경우는 login 프로그램을 실행하라는 뜻이다. 즉 쉘어카운트로 연결한다. * 리눅스를 ppp 클라이언트로 사용해 AUTO PPP 로 설정된 리눅스 PPP 서버로 여기까지 진행했다면 윈도우에서 전화를 걸면 운이 좋으면 PPP 연결까지 진행될거고 운이 나쁘다면 전화 연결과 동시에 끊길 것이다. 끊긴다면 원인은 커널에 ppp 지원이 안 들어가 있는 경우이거나 ppp 옵션이 잘못 된 것이다. 1.3 ppp 옵션 설정 1) 커널 ppp 코드 확인 pppd를 사용하기 전에 우선 커널에 ppp 코드가 들어 있는지 확인해야 한다. 커널을 컴파일해서 사용하는 경우 특히 이점을 항상 확인해야 한다. dmesg 명령을 주어 아래 라인이 나오면 커널에 ppp 코드가 들어 있다. PPP: version 2.3.7 (demand dialling) 배포본에 디폴트로 들어 있는 커널의 경우 ppp를 연결하면 ppp 모듈이 자동으로 올라온다. daemon.* /var/log/ppp.log
2) IP forwarding 지정 PPP 서버는 게이트웨이 역할을 하므로 ip forwarding 을 지정해야 한다. 데비안이라면 /etc/rc.boot 디렉토리에 아래 스크립트를 만들어 넣는다.
레드햇은 이전에는 /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 파일의 로그인 후 pppd를 가동하는 방법(passwd파일에서 가동하는 방법)의 경우는 로그인 계정의 .ppprc 파일에서도 지정 가능하다. 그 외에 ppp 연결이 안되는 경우는 인증(PAP)이 잘못된 경우이다. 윈도우에서 사용자 확인 중 메시지에서 끊기면 인증이 잘못돼 있다. pap-secrets 파일 설정이 잘못되어 있다면 ppp.log 파일에 아래처럼 나올 것이다.
이제 ppp 옵션을 지정하자. /etc/ppp/options 파일에 아래처럼 지정한다.
2) crtscts : 하드웨어 플로우 컨트롤을 사용 3) bsdcomp 15 : 압축 최대(메모리가 적으면 지정하지 말 것 4) deflate 15 : 위와 같음 5) 115200 : 연결속도임 (setserial 및 mgetty에 지정한 속도와 일치 시켜야 한다.) 6) asyncmap 0 : 콘트롤캐릭토( ASCII 31 이하)를 2 바이트로 변환하지 않고 보낸다. 통신 속도가 빨라진다. 지정하지 않으면 모든 콘트롤 캐릭터가 2 바이트로 보내져 7) proxyarp : PPP 서버가 랜으로 인터넷에 연결된 경우(이더넷 랜카드가 있는 경우) 8) idle 300 : 5분 (300초) 동안 클라이언트와 데이터 전송이 없으면 PPP 연결을 9) ms-dns 211.192.58.170 : 클라이언트에게 할당하는 DNS 서버 주소이다. /etc/ppp/options.ttyS2 파일에는 아래처럼 지정한다.
1.4 연결 이제 모든 설정은 끝났다. 윈도우에서 전화접속 네트워킹을 설정하고 pap-secrets 파일에 지정한 계정(hansol)과 암호(pass)를 넣고 연결을 누르면 전화가 연결되고 "사용자 확인 중 " 메시지에 이어 "네트워크에 로그인 중 .." 이런 메시지가 나올 것이다. 다음 연결이 완료되면 전화접속 네트워크 창이 사라지고 다른 창이 나온다. 윈도우의 실행 명령에서 winipcfg 명령을 주면 윈도우에 부여된 주소가 나온다. 아래와 같다. <그림 2> 리눅스에서는 아래처럼 ppp.log 파일에 기록된다.
2. 전용선에서 PPP 서버 설정 클라이언트가 전용선으로 서버에 연결된 경우는 mgetty.config 파일 설정이 달라진다. 즉 아래 세가지만 지정하면 된다. direct yes 나머지는 다이얼업과 같다. 전용선의 경우 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 레드햇
2.2 데비안 /etc/rc.boot/0setserial에서 아래 줄을 찾아 수정
2.3 확인 리부팅 해서 아래 명령을 줌.
아래처럼 나와야 한다.
3. 모뎀 작동 여부 확인 3.1 minicom -s 명령으로 minicom 을 가동해서 아래처럼 환경 수정 1) serial port setup 에서
2) Save setup as dfl 로 저장 후 종료 *. minicom 이 설치가 안되어 있으면 레드햇의 경우 CD 1번을 마운트 후 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 으로 시작하는 줄이 있으면 디폴트게이트웨이가 설정되어 있다.
디폴트게이트웨이 제거 1) 일시적 제거 일시적으로 제거하는 방법이다. (리부팅하면 효력이 사라진다.) route del default 2) 영구 제거 - 레드햇의 경우 /etc/sysconfig/network 파일에서 GATEWAY= 에 지정된 IP 어드레스를 지움.
- 데비안의 경우 /etc/init.d/network 파일의 아래 줄을 제거(맨 앞에 #를 넣음)
5. ppp 옵션 설정 통신속도, 압축방법 등을 지정한다. /etc/ppp 디렉토리의 options 파일에 아래 내용을 넣는다. 다른 내용은 지움. (이 파일이 없으면 새로 만듬)
6. pap-secrets 파일 만듦. 아이쎈의 PPP 서버에서는 사용자 인증(사용자가 정당한 사용자 인지 체크하는 것) 에 pap을 사용한다. 리눅스에서 pap 인증을 지정하는 파일은 /etc/ppp/pap-secrets 파일이다. 이 파일에 아이쎈에서 부여한 계정과 패스워드를 넣는다. 계정을 발급 받으려면 아이쎈의 홈페이지를 참고 할 것. 계정명 * 패스워드 * 이 파일은 다른 사용자가 볼 수 없도록 "chmod 600 " 명령을 준다.
7. ppp 자동연결 스크립트 작성 이 스크립트는 01412 번으로 전화를 걸어 메뉴에서 "2"번을 선택 후 "issan"을 입력해 주고 아이쎈의 ppp 서버에서 pppd 데몬이 뜨면 자신의 pppd를 실행해주는 스크립트이다.(파일 이름을 issan 이라 하자.)
* \앞에 공백이 필요하다. 이 파일은 실행모드여야 한다 chmod 755 issan <enter>
8. 연결 실행 위의 스크립트(issan)가 저장된 디렉토리에서 ./issan <enter> 하면 연결된다.
9. 연결 확인 PPP 연결이 이루어 졌는지를 확인하는 방법이다. 9.1 ifconfig 명령에서 아래처럼 나와야 한다.
9.2 ps ax 명령을 주면 아래 줄이 나온다.
9.3 netstat -nr 명령을 주면 아래처럼 나와야 한다.(끝이 ppp인 라인이 두 개 나온다.)
10. 연결 끊기 위의 "9.2" ps ax 명령 출력에서 맨 앞에 나오는 숫자(PID를 kill 명령 뒤에 넣는다.
|
관련자료
-
이전
-
다음