FreeBSD 핸드북 : PPP와 SLIP : 사용자 PPP 설정 : PPP 설정
Previous: 이름 분석(Name Resolution) 설정
Next: 마지막 시스템 설정

15.1.5. PPP 설정

사용자 ppp와 pppd (커널 수준 PPP 구현) 모두 /etc/ppp 디렉토리에 위치한 설정파일들을 이용합니다. 제공된 설정 예제 파일은 사용자 ppp를 설정하는데 매우 도움이 될 터이니, 지우지 마시기 바랍니다.

ppp를 설정하려면 필요에 따라 몇 개의 파일들을 편집해야 합니다. 편집해야 할 파일은 ISP에서 고정적으로 IP 주소를 할당하는지 (부언하자면, 하나의 IP 주소를 얻어 항상 그것만을 쓰는 경우입니다.) 아니면 동적으로 IP 주소를 할당하는지에 (부언하자면, IP 주소가 각각의 세션에 따라 다를 수 있습니다.) 따른 몇가지 확장에 달려있습니다.

15.1.5.1. PPP와 고정 IP 주소

이제 /etc/ppp/ppp.conf라 불리는 설정파일을 만들어야 합니다. 아마도 아래의 예제와 유사하게 될 것입니다. ``:''로 끝난 줄은 바로 첫 번째 열(column)에서 시작되어야 한다는 점과, 그 밖의 줄은 빈칸이나 탭으로 들여쓰기가 되어야 한다는 점을 주의하십시오.

1     default:
2       set device /dev/cuaa0
3       set speed 115200
4       set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATE1Q0 OK-AT-OK
\\dATDT\\T TIMEOUT 40 CONNECT"
5     provider:
6       set phone "(0123) 456 7890"
7       set login "TIMEOUT 10 \"\" \"\" gin:--gin: foo word: bar col: ppp"
8       set timeout 300
9       set ifaddr x.x.x.x y.y.y.y 255.255.255.0 0.0.0.0
10      add default HISADDR
11      enable dns
줄 번호는 넣지 마십시오, 이는 단지 설명에 편의를 위한 것입니다.

Line 1:

디폴트 엔트리(default entry)임을 나타냅니다. 여기에 적힌 명령들은 ppp가 실행될 때 자동으로 실행됩니다.

Line 2:

모뎀이 연결되어 있는 디바이스를 명시합니다. COM1:은 /dev/cuaa0이고 COM2:은 /dev/cuaa1입니다.

Line 3:

연결될 때의 속도를 정합니다. 115200의 속도로 작동하지 않는다면 (이는 이유있는 새로운 모뎀인 경우에만 입니다.), 대신 38400의 속도로 시도해 보십시오.

Line 4:

전화걸기(dial) 문장. 사용자 ppp는 chat(8) 프로그램과 유사한 기다리고-보내기(expect-send) 문법을 사용합니다. 이 언어의 특징에 대해서는 매뉴얼 페이지를 참조하십시오.

Line 5:

``provider''라고 명명된 ISP에 대한 엔트리를 명시합니다.

Line 6:

ISP의 전화번호를 적습니다. 여러 개의 전화번호인 경우에는 분류기호로 ``:'' 또는 ``|''를 사용하여 적습니다. 이 두 분류기호의 차이점은 ppp 메뉴얼 페이지에 기술되어 있습니다. 요약을 하자면, 번호를 계속 번갈아가면서 시도하려면, ``:''을 사용하십시오. 첫번 시도에는 꼭 첫번째 번호만을 이용하고 그것이 실패했을 때에만 다른 번호를 이용하려면 ``|''를 이용하십시오. 위에 나온 것처럼 항상 번호 모두를 인용부호로 싸주어야 합니다.

Line 7:

로그인 문장은 전화걸기 문장으로 chat과 비슷한 문법으로 되어 있습니다. 이 예제에서는, 문장은 로그인 세션이 다음과 같이 보이는 서비스에서 작동합니다.

   J. Random Provider
   login: foo
   password: bar
   protocol: ppp

이를 자신의 경우에 맞도록 이 스크립트를 변경할 필요가 있습니다. PAP나 CHAP를 사용하는 경우, 이 지점에서 로그인을 하지 않으니, 로그인 문장을 비워둘 수 있습니다. 더 자세한 것은 PAP와 CHAP 인증을 보십시오.

Line 8:

연결시 기본 타임아웃(timeout)을 (초단위) 정합니다. 예제의 경우, 사용하지 않은지 300초 후에는 자동적으로 연결이 끊으집니다. 타임아웃을 설정하고 않으려면, 값을 0로 해주십시오.

