|
1. 서론
지난 달에 ㈜ 아이쎈(http://www.issan.net)의
의뢰로 원클릭 인터넷 서비스에 사용되는 PPP 서버를 리눅스로 구축하는
작업을 했다. 필자가 여러 곳에 리눅스로 PPP서버를 구축하는 작업을
했었지만 리눅스의 시리얼 포트나 멀티포트에 로그인한 사용자에게
PPP연결을 하는 경우였는데 아이쎈의 경우는 멀티포트를 사용하지
않고 네트워크를 통해 리눅스에 telnet으로 로그인한 사용자에게
PPP 연결을 해주는 방법을 사용했다.
모뎀 사용자에게 PPP로 인터넷 서비스를 제공하는
일반적인 방법은 리눅스 PPP서버를 인터넷에 연결하고 리눅스 PPP서버의
시리얼 포트 또는 멀티포트에 모뎀과 전화선 또는 전용선(TT선)을
연결하는 것이다. 사용자는 자신의 피시의 모뎀으로 리눅스의 모뎀을
호출하여 PPP연결을 한다.
이 방법의 단점은 리눅스 PPP서버에 모뎀과 전화선을
직접 연결하므로 사용자가 늘면 모뎀과 전화선을 계속 늘려야 하므로
장소를 많이 차지하고 모뎀과 전화선을 관리하는 노력과 비용이
많이 소요된다는 점이다. 또 사용자가 다른 지방에 있는 경우는
시외 전화비를 부담해야 하므로 같은 지방이 아니면 서비스가 어렵다.
이 방법의 단점을 보완할 수 있는게 바로 014XX
망을 이용한 인터넷 서버스 제공이다. 014XX망은 전국의 모든 지역에서
사용이 가능하고 이 망에 연결하는 경우는 통화비가 시내 전화요금보다
30% 이상 저렴하므로, 이 망을 인터넷 서비스 제공에 사용한다면
ISP는 통신망과 장비 설치 비용을 절감할 수 있고 사용자는 전화요금이
절약되는 이점이 있다.
그러면 이 014XX 망을 어떻게 인터넷 서비스
제공에 이용할 수 있는가?
2. 014XX 망이란?
014XX망을 통한 인터넷 서비스를 이해하려면
우선 014XX망에 대한 이해가 필요하다. 014XX망은 인터넷과 직접
연결되어 있지 않은 데이터 통신망이다. (한국통신, 데이콤이 현재는
전국망을 갖고 있다.) 이 망은 기업체들이 전국에 흩어진 여러 지점들을
연결하는 컴퓨터망을 쉽게 구축할 수 있게 해 주기 위해 만들었다.
물론 사용자는 사용료를 내야 한다.
예를 들어 서울에 본사가 있는 회사가 본사 내의
컴퓨터에 DB를 구축하고서 전국에 흩어져 있는 지점에서 단말기(피시)로
본사 내의 DB에 데이터를 입력하거나 검색하게 하는 경우 지점이
20개라면 본사에서 20개의 지점에 직접 전용선을 연결해야 한다.
이렇게 하려면 우선 장비 값도 많이 들지만 회선비도 거리에 따라
증가하므로 상당히 비용이 많이 든다.
이 경우 014xx 망을 사용한다면 연결이 간편하고
비용도 절약된다. 즉 본사는 서울의 014xx망 노드에 한 개의 전용선만
연결하고 전국의 지점들은 가장 가까운 014XX 노드에 회선 사용량에
따라 전용선 또는 다이얼업 라인을 연결하면 된다. 본사의 경우는
20개의 전용선을 관리하는 대신 한 개의 전용선만 관리하면 되므로
회선 비용이 같다 하더라도 관리비가 훨씬 줄어 든다.
사용자는 014xx망에 연결 후 메뉴에서 선택하거나
식별 문자를 입력하면 바로 서울 본사의 컴퓨터에 로그인이 된다.
014xx망은 예전에는 주로 X.25 프로토콜을 사용했지만 요즘은 프레임릴레이를
사용하고 있는 것 같다.(확실치는 않다)
X.25나 프레임릴레이망은 네트워크 전문가가
아니면 이해가 힘듦으로 여기에서는 설명하지 않는다. 그러나 이
망은 컴퓨터에서 사용하는 모든 프로토콜을 동시에 전송할 수 있으므로
여러 기업체에서 이 망을 통해 전국 망을 구축하고 있다.
필자가 예전에 공사 근무 때 x.25 망으로 두
대의 유닉스 호스트를 연결해 일정 시간마다 데이터가 자동 전송되도록
하는 작업을 한적이 있었다. 프로토콜은 tcp/ip였고 데이터 수신
측은 유공(지금의 SK 정유) HP 유닉스 호스트, 송신 측은 필자가
관리하던 피시에 설치된 SCO UNIX 였다.(그때는 아직 리눅스가 나오기
전이어서 필자는 SCO 유닉스를 사용했었다.)
그런데 데이터가 일정량이 전송되면 송신이 정지되는
현상이 발생했다.(FTP를 사용했다) 그런데 X.25를 경유하지 않으면
아무런 문제가 없었다. 결국은 두 호스트가 속한 랜을 상호 연결하는
X.25 라우터(시스코 제품)의 설정에 문제가 있다는 결론이었으나
아무도 이를 해결하지 못했다. 그 X.25망은 당시 유공이 전국의
산하 정유소, 대리점 등을 연결하기 위해 구축한 독자 망이었는데
이 망을 직접 구축한 SK 그룹 산하의 네트워크 회사(이름은 밝히지
않음) 에서도 이 문제를 해결하지 못했다. 한 달 후에야 쌍용 정보통신의
한 기술자가 이를 해결해 주었지만 네트워크가 얼마나 어려운지를
이해할 수 있을 것이다.
3. 014XX 망을 이용한 인터넷 서비스 개념
014XX 망은 인터넷과 연결되어 있지는 않다.
단지 컴퓨터와 컴퓨터를 연결해 주는 구실만을 담당한다. 피시도
물론 가능하다. 그러면 불특정 다수에게 인터넷 서비스를 제공하는
것은 간단하다. 인터넷 서비스 제공자의 TCP/IP 프로토콜을 지원하는
컴퓨터를 인터넷에 연결하고 이를 다시 014XX망에 연결하면 된다.
인터넷 사용자는 014XX망에 다이얼업 또는 전용선으로 연결하고서
서비스 제공자의 컴퓨터에 로그인하면 바로 인터넷을 사용할 수
있다.
아래 그림을 우선 보자. 이 그림은 아이쎈의
인터넷 서비스 실제 구성도 이다.
위에서 사용자 피시에서 한국통신의 014xx번으로
전화를 걸면 한국통신의 전화국에 있는 터미널 서버에 연결된 모뎀이
전화를 받아 초기 메뉴를 뛰워 준다. 사용자가 메뉴에 나와 있는
번호를 선택하거나 식별 문자를 입력하면 아이쎈의 리눅스 서버의
“login: “ 프롬프트가 뜬다. 여기서 계정과 패스워드를 입력하면
사용자는 인터넷을 사용할 수 있다. (이를 쉘어카운트 방법이라
한다.) 리눅스 서버가 이미 인터넷에 연결되어 있기 때문이다.
여기까지라면 별로 설치가 어렵지 않다. 그런데
이런 방식으로 서비스를 제공하면 사용자는 telnet 이나 ftp 등의
텍스트 방식의 인터넷 서비스는 이용할 수는 있지만 web이나 리얼오디오,
스타크래프트 같은 클라이언트/서버 방식의 멀티미디어 인터넷 서비스는
이용할 수 없다. 이 서비스는 PPP 연결을 필요로 하기 때문이다.
그러면 어떤 부분을 수정하면 PPP 연결이 가능해 지는가?
여기서 약간 다른 주제이지만 시리얼 연결과
ppp 연결의 차이를 알고 계속하자.
3.1 시리얼 연결과 PPP
리눅스에서 minicom 을 사용해 하이텔 호스트에
연결된 모뎀(실제는 터미널 서버에 모뎀이 연결돼 있음.)을 호출해
하이텔을 사용한다면 이는 시리얼 연결이다. 리눅스에서 pppd를
가동해서 ISP에 인터넷을 연결했다면 이는 ppp 연결이다.
시리얼 연결에서는 통신 회선은 한 개의 프로그램(즉
minicom)이 독점을 하고 다른 프로그램은 회선을 공유할 수 없다.
그러나 ppp 연결의 경우는 통신회선을 여러 프로그램이 공유한다.
그래서 PPP 연결에서는 telnet 프로그램으로 하이텔에 들어가 채팅을
하면서도 동시에 네트스케이프로 리눅스 월드 홈페이지에서 리눅스
문서를 검색할 수 있는 것이다.
배로 비유하자면 시리얼 연결은 벌크선이고 PPP
연결은 콘테이너 선으로 볼 수 있다. 벌크선에는 쌀이나 밀 등 한가지
물품만 실으나 콘테이너 선에는 각 콘테이너마다 콩, 참깨, 마늘
등을 구분해 실을 수 있다. 그래서 PPP 에서는 일정한 크기의 데이터
집합마다 그 데이터의 발신지, 수신지, 사용 프로그램 등을 구분해
주는 표식이 필요하나 시리얼 연결에는 필요가 없다.
따라서 전송속도면에서는 시리얼 연결이 빠르다.
PPP는 실제 데이터 외에도 다른 관리 데이터가 전송되기 때문이다.
그러나 회선의 효율성에서는 PPP가 낫다. 시리얼 연결에서는 그
프로그램이 회선을 사용 않고 있어도 다른 프로그램이 회선을 이용할
수 없으나 PPP연결의 경우는 모든 프로그램이 일정한 기준에 따라
균등하게 회선을 공유해 사용한다.
3.2 014xx 망에서 ppp 연결 방법
PPP 연결을 설명하기 위해 가장 기본적인 PPP
연결형태를 설명한다. 여러분이 회사에 있는 리눅스 피시에서 웹
프로그램을 개발하고 있다. 그런데 집에 돌아 와서도 이 작업을
계속하고 싶다면 집에 다른 인터넷 연결이 없을 경우 회사의 리눅스
서버를 집의 전화선과 모뎀을 사용해 PPP로 연결하면 된다.
리눅스 피시의 com1포트(/dev/ttyS0)에 외장모뎀을
연결하고 여기에 전화선을 연결한 다음 PPP 서버로 셋팅 한다. 집의
윈98 피시에도 모뎀을 달고 집의 전화선을 이 모뎀에 연결한다.
물론 이렇게 사용하려면 회사에서 사용 않는 공인 IP가 한 개 있어야
한다. IP가 여유가 없다면 리눅스에 IP Masquerade를 설정해 리눅스의
IP를 집의 윈도우에서 공유해서 사용하면 된다.
이 경우의 PPP 연결 과정은 아래와 같을 것이다.
1) 윈도우에서 전화 접속 네트워크의 전화번호에
회사 리눅스 모뎀에 연결된 전화번호를 입력하고
연결을 선택한다. 2) 리눅스에 연결된 전화선에서 모뎀으로
링신호가 들어간다. 모뎀은 이 신호를 리눅스의 com1
포트를 감시하는 mgetty에게 전달한다. 3) mgetty는 모뎀에게
전화를 받으라고 지시한다. (ata 명령을
내린다.) 4) 두 모뎀은 전송 속도, 압축, 에러제어 방식등에
관해 합의를 하며 합의가 되면 두 모뎀은 회선
연결 완료 신호를 시리얼포트에 보낸다. (모뎀의 CD 신호를 켠다)
합의가 안되면 전화를 끊는다.
5) 리눅스의 getty 프로그램은 CD 신호를 받으면 “login:” 프롬프트를
com 포트에 보낸다. 윈도우 전화접속
내트워크 프로그램 옵션에 “연결 후 터미널 창 표시”가 선택되어
있다면 윈도우는 CD 신호를 받으면
터미널 창을 열며 리눅스에서 보낸 “login :” 프롬프트가
화면에 나타난다. 6) 윈도우 사용자가
계정과 패스워드를 입력하고 리눅스의 login 프로그램은 패스워드가
맞으면 pppd프로그램을 실행한다.
7) 윈도우 화면에 지렁이처럼 보이는 이상한 문자가 뜬다.
윈도우에서 F7키를 누르면 ppp 연결이
이루어 진다. 물론 리눅스와 윈도우 두 ppp 프로그램 간에 ppp 파라메터
합의가 이루어져야 연결이 된다. 합의가
안되면 전화가 끊긴다.
이상의 방법을 014xx 망에 적용하려 할 경우의
문제는 모뎀이 연결돼 있는 한국통신의 터미널 서버에서는 pppd
데몬을 올려 주지 않는다는 점이다. 대안은 사용자가 리눅스 서버에
로그인 했을 때(telnet) 리눅스 서버에서 ppp 데몬을 띄워 주는
것이다.
ppp 연결에서는 시리얼 연결과는 달리 아스키
코드의 128번 이후 문자도 전송되어야 한다. 그런데 한국통신의
터미널 서버에서 리눅스 PPP 서버의 eth0 랜카드 까지의 구간에도
PPP에서 사용하는 모든 아스키 코드가 그대로 전송될 수 있다. 결국은
한국통신의 터미널 서버에서 사용자가 telnet으로 리눅스를 연결할
때 리눅스에서 pppd 데몬을 실행하고 ppp 패킷이 네트워크 구간(터미널서버와
리눅스의 랜카드 까지)과 전화선(터미널 서버에서 사용자 모뎀)을
통해 사용자에게 도달한다면 PPP 연결이 가능하다.
자세히 설명하면 사용자가 윈도우의 전화접속
네트워킹에서 한국통신의 터미널 서버를 연결해 issan이라 입력하면
터미널 서버는 telnet 프로그램으로 아이쎈의 리눅스 서버를 연결해
준다. (리눅스에서 보면 아이쎈의 라우터에서 연결한 것으로 나타난다.)
이 부분은 프레임릴레이 망에서 기본으로 제공하는 것이므로 사용자는
알 필요가 없다. 리눅스 서버의 telnetd 프로그램은 본래 네트워크로부터
telnet 연결 신청이 들어오면(즉 터미널 서버에서) “login: ”
프롬프트를 띄우고 계정과 패스워드를 입력 받아 이를 리눅스의
login 프로그램에 넘겨 주면 login 프로그램은 패스워드가 맞으면
패스워드 프로그램에 지정된 사용자의 쉘 프로그램(/bin/bash)을
실행한다. 사용자는 이때 원하는 프로그램을 실행하면 된다.
그러나 PPP 연결을 하려면 이 과정을 수정해야
한다. 즉 터미널 서버에서 리눅스에 telnet 연결을 시도하면 telnetd는
로그인 과정을 거치지 않고 바로 pppd 데몬을 실행해 주어야 한다.
login 프로그램에서 계정과 패스워드를 확인하고 쉘을 가동 후 pppd
데몬을 실행해 주는 방법도 가능하나 이는 절차가 더 복잡하고 효율도
떨어진다. 로그인을 하지 않고 바로 pppd를 실행하는 경우의 사용자
인증은 ppp 연결 내에서 pap 나 chap를 사용하면 된다.(윈도우의
전화 접속 네트워킹에서 사용자와 암호를 입력하는 것이 pap 인증이다.)
아래 윈도우 사용자가 로그인을 거치지 않고
아이쎈의 리눅스 PPP 서버에 ppp 연결을 하는 절차를 보겠다.
3.3 윈도우에서 ppp 연결 과정
3.3.1 전화
접속 네트워킹 설정
1) 전화접속 네트워킹 / 새로 연결을 선택해서
연결할 컴퓨터이름에 “아이쎈” 을 넣고 모뎀을
선택한다. -> 다음
2) 전화번호에 01412를 넣는다.(01411도
가능하다)
마치면 전화접속
네트워킹에 “아이쎈”이라는 아이콘이 만들어진다.
3) 아이콘을 마우스 우측 버튼으로 누르고서
“등록정보”를 선택하고서 아래 화면처럼 셋팅한다.
- 등록 정보 / 일반

