This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.

カーネル PPP の設定

15.2. カーネル PPP の設定

原作: Gennady B. Sorokopud .

訳: 石墨 紀孝 . 6 September 1996.

PPP の設定を始める前に, pppd/usr/sbin にあり, また /etc/ppp という ディレクトリが存在することを確認してください.

pppd はふたつのモードで動作します.

  1. ``クライアント''モード. シリアル接続やモデムを利用して, そのマシンを 外部のネットワークに PPP 接続したい場合に用います.

  2. ``サーバ''モード. そのマシンがネットワーク上にあるときに, PPP を使って ほかのコンピュータを接続する際に用います.

どちらの場合でも, オプションファイルを設定する必要があります (/etc/ppp/options または, そのマシン上で PPP を使用する人が 複数いる場合には ~/.ppprc).

また, ダイヤルとリモートホストへの接続をおこなうために, シリアル接続やモデムを 操作する, なんらかのソフトウェアが必要です (kermit が適しているでしょう).

15.2.1. PPP クライアントとしての動作

私は, CISCO ターミナルサーバの PPP 回線に接続するために, 下記のような /etc/ppp/options を使用しています.

    crtscts		# enable hardware flow control
    modem		# modem control line
    noipdefault	# remote PPP server must supply your IP address.
    		# if the remote host doesn't send your IP during IPCP
    		# negotiation , remove this option
    passive		# wait for LCP packets
    domain ppp.foo.com	# put your domain name here
    
    :<remote_ip>	# put the IP of remote PPP host here
    		# it will be used to route packets via PPP link
    		# if you didn't specified the noipdefault option
    		# change this line to <local_ip>:<remote_ip>
    
    defaultroute	# put this if you want that PPP server will be your
    		# default router

接続方法:

  1. kermit (またはその他のモデム操作プログラム) を使ってリモートホストに ダイヤルし, 接続してください. そして, あなたのユーザ名とパスワード (必要 であれば, その他にもリモートホストで PPP を有効にするための操作) を入力 します.

  2. kermit を抜けてください. (回線を切断せずに)

  3. 下記のように入力します:

        # /usr/src/usr.sbin/pppd.new/pppd /dev/tty01 19200

    (通信速度とデバイス名には, あなたの環境に適したものを入れてください)

これでこのコンピュータは PPP で接続されました. もし, なんらかの理由で 接続に失敗したならば, /etc/ppp/options ファイルに debug オプションを追加して, 問題点を突き止めるために, コンソールに表示される メッセージを調べてください.

下記の /etc/ppp/pppup スクリプトは, 上記の作業を すべて自動的におこないます:

    #!/bin/sh
    ps ax |grep pppd |grep -v grep
    pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
    if [ "X${pid}" != "X" ] ; then
            echo 'killing pppd, PID=' ${pid}
            kill ${pid}
    fi
    ps ax |grep kermit |grep -v grep
    pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
    if [ "X${pid}" != "X" ] ; then
            echo 'killing kermit, PID=' ${pid}
            kill -9 ${pid}
    fi
    
    ifconfig ppp0 down
    ifconfig ppp0 delete
    
    kermit -y /etc/ppp/kermit.dial
    pppd /dev/tty01 19200

/etc/ppp/kermit.dial は kermit 用のスクリプトで, ダイヤルして, リモートホストでの認証に必要なすべての処理をおこないます. (そのようなスクリプトの例は この文書の終わりに添付してあります)

PPP 接続を切断するには, 下記のような /etc/ppp/pppdown スクリプトを 使用します:

    #!/bin/sh
    pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
    if [ X${pid} != "X" ] ; then
            echo 'killing pppd, PID=' ${pid}
            kill -TERM ${pid}
    fi
    
    ps ax |grep kermit |grep -v grep
    pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
    if [ "X${pid}" != "X" ] ; then
            echo 'killing kermit, PID=' ${pid}
            kill -9 ${pid}
    fi
    
    /sbin/ifconfig ppp0 down
    /sbin/ifconfig ppp0 delete
    kermit -y /etc/ppp/kermit.hup
    /etc/ppp/ppptest