Line 9:

인터페이스의 주소를 정합니다. 문장 x.x.x.x는 ISP에서 제공한 IP 주소로 바꾸어야 합니다. 문장 y.y.y.y는 ISP에서 게이트웨이(gateway)에다 (연결할 컴퓨터) 명시한 IP 주소로 바꿔야 합니다. ISP에서 게이트웨이 제공하지 않았다면, 10.0.02/0를 사용하십시오. ``추측된(guessed)'' 주소를 사용해야한다면, PPP와 동적 IP 주소의 지시에 따라 /etc/ppp/ppp.linkup에 엔트리를 만들었는지 확인하십시오.

만약 빠져있다면, ppp는 -auto 모드로 동작할 수 없습니다.

Line 10:

ISP의 게이트웨이에 기본 루트(route)를 추가합니다. 특이한 단어 HISADDR은 9번째 줄에 상술한 게이트웨이 주소로 치환됩니다. 중요한 점은 이 줄이 9번째 줄 이후로 나와야 한다는 점입니다. 그렇게 하지 않으면 HISADDR은 초기화되지 않을 것입니다.

Line 11:

이 라인은 ppp가 ISP에게 네임서버 주소들이 올바른지 확인하기를 요청케합니다. ISP가 이러한 기능을 지원하면, ppp는 올바른 네임서버 엔트리로 /etc/resolv.conf를 갱신할 수 있습니다.

고정 IP 주소를 사용한다면, 연결하기 전 이미 라우팅 테이블 엔트리(routing table entry)가 올바르기 때문에 ppp.linkup에 엔트리를 추가할 필요가 없습니다. 그러나, 연결 후에 프로그램을 호출하는 엔트리를 만들고자 할 수도 있는데, 이 경우는 sendmail 예제와 함께 후에 설명하겠습니다.

설정 예제 파일은 /etc/ppp 디렉터리에 있습니다.

15.1.5.2. PPP와 동적 IP 주소

ISP에서 고정 IP 숫자를 제공하지 않은 경우, ppp를 지역(local)과 원격(remote) 주소를 교류토록 설정할 수 있습니다. 이는 IP 숫자를 "추측"함으로써 그리고 연결 후에 IP 설정 프로토콜(IP Configuration Protocol)을 (IPCP) 사용하여 ppp가 올바로 설정되도록 함으로 해결됩니다. ppp.conf 설정은 다음과 같은 차이가 있지만, 나머지는 PPP와 고정 IP 주소와 동일합니다:

9       set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0

다시 말하지만, 줄번호를 넣지 마십시오, 이는 단지 설명에 편의를 위한 것입니다. 그리고, 적어도 한 칸을 들여써야 합니다.

Line 9:

``/'' 문자 뒤의 숫자는 ppp가 강제하는 주소의 bit수 입니다. 상황에 맞추어 더욱 적절한 IP 번호를 바랄 수도 있지만, 위의 예제만으로도 거의 항상 동작할 것입니다.

마지막 인자는 (0.0.0.0) ppp가 10.0.0.1보다는 0.0.0.0 주소를 사용해서 소통하도록 합니다. ifaddr를 설정하기 위해 0.0.0.0를 첫번째 인자로 사용하지 마십시오. 이는 ppp가 -auto 모드에서 초기 루트(route)를 설정하는 것을 막아줍니다.

버전 1.X의 ppp를 실행하는 경우, 또한 /etc/ppp/ppp.linkup에 엔트리를 제작할 필요가 있습니다. ppp.linkup은 연결이 완료된 후에 사용됩니다. 이 때에 와서, ppp는 어떤 IP 주소들이 *정말로*로 사용되는지 알게됩니다. 다음의 엔트리는 존재하는 가짜 루트들를 제거하고, 올바른 것들을 생성합니다:

1     provider:
2       delete ALL
3       add default HISADDR

Line 1:

연결이 되었을 때, ppp는 다음의 방법으로 ppp.linkup을 살펴볼 것입니다: 첫째로, ppp.conf에서 사용된 것과 같은 표지(label)가 있는지 찾아봅니다. 이게 실패하면, 게이트웨이의 IP 숫자에 대한 엔트리를 살펴봅니다. 이 사항은 4자리-8비트(four-octet) IP 스타일 표지입니다. 이것도 찾을 수가 없다면, MYADDR 엔트리를 찾아봅니다.

Line 2:

여기서는 ppp가 (직접 루트 엔트리만 제외하고) 얻은 tun 인터페이스에 존재하는 모든 루트를 제거토록 합니다.

Line 3:

여기에서는 ppp가 HISADDR를 가르키는 디폴트 루트를 추가토록 합니다. HISADDR는 IPCP로 교류하면서 게이트웨이의 IP 숫자로 치환됩니다.

자세한 예제로는 /etc/ppp/ppp.conf.sample과 /etc/ppp/ppp.linkup.sample 파일에 pmdemand 엔트리를 보십시오.

ppp 버전 2에서는 ``sticky routes''를 소개하고 있습니다. MYADDR이나 HISADDR을 포함하고 있는 어떤 add나 delete 라인들은 기억해두고서, MYADDR이나 HISADDR의 실제값이 바뀌는 시점에서, 루트는 (routes) 재적용될 것입니다.

15.1.5.3. PPP로 전화받기

여기서는 ppp가 서버 역할을 하도록 설정(setting)하는 것을 기술하였습니다.

LAN에 연결된 컴퓨터에서 오는 전화를 받도록 설정할 때에, LAN에 패킷을 전송하려하는지를 결정해야 합니다. 전송하려한다면, 상대에게 해당 LAN의 서브넷에서 알맞는 IP 번호를 제공하고 ppp.conf 파일에 다음의 명령어

    enable proxy

를 사용해야 합니다. 또한 /etc/rc.conf 파일이 (이 파일은 /etc/sysconfig라고 쓰이기도 했습니다.) 다음을 포함해야 합니다:

    gateway_enable=YES

어떤 getty를?

Configuring FreeBSD for Dialup Services)은 getty를 이용한 회선 서비스를 사용하는 것에 대해 자세히 설명해 놓고 있습니다.

getty의 대안은 mgetty, 전화회선에 대해 구상된 getty의 더욱 깔끔한 버전입니다.

mgetty를 사용하는데의 이득은 이것은 활발히 모뎀에다 *얘기*를 한다는 점인데, 이는 /etc/ttys에서 포트가 닫혀져 있다면 모뎀이 전화를 받지 않게 된다는 것을 의미합니다.

mgetty의 후속 버전(0.99beta 이후) 또한 서버에 클라이언트가 스크립트없이(script-less) 접근하는 것을 허용하면서 PPP 스트림(stream)을 자동으로 탐지하는 것을 지원합니다.

mgetty에 대해 더 자세한 사항은 mgetty와 AutoPPP를 참조하십시오.

PPP 권한

PPP는 보통 사용자 id 0으로 실행되어야 합니다. 그러나 아래에 기술된 바대로 ppp를 실행함으로써 일반 사용자 또한 서버 모드로 ppp를 실행시키려면, 사용자에게 /etc/group에 있는 network 그룹에 ID를 추가해서 ppp를 실행할 수 있는 권한을 주어야 합니다.

또한 allow 명령어를 사용해서 설정 파일의 하나 이상의 섹션에다 그들에게 접근권한을 줄 필요가 있습니다:

    allow users fred mary

이 명령어가 default 섹션에 사용되면, 명시된 사용자들은 모든 것에 접근할 수 있는 권한이 주어집니다.

동적-IP 사용자를 위한 PPP 쉘 설정하기

다음을 포함하는 /etc/ppp/ppp-shell 파일을 만듭니다.

   #!/bin/sh
   IDENT=`echo $0 | sed -e 's/^.*-\(.*\)$/\1/'`
   CALLEDAS="$IDENT"
   TTY=`tty`

   if [ x$IDENT = xdialup ]; then
       IDENT=`basename $TTY`
   fi

   echo "PPP for $CALLEDAS on $TTY"
   echo "Starting PPP for $IDENT"

   exec /usr/sbin/ppp -direct $IDENT

이 스크립트는 실행이 가능해야 합니다. 그런 후 다음 명령어를 사용하여 이 스크립트를 가르키는 ppp-dialup라는 심볼릭 링크를 만듭니다:

   # ln -s ppp-shell /etc/ppp/ppp-dialup

모든 회선 ppp 사용자를 위한 쉘(shell)로 이 스크립트를 사용합니다. 다음은 사용자 이름이 pchilds라는 회선 PPP 사용자의 /etc/passworad 예제입니다. (바로 암호 password 파일을 편집하는 것이 아니라 vipw를 사용하는 것을 상기하십시오.)

   pchilds:*:1011:300:Peter Childs PPP:/home/ppp:/etc/ppp/ppp-dialup

다음의 0 바이트짜리 파일을 가진 누구나 읽을 수 있는(world readable) /home/ppp 디렉터리를 만듭니다.

   -r--r--r--   1 root     wheel           0 May 27 02:23 .hushlogin
   -r--r--r--   1 root     wheel           0 May 27 02:22 .rhosts