- 등록정보/일반/구성/일반

- 등록정보/일반/구성/연결

- 등록정보/일반/구성/옵션

- 등록정보/서버종류

- 등록정보/서버종류/tcpip설정

3.3.2 연결
실행
1) 전화접속네트워킹의 “아이쎈” 아이콘을
더블클릭하면 아래 화면이 나온다. 연결을
누른다.

2) 연결되면 아래 창이 뜬다.

3) 메뉴에서 2번을 선택한다. 4) issan<enter>
하면 PPP 패킷이 뜬다. (화면에
이상한 지렁이 문자가 규칙적으로 나온다.) 5) F7 키를
누른다.
이상의 순서로 진행하면 공인 IP(아래의
경우 210.115.3.131)가 윈도우 피시에 부여된다.(이 IP는 리눅스
PPP 서버에서 부여한다)
아래는 윈도우에서 winipcfg 명령을 실행한
결과이다.

위에서 DNS 서버 주소(168.126.63.1)도 리눅스에서
윈도우 피시에 부여한다.
3.4 원클릭 서비스의 윈도우 클라이언트
프로그램
위에서 보았듯이 윈도우에서 기본으로 제공하는
PPP 연결절차(전화접속 네트워킹)는 상당히 복잡하다. 그래서 이
과정을 초보자가 할 수 있도록 한 개의 프로그램에서 모두 진행하는게
원클릭서비스의 또 다른 부분이다.
물론 전화접속 네트워킹의 스크립트 기능을 사용해
이 과정을 상당히 단순화할 수 있지만 이 스크립트도 윈도우를 알아야
작성이 가능하다.
원클릭용 윈도우 프로그램은 이미 여러 회사에서
나와 있으므로 여기에 소개하지 않는다. 아이쎈의 원클릭에 사용하는
윈도우 프로그램은 필자가 만들지 않았다. 혹시 윈도우 프로그램에
자신이 있으면 스스로 만들어 보기 바란다. 위의 3.3에 나와 있는
셋업과 연결절차를 그대로 넣으면 될 것이다. (필자는 윈도우 프로그래밍은
모르므로 필자에게 질문하지 마시기를)
4. 리눅스 PPP 설정
telnet으로 로그인한 사용자에게 pppd를 구동해
주는 경우는 몇 가지 점이 시리얼 포트에서 ppp 연결을 하는 것과
다르다.
1) telnetd를
수정해 login 과정(계정및 패스워드 확인)을 거치지 않고 pppd가
가동되어야 한다.
시리얼포트에서 PPP 연결을 해주는 경우는 mgetty에
Auto_PPP 기능을 넣어 컴파일하면 login 과정을 거치지 않고 바로
pppd가 가동된다.(리눅스 월드 99년 2월호에 필자가 이에 대한 글을
썼다.)
그러나 telnet으로 연결한 사용자에게 바로 pppd를
가동해 주는 방법은 필자는 찾지 못했다. 그래서 직접 몇몇 프로그램을
수정해 리눅스에 telnet 연결이 들어오면 바로 pppd가 가동되게
했다. 그런데 이렇게 하니 문제가 발생했다. 즉 필자가 사무실에서
인터넷으로 아이쎈의 PPP 서버를 telnet 연결을 시도하면 바로 pppd
데몬이 가동되어 login을 할 수 가 없다. 그래서 PPP 서버를 네트워크에서
로그인할 때는 rlogin을 사용하고 있다. (당연하지만 콘솔에서 로그인
할 때는 telnet 을 사용하지 않으므로 정상적으로 로그인이 된다)
이를 해결하는 방법은 라우터(192.168.1.254)
즉 014XX 망에서 telnet 연결이 올 때만 pppd를 가동해 주고 그
외의 경우는 정상적으로 login이 되게 하는 것이나 필자의 실력이
부족해 여기까지는 성공하지 못했다.
2) ppp 패킷이
네트워크 구간을 경유하므로 네트워크에 전송돼서는 안되는 문자가
있다.
즉 터미널서버와 리눅스는 telnet으로 연결되므로
“^]” 문자가 전송되면 안된다. “^]”는 telnet에서 명령어 모드로
진입하는 문자이므로 이 글자가 그대로 전송되면 PPP 연결이 끊기기
때문이다. PPP 옵션 중 asyncmap 을 사용하면 이 문제를 해결할
수 있다.
3) 모뎀을 사용하지
않으므로 모뎀과 관련된 옵션은 필요 없다. 예를 들면 crtscts
옵션은 시리얼포트에만 사용되므로 이 옵션은 필요가 없다.
ppp 옵션은 이미 필자가 리눅스 월드 97년 10월호에 쓴 적이 있으므로
이를 참고 하기 바라며 더 자세한 사항은 man 페이지를 보기 바란다.(man
pppd)
5. 리눅스 PPP 서버 구축 과정
아래는 필자가 아이쎈에 PPP 서버를 설치한 경과이다.
리눅스 서버의 사양은 아래와 같다.
- 보드 : 인텔 EtherExpress Pro100 카드가 내장된
인텔보드 - CPU : 펜티엄 III 550 2 CPU - 메모리 : 512메가
- 랜카드 : . eth0: 3com 3c509 .
eth1 : EtherExpress Pro100 - 하드 : IBM scsi 9기가, 18기가
- 배포본 : 레드햇 6.2 정식버전(standard) - 커널 : 2.2.16
(컴파일해서 설치)
아래 dmesg 부분이다.
Processor #1 Pentium(tm)
Pro APIC version 17 Processor #0 Pentium(tm)
Pro APIC version 17 I/O APIC #2 Version 17 at
0xFEC00000. Processors: 2 mapped APIC to
ffffe000 (fee00000) mapped IOAPIC to ffffd000
(fec00000) Detected 547186 kHz processor.
Console: colour VGA+ 80x25 Calibrating delay
loop... 1091.17 BogoMIPS Memory: 517104k/524224k
available (1192k kernel code, 420k reserved, 5440k
data, 68k init) Dentry hash table entries: 65536
(order 7, 512k) Buffer cache hash table entries:
524288 (order 9, 2048k) Page cache hash table
entries: 131072 (order 7, 512k) Pentium-III
serial number disabled. Checking 386/387 coupling...
OK, FPU using exception 16 error reporting.
Checking ‘hlt’ instruction... OK. POSIX conformance
testing by UNIFIX Pentium-III serial number
disabled. per-CPU timeslice cutoff: 99.96 usecs.
CPU1: Intel Pentium III (Katmai) stepping 03
calibrating APIC timer ... ..... CPU clock speed
is 547.1636 MHz. ..... system bus clock speed
is 99.4841 MHz. Booting processor 0 eip 2000
Calibrating delay loop... 1091.17 BogoMIPS |
5.1 제안서
필자가 아이쎈에 제출한 제안서이다.
1) 구축 개요
윈도우 사용자가 윈도우에 작동하는 전용 클라이언트
프로그램(전화접속 네트워킹의 일종)에서 사용자 계정명 및 암호를
입력 후 [연결] 버튼을 누르면 01412 망에 연결된 ISSAN 회사에
위치한 리눅스 PPP 서버에서 사용자에게 공인 IP를 부여함.
2) PPP 서버 작업 내용
① 사용자에게 부여하는 IP는
인터넷 공인 IP (단,
PPP 서버가 프레임릴레이망 외에 전용 인터넷망에 연결되야 함)
② 사용자에게 부여하는 IP는 연결시마다 변동하는
유동 IP ③ PPP 서버 대당 최대 1024 PPP
연결 제공. ④ 01412망과 PPP 서버 연결은
telnet 방식 사용 ⑤ 서버에 설치되는 리눅스는
PPP 서버 기능 외는 모두 제거하고 PPP 서버 기능을 최대로
발휘하도록 최적화.
단 rlogin 기능은 부여함. telnet 연결을 PPP에서 사용하므로
관리자는 rlogin으로
연결해 관리. ⑥ PPP 속도를 높이기 위해
BSD 압축 및 Van Jacobson 헤더 압축 기능 부여 ⑦
01412 네트워크 쪽 랜카드와 인터넷 쪽 네트워크의 랜카드를 분리함으로서
인터넷 연결속도를
최대화. ⑧ 사용자 인증은 PAP를 사용.
단 PAP 인증파일 (pap-secrets)은 다른 리눅스 서버에서 NFS로
import 해서 사용가능하도록 구성 ⑨ 여러
대의 PPP 서버 연결시 서비스 제공 PPP 서버 선택은 프레임릴레이
라우터에서 지정.
⑩ 자동 접속 및 PPP 서버 부하 감소를 위해
ppp 접속 과정에서 로그인 과정을 거치지 않도록
telnet 데몬 수정
3) PPP 서버 요구사양
A. 메모리 : 사용자 1명당 1 메가 B. CPU
: 펜티엄 III 500 이상 C. 하드 : 1기가 이상 D. 랜카드
: 100메가 이더넷 2개
4) 네트워크 구성
: PPP 서버와 프레임릴레이 라우터를 연결하는 네트워크는 100 메가
스위칭 허브를 사용하는게 좋음.
5) 구성도
5.2 설치 매뉴얼
설치 완료 후 제출한 설치 매뉴얼이다.
1) 사용 배포본 : 레드햇 6.2 정식버전
. 패키지 설치시 : X-win 은 설치하지 말 것
2) 커널 컴파일
. 커널을 컴파일해 TCP/IP, 랜카드, ppp 드라이버
추가 (IPX는 넣지 말 것), 모듈을 사용해도 되나
속도가 떨어짐.
- 커널 컴파일 준비작업 . 이 링크는 리눅스
설치 후에 한번만 해주면 되고 다음에는 필요가 없다. 아래
작업은 root 계정으로 실행해야 한다.
(1) cd /usr/include (2) rm -rf asm
linux scsi (3) ln -s /usr/src/linux/include/asm-i386
asm (4) ln -s /usr/src/linux/include/linux linux
(5) ln -s /usr/src/linux/include/scsi scsi
링크가 정확한지를 필히 확인한다. 아래처럼
나와야 한다.
churlsu:/usr/include#
ls -l asm linux scsi lrwxrwxrwx 1 root root
32 May 9 10:11 asm -> /usr/src/linux/include/asm-i386/
lrwxrwxrwx 1 root root 29 May 9 10:11 linux
-> /usr/src/linux/include/linux/ lrwxrwxrwx
1 root root 28 May 9 10:11 scsi -> /usr/src/linux/include/scsi/ |
- 커널 소스 설치
(1) 새 커널 소스를 /usr/src 디렉토리에
넣는다. (2) cd /usr/src (3) rm -rf linux (4)
tar zxvf linux-2.2.XX.tar.gz (/usr/src 디렉토리에 linux
라는 디렉토리가 만들어 지고, 그 안에 커널 소스가 위치한다.)
- 커널 컴파일
이 단계까지 마치면 /usr/src/linux/arch/i386/boot
디렉토리에 bzImage 라는 이름으로 새 커널이 만들어 진다. 하지만
만들어질 따름이지 이 커널이 기존에 메모리에 들어 있는 사용 중인
커널을 대치해 주는 것은 아니다. lilo를 수정 후 리부팅해야 커널이
바뀐다.
아래는 커널 모듈을 만든다. 필히 아래 단계가
필요하다. 모듈은 /lib/modules/KERVEL-VERSION 디렉토리에 위치한다.
즉 2.2.14 커널을 컴파일하고 아래 두 명령을 실행하면 /lib/modules/2.2.14
디렉토리에 모듈이 만들어 진다.
* make menuconfig에서 필요한 부분
Networking options ---> 에서
<*> Packet socket [*] Kernel/User
netlink socket [*] Routing messages < > Netlink
device emulation [*] Network firewalls [*] Socket Filtering
<*> Unix domain sockets [*] TCP/IP networking
[ ] IP: multicasting [*] IP: advanced router [ ] IP:
policy routing [ ] IP: equal cost multipath [ ] IP:
use TOS value as routing key [ ] IP: verbose route monitoring
[ ] IP: large routing tables [ ] IP: kernel level autoconfiguration
[*] IP: firewalling : [ ] IP: firewall packet netlink device
[ ] IP: transparent proxy support
[*] Network device support Ethernet (10
or 100Mbit) ---> <*> PPP (point-to-point) support
: (이 외에 랜카드 부분도 추가해야 한다)
3) /etc/rc.d/rc.local에 아래 명령 추가
->
*. 레드햇 6.2 정식버전의 network 파일에서
IP_Forward를 yes로 해도 포워딩이 되지 않았다. 버그인것
같다.
4) /etc/inetd.cont 에 아래 부분 추가
이 부분에 필자가 수정한 telnetd 프로그램이
들어 간다.
5) /etc/ppp/options 파일 수정
lock #require-pap
noauth debug mru 576 mtu 576 lcp-echo-interval
320 lcp-echo-failure 3 idle 300 ms-dns
211.104.20.26 ms-dns 210.115.1.82 proxyarp
asyncmap 0x20000000 bsdcomp 15 deflate 15 |
(1) #require-pap : 현재는 pap 을 사용하지
않으므로 막았다. pap를
사용하려면 앞의 #를 제거한다. (2) noauth : pap 나 chap를
사용 않는 다는 뜻이다.(pap를 사용하려면 제거해야 한다.)
(3) mru, mtu : 랜에서는 mru와 mtu를 1500으로 설정하나 모뎀을
사용하는 경우 1500으로 설정하면
속도가 느려진다. 단 576을 사용하면 일부 사이트 연결에 문제가
있을
수도 있다. 이 때는 1500으로 변경할 것. (4) lcp-echo-interval
120 : 2분 간격으로 상대방의 ppp 연결 끊김 여부 체크 (5)
lcp-echo-failure 3 : 3번 상대로부터 응답이 없으면 연결 종료
(6) idle 300 : 5분 동안 사용 않을 시 연결 끊음.
* ppp 연결을 실행하는 곳은 한국통신의 telnet
프로그램이므로 ppp 연결이 끊겨도 telnet만 종료되고
사용자는 계속 014XX 망의 메뉴에 남아 있다. 리눅스 ppp 서버에서는
한국통신 014xx 망의 모뎀을 제어할 수 없다.
(7) ms-dns 211.104.20.26 : 1차 DNS (8)
ms-dns 210.115.1.82 : 2차 DNS (9) proxyarp (10) asyncmap
0x20000000 : “^]” 문자를 escape 한다. (11) bsdcomp 15
: 압축 (12) deflate 15 : 압축
6) /etc/ppp 디렉토리에 아래 파일 만듬(
PPP 사용자 마다 부여해 줄 IP)
형식 ] 인터넷쪽 랜카드 주소 : 상대에게
부여하는 주소.
예) [bae@ppp ppp]$ cat options.pts.0
210.115.3.130:210.115.3.131
7) /etc/rc.local에서 아래 부분 수정(앞에
# 넣음)
# echo “” >
/etc/issue # echo “$R” >> /etc/issue
# echo “Kernel $(uname -r) on # cp -f /etc/issue
/etc/issue.net # echo >> /etc/issue |
8) /etc 디렉토리에서 issue, issue.net,
motd 파일 지움.
9) /etc/sysconfig/network
10) 커널 모듈 중 bsdcomp 와 ppp deflate를
올림.
[root@ppp2 /bin]#
lsmod -l Module Size
Used by
ppp_deflate 40800 0
bsd_comp 3816 0 |
11) 라우팅 테이블은 아래처럼 나와야 함.
[bae@ppp ppp]$
netstat -nr Kernel IP routing table Destination
Gateway Genmask Flags
MSS Window irtt Iface 192.168.1.1 0.0.0.0
255.255.255.255 UH 0
0 0
eth0 210.115.3.130 0.0.0.0 255.255.255.255
UH 0 0
0 eth1
210.115.3.128 0.0.0.0 255.255.255.128 U
0 0
0 eth1
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.3.129 0.0.0.0
UG
0 0
0 eth1 |
(위에서 eth0가 프레임릴레이 쪽에 연결된
랜카드)
12) PPP 디버깅 모드
/etc/syslog.conf 에 아래 라인 추가
daemon.* /var/log/ppp.log
(이상이 있을 시 /var/log/ppp.log 파일을 보면
원인을 알 수 있음.)
6. 리눅스에서 아이쎈의 ppp 서버로 ppp 연결을
하려면
리눅스에서 014xx 망을 통해 아이쎈의 PPP 서버를
통해 PPP 연결을 하려면 스크립트 파일 한 개면 된다. 윈도우처럼
별도의 프로그램이 필요치는 않다. 단 ppp 옵션은 미리 설정해 주어야
한다.
아래가 그 절차이다.
6.1 커널에
ppp 코드를 넣는다. (모듈로 올려도 된다) 모든 배포본은 ppp 연결시
자동으로 ppp 코드가
커널에 로드되거나 기본 커널에 포함되어 있다.
6.2 pppd
프로그램을 설치한다.
6.3 모뎀이
연결된 포트의 장치명을 알아야 한다. 설치 때 모뎀을 연결해 놓았으면
보통 /dev/modem이
장치명이나 나중에 연결했다면 모뎀의 com 포트 번호를 알아야 한다.
com1 포트라면 장치명은
/dev/ttyS0 이다.
6.4 /etc/ppp
디렉토리의 options 파일에 아래처럼 지정한다.
modem
crtscts bsdcomp 15 deflate 15 115200 |
6.5 /etc/ppp/pap-secrets
파일에 아래처럼 지정한다. pap 인증에 필요하다. (현재는
아직 pap를 사용하지 않으므로 지정하지 않아도 된다.)
계정명 * 패스워드
*. 계정명과 패스워드는 아이쎈에서 부여한다.
6.6 아래
스크립트를 작성한다. (파일 이름을 issan 이라 하자)
#!/bin/bash
/usr/sbin/pppd connect \ ‘/usr/sbin/chat
-t 60 “” atx1 OK atdt01412 X 2 X issan’ \
/dev/ttyS2 noipdefault defaultroute |
6.7 chmod
755 issan
이제 프롬프트에서 issan <enter> 하면
아이쎈의 리눅스 PPP 서버와 ppp 연결이 이루어 진다.
참고] 필자의
사무실의 리눅스 서버에서 아이쎈으로 위의 issan 스크립트를 테스트하는
과정에서
아래의 에러가 발생했다.
churlsu:~# ./issan
Serial connection established. Using interface
ppp0 Connect: ppp0 <--> /dev/ttyS2
Peer is not authorized to use remote address 210.115.3.130
Connection terminated. Connect time 0.1 minutes.
Sent 207 bytes, received 1255 bytes |
아이쎈의 서버에서 로그 파일을 보아도 마찬가지
에러가 떴다.
Jul 23 19:42:20
ppp2 pppd[7047]: rcvd [CCP ConfRej id=0x2 <deflate(old#)
15>] Jul 23 19:42:20 ppp2 pppd[7047]: sent
[CCP ConfReq id=0x3 <bsd v1 15>] Jul 23
19:42:20 ppp2 pppd[7047]: rcvd [IPCP TermReq id=0x3
“Unauthorized remote IP address”] Jul 23 19:42:20
ppp2 pppd[7047]: IPCP terminated by peer (Unauthorized
remote IP address) Jul 23 19:42:20 ppp2 pppd[7047]:
Script /etc/ppp/ip-down started (pid 7079) Jul
23 19:42:20 ppp2 pppd[7047]: sent [IPCP TermAck
id=0x3] Jul 23 19:42:20 ppp2 pppd[7047]: Script
/etc/ppp/ip-down finished (pid 7079), status = 0x0
Jul 23 19:42:20 ppp2 pppd[7047]: rcvd [CCP ConfRej
id=0x3 <bsd v1 15>] Jul 23 19:42:20 ppp2
pppd[7047]: sent [CCP ConfReq id=0x4] Jul 23
19:42:20 ppp2 pppd[7047]: rcvd [LCP TermReq id=0x2
“No network protocols running”] Jul 23 19:42:20
ppp2 pppd[7047]: LCP terminated by peer (No network
protocols running) Jul 23 19:42:20 ppp2 pppd[7047]:
sent [LCP TermAck id=0x2] Jul 23 19:42:21 ppp2
pppd[7047]: Hangup (SIGHUP) Jul 23 19:42:21
ppp2 pppd[7047]: Modem hangup |
한동안 에러의 원인을 알지 못해 헤맸는데
나중에 필자의 리눅스 서버의 디폴트 게이트웨이를 제거하니 이
에러가 안떴다. 즉 아래 줄이 원인이었다.
0.0.0.0 211.192.58.169
0.0.0.0 UG 0
0 0 eth0 |
예전 버전의 ppp에서는 디폴트게이트웨이가 설정되어
있어도 ppp 연결에 문제가 없었는데 새 버전에서 바뀐 것 같다.
6.8 연결
확인
리눅스월드 사무실의 데비안 리눅스 서버에서
위의 설정으로 ppp 연결을 한 결과이다. 모뎀은 com3(/dev/ttyS2)에
연결되어 있다.
1) ifconfig에서 확인
churlsu:~# ifconfig
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:2200 errors:0 dropped:0 overruns:0 frame:0
TX
packets:2200 errors:0 dropped:0 overruns:0 carrier:0
Collisions:0
eth0 Link encap:Ethernet
HWaddr 00:60:97:BC:8F:11 inet
addr:211.192.58.170 Bcast:211.192.58.175 Mask:255.255.255.248
UP
BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX
packets:95571 errors:0 dropped:0 overruns:0 frame:0
TX
packets:89302 errors:0 dropped:0 overruns:0 carrier:0
Collisions:0
Interrupt:11
Base address:0xb400
ppp0 Link encap:Point-to-Point
Protocol inet
addr:210.115.3.131 P-t-P:210.115.3.130 Mask:255.255.255.255
UP
POINTOPOINT RUNNING NOARP MULTICAST MTU:576 Metric:1
RX
packets:11 errors:0 dropped:0 overruns:0 frame:0
TX
packets:18 errors:0 dropped:0 overruns:0 carrier:0 |
2) netstat 명령
churlsu:~# netstat
-nr Kernel IP routing table Destination
Gateway
Genmask
Flags MSS
Window irtt Iface
210.115.3.130 0.0.0.0
255.255.255.255 UH 0
0
0 ppp0
211.192.58.170 0.0.0.0
255.255.255.255 UH
0 0
0 eth0
127.0.0.1 0.0.0.0 255.255.255.255
UH 0 0
0
lo 211.192.58.168 0.0.0.0 255.255.255.248
U 0
0
0
eth0 0.0.0.0 210.115.3.130
0.0.0.0 UG
0 0
0
ppp0 |
3) ps ax 명령
7003 S2 S 0:00
/usr/sbin/pppd connect /usr/sbin/chat -t 60 “”
atx1 OK atdt01412 X 2 X |
4) log 파일
/var/log/ppp.log 파일임.
*. /etc/syslog.conf에
아래처럼 넣었음.
daemon.* /var/log/ppp.log |
Jul 23 20:15:16
linux pppd[7003]: pppd 2.3.11 started by root, uid
0 Jul 23 20:15:48 linux pppd[7003]: Serial connection
established. Jul 23 20:15:48 linux pppd[7003]:
Using interface ppp0 Jul 23 20:15:48 linux pppd[7003]:
Connect: ppp0 <--> /dev/ttyS2 Jul 23 20:15:49
linux pppd[7003]: local IP address 210.115.3.131
Jul 23 20:15:49 linux pppd[7003]: remote IP address
210.115.3.130 |
아래는 이렇게 연결된 경우의 아이쎈 리눅스
PPP 서버의 네트워크 설정이다.
1) ifconfig
[root@ppp2 /root]#
ifconfig eth0 Link
encap:Ethernet HWaddr 00:50:DA:8E:44:F5 inet
addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP
BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX
packets:139927 errors:0 dropped:0 overruns:0 frame:0
TX
packets:161275 errors:0 dropped:0 overruns:0 carrier:0
collisions:37
txqueuelen:100 Interrupt:19
Base address:0x2800
eth1 Link
encap:Ethernet HWaddr 00:90:27:E0:98:A9 inet
addr:210.115.3.130 Bcast:210.115.3.255 Mask:255.255.255.128
UP
BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX
packets:160177 errors:0 dropped:0 overruns:0 frame:0
TX
packets:131964 errors:0 dropped:0 overruns:0 carrier:0
collisions:0
txqueuelen:100 Interrupt:21
Base address:0x4000
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.3.130 P-t-P:210.115.3.131 Mask:255.255.255.255
UP
POINTOPOINT RUNNING NOARP MULTICAST MTU:576
Metric:1 RX
packets:228 errors:0 dropped:0 overruns:0 frame:0
TX
packets:170 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10 |
2) netstat -nr
[root@ppp2 /root]#
netstat -nr Kernel IP routing table Destination
Gateway Genmask
Flags
MSS Window irtt
Iface 192.168.1.1 0.0.0.0
255.255.255.255 UH
0 0
0
eth0 210.115.3.131 0.0.0.0
255.255.255.255
UH 0
0 0
ppp0 210.115.3.130 0.0.0.0
255.255.255.255
UH 0
0 0
eth1 192.168.1.254 0.0.0.0
255.255.255.255
UH 0
0 0
eth0 210.115.3.128 0.0.0.0
255.255.255.128
U 0
0 0
eth1 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.3.129
0.0.0.0 UG
0 0
0
eth1 |
3) ps ax
7468 ? R 0:00
in.telnetd: 192.168.1.254 7469 pts/0 S 0:00
-pppd |
4) 로그 파일(/var/log/ppp.log)
Jul 23 20:15:24
ppp2 pppd[7469]: pppd 2.3.11 started by ppp, uid
501 Jul 23 20:15:24 ppp2 pppd[7469]: Using interface
ppp0 Jul 23 20:15:24 ppp2 pppd[7469]: Connect:
ppp0 <--> /dev/pts/0 Jul 23 20:15:24 ppp2
pppd[7469]: sent [LCP ConfReq id=0x1 <mru 576>
<asyncmap 0x20000000> <magic 0xf223d33b>
<pcomp> <accomp>] Jul 23 20:15:24
ppp2 pppd[7469]: rcvd [LCP ConfReq id=0x1 <asyncmap
0x0> <magic 0x455ecb68> <pcomp><accomp>]
Jul 23 20:15:24 ppp2 pppd[7469]: sent [LCP ConfAck
id=0x1 <asyncmap 0x0> <magic 0x455ecb68>
<pcomp><accomp>] Jul 23 20:15:24
ppp2 pppd[7469]: rcvd [LCP ConfAck id=0x1 <mru
576> <asyncmap 0x20000000> <magic 0xf223d33b>
<pcomp> <accomp>] Jul 23 20:15:24
ppp2 pppd[7469]: sent [LCP EchoReq id=0x0 magic=0xf223d33b]
Jul 23 20:15:24 ppp2 pppd[7469]: sent [IPCP ConfReq
id=0x1 <addr 210.115.3.130> <compress VJ
0f 01>] Jul 23 20:15:24 ppp2 pppd[7469]:
sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#)
15> <bsd v1 15>] Jul 23 20:15:24 ppp2
pppd[7469]: rcvd [IPCP ConfReq id=0x1 <addr 0.0.0.0>
<compress VJ 0f 01>] Jul 23 20:15:24 ppp2
pppd[7469]: sent [IPCP ConfNak id=0x1 <addr 210.115.3.131>]
Jul 23 20:15:24 ppp2 pppd[7469]: rcvd [LCP EchoRep
id=0x0 magic=0x455ecb68] Jul 23 20:15:24 ppp2
pppd[7469]: rcvd [IPCP ConfAck id=0x1 <addr 210.115.3.130>
<compress VJ 0f 01>] Jul 23 20:15:24 ppp2
pppd[7469]: rcvd [CCP ConfReq id=0x1] Jul 23
20:15:24 ppp2 pppd[7469]: sent [CCP ConfAck id=0x1]
Jul 23 20:15:24 ppp2 pppd[7469]: rcvd [CCP ConfRej
id=0x1 <deflate 15>] Jul 23 20:15:24 ppp2
pppd[7469]: sent [CCP ConfReq id=0x2 <deflate(old#)
15> <bsd v1 15>] Jul 23 20:15:24 ppp2
pppd[7469]: rcvd [IPCP ConfReq id=0x2 <addr 210.115.3.131>
<compress VJ 0f 01>] Jul 23 20:15:24 ppp2
pppd[7469]: sent [IPCP ConfAck id=0x2 <addr 210.115.3.131>
<compress VJ 0f 01>] Jul 23 20:15:24 ppp2
pppd[7469]: found interface eth1 for proxy arp
Jul 23 20:15:24 ppp2 pppd[7469]: local IP address
210.115.3.130 Jul 23 20:15:24 ppp2 pppd[7469]:
remote IP address 210.115.3.131 Jul 23 20:15:24
ppp2 pppd[7469]: Script /etc/ppp/ip-up started (pid
7471) Jul 23 20:15:25 ppp2 pppd[7469]: Script
/etc/ppp/ip-up finished (pid 7471), status = 0x0
Jul 23 20:15:25 ppp2 pppd[7469]: rcvd [CCP ConfRej
id=0x2 <deflate(old#) 15>] Jul 23 20:15:25
ppp2 pppd[7469]: sent [CCP ConfReq id=0x3 <bsd
v1 15>] Jul 23 20:15:25 ppp2 pppd[7469]:
rcvd [CCP ConfRej id=0x3 <bsd v1 15>]
Jul 23 20:15:25 ppp2 pppd[7469]: sent [CCP ConfReq
id=0x4] Jul 23 20:15:25 ppp2 pppd[7469]: rcvd
[CCP ConfAck id=0x4] |
7. 설치를 마치고
아이쎈의 리눅스 PPP 서버에 사용한 피시는 인텔
랜카드가 내장된 인텔 보드였다. 그런데 첫날 설치를 마치고 연결을
테스트하는데 연결 후에 점점 속도가 저하되고 나중에 연결이 끊기는
문제가 발생했다. 리눅스 월드 사무실에서 사전에 다른 서버로 실제
환경과 똑같게 구성해서 테스트할 때는 문제가 없었으므로 원인은
서버의 문제인 것 같은데 원인을 찾을 수가 없었다. 몇 가지
원인을 생각해 보니 예전에 리눅스에서 인텔 랜카드가 조금 불안했던
것 같아 랜카드를 변경하려고 했으나 보드 내장형이라 바꿀 수가
없다. 그래서 커널을 2.2.16으로 높여 테스트하니 문제가 없다.(레드햇
6.2는 기본 커널이 2.2.14이다.) 인텔 Ether Express Pro100 에
약간의 하드웨어 버그가 있는데 2.2.14 커널에 있는 드라이버에서는
수정이 안되어 있으나 2.2.16에서 이를 수정한 것 같다.
아래가 부팅시 EtherExpress Pro100 랜카드 부분이다.(2.2.16)
드라이버에서 하드웨어의 버그를 수정했다는 메시지가 있다.
eepro100.c:v1.09j-t
9/29/99 Donald Becker http://cesdis.gsfc.nasa.gov/linux/drivers/eepro100.html
eepro100.c: $Revision: 1.20.2.10 $ 2000/05/31 Modified
by Andrey V. Savochkin <saw@saw.sw.com.sg>
and others eth1: Intel PCI EtherExpress Pro100
82557, 00:90:27:E0:98:A9, IRQ 21. Receiver lock-up
bug exists -- enabling work-around. Board assembly
000000-000, Physical connectors present: RJ45
Primary interface chip i82555 PHY #1. General
self-test: passed. Serial sub-system self-test:
passed. Internal registers self-test: passed.
ROM checksum self-test: passed (0x04f4518b). |
인텔이 아직은 랜카드 만드는 실력이 부족한
것 같다.
또 하나 PPP 연결시 일정시간 동안 사용을 않으면
리눅스에서 PPP 연결을 종료하도록 설정하였다(idle 옵션).
그러나 PPP 연결이 끊겨도 사용자는 계속해서 014XX망에서 연결된
상태로 남아있다. 리눅스 PPP 서버에서 014XX망의 모뎀에 Hang up
신호를 보낼 수 없기 때문이다. 이에 대한 해결책을 아는 사람은
필자에게 메일 주기 바란다.
▲ top
|