|
제 3 회 리눅스 공동체 세미나 j 세션 |
||
통화용 회선을 이용한 다이얼업 네트워킹의 모든 것! |
|||
|
|||
|
|
|
|
고려대학교 리눅스 동아리 kuls 박석근 <rockroot@kuls.korea.ac.kr> |
|||
netcfg, linuxconf를 이용하여 리눅스에서 ppp를 연결하는법의 비밀 4대 통신망, 너희 ppp의 비밀을 밝힌다. minicom, gau를 이용하여 ppp연결하며 속살벗기기. ppp스크립트로 간단하게 ppp연결하기, 스크립트의 모든것! ppp스크립트 분석과 pppd,chat을 알아보기 그밖에 전화접속에 대한 모든것! 통신비 아끼는 최적의 비밀 |
통화용 회선을 이용한 다이얼업 네트워킹의 모든 것! 331
------------------------------------------------------------------------------------------------
여러분은 한번쯤은 인터넷이란 말을 들어봤을 줄로 믿는다. 혹, 안 들어 봤다고? 그럼 이제부터 인터넷이 무엇인지 들어보길 바란다. 인터넷이란, 정보가 무진장 돌아다니는 가상 현실이라고 보면 된다. 세계의 모든 컴퓨터를 연결해 놓은 것을 인터넷이라 보면 될 것이다. 그럼 집에서 앉아서 세계가 돌아가는 현상도 알 수 있을 뿐만 아니라 자신에게 필요한 정보도 얻을 수 있다. 이 얼마나 편한가 ! 그런데, 안타깝게도 인터넷에 들어가기 위해서는 약간의 절차가 필요하다. "내가 들어갈랍니다."하고 들어갈 수 있는 것이 아니다. 약간의 절차와 규칙만 지키면 자신에게 인터넷의 세계는 펼쳐질 것이다.
리눅스에서 인터넷에 들어 갈려면, 몇 가지 방법이 있다. 전용선을 이용하는 방법, 케이블모뎀을 이용하는 방법, isdn 등등 많이 있지만, 우리들이 일반적으로 쓰기엔 부담스럽다. 가끔씩만 인터넷에 들어갈 경우에는 모뎀이 최선의 선택이 될 수 있다. 장비 가격도 싸고 전화세 약간만 부담하면 되니깐 말이다. 이제부터 모뎀을 통해서 인터넷에 들어가는 방법을 알아보자.
준비물: 모뎀, 전화선, 리눅스, 하고야 만다는 의지 ^^
우선 모뎀을 리눅스에서 인식시키는 것이 우선이다. 모뎀이 없으면 ppp가 무슨 소용인가? 그런데 현재 판매하고 있는 pci모뎀이라는 것이 있다. 이 모뎀은 리눅스에서는 적극 배제하는 바이다. pci모뎀은 리눅스에서 안 잡힌다는 소리를 많이 들어오던 터이다. 필자는 다행히 isa방식의 모뎀을 사용한다. 따라서 pci방식의 모뎀을 가지고 있는 분이라면 모뎀을 인식시키는 것을 포기하고 isa방식의 모뎀을 구입하는 것이 더 현명하다고 본다.
인터넷에 들어가기 위해서는 ppp서비스라는 것을 받아야 한다. ppp가 뭐냐고? ppp는 point to point protocol의 약자이다. point to point란 '점 대 점'으로 간단하게 한 컴퓨터와 한 컴퓨터를 연결한다는 뜻으로 이해하기 바란다. protocol은 '통신규약'이라는 뜻으로 아까 말했듯이 서로 정보를 주고받는 규칙이다. 즉, 한 컴퓨터와 한 컴퓨터끼리의 정보를 주고받는 규칙정도라고 간단하게 생각하자. 어렵게 생각하면 머리만 아프다.
그럼 ppp서비스는 어떻게 받는가? 그것은 ppp서비스를 해주는 업체를 알아야 한다. 가장 대중적으로 많이 쓰이는 업체로는 많이 들어보았을 만한 나우누리, 천리안, 하이텔, 유니텔이다. 이곳에서 이 ppp라는 서비스를 제공하고 있다. 우리는 그 서비스를 그냥 앉아서 몇 가지 조작만으로 받기만 하면 된다. 아참 ! 그리고 한가지 더 준비할 것이 있다. 바로 우리가 사용할 컴퓨터도 ppp가 가능하도록 만들어 줘야 한다. 이것은 커널을 ppp가 가능하도록 바꾸어 주어야 하지만, 현재 리눅스를 설치하고 난 뒤 커널을 설치된 그대로 사용하는 독자라면 커널을 ppp가 되도록 컴파일 할 필요는 없다. 미리 가능하도록 되어 있기 때문이다.
만일 커널을 up할 때는 반드시 ppp가 가능하도록 세팅을 해주기 바란다. 여기서 몇 가지 짚고 넘어가자. 설명할 용어가 몇 가지 될 것이다. 용어들을 모르면 앞으로 설명할 내용을 이해하기 어려울지 모르고 인터넷을 포기하는 상황에까지 직면할 수 있으므로 알고 넘어가도록 하자. 자자 ! 몇 가지밖에 되지 않는다.
real-ppp : 자신의 컴퓨터에 ip를 받는 ppp virtual-ppp(가상ppp) : 자신의 컴퓨터에 ip를 가상적으로 받는 ppp. ip 주소 : 인터넷상에서의 주소(숫자로 xxx.xxx.xxx.xxx 표현된다.) 인터넷도 주소라는 것이 존재한다. 자기 집 주소가 서울시 성북구 xx동 xx번지라고 하는 것처럼 인터넷에도 그런 주소가 존재하지 않겠는가? 그래야 다른 사람의 컴퓨터에 방문을 할 것이 아닌가. 그 주소를 인터넷에서는 숫자로 203.238.126.51처럼 나타낸다. 주소를 알면 다른 사람의 컴퓨터에 방문할 수 있게 된다. nameserver: 네임 서버(ip주소가 어려워서 편하게 바꿔주는 서비스)
위에서 보았던 ip주소가 어렵다고 생각해 보진 않았는가? 저것을 어떻게 외우고 찾아가지? 필자도 저렇게 많은 숫자를 외우려면 한참이 걸린다. 보통 사람이 친구네 집 주소를 처음 들었다고 할 때 한번에 외우기 힘들지 않겠는가? 더욱이 컴퓨터 주소를 저렇게 숫자로 불러주면 누가 처음에 듣고 알 수 있겠는가. 그럼 이렇게 불러보면 어떨까? nownuri.net이라고 문자로 나타내는 것이다. 사람들은 숫자보다 문자를 외우기 쉽다고 생각하고 실제로 그렇다. 이렇게 숫자를 문자로 바꿔주는 서비스를 해주는 컴퓨터를 네임서버라고 한다.
위의 용어를 대충 이해했다면 두개의 ppp서비스 중 어떤 것을 고를지 생각해보자. real-ppp와 가상ppp중 여러분은 고를 수 있는 권리가 있다. 마음에 드는 것으로 고르면 된다. 그럼 두개의 차이점을 알아야 자신에게 좋은 것을 고르지 않을까? 간단하게 차이점을 알아보자. real-ppp는 자신의 ip 주소를 받아올 수 있지만 가상ppp는 눈속임처럼 ip주소를 10.0.2.15와 같이 준다. 그러므로 real-ppp서비스를 받으면 자신의 컴퓨터는 인터넷에서 하나의 존재로 인정이 되며 자기도 남들의 컴퓨터에서 정보를 얻어올 수 있고, 자신의 정보도 줄 수 있다. 즉, ppp서비스를 받는 동안에는 누군가 자신의 컴퓨터에 접속할 수 있는 상태로 만들 수 있다. 그러나 가상ppp는 다른 사람의 정보는 볼 수 있어도 자신의 정보를 제공할 수 없다. 자기 pr시대에 당연히 real-ppp가 좋을 것이다. 그러나 비용문제를 보면 생각이 바뀔 수 있다. 나우누리의 경우 얼마 전 까지만 해도 real-ppp는 (02)592-6100등 직접 전화를 걸어서 서비스를 받아야 했었으므로 일반 전화요금이 나왔다(시외 통화료도 나올 수 있겠다.), 가상ppp는 01443으로 서비스를 받을 수 있어 할인 요금이 적용이 되었다. 또한 하이텔이나 천리안 같은 경우 real-ppp는 유료 서비스이다. 어느 것을 선택하든지 여러분의 자유이다. 한번씩 써보고 마음에 드는 것으로 골라도 늦지 않으니 걱정하지 말라.
이제 그럼 슬슬 실전에 들어가 보자. 좋은 서비스를 받으려면 약간의 수고는 감수하는 것이 인간 된 도리가 아닐까 한다. 거저 먹기는 대머리가 될지도 모르니 조심하라^^;. 우선 real-ppp 설정하는 방법부터 알아보도록 하자. 자 이제 들어간다.
3.1 modem과 ppp설정 도구를 실행하자
x윈도우가 떴는가? 그럼 일이 매우 수월하다. 이것은 누워서 떡 먹기라고 표현하던가? x윈도우를 실행시키는 권한을 root로 하자. 이런 좋은 서비스는 root만이 받을 수 있도록 하고 나머지 일반 사용자는 root가 서비스를 받아놓으면 그때 덩달아서 사용할 수 있다. 지금 자신의 프롬프트에 root라고 떳는가? 그럼 그 상태에서 가볍게 modemtool과 netcfg을 치자.
앗 ! 그런데 난 프로그램 실행시키는데 키보드에 손이 가기 싫다. 이런 분들을 위해서 또 한가지 준비해 놓은 것이 있다. gnome패널 중 윈도우즈의 시작 버튼과 같은 버튼을 누른 후 메뉴 중에 'administration'항목에 들어가면 'control panel'이 있다. 이것을 마우스의 왼쪽 버튼으로 클릭한다(직접 control-panel이라고 쳐도 관계없다.). network configuration과 modem configuration이 보이는 그림을 클릭하라. 그럼 modemtool과 netcfg을 친 것과 같은 결과를 얻을 것이다.
-그래도 난 일반 사용자를 좋아해^^;- root를 함부로 사용하는 것은 자신의 시스템을 망치려고 작정한 것이나 다름없다. root의 사용은 특별한 경우를 제외하고 사용하지 말아야 한다. 이 말을 잘 들은 우리의 현명한 독자들은 일반 사용자로 x윈도우를 띄우고 잘 사용하고 있었다. 그런데, 이런 ppp를 사용해야 할 때는 root로 들어와야 한다. 그럼 보통 사람들은 x윈도우를 종료하고 로그아웃한 뒤에 root로 로그인 한 후 x윈도우를 띄워서 다시 이런 작업을 한 후 일반 사용자로 다시 x윈도우를 띄우는 작업을 한다.
가끔 편리함을 추구하다 못해 불만 섞인 말을 하는 분들이 있다. "뭐가 이렇게 불편한 거지? 이래서 되겠나?" 하며 리눅스를 탓하려고 한다. 그럴 때 필자는 이렇게 말을 해 주고 싶다. " 리눅스는 잘 사용하면 정말 편리해요 ! "라고 말이다. 필자는 그 중의 하나의 방법을 가르쳐주겠다. 앞의 예와 같은 경우에는 프롬프트 상에서 'su -'를 치라. 그러면 password: 란 문구가 뜬다. 가볍게 외워두었던 비밀번호를 입력한다. 그럼 곧장 root가 된 것을 확인할 수 있다. 그리고, 다음과 같이 입력하라.
[root@rock /root]# export display=:0
이렇게 하면 자신이 실행시킨 x윈도우용 프로그램은 모두 일반 사용자의 x윈도우로 프로그램이 뜰 것이다. 그럼 다음으로 netcfg와 modemtool을 프롬프트 상에서 치면되리라고 현명한 독자들은 바로 눈치 챘을 것이다. 위의 복잡한 과정을 거치지 않고 이런 간단한 과정만 거치면 같은 결과를 얻을 수 있다.
3.2 modem의 설정
자 modemtool이 떴는가? 그럼 자신의 모뎀 포트는 다들 알고 있어야 한다. 모른다고? 그러면 윈도우로 부팅하여 제어판의 모뎀에서 자신의 모뎀 포트를 알아오길 바란다. 대부분 com2 혹은 com3을 쓰는 경우가 많을 것이다. 리눅스는 윈도우와 좀 다르게 com을 쓰지 않고 ttys0 3까지 쓴다. 예를 들면 윈도우에서 com2였다면 리눅스에서는 ttys1이라고 하는 것이다. 그럼 자신의 모뎀 포트를 알았다면 modemtool을 보도록 하자. modemtool은 아주 간단하다. ttys0 3을 com1 4까지 대비시켜 놓고 선택하게 하도록 하였다. 이중에 자신에게 맞는 것을 선택하고 ok버튼을 누르면 된다. 필자의 경우는 com2이므로 ttys1을 선택하고 ok버튼을 눌렀다.
x윈도우상에서 modemtool이 작동하므로 콘솔 상에서는 어떻게 할 것인가? 필자의 경우를 예로 들어 설명하겠다. 콘솔 상에서는 /dev/modem이라는 장치를 /dev/ttys1이라는 것과 링크(연결)을 시켜주면 된다. modemtool이라는것도 결국 이런 작업을 그래픽 환경으로 옮겨놓은 것뿐이다. 자 다음과 같이 하면 된다.
[root@rock image]# ln -s /dev/modem /dev/ttys1
이렇게 하면 모뎀 인식은 끝난 것이다. 자신의 모뎀 포트에 맞게 고쳐서 사용하기 바란다.
3.3 ppp 본격적인 설정 & 테스트
그러면 이제부터 본격적인 설정에 들어가 보자.
나우누리
나우누리 real-ppp서비스를 받기 위해서는 우선 나우누리 id를 발급 받도록 하자. 이것은 각자 알아서 신청하도록 하자. 나우누리id가 있는가? 그럼 적을 알고 나를 알아야 백전 백승이라고 누군가 말을 하였다는 소문이 있듯이 나우누리의 ppp서비스를 알아야 한다. 어디에 전화를 걸 것이며 위에서 설명한 네임서버의 주소는 무엇인지(참고로 네임서버 주소는 xxx.xxx.xxx.xxx의 형식의 숫자로 적어 줘야한다.) 정도는 알아두자.
접속 번호: 02-592-6100
네임서버주소: 203.238.128.24
미리 조사해 놓았다. 편리하게 사용하도록 하자. 그럼 netcfg의 첫 화면이 names라는 탭의 화면일 것이다. 이 화면에서 다른 것은 기본으로 적혀져 있는 것을 쓰도록 한다고 하더라도 nameservers란에 아까 적어두었던 네임서버 주소를 하나 적어준다.
그 다음 우리가 관심을 가질 탭은 interfaces란 탭이다. 그것을 클릭하여 화면이 나타나도록 한다. 그럼 interface란에 lo라는 것이 보일 수 있고 ip에는 127.0.0.1이 proto에는 none등이 보일 수 있고 더 많은 것이 보일 수 있다. 우리는 거기에서 add란 버튼을 누르자. ppp 서비스를 얻기 위한 하나의 과정이다. 어떤 인터페이스를 설정할 것인가에 대한 interface type을 정하는 창이 뜬다. 가볍게 우리는 ppp를 선택하자.
가장
위의 란에 보면 device:ppp0가 보일 것이다. 이것은 ppp 서비스를 받을 것 중에서 첫 번째로 만든다는 뜻이다. 그 다음 phone number가 보이는가? 그곳에 전화를 걸 전화번호를 적도록 하자. 그 밑에 use pap authentication이 보일 것이다. pap은 비밀번호 인증규약이라고 풀이되며 우리는 자세히 알 필요는 없는 사항이므로 이것에 체크를 하여 빨갛게 표시되도록 하자. 이것은 그쪽전화에 연결해보면 알겠지만 전화를 걸면 아무것도 안뜬다. id를 입력하라는 것조차 나오질 않는다. 이것은 pap를 써서 누군지 판별하는 방법으로 접속하였을 때 id와 password를 입력하라는 말이 없으면 pap을 쓴다고 생각하라. pap표시를 하지 않으면 ppp서비스를 받을 수 없다. 이것까지 다했다면 ppp login name란에 자신의 id를 입력하라. ppp passwrod: 란에 비밀번호를 입력하라.
이것까지 다 무난하게 했는가? 그럼 done을 누르지 말고 customize를 누르자. (모든 것이 벌서 끝나면 너무 재미없지 않는가.) 누르면 또 하나의 창이 뜨는데, hardware탭에서 다른 것은 영어를 읽어보면 다들 쉽게 알 수 있는 것들이고, linespeed란에는 자신의 모뎀속도를 맞추어 주자. 그냥 기본 값인 115200으로 놔두길 바란다. modem port에 /dev/modem이라고 쓰여져 있는지 확인하라. 모두 되었다면 communication탭은 건너뛰도록 하고(기본 설정으로 맞추어 놓았기 때문..)
다음으로 networking탭에서 몇 가지 적어주자. 처음 보이는 activate interface at boot time이라는 체크박스는 리눅스를 부팅할 때 ppp연결을 하여 서비스를 받을 것인가를 물어보는 것으로 리눅스를 부팅하는 즉시 전화를 걸어 ppp서비스를 받는다. 전화세를 걱정하는 대부분의 사람들은 이 옵션이 필요가 없으므로 체크하지 말고 그대로 두고 밑의 두개의 체크박스도 그대로 둔다.
timeout values in seconds for..란의 no connection과 broken connection란에 적당한 초 단위의 시간을 적어주길 바란다. 연결이 되지 않거나 할 때의 시간을 판별하는 기준을 정하는 것으로 생각하자. maximum packer sizes란의 mru와 mtu는 보내고 받을 때의 자료(패킷)의 크기를 작게 하거나 크게 하여 보내는 옵션이다. 모뎀속도가 빠르면 패킷의 크기를 크게 하고 자신의 모뎀 속도가 느리면 패킷의 크기를 작게 설정하여 적절한 수치를 넣는다. 이것으로 ppp설정이 끝나버렸다.
간단하지 않는가? 그럼 "이것을 당장 구동시켜봐야지"하는 사람들이 당연히 있을 것이다. 그럼 지금까지 열린 창의 done을 눌러서 완료를 시키고 netcfg프로그램의 화면만 나오면 그곳에 ppp0라는 인터페이스가 생겨있을 것이다. 그럼 save를 눌러서 지금까지 한 작업을 저장하고 나서 바로 테스트를 해보자.
active라는 버튼이 보이는가? 보이면 당장 누르도록 하자. 그럼 전화를 거는 소리와 함께 연결이 되는 소리를 들을 수 있을 것이다. 자 그럼 이것이 연결이 되어 있는지 확인해보자. 다음과 같이 입력하기 바란다.
[root@rock /root]# ifconfig
이렇게 입력을 하고 나서 다음과 같은 메시지를 보게 되면 성공한 것이다.
ppp0 link encap:point-to-point protocol
inet addr:210.98.193.25 p-t-p:210.98.193.1 mask:255.255.255.255
up pointopoint running noarp multicast mtu:500 metric:1
rx packets:8055 errors:0 dropped:0 overruns:0 frame:0
tx packets:7954 errors:0 dropped:0 overruns:0 carrier:0
collisions:0
이제 마음놓고(사실은 전화세 걱정은 하면서) 인터넷을 즐기도록 하자.
유니텔
유니텔 ppp서비스를 받기 위해서는 역시나 id가 필요하다. 물론 password는 알아둬야겠다. 여기서도 나우누리와 비슷비슷하다. 다른 점이 있다면 pap을 쓰지 않는다는 점이다. 왜냐하면 접속하였을 때 id와 password를 물어보기 때문이다. 자 이제 유니텔 접속 번호를 보자. 접속 번호는 다음과 같다.
접속 번호 : 01433
다행히 접속번호가 014xx이므로 할인이 적용되는 요금체계이다. 자 접속번호를 알았으니 이젠 nameserver의 주소도 알아야 한다. nameserver의 주소는 다음과 같다.
네임 서버 주소: 203.241.132.60
또다시 root로 netcfg를 실행하기 바란다. names탭의 nameservers란에 위의 주소를 살며시 적어주기 바란다.
그리고 interface 탭으로 넘어가기 바란다. 그곳에서 나우누리 때와 같이 add버튼을 누른다. 그리고 ppp에 체크하고 ok버튼을 누른다. 그럼 제일 위에 device:ppp1이라고 보이면, phone number에 위의 접속번호인 01433을 입력한다. 그 다음 유니텔에서는 pap을 쓰지 않으므로 use pap authentication에는 체크하지 말기 바란다. ppp login name에 자신의 id를 적고 ppp password란에 패스워드를 입력한 후 customize버튼을 누른다.
그런 다음 나우누리에서는 사용하지 않았던 communication탭을 누른다. 유니텔에서는 이 탭에서 수정할 것이 있으므로 꼭 이 탭에 가야한다. modem init string란에는 기본 값인 atz가 있을 것이다. 이것은 그냥 놔두어도 무방하지만 자신의 모뎀에 최적화 된 모뎀 초기화 값을 넣어주어도 된다. 물론 자신의 모뎀 초기화 값을 알 경우이다. 모르면 그냥 넘어가도 좋다. modem dial command란에 atdt라는 초기값이 들어가 있을 것이다. 이것은 수정하지 말아야 한다. 모뎀에서 전화를 걸때 사용하는 명령어가 atdt이다. 이것은 전자식으로 전화를 건다는 뜻이다.
그 다음 볼 것이 밑의 칸에 있는 내용들이다. 그곳에서 고쳐야 할 것이 있다. 바로 'ogin : 자신의 id' 이다. 이 뜻은 처음 접속 번호로 접속을 성공하면 'ogin'이라는 표시가 나오면 자신의 id를 보내는 것이다. 보통의 통신 서비스 업체의 경우 id를 물어볼 때 login이라는 문구를 자주 쓴다. 따라서 ogin이라는 문자가 나오면 자신의 id를 보내 이 과정을 직접 키보드를 치지 않고 id를 보내게 된다. 'ord: 자신의password'도 마찬가지로 ord로 끝나는 문자가 나오면 자신의 password를 보내는 것이다. 그런데 유니텔 01433접속은 안타깝게도(?) 'login:'이라는 문자열을 쓰지 않고 'username:' 이라는 문자열을 쓴다. 따라서 이 부분을 삭제하고 insert버튼을 눌러 expect란에는 'sername:' 정도로 적어두고 send란에는 '자신의 id'를 적어주기 바란다.
그 다음 networking란에 가서는 나우누리와 같은 작업을 해주면 설정은 끝나게 된다. 이제 유니텔도 마음껏 ppp를 쓸 수가 있을 것이다.
기타 통신 서비스 업체
기타 통신 서비스 업체로는 천리안, 하이텔, 넷츠고, 신비로 등을 들 수 있겠다. 위에서 위의 작업들을 제대로 따라 했다면 무언가 눈치를 챘을 것이다. 다들 비슷비슷하다는 것을.. 그렇다면 나머지 서비스도 자신의 id와 비밀번호, 그리고 그쪽의 nameserver를 알면 다 해결되는 문제이다. 물론 약간의 방식의 차이가 있겠고 netcfg등의 설정이 약간 다를 수 있다. 혹, ppp연결이 잘 되지 않는다면 몇 가지 설정을 바꾸어 가면서 해보길 바란다. 특히 pap부분을 눈여겨 봐두길 바라고 나머지 id와 비밀번호 입력부분을 눈여겨 봐두어 입력하라고 나오는 메시지가 무엇인지 판별해 놓아 그에 맞추어 설정하면 실패할 확률은 그만큼 적어지게 될 것이다. 참고로 넷츠고 서비스는 ms의 익스플로러 기반이고, 문자 서비스가 아닌 웹 기반의 서비스를 해주기 때문에 리눅스에서는 ppp만 가능하고 다른 서비스는 불가능할 것이다.
- 한글 id를 가질 경우는 어떻게 하나요?-
지금 사용한 netcfg프로그램은 영어만 입력할 수 있는 프로그램이다. 그런데 한글id를 가진 사람은 어떻게 하는가? 다음과 같이 하면 된다. hanterm을 띄우거나 띄워진 상태라면 그 상태에서 shift키와 space키를 동시에 누르면 한글을 입력할 수 있게 된다. 그곳에서 자신의 아이디를 열심히 친다. 그리고 마우스로 자신의 id를 적었던 부분을 drag한다(즉, 배경화면과 반대되는 색상이 되도록 긁는다.). 그리고 netcfg에서 id를 입력하는 부분에 마우스를 갖다 대면서 양쪽 버튼을 클릭한다(2버튼 마우스의 경우다. 3버튼은 가운데 버튼만 누른다.). 그러면 이상하게 깨진 문자가 그곳에 쓰여진걸 보게 되는데 이것은 정상적인 것으로 제대로 입력이 된 상태이다. 아직 이 프로그램이 한글화가 되지 않았으니 아쉽더라도 이런 방법을 사용하여 한글id를 입력하도록 하자.
3.4 가상 ppp 사용하기
이전에 말했던 가상 ppp라는 것을 기억하나? 왜 이것을 사용할까? 한번 생각을 해보도록 하자. ppp의 속도가 얼마나 될까? 그냥 전화접속을 하여 통신 서비스를 이용하는 것보다 과연 빠를까? 필자의 생각으로는 빠른 편은 아니다. 느린 경우가 많다. 통신 서비스를 이용하여 자료를 내려 받을 때는 ppp보다는 전화를 걸어서 통신 서비스를 이용하는 것이 더 빠를 경우가 많다. 그런데 사용하다 보면 가끔은 인터넷을 이용해야 하는 경우가 있다. 그런 경우는 ppp를 연결해야 하는데 전화를 끊고 다시 연결하여 인터넷을 이용한다면 좀 불편하지 않을까? 리눅스에서는 이런 경우에 가상 ppp 메뉴로 들어가서 ppp연결을 할 수 있다. 필자가 자주 사용하는 방법이다. 그리고 특정 통신 업체의 경우는 전화비를 절약할 수도 있다. 또한 사용료도 지불하지 않으므로 적절하게 사용될 수 있다. 미리 설정을 해두면 참 편리하게 이용할 수 있는 서비스이다.
통신 프로그램 이용하기
리눅스에서 통신 프로그램을 이용하여야 통신을 할 수 있을 것이다. real-ppp연결은 netcfg로 해결한다지만 가상ppp의 경우는 직접 통신 서비스에 접속을 하고 서비스를 이용해야 하는 경우이므로 프로그램이 필요하다(사실 netcfg를 이용하여 할 수 있지만 이런 경우는 통신 프로그램을 이용하여 접속하는 경우가 많다.). 리눅스에서는 이와 같은 프로그램으로 minicom과 seyon, gau라는 프로그램등이 있다. 쉽고 편하게 쓰기 위해서는 우리나라 개발자가 만든 gau를 이용하길 권한다. 한글로 구현이 되어 있으며 한눈에 사용법이 눈에 확 들어온다.
seyon의 경우도 쉽게 사용할 수 있으나 이제 알짜 리눅스 배포판에는 없다. 개인적으로 구해서 사용하길 바란다. minicom의 경우는 앞서 말한 프로그램이 x윈도우 상에서 실행되는 반면 콘솔 상에서 실행되는 프로그램이다. 우리는 이 minicom에 초점을 맞추어 보도록 하겠다. 나머지는 너무 쉽게 사용할 수 있으니깐 너무 재미가 없지 않겠는가? 콘솔 상에서 minicom을 실행하자.
[rock@rock rock]$ minicom
그럼 minicom의 정말 썰렁한 한 화면이 뜰 것이다. 정말 어떻게 하라는 것인지 답답하기만 하다. 그러나 그 썰렁한 화면 중에 4번째 줄에 초점을 맞추어 보면 우리는 이 프로그램의 실마리를 얻을 수 있다.
press ctrl-a z for help on special keys
위에서 시키는 대로 ctrl키와 a키를 동시에 눌러보자. 그리고 나서 그냥 z키만 눌러보면 이제 우리는 반은 성공한 것이다. 그림과 같이 화면에 나타나야 제대로 한 것이 된다.
영어와 조금 친숙해 질 필요성을 다시 한번 느끼게 해준다. 몇 가지 명령이 화면에 나타나고 그에 대한 설명도 나타난다. 잠깐 중요한 몇 가지 기능만 살펴보자.
d : 전화를 걸 디렉토리를 보여준다. 자신의 전화번호부를 추가할 수 있다.
s : 파일을 전송할 때 쓴다. 각 디렉토리를 검색하여 보낼 파일을 찾을 수 있다.
l : 화면을 갈무리 할 수 있는 기능이다.
h : 전화를 끊는 기능이다.
m : 모뎀의 상태가 좋지 못할 때 모뎀 초기화를 한다.
c : 화면의 상태가 좋지 못할 때 화면을 깨끗하게 한다.
o : 이 프로그램을 설정할 수 있게 한다.
x : 모뎀을 리셋 시키면서 프로그램을 종료한다.
q : 모뎀을 리셋 시키지 않고 프로그램을 종료한다.
이상의 기능들 중 우리가 사용할 기능은 q정도가 될 것 같다. 굳이 d를 쓸 수 있겠지만 그냥 키보드로 치는 것이 더 빠를 것 같다. 명령을 내리는 방법은 ctrl+a를 누른 후 각 명령에 해당하는 q와 같은 문자 키를 누르면 된다.
* 참고: 일반 사용자의 모뎀 사용
minicom의 경우 root는 마음대로 모뎀을 사용할 수 있다. 그러나 일반 사용자 계정으로 모뎀을 사용하려 하거나 minicom을 실행하려 하면 문제가 생긴다. 이럴 때는 다음과 같이 해주면 해결이 될 듯 하다.
[root@rock root]# minicom -s
라고 하면 minicom의 설정화면이 나온다. 기본 설정을 그대로 두어도 좋지만 dfl파일로 저장을 해야만 다른 사용자가 minicom을 사용할 수 있으므로 dfl파일로 저장하도록 하자.
그리고 다음과 같이 하라.
[root@rock root]# chmod 666 /dev/modem
이는 모뎀을 누구라도 사용할 수 있도록 만들어 준다.
[root@rock root]# chmod 777 /var/lock
이는 /var/lock이라는 디렉토리를 누구라도 사용 가능하게 만들어준다. minicom의 경우 실행 시 lock파일을 만드는데, 이 파일이 /var/lock이라는 디렉토리에 만들어지게 된다. 문제는 일반 사용자에게는 /var/lock 디렉토리에 쓰기 권한이 없으므로 minicom의 실행 시 문제가 발생한다. 따라서 위의 절차를 거치면 문제없이 minicom을 사용할 수 있다. 777이라는 권한은 함부로 사용해서는 안되므로 가급적 네트워크에 물려있는 시스템이라면 위의 설정을 조금 바꿀 필요는 있다.
- minicom의 더 많은 기능을 위해서 man minicom 하길 .. -
몇 가지 설정.
우리가 이전에 real-ppp 설정할 때 접속하는 것 말고 또 무엇 무엇을 설정했는지 기억해 보길 바란다. 네임서버와 자신의 모뎀 속도 정도가 아닐까? 이 정도는 써줘야 ppp연결이 제대로 될 수 있을 것이다. 네임 서버 설정을 해보자. 네임 서버가 무엇인지 혹 잊어버렸으면 다시 앞장으로 넘어가 확인하도록 하라.
네임 서버를 설정하는 것은 각 통신 업체의 고유 네임서버를 적어주면 된다. 어디에다 적어 주냐고? netcfg를 이용하여 nameservers란에다 적어주어도 된다. 우리가 수정할 파일은 바로 /etc디렉토리 밑의 resolv.conf라는 파일로 netcfg로 설정한 nameservers가 바로 이 파일에 저장된다. 따라서 netcfg를 이용해도 되고, 그냥 /etc/resolv.conf를 직접 수정해도 된다. 각 통신 업체의 네임서버 주소를 그곳에 적어주자. 필자의 경우는 다음과 같다.
[root@rock root]# vi /etc/resolv.conf
자 이런 식으로 적어주면 된다. 필자의 경우는 많은 통신 업체를 연결하므로 가짓수가 많지만 자신이 이용하는 통신 업체의 네임서버 하나만 적어주어도 문제없으니 걱정하지 말라. 그 다음 자신의 모뎀 속도 등을 적어 두는 파일을 살펴보자. options라는 파일이다. 이 파일은 /etc/ppp라는 디렉토리에 있다. 이 파일은 뒤에 설명할 pppd란 프로그램을 실행할 때 참조하는 옵션을 적는 파일이다. 이것을 적어주지 않아도 나중에 pppd의 옵션으로 직접 적어주어도 되지만 너무 불편하다. 우린 불편한 것을 못 참는 경우가 많으므로(필자만 그런지도 모른다.) 한번만 적어주는 수고를 하자.
자신의 모뎀 장치명과 속도를 적어주고 라우트(경로)를 적어주자. 나머지 몇 개의 옵션은 적어주어도 되고 적지 않아도 된다. 다음과 같이 적어준다.
defaultroute부분은 경로를 기본 경로로 설정하고 /dev/modem은 장치명, 115200은 모뎀 속도(실제 모뎀속도보다 크게 설정한다.), crtscts는 모뎀의 흐름을 제어하도록 설정한 것이다. 첫 번째 lock은 혹 ppp연결이 제대로 안될 경우 지워주길 바란다. 이제 설정은 끝난 셈이다. real-ppp를 이미 설정하였다면 /etc/resolv.conf는 더 이상 설정할 필요가 없으니 건너뛰기 바란다. /etc/ppp/options란 파일만 약간 수정하면 가상 ppp연결은 어렵지 않게 할 수 있다.
전화 걸기와 ppp 연결하기
minicom을 모두 실행시켰는가? 그럼 이제 전화를 걸 마음의 준비를 단단히 하자. 전화를 걸때 d를 이용하여 전화번호부를 만들고 전화를 걸어도 되나 키보드를 이용하여 직접 걸어보자. 자신의 통신 서비스 업체에 전화를 거는 것이다. 예로써 나우누리를 들어보겠다. 다음과 같이 atdt명령을 이용하면 된다.
atdt01443
그러면 전화를 거는 소리가 들리고 메뉴 중에서 1번을 택해 나우누리로 연결하면 id와 비밀번호를 입력하라는 메시지가 보일 것이다. 거기서 시키는 대로 우리는 자신의 id와 비밀번호를 입력하자. 그럼 접속에 성공하였다. 마음껏 통신 서비스를 즐기도록 하라. 앗! 이제 ppp를 연결해야 한다고? 좋다. 그럼 ppp서비스 메뉴를 알아놓아라. 어디로 가서 연결을 해야할지 미리 알아두어야 할 것이 아닌가? 나우누리의 경우 다음과 같이 하자.
선택> go ppp
last login: wed may 19 02:19:23 from falcon36th
etting baudrate to 38400
ip address of slirp host: 203.238.128.24
ip address of your dns(s): 203.238.128.24, 203.238.128.22, 202.30.64.21, (more)
your address is 10.0.2.15
(or anything else you want)
[talking ppp, 115200 baud]
slirp ready ...
이상과 같은 메시지가 보이면 성공한 것이다. 자 그럼 minicom이 할 일은 모두 끝났다. 이제 중요한 ppp를 연결시켜주는 pppd라는 프로그램을 사용하자. pppd는 ppp연결을 해주는 것으로 /etc/ppp/options라는 파일에 적힌 내용을 참조한다. 이런 ppp연결은 리눅스에서 매우 중요한 기능이므로 아무나 할 수 없다. 인터넷을 사용 가능하게 해주는 서비스를 일반 사용자가 마음대로 하게 놔두면 말이 되겠는가? 따라서 root의 권한으로 다음과 같이 실행하자.
[root@rock /root]# pppd
그리고 난 후 minicom의 화면에 이상한 문자들이 난무할 것이다. 이럴 때 minicom을 종료해줘야 한다. 그냥 종료만 해야한다. 괜히 모뎀을 리셋 한다던지, 혹은 전화를 끊어버리는 불상사가 일어나면 지금까지 한 노력은 모두 물거품이 된다. 그럼 minicom의 어떤 명령을 써야할까? 그래 그렇다. q를 쓰면 된다. minicom에서 ctrl+a를 누르고 q를 누른다. 그럼 프로그램이 모뎀의 리셋없이 종료가 된다. ppp연결이 이제 끝났다. 너무 쉽지 않은가? 다음과 같이 확인 작업을 거치도록 하자.
역시 root의 권한으로 다음과 같이 실행하라.
[root@rock /root]# ifconfig
내용을 보아 다음과 같은 메시지가 있다면 ppp연결이 제대로 된 것이다.
ppp0 link encap:point-to-point protocol
inet addr:10.0.2.15 p-t-p:203.238.128.24 mask:255.0.0.0
up pointopoint running mtu:1500 metric:1
rx packets:19 errors:0 dropped:0 overruns:0 frame:0
tx packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0
memory:3c93038-3c93c04
이제 인터넷을 여행할 수 있는 ppp연결에 성공한 것이 된다. 다만 나우누리 서비스를 이용하여 연결하였기 때문에 다시 나우누리를 접속하여 그 id로 사용할 수는 없다. 타 통신망 업체에서는 다중 접속이 가능하므로 이렇게 해놓고 telnet서비스를 이용하여 접속할 수 있다. 이것은 뒤에서 ztelnet 이용법에서 접속하는 법을 알아보기 바란다.
3.5 ppp 스크립트
이상의 과정들을 모두 제대로 따라왔다면 ppp연결은 자연스럽게 된다. 그렇지만 이상의 과정들이 너무 귀찮아서 하나의 명령으로 ppp연결을 해보고 싶다? 불가능한 일이 아니다. 다음과 같이 해보길 바란다. 여기서는 unitel을 예로 들겠다.
우리는 스크립트로 간단하게 파일을 작성하고 이 파일을 실행함으로써 ppp연결을 할 수 있다. 파일 이름은 자신이 마음에 드는 것으로 설정할 수 있으며 여기서는 ppp-on, ppp-dial이라고 설정하겠다. 아무 디렉토리에서나 이 파일을 작성하기 바란다. 에디터를 이용해서 말이다.
- ppp-on -
#!/bin/sh
phone=01433
id=xxx
password=xxx
export telephone id password
dialer_script=/etc/ppp-dial
exec /usr/sbin/pppd connect $dialer_script
- ppp-dial -
#!/bin/sh
exec chat -v \
abort '\nbusy\r' \
abort '\nno answer\r' \
abort '\nringing\r\n\r\nringing\r' \
'' \rat \
'ok-+++\c-ok' atz \
ok atdt$phone \
connect '' \
sername: $id \
assword: $password \
위의 것은 모두 root권한으로 작성하기 바란다. 그리고 위의 파일이 실행될 수 있도록 다음과 같이 실행권한을 주어야한다.
[root@rock root]# chmod 700 ppp-on ppp-dial
위와 같이 하고 어디서든지 실행될 수 있도록 ppp-on이라는 파일은 /usr/bin 디렉토리로 ppp-dial은 /etc디렉토리에 위치시키기 바란다.
[root@rock root]# mv ppp-on /usr/bin
[root@rock root]# mv ppp-dial /etc
위와 같이 하고 어디서든지 실행될 수 있도록 ppp-on이라는 파일은 /usr/bin 디렉토리로 ppp-dial은 /etc디렉토리에 위치시키기 바란다.
[root@rock root]# mv ppp-on /usr/bin
[root@rock root]# mv ppp-dial /etc
우선 ppp-on이란 파일을 보도록 하자. '#!/bin/sh' 이 부분은 스크립트를 실행할 쉘을 bash로 실행한다는 뜻이다. 리눅스의 쉘에는 여러 가지가 있지만 대부분의 경우 기본으로 제공되는 쉘은 bash이다. 쉘은 커널과 프로그램 사이를 중계하는 역할을 하는데 도스의 command.com과 비슷한 역할을 한다고 생각하자.
'phone=01433'은 보면 알겠지만 변수에 전화를 걸 번호를 설정한다. 'id=xxx'는 접속할 수 있는 사용자 아이디를 적는 부분이다. 'password=xxx'는 그 아이디에 해당하는 비밀번호를 적으면 된다. 'export phone id password'는 자신이 설정한 변수를 환경변수로 설정한다. 즉, 앞으로 phone란 이름은 01433과 같다는 것을 알려준다.
'dialer_script=/etc/ppp-dial' 은 ppp-on이 구동시킬 전화를 걸 스크립트 파일의 위치를 설정하는 것이다. 'exec /usr/sbin/pppd connect $dialer_script'는 ppp를 시동할 프로그램인 pppd를 실행시키며(exec는 외부프로그램을 실행시키는 쉘 명령어이다.) pppd의 옵션 중 connect는 뒤에 오는 쉘 명령을 사용하는데 지금은 ppp-dial스크립트를 실행하게 되는 것이다. 이 부분은 /etc/resolv.conf라는 파일에 미리 유니텔 네임서버의 주소를 적어준 상태이며 /etc/ppp/options란 파일에 defaultroute와 /dev/modem 115200이란 것을 적어준 상태여야 한다.
이제 ppp-dial을 살펴보자. 간단하게 몇 부분만 설명하겠다.
'exec chat -v'은 외부프로그램 chat을 실행시킨다. -v 옵션은 vorbose의 약자로 다음에 오는 파라미터(인자)를 참조로 실행을 시킨다. '\'란 문자는 쉘 스크립트에서 다음에 오는 줄은 연결된 것이라는 것을 표시한다. '\r'은 carriage return을 보낸다. '\n'은 linefeed를 보낸다. carriage return는 현재 줄의 가장 앞부분으로 옮기는 것이며, linefeed는 새로운 줄로 바꾸라는 표시이다. 두개가 합쳐지면 enter키와 같은 결과를 나타낸다.
abort '\nbusy\r' \
abort '\nno answer\r' \
abort '\nringing\r\n\r\nringing\r' \
이 부분은 전화 걸기가 실패했을 때이다.
'ok-+++\c-ok' atz \
이 부분은 모뎀 초기화를 시키는 부분이다.
ok atdt$phone \
이 부분은 전화를 거는 부분이다. atdt는 전화를 거는 모뎀 명령어이다. $phone는 ppp-on에서 export시킨 환경변수이다. 즉 01433이 들어간다. 실수로 phone이라고 쓰지 말길 바란다. 환경변수를 export시킬 때는 그 변수의 이름만 적어 주면 되지만 그 환경변수를 사용할 때는 $문자를 붙여 줘야 한다.
sername: $id \
assword: $password \
이 부분은 쉽게 눈치를 챘겠지만 id와 password를 전송하는 부분이다. 위와 같이 설정을 해주면 유니텔 ppp를 쉽게 사용할 수 있을 것이다. 다른 업체의 ppp를 사용하더라도 위와 비슷하게 설정하고, 그 업체에 맞게 고쳐서 사용하면 된다.
- pppd, chat의 더 많은 기능을 위해서 man pppd, man chat 하길 .. -
3.6 linuxconf로 ppp설정하기
linuxconf로 설정하는 것은 어쩌면 netcfg와 비슷할지도 모른다. 아니, 거의 비슷하다. 간단할 것도 없고, 복잡할 것도 없다. 루트로 linuxconf라고 치자.
[root@kuls /root]# linuxconf&
그러면 다음과 같은 화면이 뜬다. 가볍게 우리는 눈에 확 띄는 ppp/slip/plip항목을 누르자.(눈에 잘 안띄는가? config탭의 networking항목에서 network configurator의 client tasks라는 곳에 있다. 아 복잡하다. -.- )
그리고 그 오른쪽 작은 창에서 아무것도 등록이 된것이 없다면 add 버튼을 누르자. 머 있다고 하더라도 그것은 다른 설정이니 괜히 건드리지 말고 새로 추가하도록 하자. 그리고 ppp를 선택하면 된다.이제 그림처럼 ppp설정이 나온다면 잘 적어주기만 하면 된다.
phone number에는 전화번호를 적어주면 되겠다. modem port에는 자신의 모뎀 포트를 적으면 된다. 마찬가지로 pap을 쓴다면 체크를 하고, login name과 password를 입력하자. 그리고 customize를 눌르자. 세부사항을 점검해야 하니까 말이다. hardware란에는 라인 스피드(보통 115200으로 놔두어도 된다.), 모뎀 포트를 설정하고, 체크 옵션에는 escape control characters만 빼고 체크해주면 된다. 물론 집에서 ppp연결을 할 것이므로 혼자서 쓸 경우가 많으니까 allow any user (de)activate the interface를 체크하는 것이다.(위의 문구를 해석할 수 있으리라 믿어 의심치 않겠다^^;)
communication란에는 모뎀 초기화 명령과 전화를 걸 명령 전화번호가 기본적으로 세팅이 되어 있을 것이다. 이 부분은 수정해도 그만 안해도 그만이다. 단, 수정한다면 모뎀의 매뉴얼을 보고 자신의 모뎀에 적당한 명령을 찾아서 적어주면 된다. 되도록 그냥 두는 것이 안전할 것이다. 그리고 chat에는 expect란 것과 send란 것이 보이는데, 이는 기대되는 문자와 보낼 문자를 정의하는 곳이다. 이에 대해서는 다음에 설명하는 chat에 대한 내용을 살펴보면 될 것이다.
networking란에는 activate interface at boot time을 빼고 체크 옵션을 모두 선택하도록 하자. 이 체크 옵션을 선택하면 부팅시 ppp연결을 시도하게 된다. 전화세가 걱정이 없는 사용자라면 체크해도 좋은 옵션이다. 나머지는 설정해도 그만 안해도 그만이다.^^
마지막 pap란에는 pap체크옵션에 체크한 사람이라면 자동으로 그 id와 password가 설정되어 있을 것이다. 한번 확인해보도록 하라.
이상의 과정을 보면 모두 netcfg와 아주 흡사하다는 것을 알 수 있다. netcfg나 혹은 linuxconf 둘중 하나를 익히면 나머지 하나는 자연스럽게 할 수 있을 것이다. linuxconf는 필자의 경우 x윈도우상이 아닌 콘솔상에서 리눅스 박스를 세팅할 때 편하게 사용하기도 한다. 아직은 잘 모르지만 말이다.^^;
3.7 ppp 연결 해제하기
ppp를 연결하는데 성공하였다. 여러분은 이제 인터넷을 원하는 만큼 이용할 수가 있게 되었다. 어? 그런데 한참 인터넷을 열심히 사용하고 있는데 문득 이런 걱정이 들기 시작한다. 전화세 걱정이.... "이번 달 전화비를 어떻게 감당하지?"라고 생각하시는 분들은 다음의 행동이 눈에 보인다. 두 가지의 경우이다. "에잇 ! 모르겠다. 난 인터넷 계속하고 나중에 머 어떻게든 되겠지 !"의 경우와 "어? 이번 달 내 생활도 고려를 해야지 ! 이제 그만해야겠다 !"라고 생각하는 경우이다. 전자의 경우는 앞뒤 안 가리는 타입으로 자기 절제의 능력을 키우기 바라고, 후자의 경우는 참으로 정상적인 생각을 가지고 사는 사람이다. 자 그럼 어서 어서 ppp연결을 끊도록 하라.
어? 그런데 어떻게 하는 줄을 모른다고? 그럼 다음의 글을 읽도록 하라.
netcfg 이용자들에게..
interface탭에서 activate를 눌러서 ppp연결을 했지 않는가? 그럼 그 옆의 버튼을 보도록 하라. deactivate란 버튼이 보일 것이다. 그것을 누르면 ppp연결이 끊어질 것이다. 너무 쉽다고? 그렇다. 이런 경우는 너무 쉽게 해결된다.
가상 ppp 이용자와 스크립트 이용자
이런 경우는 어떻게 해야 하는가? 눈에 보이는 연결 해제 법이 없다. 이럴 때는 ppp를 연결하고 있는 process(프로세스)를 죽이면 된다. 근데 그 프로세스가 어떤 것인지 알고 죽일 것인가? 프로세스 번호나 이름을 알면 죽일 수 있다. 너무 험악한 표현인가? 죽인다는 표현이....
우선 프로세스를 찾도록 하자. 다음과 같이 쳐보자.
[root@rock /root]# ps aux
그러면 현재 실행 중에 있는 모든 프로세스들이 보일 것이다. 그중 pppd라고 보이는 프로세스 번호를 알아두기 바란다. 그리고 다음과 같이 하기 바란다.
[root@rock /root]# kill -9 [번호]
그러면 전화 끊기는 소리가 들리고 ppp는 해제된다. 더 간단한 방법이 있다. 다음과 같이 쳐 보라.
[root@rock /root]# killall pppd
이 명령어는 pppd라고 명명된 프로세스를 모두 죽이는 명령어이다.
모뎀을 이용한 ppp연결은 이제 웬만큼 해결되었을 것이다. 지금까지 내용은 일반 사용자에게 아주 적절히 사용될 수 있으리라는 생각을 해본다. ppp를 이용하여 이제 인터넷에 연결해 세계의 대열에 껴 보도록 하자.
pppd와 chat은 위에서 다룬 ppp연결 스크립트에서 사용되는 유틸리티이다. 이 유틸리티는 리눅스상에서 ppp연결할 때 항상 사용되는 것으로 netcfg에서도 이 유틸리티를 사용하는 것이고, 위의 스크립트에서도 당연히 사용된다. 이 유틸리티에 대해서 자세히 알아보도록 하자.
4.1 pppd에 대해서..
pppd는 ppp데몬이다. 즉, 데몬이 떠있음으로서 ppp프로토콜을 준수하며 인터넷에 연결될 수 있게한다. 이 데몬은 전화를 직접 걸지는 않는다. 전화가 걸려있는 상태에서 이 데몬을 띄움으로서 ppp연결이 완성되는 것이다. 사용법은 다음과 같다.
pppd [tty_name] [speed] [options]
이 pppd의 옵션중 자주 사용되는 것에 대해서 알아보자.
[tty_name] : 명명된 장치와 통신을 하게 된다. 주로 /dev/modem을 적어주면 무난하고 직접 /dev/ttys[num]을 적어주어도 된다.
[speed] : 이는 baud rate로써 모뎀 속도를 가리킨다. 모뎀 속도를 적어주면 된다. 모뎀 속도를 크게 잡아주어도 관계없다.
auth : 네트워크 패킷을 보내거나 받아들이기 전에 상대측이 확인되길 요구한다. 만일 시스템이 기본 경로를 가지고 있다면 이 옵션은 기본으로 채택된다. noauth는 반대 옵션이다.
connect <script> : serial line을 설정하기 위해서 실행 명령 혹은 스크립트를 사용하라는 옵션이다. 이 스크립트는 일반적으로 ppp를 연결하기 위해서 전화를 걸 때 사용하는 chat명령을 이용한 스크립트를 많이 사용한다.
crtscts : 시리얼 포트상에서 data의 흐름을 제어하기 위해서 하드웨어 흐름 제어를 사용하는 옵션이다. 흐름 제어가 필요한 이유는 예를 들면 데이타가 시리얼 라인 사이를 왔다갔다 할때 컴퓨터가 다룰 수 있는 것보다 더 빨리 도착할 수 있다. 이 데이터를 잃어 버리지 않아야 하는건 당연한 것이고 이를 위해서는 데이타 흐름을 제어할 필요성이 있다. 이 방법중 소프트웨어적인 제어를 하는 경우 전송되는 데이터 안에 소프트웨어적 제어신호(ctrl s, ctrl q)가 포함될 경우 문제가 발생한다. 따라서 하드웨어적인 흐름을 사용하는 것이 좋으며 고속 연결의 경우 하드웨어 흐름제어가 필수적이다.
defaultroute : 기본 라우트로서 게이트웨이를 상대측(the peer)으로 사용하고 시스템 라우팅 테이블에 추가한다. ppp접속이 끊기면 이 라우트 목록은 자동으로 제거된다.
disconnect <script> : pppd가 연결을 끊은 후 <script>라고 명명된 명령을 실행한다.
file <file> : <file>로부터 옵션들을 읽어온다.
lock : 시리얼 장치의 외부 접근을 방지하기 위해서 uucp-style lock file을 생성한다.
mru <num> : mru란 maximum receive unit의 약자이며 이는 최대 수용 유닛의 수를 말한다. <num>에 적당한 수를 넣으면 된다. 이는 pppd가 상대측에게 <num>보다 많은 수의 패킷을 보내지 않도록 요구하는 것이다. 보통 128~1500사이의 값으로 설정한다. 기본 설정은 1500이다. 만일 느린 연결 상태라면 이 값을 296정도(40은 tcp/ip헤더 + 256byte의 데이타) 잡으면 된다.
mtu <num> : mtu란 maximun tranmit unit의 약자이며 최대 전송 유닛의 수를 말한다. 상대측이 mru에 따라 보다 작은 값을 요구하면 pppd는 ppp인터페이스를 통해 커널 네트워킹 코드가 <num>바이트보다 많지 않은 데이타 패킷을 보내도록 요구할 것이다.
netmask <num> : 32비트 넷마스크를 decimal dot인 <num>으로 설정한다. 예를 들면 255.255.255.0과 같은 것이 될 수 있겠다. 이 옵션이 주어지면, 그 명시된 값은 기본설정된 넷마스크와 or연산된다. 기본설정된 넷마스크는 원격 ip 주소에 기반을 두고 선택된다.
<local_ip_addr>:<remote_ip_addr> : local이나 remote 인터페이스 ip주소들을 설정한다. ip주소는 호스트 이름, decimal dot형식으로 쓸 수 있다. 기본 설정된 local주소는 그 시스템의 첫 ip주소이며 remote주소는 옵션이 명시되지 않으면 상대측으로부터 얻어진다. 이 옵션은 안 적어주어도 관계없다.
+chap : 상대측에게 chap(cryptographic handshake authentication protocol)확인을 사용함으로써 보안상 자신임을 확인하도록 하는 옵션이다. 상대측이 chap을 사용할 때 이 옵션을 사용한다. 이를 허용하지 않으려면 -chap을 쓰면 된다.
chap-interval <num> : pppd는 <num>초마다 chap을 이용하는 확인 작업을 재시도하게 한다.
chap-max-challenge <num> : chap을 시도 회수의 최대값을 <num>으로 한다. 기본은 10이다.
chap-restart <num> : chap 확인을 매 <num>초마다 다시 시작하게 한다.( 이전 시도에 대한 타임 아웃으로 재전송한다.) 기본 설정은 3이다.
debug(-d) : 디버깅 레벨을 높인다. 이 옵션이 사용되면 보내고 받은 모든 제어패킷의 내용들을 읽을 수 있는 형태로 logging된다. 이는 syslog를 통해 log된다. 이는 /etc/syslog.conf를 적당히 세팅하면 화일로 저장가능하다. man syslog.conf해보시길...
-defaultroute : defaultroute를 사용불가하게 한다. 일반 사용자들이 pppd를 이용하여 기본으로 설정된 라우트를 만드는 것을 방지하기 위해 사용할 수 있다. 이는 /etc/ppp/options파일에 적어두면 유용하다.
dns-addr <num> : 도메인 네임 서버의 ip address들을 설정한다.
+ip-protocol : ipcp,ip protocol을 사용가능하게 한다. 반대는 -ip-protocol.
+ipx-protocol : ipxcp,ipx protocol을 사용하게 한다. 커널에서 지원이 되어 있다면 기본으로 설정되어 있을 것이다. 반대는 -ipx-protocol.
kdebug <num> : 커널 레벨 ppp드라이버안에 디버깅 코드를 사용가능하게 한다. num은 권한설정에서의 숫자와 같다. 1은 일반적 디버깅 메시지를 가능하게 하고, 2는 받은 패킷의 내용이 프린트되도록, 4은 보낼 패킷의 내용이 프린트 되도록 하는 값이다. 이 값을 적절히 합하면 된다.
login : pap을 사용함으로 상대측을 확인하기 위해 시스템의 password database를 사용하고, 시스템의 wtmp화일에 사용자를 기록한다.
+pap : 상대측에게 pap을 사용하고 있는지 확인을 요구한다. 거부는 -pap 이다.
pap-max-authreq <num> : pap ahthenticate-request 전송회수의 최대수를 <num>으로 설정한다. 기본값은 10이다.
pap-restart <num> : pap 재시작 간격을 <num>초로 설정한다. 기본값은 3이다.
pap-timeout <num> : 상대측이 자신을 확인하도록 기다리는 최대시간을 <num>초로 설정한다. 0은 무한정 계속 기다린다.
persist : 접속이 종결된 후에라도 pppd가 종료되지 않도록한다.대신에 접속을 재개하기를 시도한다.
이상의 옵션들이 pppd에서 사용되며, 더 많고 어려운 옵션들이 pppd에는 많이 존재하고 있다. 더 ꁁ많은 옵션을 보려면 man pap해보길 바란다. 위의 내용도 man pap하면 대부분 볼 수 있을 것이다.
4.2 chat을 알아보자.
chat은 pppd를 띄우기 전 상대측에 전화를 거는 유틸리티이다. 전화를 걸고 난 후 pppd를 띄우면 ppp가 연결된다. 다음은 chat에 대한 옵션이다.
-f <chat-file> : <chat-file>을 chat스크립트로 읽어들인다. 이것은 파라미터로 오는 스크립트와 상호 배타적으로 작용한다. 사용자는 당연히 그 파일에 대한 읽기 권한이 있어야 한다. 그 파일에서 멀티 라인이 허용되며, 스페이스와 탭 문자는 스트링을 구분하는데 사용된다.
-t <timeout> : 타임아웃을 설정한다. 만일 타임아웃이 되면 chat은 0이 아닌 에러코드로 종료된다.
-e : echo 옵션을 켜둔 상태로 시작하는 옵션이다. 에코 옵션이 켜있는 상태라면 모뎀의 모든 결과는 stderr로 에코된다.
-v : chat스크립트가 verbose모드로 실행되도록 한다. chat프로그램은 모뎀으로부터 받는 모든 텍스트와 모뎀에 전송되는 결과 스트링 뿐 아니라 chat스크립트의 실행 상태를 로그할 것이다. -v는 표준 에러 verbose모드로 실행되도록 하는 것이다.
-s : stderr을 사용하도록 한다. -v모드로 부터 오는 모든 로그 메시지와 모든 에러 메시지를 stderr로 보낸다.
-s : syslog를 사용하지 않도록 한다. 기본적으로는 에러 메시지가 syslog로 보내도록 되어 있다.
[script] : -f옵션으로 준 파일이 아니라면 chat프로그램은 파라미터로 이 스크립트를 받는다.
스크립트는 다음과 같이 작동한다. 스크립트는 하나 혹은 그 이상의 "expect-send"쌍으로 구성되며 스페이스로 구분된다. 주석문을 달려면 #문자를 앞에 달아두면 된다. abort는 특정 문자열을 모뎀에서 응답하면 중지하는 기능을 하며, say " ^^; " 처럼 say는 터미널에 문자열을 전해 사용자에게 보여준다. echo는 stderr(표준에러)로 에코기능을 할 것인지 제어하는 문자이다. echo on하면 사용자에게 자신이 입력한 다시금 보여주는 역할을 한다. timeout은 -t옵션과 같은 것으로 타임아웃 시간을 설정한다. 다음은 escape sequences들이다.
'' : null문자를 기대하거나 보낸다.
\b : backspace문자
\c : 응답 문자열의 끝부분에서 새로운 줄로 가지 못하게 한다.
\d : 일초 동안 딜레이를 준다.
\k : break를 삽입한다.
\n : 새로운 줄, 혹은 라인피드 문자를 보낸다.
\n : null문자를 보낸다.
\p : 약 1/10초 정도 멈춘다.
\q : syslog파일에 문자열을 적지 않도록 한다. 그 공간에는 ??????란 문자열이 로그로 남는다.
\r : 캐리지 리턴 문자을 기대하거나 보낸다.
\s : 문자열에서 스페이스 문자를 말한다.
\t : 탭 문자를 기대하거나 받는다.
\\ : \ 문자를 기대하거나 받는다.
\ddd : 8진수(ddd)를 아스키 문자로 바꾸고 그 문자를 보낸다.
다음은 종료 코드이다.(termination codes)
0 : 정상 종료를 뜻한다. 에러없이 실행되었음을 보여준다.
1 : 하나 혹은 그 이상의 파라미터가 잘못되었을 경우, 혹은 기대하던 문자열이 내부 버퍼에 비해 더 클 경우이며, 이는 정상적으로 실행되지 않았음을 보여준다.
2 : 프로그램 실행중 에러가 발생할 경우이다. 이는 어떤 이유로 인해 읽기,쓰기 실행이 실패했을 경우에 기인하거나 chat이 sigint(키보드로부터 인터럽트)같은 시그널을 받을 경우이다.
3 : 타임 아웃 이벤트가 발생하였을 경우이다. 이는 스크립트가 올바른 조건 검사를 하도록 프로그래밍 되지 않았거나 어떤 기대되지 않은 이벤트가 발생했고, 기대되는 문자열이 발견되지 않았을 경우를 뜻한다.
4 : 첫번째 문자가 abort조건이 일어나는 것으로 되어 있는 경우이다.
5 : 두번째 문자가 abort조건이 일어나는 것으로 되어 있는 경우이다.
6 : 세번째 문자가 abort조건이 일어나는 것으로 되어 있는 경우이다.
7 : 네번째 문자가 abort조건이 일어나는 것으로 되어 있는 경우이다.
... : 기타 다른 종료 코드는 위와 마찬가지로 몇번째 문자가 abort조건이 되는 것인가에 따라 다르다.
이상의 chat에대한 설명이면 충분히 스크립트를 만드는데 전혀 지장이 없을 것이다. 위의 ppp스크립트도 이것을 바탕으로 하여 짜져있으며 이 이상은 필자도 잘 모르는 터이다. 그리고 위의 것들은 모두 man 페이지에서 볼 수 있는 것으로 그리 어렵지 않게 접할 수 있을 것이다.
이 글을 쓴것은 몇달 전의 일입니다. 이 글을 이 세미나를 위해서만 쓰여진 것은 아닙니다. 그러나 이 세미나를 위해서 작성된 이 글은 가장 최근에 쓴 글이며 제가 쓴 글 중에서 가장 머리가 아픈 글임에는 분명합니다. 많은 자료들을 담지 못했고, 어쩌면 틀린 내용이 들어가 있을 수도 있습니다. 제가 모두 테스트를 몇달 전에 해보았기 때문입니다. 만일 틀린 내용이 있거나 혹은 하실 말씀이 있으시면 rockroot@kuls.korea.ac.kr로 메일을 보내주시기 바랍니다. 그리고 위의 글을 '해라'체로 썼음에 죄송하게 생각하며 글이니까 양해를 부탁드립니다.