이는 /etc/motd가 출력되는 것을 막아줍니다.

고정-IP 사용자를 위한 PPP 쉘 설정

위와 같이 ppp-shell 파일을 만들고 고정적으로 할당된 IP들에 대한 각각의 계정에 대해 ppp-shell에 심볼릭 링크를 만듭니다.

예를 들어, 세 손님 fred, sam과 mary가 있고 이들에게 class C의 네트웨크에 연결을 해주려면, 다음을 입력해 주어야 합니다.:

   # ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-fred
   # ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-sam
   # ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-mary

각각의 사용자 회선 어카운트는 그들의 쉘이 위에서 만들어진 심볼릭 링크에 설정토록 합니다. (부연을 하자면, mary의 쉘은 /etc/ppp/ppp-mary이어야 합니다.)

동적-IP 사용자를 위한 ppp.conf 설정

/etc/ppp/ppp.conf 파일은 추가로 다음을 포함해야 합니다.

   default:
    set debug phase lcp chat
    set timeout 0

   ttyd0: 
    set ifaddr 203.14.100.1 203.14.100.20 255.255.255.255
    enable proxy

   ttyd1:
    set ifaddr 203.14.100.1 203.14.100.21 255.255.255.255
    enable proxy

들여쓰기가 중요함을 주의하십시오.

default: 부분은 각각의 세션 모두가 읽습니다. /etc/ttys에서 활성화된 각각의 회선에 대해 위의 ttyd0:와 유사한 엔트리를 만드십시오. 각각의 줄은 동적 사용자들을 위한 ip 주소 모임(pool) 중 하나의 IP를 가집니다.

고정-IP 사용자를 위한 ppp.conf 설정

위에 /etc/ppp/ppp.conf의 예제의 목록(contents)과 같이 고정적으로 명시된 회선 사용자 각각을 위한 섹션을 추가해야 합니다. 다시 fred, sam과 mary 경우를 살펴보기로 하겠습니다.

   fred:
    set ifaddr 203.14.100.1 203.14.101.1 255.255.255.255
 
   sam:
    set ifaddr 203.14.100.1 203.14.102.1 255.255.255.255
 
   mary:
    set ifaddr 203.14.100.1 203.14.103.1 255.255.255.255

/etc/ppp/ppp.linkup 파일또한 필요하다면 각각의 고정 IP 사용자에 대해 라우팅 정보를 포함해야 합니다. 아래는 클라이언트 ppp 링크를 통해 203.14.101.0 class C에 대한 루트를 추가하고 있습니다.

   fred:
    add 203.14.101.0 netmask 255.255.255.0 HISADDR
 
   sam:
    add 203.14.102.0 netmask 255.255.255.0 HISADDR
 
   mary:
    add 203.14.103.0 netmask 255.255.255.0 HISADDR

mgetty, AutoPPP, MS 확장(extensions)에 대한 부가사항

mgetty와 AutoPPP

AUTO_PPP 옵션을 활성화시켜 mgettty를 설정하고 컴파일을 하는 것은 mgetty가 PPP 연결의 LCP 상태를 감지하도록 그리고 ppp 쉘을 자동적으로 실행토록 합니다. 그러나, 기본 login/password 흐름(sequence)이 일어나지 않기 때문에 PAP나 CHAP를 사용해서 사용자를 인증하는 절차가 필요합니다.

여기서는 사용자가 제대로 설정되어있고, mgetty가 (v0.99beta나 그 이후) AUTO_PPP 옵션이 설정된 체 컴파일되어 설치돼 있다고 가정합니다.

/usr/local/etc/mgetty+sendfax/login.config 파일이 다음을 포함하고 있는지 확인해야 합니다:

   /AutoPPP/ -     -       /etc/ppp/ppp-pap-dialup

이는 mgetty가 감지된 PPP 연결을 위해 ppp-pap-dialup 스크립트를 실행토록 합니다.

다음을 포함하는 /etc/ppp/ppp-pap-dialup 파일을 만드십시오. (파일은 실행이 가능해야 합니다):

   #!/bin/sh
   exec /usr/sbin/ppp -direct pap

당장 /etc/ppp/ppp.conf에 오는 전화 모두에 동작하는 단일한 설정 엔트리를 만드십시오:

   pap:
    enable pap
    set ifaddr 203.14.100.1 203.14.100.20-203.14.100.40
    enable proxy

이 방법을 통해 로그인하는 각각의 사용자는 /etc/ppp/ppp.secret 파일에 사용자이름/암호를 가져거나 대안으로 /etc/password 파일로부터 pap를 통해 사용자를 인증하는 다음

  enable passwdauth