PPP が動作中かどうかを調べます (/usr/etc/ppp/ppptest):

    #!/bin/sh
    pid=`ps ax| grep pppd |grep -v grep|awk '{print $1;}'`
    if [ X${pid} != "X" ] ; then
            echo 'pppd running: PID=' ${pid-NONE}
    else
            echo 'No pppd running.'
    fi
    set -x
    netstat -n -I ppp0
    ifconfig ppp0

モデム回線を切断します (/etc/ppp/kermit.hup):

    set line /dev/tty01	; put your modem device here
    set speed 19200
    set file type binary
    set file names literal
    set win 8
    set rec pack 1024
    set send pack 1024
    set block 3
    set term bytesize 8
    set command bytesize 8
    set flow none
    
    pau 1
    out +++
    inp 5 OK
    out ATH0\13
    echo \13
    exit

次は kermit の代わりに chat を使う方法です.

原作: Robert Huff .

pppd 接続を確立するためには, 次の二つのファイルの設定だけで十分です.

/etc/ppp/options:

    /dev/cuaa1 115200
    
    crtscts		# enable hardware flow control
    modem		# modem control line
    connect "/usr/bin/chat -f /etc/ppp/login.chat.script"
    noipdefault	# remote PPP server must supply your IP address.
    		# if the remote host doesn't send your IP during
    		# IPCP negotiation, remove this option
    passive		# wait for LCP packets
    domain <your.domain>	# put your domain name here
    
    :		# put the IP of remote PPP host here
    		# it will be used to route packets via PPP link
    		# if you didn't specified the noipdefault option
    		# change this line to <local_ip>:<remote_ip>
    
    defaultroute	# put this if you want that PPP server will be
    		# your default router

/etc/ppp/login.chat.script:

(実際には一行になります.)

    ABORT BUSY ABORT 'NO CARRIER' "" AT OK ATDT<phone.number>
     CONNECT "" TIMEOUT 10 ogin:-\\r-ogin: <login-id>
     TIMEOUT 5 sword: <password>

正しくインストールし編集した後は, 必要な事はこれだけです

    # pppd

このサンプルは主に Trev Roydhouse <Trev.Roydhouse@f401.n711.z3.fidonet.org> から寄せられた情報に基づいており, 承諾を得て使用しています.

15.2.2. PPP サーバとしての動作

/etc/ppp/options:

    crtscts				# Hardware flow control
    netmask 255.255.255.0		# netmask ( not required )
    192.114.208.20:192.114.208.165  # ip's of local and remote hosts
    				# local ip must be different from one
    				# you assigned to the ethernet ( or other )
    				# interface on your machine.
    				# remote IP is ip address that will be
    				# assigned to the remote machine
    domain ppp.foo.com		# your domain
    passive				# wait for LCP
    modem				# modem line

下記のような /etc/ppp/pppserv スクリプトで, そのマシンを PPP サーバにすることができます.

    #!/bin/sh
    ps ax |grep pppd |grep -v grep
    pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
    if [ "X${pid}" != "X" ] ; then
            echo 'killing pppd, PID=' ${pid}
            kill ${pid}
    fi
    ps ax |grep kermit |grep -v grep
    pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
    if [ "X${pid}" != "X" ] ; then
            echo 'killing kermit, PID=' ${pid}
            kill -9 ${pid}
    fi
    
    # reset ppp interface
    ifconfig ppp0 down
    ifconfig ppp0 delete
    
    # enable autoanswer mode
    kermit -y /etc/ppp/kermit.ans
    
    # run ppp
    pppd /dev/tty01 19200

PPP サーバを終了するには, この /etc/ppp/pppservdown スクリプト を使用します:

    #!/bin/sh
    ps ax |grep pppd |grep -v grep
    pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
    if [ "X${pid}" != "X" ] ; then
            echo 'killing pppd, PID=' ${pid}
            kill ${pid}
    fi
    ps ax |grep kermit |grep -v grep
    pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
    if [ "X${pid}" != "X" ] ; then
            echo 'killing kermit, PID=' ${pid}
            kill -9 ${pid}
    fi
    ifconfig ppp0 down
    ifconfig ppp0 delete
    
    kermit -y /etc/ppp/kermit.noans