옵션을 추가해야 합니다.

일부의 사용자에게 고정 IP 번호를 부여하고자 하면, /etc/ppp/ppp.secret에 세번째 인자로 번호를 정해줄 수 있습니다. 예로는 /etc/ppp/ppp.secret.sample을 보십시오.

MS 확장(extensions)

ppp가 요구에 따라 DNS와 NetBIOS 네임서버 주소를 제공하도록 설정하는 것이 가능합니다.

ppp 버전 1.X로 이를 확장을 가능하게 하려면, 다음의 라인이 /etc/ppp/ppp.conf의 관련 섹션에 추가되어야 합니다.

    enable msext
    set ns 203.14.100.1 203.14.100.2
    set nbns 203.14.100.5

또는 ppp 버전 2와 그 이후에서는:

    accept dns
    set dns 203.14.100.1 203.14.100.2
    set nbns 203.14.100.5

이는 클라이언트에게 첫 번째와 두 번째 네임서버 주소, 그리고 netbios 네임서버 호스트를 알려줍니다.

버전 2와 그 이후에서, ``set dns'' 라인이 삭제되어 있는 경우, ppp는 /etc/resolv.conf에서 찾아진 값들을 사용할 것입니다.

15.1.5.4. PAP 와 CHAP 인증

몇몇 ISP에서는 연결시 인증하는 과정에 PAP나 CHAP 인증 절차를 사용하도록 시스템을 설정해 놓는 경우가 있습니다. 이러한 경우에, ISP는 연결시 login: 프롬프트를 주지 않지만, 즉시 PPP로 교신하는 것을 시작합니다.

PAP는 CHAP보다 보안상 허점이 있습니다. 그러나 PAP에서 플레인 텍스트(plain text)로 전송됨에도 불구하고, 오직 한 직렬 회선(serial line)을 사용하므로 여기서 보안은 그다지 문제가 되지 않습니다. 크래커(cracker)가 몰래 "훔쳐 살펴볼 만한" 충분한 공간이 없습니다.(There is not much room for crackers to "eavesdrop")

PPP와 고정 IP 주소나 PPP와 동적 IP 주소 부분을 참조하면서, 다음 부분들을 고치셔야 합니다:

7       set login
.....
12      set authname MyUserName
13      set authkey MyPassword

매번 말하지만, 각 줄번호를 포함하지 마십시오. 이는 단지 설명의 편의를 위해서입니다. 적어도 한 칸 이상의 공백으로된 들여쓰기를 하셔야 합니다.

Line 7:

ISP는 PAP나 CHAP를 사용한다면 서버에 로그인 절차를 요구하지 않습니다. 그래서 "set login" 문장을 반드시 쓰지 말아야(disable) 합니다. (빈 자리로 두어야 합니다.)

Line 12:

여기서 PAP/CHAP 사용자 이름을 명기합니다. MyUserName에다 해당 이름을 기입하십시오.

Line 13:

여기서 PAP/CHAP 암호를 기입합니다. MyPassword에다 해당 암호를 기입하십시오. 분명하게 하기위해 추가적으로

15      accept PAP
or
15      accept CHAP
을 기입할 수도 있지만, PAP와 CHAP는 모두 기본적으로 응답됩니다.

15.1.5.5. 작동중 ppp 설정의 변경

백그라운드에서 동작하는 동안 ppp 프로그램과 교신할 수가 있지만, 이는 오직 적절한 진단 포트가 설정되어 있을 경우에만 가능합니다. 교신하기위해, 다음의 라인이 설정에 추가되어야 합니다:

        set server /var/run/ppp-tun%d DiagnosticPassword 0177

이는 접근을 허용하기 전에 클라이언트에게 정해진 암호를 물어보도록 해서, ppp에게 정해진 unix-도메인 소켓을 받아들이라하는 것입니다. 이름에 %d는 사용되고 있는 tun 디바이스 번호로 대체됩니다.

어떤 특정한 포트 숫자를 선택하거나 TCP 소켓보다는 지역 unix 도메인 소켓에 응답하도록 하는 것 또한 가능합니다. 더 자세한 사항은 메뉴얼 페이지에서 set socket 명령어에 대해 참조하십시오.

한번 소켓이 정해지면, pppctl(8) 프로그램가 작동하는 프로그램(ppp)을 조종하기 하려는 스크립트에서 사용될 수 있습니다.


FreeBSD 핸드북 : PPP와 SLIP : 사용자 PPP 설정 : PPP 설정
Previous: 이름 분석(Name Resolution) 설정
Next: 마지막 시스템 설정