下記の kermit スクリプトは, モデムの自動応答機能を有効, または無効にします (/etc/ppp/kermit.ans):

    set line /dev/tty01
    set speed 19200
    set file type binary
    set file names literal
    set win 8
    set rec pack 1024
    set send pack 1024
    set block 3
    set term bytesize 8
    set command bytesize 8
    set flow none
    
    pau 1
    out +++
    inp 5 OK
    out ATH0\13
    inp 5 OK
    echo \13
    out ATS0=1\13	; change this to out ATS0=0\13 if you want to disable
    		; autoanswer mode
    inp 5 OK
    echo \13
    exit

この /etc/ppp/kermit.dial スクリプトは, リモートホストに ダイヤルし, 認証手続きをするのに使用します. あなたは必要に応じて, これを 変更しないといけないでしょう. あなたのユーザ名とパスワードをこの スクリプトに書かなければいけませんし, モデムやリモートホストからの 応答によっては, 入力待ちの文を変更する必要もあります.

    ;
    ; put the com line attached to the modem here:
    ;
    set line /dev/tty01
    ;
    ; put the modem speed here:
    ;
    set speed 19200
    set file type binary		; full 8 bit file xfer
    set file names literal
    set win 8
    set rec pack 1024
    set send pack 1024
    set block 3
    set term bytesize 8
    set command bytesize 8
    set flow none
    set modem hayes
    set dial hangup off
    set carrier auto		; Then SET CARRIER if necessary,
    set dial display on		; Then SET DIAL if necessary,
    set input echo on
    set input timeout proceed
    set input case ignore
    def \%x 0			; login prompt counter
    goto slhup
    
    :slcmd				; put the modem in command mode
    echo Put the modem in command mode.
    clear				; Clear unread characters from input buffer
    pause 1
    output +++			; hayes escape sequence
    input 1 OK\13\10		; wait for OK
    if success goto slhup
    output \13
    pause 1
    output at\13
    input 1 OK\13\10
    if fail goto slcmd		; if modem doesn't answer OK, try again
    
    :slhup				; hang up the phone
    clear				; Clear unread characters from input buffer
    pause 1
    echo Hanging up the phone.
    output ath0\13			; hayes command for on hook
    input 2 OK\13\10
    if fail goto slcmd		; if no OK answer, put modem in command mode
    
    :sldial				; dial the number
    pause 1
    echo Dialing.
    output atdt9,550311\13\10		; put phone number here
    assign \%x 0			; zero the time counter
    
    :look
    clear				; Clear unread characters from input buffer
    increment \%x			; Count the seconds
    input 1 {CONNECT }
    if success goto sllogin
    reinput 1 {NO CARRIER\13\10}
    if success goto sldial
    reinput 1 {NO DIALTONE\13\10}
    if success goto slnodial
    reinput 1 {\255}
    if success goto slhup
    reinput 1 {\127}
    if success goto slhup
    if < \%x 60 goto look
    else goto slhup
    
    :sllogin			; login
    assign \%x 0			; zero the time counter
    pause 1
    echo Looking for login prompt.
    
    :slloop
    increment \%x			; Count the seconds
    clear				; Clear unread characters from input buffer
    output \13
    ;
    ; put your expected login prompt here:
    ;
    input 1 {Username: }
    if success goto sluid
    reinput 1 {\255}
    if success goto slhup
    reinput 1 {\127}
    if success goto slhup
    if < \%x 10 goto slloop		; try 10 times to get a login prompt
    else goto slhup			; hang up and start again if 10 failures
    
    :sluid
    ;
    ; put your userid here:
    ;
    output ppp-login\13
    input 1 {Password: }
    ;
    ; put your password here:
    ;
    output ppp-password\13
    input 1 {Entering SLIP mode.}
    echo
    quit
    
    :slnodial
    echo \7No dialtone.  Check the telephone line!\7
    exit 1
    
    ; local variables:
    ; mode: csh
    ; comment-start: "; "
    ; comment-start-skip: "; "
    ; end: