PPP の使い方


                                 Version 0.93

                                  大野俊治
                               tony-o@iij.ad.jp

                              1994 年10 月11 日

目 次

I   リリース・ノート                                                                   1

II   ユーザガイド                                                                      3

1  はじめに                                                                            4

2  インストール                                                                        6
 2.1  トンネルデバイスのインストール : : : : : : : : : : : : : : : : : : : : : : : :  6
      2.1.1  インストール手順: : : : : : : : : : : : : : : : : : : : : : : : : : : :  6
      2.1.2  トンネルデバイスの動作試験  : : : : : : : : : : : : : : : : : : : : : :  7
 2.2  PPP のインストール : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :  8
      2.2.1  モデムの設定  : : : : : : : : : : : : : : : : : : : : : : : : : : : : :  8

3  簡単な使い方                                                                        9
 3.1  手動でのダイアリング : : : : : : : : : : : : : : : : : : : : : : : : : : : : :  9
 3.2  自動ダイアリング : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 11
 3.3  IP アドレスの指定について  : : : : : : : : : : : : : : : : : : : : : : : : : : 12
 3.4  フラグの指定 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 13
 3.5  設定の登録 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 13

4  動的な発呼                                                                         15
 4.1  自動モードでの起動 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 15
 4.2  telnet の利用  : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 16
 4.3  Anonymous PPP  : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 16
 4.4  再ダイアル : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 17

5  アドレスとルーティング                                                             18
 5.1  IP アドレスの調停  : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 18
 5.2  ルーティング : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 20
 5.3  自動モードとルーティング : : : : : : : : : : : : : : : : : : : : : : : : : : : 20
 5.4  ルーティングの自動設定 : : : : : : : : : : : : : : : : : : : : : : : : : : : : 21

6  着信機能の利用                                                                     22
 6.1  着信のための設定 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 22
      6.1.1  /etc/gettytab : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 22
      6.1.2  /etc/ttys   : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 22

                                            i

      6.1.3  アカウントの作成: : : : : : : : : : : : : : : : : : : : : : : : : : : : 22
      6.1.4  モデム  : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 23
 6.2  発信側の設定 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 23

7  フィルタリング機能                                                                 24
 7.1  指定方法 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 24
 7.2  設定例 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 25
 7.3  注意事項 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 27

8  接続相手の認証                                                                     28
 8.1  PPP での接続と認証手続き : : : : : : : : : : : : : : : : : : : : : : : : : : : 28
 8.2  自分の証明 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29
 8.3  相手の確認 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 29

9  その他の機能                                                                       30
 9.1  Idle Timer : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 30
 9.2  ログ機能 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 30
 9.3  能動的オープン : : : : : : : : : : : : : : :: : : :  : : : : : : : : : : : : : 30
 9.4  仮想的なネットワークの構築 : : : : : : : : : : : : : : : : : : : : : : : : : : 31
      9.4.1  PPP over TELNET   : : : : : : : : : : : : : : : : : : : : : : : : : : : 31
      9.4.2  PPP over TCP  : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 33
 9.5  データの圧縮機能 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 34
 9.6  リンク監視機能 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 34
 9.7  専用線での接続 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 35

III   リファレンス                                                                    36

10 ファイル                                                                           37
 10.1 ppp  : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 37
 10.2 ppp.conf : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 38
 10.3 ppp.secret : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 38
 10.4 ppp.linkup : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 38

11 コマンド                                                                           39

A  チャット・スクリプト                                                               51
 A.1  指定方法 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 51
 A.2  例   : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 52

B  IIJ への接続                                                                       54
 B.1  ppp.conf   : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 54
 B.2  ppp.linkup : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 56

C  うまくつながらない場合                                                             57

D  Known Problem                                                                      58

                                           ii





                                             Part  I

                                        リリース ・ ノート





                                            1

Version 0.93

 ネットワーク・インターフェイスの数が多いと正常に起動しないバグを修正。

 LCP, IPCP でREJECT を受け取った時に、タイムアウトを待たないと次のConfigure Request を
送信しないバグを修正。

 IPCP でNAK を返す場合のバグを修正。

 PAP/CHAP での認証者としての機能を追加。関連してenable/disable PAP/CHAP コマンドが意味
をもつようになった。

 PPP over TCP の機能を追加。関連してset escape およびshow escape コマンドを追加。

 HDLC パケットの自動検出機能のバグを修正。

 IPCP でのアドレスの調停に際し、受け付けるアドレスの範囲を指定できるようになった。関連
してset ifaddr コマンドの仕様が変更されるとともにenable/disable ipaddress コマンドが廃止さ
れた。

 CCP を実装し、Predictor-1 をサポート。それにともない、show ccp コマンドが追加された。

 auto モードにおいて、ダイアリングに失敗するとPPP が終了してしまう問題を修正。自動リダ
イアルはまだ実装されていないが、30 秒待った後にトリガとなるパケットで再発呼するようになっ
た。

 LCP において、CHAP を使うようにNAK で返答する際のバグを修正。

 サポートOS をBSDI 1.1 とFreeBSD に変更。BSDI 1.0 とNetBSD 用のコードは含まれなくなっ
た。

                                            2





                                           Part  II

                                         ユーザガイド





                                            3


Chapter  1

はじめに

  PPP はリンク層とネットワーク層の接続と通信、切断を担当するプロトコルです。そのため、通常
PPPはカーネルの中に実装されますが、ここで説明するPPP はカーネルの中ではなく、ユーザ・プロ
セスとして実装されています。実際にはPPP はIP からの送出要求を検出したり、受信したデータをI
P に引き渡すというように、IP とのインターフェイスを必要とします。IP に直接アクセスすること
は、ユーザ・プロセスからはできません。そこで、本実装ではトンネル・ドライバを利用することに
よりIP 層とのインターフェイスを可能としています。
  本PPP は、ユーザが自宅から会社あるいは学校のネットワークをアクセスするために使用すること
を想定し、クライアントとして動作することに重点をおいています。

特徴

 Kermit ライクなユーザインタフェイスを提供し、対話的にPPP を利用することができます。相
手側システムとの接続は、手動/自動のどちらでも可能です。コマンドを用いて対話的に接続の確立/
切断ができるだけでなく、プロトコルの動作状況を知ることもできます。

 対話的に動作する対話モードの他にも、デーモンとして動作する自動モード、直接tty と入出
力をする直接モード、専用線接続に対応した専用線モードが用意されています。

 BSDI-1.1, FreeBSD-1.1 で動作するので、自宅からのダイアルアップIP 接続に利用できます。
パケットの流れを記録するログ機能が用意されていますので、相手側PPP とのパケットのやりとりの
様子をモニタすることが可能です。トンネルドライバは、bpf に対応していますので、tcpdump によ
るモニタリングもできます。

 自動モードで動作させることによりOn-demand dialup 機能が利用できますので、パケットを検
出して自動的にダイアリングすることが可能です。また、idle timer 機能によりパケットの流れが
無くなると自動的に回線を切断することができます。

 自動モードあるいは直接モードとして動作している場合にも、telnet を利用して対話的な操作
が可能です。

 RFC1331, RFC1332 に準拠しています。また、LQR(RFC1333) PAP/CHAP(RFC1334) 機能も有し
    ています。

 Predictor Type-1 によるパケットデータの圧縮機能をサポートしています。

                                            4

パケットの送受信を禁止/許可するためのフィルタリング機能が用意されています。また、On-dem
andでのダイアリングのトリガとなるパケットの制限もフィルタによって指定することができます。

PPP のプロトコル自体はユーザ・プロセスとして動作します。そのため、バグなどにより異常が
発生してもプロセスがコアを吐いて死ぬだけで、システムがパニックを起こす危険を最小限にとどめ
ることができます。

                                            5


Chapter  2

インストール

  インストールの作業は、トンネルデバイスとPPP プログラムのインストールの2 つの部分からなり
ます。あなたが使用するシステムにトンネルデバイスがインストールされていない場合には(まぁ、
普通はそうでしょうが) 、カーネルにデバイスドライバを組み込む必要があります。

2.1     トンネルデバイスのインストール

  トンネルデバイスは、IP 層とのインターフェイスをキャラクタデバイスの形態で提供する特殊デ
バイスです。PPP はこのトンネルデバイスを用いて動作するように設計されていますので、PPP の利
用に先立ってカーネルにトンネルデバイスを組み込んでおく必要があります。

2.1.1    インストール手順

  現在、ドライバはBSDI(BSD/386)1.1 およびFreeBSD-1.1 に対応しています。Drivers のディレク
トリには、それぞれのシステム用のドライバが用意されていますので、それを使ってカーネルを再構
築します。
以下の説明ではBSDI の場合を中心に説明します。

 1. if_tun.cとif_tun.hを/sys/netにコピーします。if_tun.hは/usr/include/netにもコピーして
ください。
     --------------------------------------------------------------------------
     | # cp if_tun.c if_tun.h /sys/net                                          |
     | # cp if_tun.h /usr/include/net                                           |
     --------------------------------------------------------------------------

 2. BSDI の場合には、/sys/kern/subr_pdev.cを編集し、以下の行を追加します。FreeBSD では、
仮想ドライバのアタッチはリンク時に生成されたテーブルを参照して行われるようになっているため
この修正は必要ありません。
     --------------------------------------------------------------------------
     | #ifdef TUN                                                               |
     | #include "tun.h"                                                         |
     | #if NTUN > 0                                                             |
     |          tunattach();                       /* XXX */                    |
     | #endif                                                                   |
     | #endif                                                                   |
      --------------------------------------------------------------------------

                                            6

 3. BSDI では、files を/sys/conf/filesにコピーする。

 4. conf.c.patch を参考に、システムに応じて/sys/i386/i386/conf.cを修正する。すでにドライ
バを追加している場合には、既存のデバイスの番号が変わらないように、追加エントリをcdevsw[]
の最後に追加するようにしてください。

 5. /sys/i386/conf へ移動し、config ファイルを編集し、以下の行を追加する。

    options TUN
    ...
    pseudo-device tun 2

 6. カーネルをconfig, make する。
     --------------------------------------------------------------------------
     | # config XXX                                                             |
     | # cd /sys/compile/XXX                                                    |
     | # make depend; make                                                      |
      --------------------------------------------------------------------------

 7. 新しいカーネルをインストールしてリブートする。

 8. トンネルデバイスのデバイスファイルを作成する。Major number は、conf.cでtun device に
割り当てられたものを使用してください。
     --------------------------------------------------------------------------
     | # cd /dev                                                                |
     | # mknod tun0 c 29 0                                                      |
     | # mknod tun1 c 29 1                                                      |
      --------------------------------------------------------------------------

2.1.2    トンネルデバイスの動作試験

  トンネルドライバの試験のために、ICMP echo server の機能をもつ簡単なプログラムtunecho.cを
用意しました。デバイスとioctl の使い方は、このプログラムを読んでもらえばわかると思います。
  動作試験手順は次のとおりです。試験に際しては、window を2 つ開いておいてください。

 1. tunecho をmake する。
     --------------------------------------------------------------------------
     |  % make                                                                  |
      --------------------------------------------------------------------------


 2. Winodw 1 でtunecho をroot で実行する。引数なし。リターンを押すとプログラムは終了しま
す。
     --------------------------------------------------------------------------
     |          # ./tunecho                                                     |
      --------------------------------------------------------------------------

                                            7

 3. Window 2 でnetstat -i を取ると、tun0 が見えます。ifconfig tun0 してみてください。
     --------------------------------------------------------------------------
     |          % /sbin/ifconfig tun0                                           |
     |          tun0: flags=50<POINTOPOINT,RUNNING>                             |
     |                   inet 100.123.111.2 --> 100.123.111.8 netmask ffffffff  |
     |          %                                                               |
      --------------------------------------------------------------------------

 4. 100.123.111.8 にping してみれば返答が返ってきます。Window 1 で動いているtunecho を止
めればtun0 はダウンしてecho は返ってこなくなります。

2.2     PPP のインストール

  本PPP のインストールは、いたって簡単です。まず、最初にdefs.hを確認してモデムを接続するデ
バイスのデバイス名と接続速度を確認して、必要であれば変更してください。
  defs.hの変更ができたら、makeをしたのち適切なディレクトリにインストールします。なお、イン
ストールの際にはあらかじめppp.conf を自分の利用する環境にあわせて編集しておいてください。
     ---------------------------------------------------------------------------
    |  % make depend; make                                                      |
    |   # su                                                                    |
    |   # make install                                                          |
     ---------------------------------------------------------------------------

2.2.1    モデムの設定

  本PPP を使用するに際しては、モデムを以下のように設定してご利用ください。

 フロー制御にはRTS/CTS を使用する。PPP プログラムは動作を開始すると強制的にRTS/CTS フ
ロー制御を使います。

 キャリアの検出によりDCD が上がり、キャリアがなくなるとDCD が落ちるように設定する。

 DTR がon からoff になったことを検出し、回線の接続を切断する。プログラムを強制的に終了
させた場合に、接続が切れるようにするために必要です。

 PC とモデムの間は、CPU やI/O カードの性能に応じてできるだけ速い速度で接続する。16550
を使っていれば、少なくとも38,400bps で接続できるはずです。

                                            8


Chapter  3

簡単な使い方

  まず最初に最も基本的な対話モードでの動作を説明しましょう。この使い方では、PPP プログラム
はttyをひとつ占有します。利用にあたっては、仮想コンソールあるいは複数のウインドウあるいは
画面を使用できる環境を用意してください。仮想コンソールやwindow コマンドを使えば良いわけで
すが、X Windowが使えるのがベストです。

3.1     手動でのダイアリング

  PPP には端末機能を提供するterm コマンドが用意されています。このコマンドを使ってモデムを
操作してダイアリングをおこなうことができます。

 1. PPP を起動すると、プロンプトが表示されてユーザからのコマンドを受け付ける状態になりま
す。
     --------------------------------------------------------------------------
     | % ppp                                                                    |
     | User Process PPP. Written by Toshiharu OHNO.                             |
     | Log level is 09                                                          |
     | Using interface: tun0                                                    |
     | Interactive mode                                                         |
     | ppp>                                                                     |
      --------------------------------------------------------------------------

 2. show modem コマンドを実行し、モデムの設定を確認してください。設定を変更する必要がある
場合には、set コマンドを使って変更をすることができます。

                                            9

  -----------------------------------------------------------------------------
  | ppp> show modem                                                             |
  | device: /dev/tty00  speed: 38400                                            |
  | cs8, none parity                                                            |
  | connect count: 0                                                            |
  | outq: 63                                                                    |
  | DialScript  = ABORT BUSY ABORT NO\sCARRIER TIMEOUT 5 "" AT OK-AT-OK \pATDT\T|
  | TIMEOUT 20 CONNECT                                                          |
  | LoginScript =                                                               |
  | PhoneNumber =                                                               |
  | ppp>                                                                        |
  | ppp> set speed 19200                                                        |
  | ppp> set device /dev/tty02                                                  |
   -----------------------------------------------------------------------------

3. term コマンドを実行することにより、PPP プログラムは端末モードに入ります。この状態ではキ
ーボードから直接モデムを操作することができます。モデムのAT コマンドを使って接続先を呼び出
してください。
  -----------------------------------------------------------------------------
  | ppp> term                                                                   |
  | at                                                                          |
  | OK                                                                          |
  | atdt0331234567                                                              |
  -----------------------------------------------------------------------------

4. 相手に接続できたら、接続先の方法にしたがって相手側のPPP を起動してください。相手側でPPP
 が動作し始めると、それを検出し自動的にPPP のパケットを処理するモードに移行するとともに
 term コマンド処理を終了し、コマンドプロンプトが表示されます。
 次の例は、IIJ のダイアルアップサービスにログインした場合を示しており、ログインと同時に相
手側でPPP がスタートしています。
  -----------------------------------------------------------------------------
  | CARRIER 14400                                                               |
  |                                                                             |
  | PROTOCOL: LAP-M                                                             |
  |                                                                             |
  | COMPRESSION: V.42BIS                                                        |
  |                                                                             |
  | CONNECT 38400/ARQ                                                           |
  | login: USERNAME                                                             |
  | Password:                                                                   |
  | PPP session from (192.244.177.2) to 192.244.177.13 beginning....            |
  | ppp> Packet mode.                                                           |
   -----------------------------------------------------------------------------

5. 相手とのネゴシエーションがうまく進めば、数秒でPPP>というプロンプトが表示されるハズです。
 (プロンプトが小文字のppp>から大文字のPPP に変化します。)

                                           10

     --------------------------------------------------------------------------
     | ppp> Packet mode.                                                        |
     |                                                                          |
     | PPP>                                                                     |
     |                                                                          |
      --------------------------------------------------------------------------

 6. ここまでくれば、ネットワーク層の接続が確立されています。show ipcp コマンドを実行して、
割り当てられたIP アドレスを確認してください。ディフォルトの設定を使用した場合には、接続先
から指定されたアドレスを使うようになります。
     --------------------------------------------------------------------------
     | PPP> show ipcp                                                           |
     | IPCP [Opend]                                                             |
     |  his side: 192.244.177.2, 2d0f00                                         |
     |  my  side: 192.244.177.13, 2d0f00                                        |
     | connected: 2 secs, idle: 2 secs                                          |
     | Defaults:  My Address: 0.0.0.0/0  His Address: 0.0.0.0/0                 |
     | PPP>                                                                     |
      --------------------------------------------------------------------------

 7. ping, telnet 等のコマンドを使って、接続先との通信が可能なことを確認してください。
     --------------------------------------------------------------------------
     | % ping 192.244.177.2                                                     |
      --------------------------------------------------------------------------

 8. 通信が終了したら、close コマンドを発行します。PPP はLCP で終了処理をした後にモデムを
切ります。モデムの接続が切れたことを確認してquit コマンドを実行するとプログラムを終了しま
す。
     --------------------------------------------------------------------------
     | PPP> close                                                               |
     | ppp>                                                                     |
     | ppp> quit                                                                |
     | %                                                                        |
      --------------------------------------------------------------------------

3.2     自動ダイアリング

  先の例では、手動でダイアル操作をおこないましたが、ダイアリングとログインの手順を登録すれ
ば、自動的に相手側の計算機との接続をおこなうことができます。

 1. show modem コマンドを実行し、DialScript とLoginScript の設定を確認して下さい。

 2. これらの設定はset コマンドを使って変更することができます。DialScript のなかの\T は、P
honeNumerで指定される電話番号をあらわします。詳しくは付録Aを参照してください。また、set コ
マンドを使用する場合には、次の例のように、引用符で囲むのを忘れないでください。

                                           11

     ---------------------------------------------------------------------------
     | ppp> set dial "ABORT BUSY ABORT NO\\sDIALTONE ABORT NO\\sCARRIER TIMEOUT 5|
     | \"\" AT OK-AT-OK ATDT\\T TIMEOUT 30 CONNECT"                              |
     | ppp> set phone 01234566789                                                |
     | ppp> set login "TIMEOUT 5 gin:\\r-gin: Panon word: Panon                  |
     | ppp>                                                                      |
      ---------------------------------------------------------------------------

 3. dial コマンドを実行することにより、指定された手順にしたがってダイアリングとログインの
処理を行います。ダイアルおよびログインの手順が終了した時点でプロンプトに戻ります。そして、
IPCPの接続に成功するとプロンプトが小文字のppp>から大文字のPPP>に変化します。
     --------------------------------------------------------------------------
     | ppp> dial                                                                |
     | dial OK!                                                                 |
     | login OK!                                                                |
     | ppp> Packet mode.                                                        |
     | ppp>                                                                     |
     | PPP>                                                                     |
      --------------------------------------------------------------------------

 4. 接続の終了処理は、手動でclose 及びquite コマンドを用いておこないます。close により接
続が切断された時点でプロンプトは小文字のppp>に変化します。
     --------------------------------------------------------------------------
     | PPP> close                                                               |
     | ppp>                                                                     |
     | ppp> quit                                                                |
     | %                                                                        |
      --------------------------------------------------------------------------

3.3     IP アドレスの指定について

  上記の例では、IP アドレスの指定は何もおこなっていませんでした。じつは、相手側にアドレス
の指定をすべて委ねていたのです。相手側がこちら側で使用すべきアドレスの指定をおこなう機能を
有していない場合や、特定のアドレスを使用したい場合には、以下のようにして使用するアドレスを
指定することができます。
 -------------------------------------------------------------------------------
| ppp> set ifaddr  srcaddr dstaddr                                              |
| ppp> dial                                                                     |
 -------------------------------------------------------------------------------
  ここで、srcaddr はこちら側のインターフェイスで使用するIP アドレスで、dstaddr は接続先で
使用するIP アドレスです。アドレスとして0.0.0.0 (0 と記述可) を指定した場合には相手の指示に
従うことを表します。
  set ifaddr コマンドで設定するのは、あくまでのこちら側で希望するアドレスの指定にすぎない
ことに注意してください。実際には、相手側で利用を希望するアドレスをもっている場合もあります
ので、相手側との調整がつかない場合にはset ifaddr コマンドで指定したアドレスを使って接続が
できるとは限りません。
  接続先との間で使用するアドレスを調整するためには、5.1節で説明するようにアドレスの範囲の
指定を利用することができます。

                                           12

3.4     フラグの指定

  接続先のサポートしている機能に応じて動作を変更するために、動作フラグの変更ができるように
なっています。現在の設定はdisplay コマンドによって表示することができ、動作の変更はenable,
disable,deny, accept の4 つのコマンドでおこないます。

enable  こちら側から相手側に対するオプションの利用の提案を許可します。

disable  こちら側から相手側に対するオプションの利用の提案を禁止します。

accept  相手側からのオプションの利用の提案を受け付けます。

deny  相手側からのオプションの利用の提案を拒否します。

  このように、通信の方向毎にフラグの指定ができますので、たとえば"送信方向にはVJ 圧縮を利用
するが、受信方向では利用しない" といった使い方も可能です。
 -------------------------------------------------------------------------------
| ppp> display                                                                  |
| Current configuration option settings..                                       |
|                                                                               |
| Name             My Side        His Side                                      |
| ----------------------------------------                                      |
| vjcomp           enable         accept                                        |
| lqr              disable        deny                                          |
| chap             disable        accept                                        |
| pap              disable        accept                                        |
| acfcomp          enable         accept                                        |
| protocomp        enable         accept                                        |
| pred1            enable         accept                                        |
| ppp>                                                                          |
| ppp> deny vjcomp                                                              |
| ppp> enable vjcomp                                                            |
 -------------------------------------------------------------------------------

3.5     設定の登録

  アクセスするホストが決まっている場合には、そのホストに対応する設定をあらかじめppp.conf
に登録しておくことができます。このファイルには、インタラクティブに実行するコマンドをそのま
ま列挙することができます。
  ppp.conf は、インストール時に/etcにコピーされていますが、自分のホームディレクトリに.ppp.
conf がある場合には、そちらの方が優先的に参照されます。

                                           13

 -------------------------------------------------------------------------------
| default:                                                                      |
|  set dial "ABORT BUSY ABORT NO\\sDIALTONE ABORT NO\\sCARRIER TIMEOUT 5 \"\" AT|
| OK-AT-OK ATDT\T TIMEOUT 30 CONNECT                                            |
|  deny lqr chap pap                                                            |
|                                                                               |
|  disable lqr                                                                  |
| host1:                                                                        |
|                                                                               |
|  set login "TIMEOUT 5 gin:\\r-gin: Panon word: Panon                          |
|  set phone 01239874321                                                        |
 -------------------------------------------------------------------------------
  表記の規則は以下のとおりです。

 ラベル名は行の左端から記入し、その行には他の情報を含むことはできません。

 そのラベルに対応するコマンドはラベル名の行以降に連続して登録します。ただし、行の先頭
にはひとつ以上の空白を入れてください。また、各行には複数のコマンドを入れることはできません。

 行が#で始まっている場合には、その行はコメントであると解釈されます。

 default というラベル名は、PPP の起動時に自動的に実行するコマンドを表現するために使用
されます。

  このように、ppp.conf にコマンドが登録されている場合には、loadコマンドを使って登録されて
いるコマンドを自動的に実行することができます。また、dialコマンドに引数を付けた場合には、引
数で指定されたラベルに対応するコマンドを実行してダイアリングをおこないます。
 -------------------------------------------------------------------------------
| ppp> load remote                                                              |
| ppp> dial                                                                     |
|       or                                                                      |
| ppp> dial remote                                                              |
| ppp>                                                                          |
 -------------------------------------------------------------------------------
  load コマンドにおいて、引数が省略された場合には、default の設定が実行されます。

                                           14


Chapter  4

動的な発呼

  起動時に-autoオプションを指定することにより、PPP プログラムは自動モードで動作します。こ
のモードでは、パケットの流れを検出して自動的にダイアルをさせることが可能です。

4.1     自動モードでの起動

  -autoオプションを指定する場合には、相手のアドレスを求めるために、ppp.conf 中に登録されて
いるラベル名が指定されている必要があります。また、そのラベルに対応するコマンドの中にはset
ifaddr コマンドによって接続先のアドレスが指定されていなければなりません。
  たとえば、ppp.conf 中に、
 -------------------------------------------------------------------------------
| iijnet:                                                                       |
|  set phone 0334569876                                                         |
|  set login "TIMEOUT 5 gin:-\\r-gin: ppp word: ppp"                            |
|  set ifaddr 192.244.188.5 192.244.176.50                                      |
 -------------------------------------------------------------------------------
  という定義がされていたとしましょう。自動モードでラベル名iijnet を指定するとPPP が起動さ
れるとともに、上記の一連のコマンドが実行されます。
 -------------------------------------------------------------------------------
| % ppp -auto iijnet                                                            |
| User Process PPP. Written by Toshiharu OHNO.                                  |
| Log level is 09                                                               |
| Using interface: tun0                                                         |
| Automatic mode                                                                |
| %                                                                             |
 -------------------------------------------------------------------------------
  自動モードで起動されると、ppp プログラムは自動的にバックグラウンドでデーモンとして動作し
ますので、シェルのプロンプトが再び表示されます。この状態で相手側のアドレス(例では192.244.1
76.50) 宛のパケットが検出されると、自動的にダイアリングがおこなわれます。
  フィルタリング機能を用いれば、発呼のきっかけとなるパケットを制限することもできます。詳し
くは7章を参照してください。

                                           15

4.2     telnet の利用

  バックグラウンドで動作しているデーモンとは、telnet を使って通信をすることができます。ポ
ート番号として3000 + トンネルデバイス番号を指定すれば、対応するデーモンのプロンプトが表示
されます。
  この機能を利用することにより、各種プロトコル関係の情報をshow コマンドを用いて知ることが
できますし、close コマンドを使って回線の強制的な切断もおこなえます。
  quit コマンドは自動モードで動作しているデーモンとの接続を切断する意味を持ちます。デーモ
ンの動作を終了させるためには、quite allと指定してください。

    使用するシステムによってはtelnet でうまくPPP プログラムと通信できないことがあります。
PPP プログラムが、ちゃんとtelnet プロトコルを実装していないのが原因ですが、BSD 系統のUnix
に付属するtelnet であれば問題なく使えるはずです。

4.3     Anonymous PPP

  自動モードで起動する際には、次の例に示すようにこちら側のアドレスの指定を省略することも可
能です。
 -------------------------------------------------------------------------------
| set ifaddr 0 192.244.198.1                                                    |
 -------------------------------------------------------------------------------
  このような起動をおこなった場合でも、192.244.198.1 宛のパケットを検出した時点で自動的にダ
イアリングがおこなわれて、相手先にパケットを送出しようとします。しかしながら、この時点では
自分の側のアドレスが指定されていないために、ソースIP アドレスは0.0.0.0 としてパケットが送
出されてしまい、相手側のホストは返答を返すことができません。ダイアリングをおこなって、IPCP
 のアドレス調停が終了すれば、相手からの指定にしたがってインターフェイスにアドレスが設定さ
れますので、それ以後は正常に通信がおこなえるようになります。
  このように、相手側がアドレスの指定をおこなう場合には、まず最初にリンクを確立してアドレス
の指定を受け取るために、ダミーのping パケットをひとつ投げておき、接続が確立するのを待って
から実際の通信をおこなうと良いでしょう。
 -------------------------------------------------------------------------------
| % /sbin/ping shimanto                                                         |
| PING shimanto (192.244.198.1): 56 data bytes                                  |
| ^C                                                                            |
| --- 192.244.198.1 ping statistics ---                                         |
| 1 packets transmitted, 0 packets received, 100% packet loss                   |
| %                                                                             |
| % telnet shimanto                                                             |
| Trying 192.244.198.1...                                                       |
| Connected to shimanto.iij.ad.jp.                                              |
| Escape character is '^]'.                                                     |
|                                                                               |
|                                                                               |
| BSDI BSD/386 1.1 (shimanto.iij.ad.jp) (ttyp2)                                 |
 -------------------------------------------------------------------------------

                                           16

4.4     再ダイアル

  自動モードで動作している場合には、相手との接続が切断された場合でもPPP プログラムは動作を
続け、次の発呼のトリガとなるパケットが見つかった時点で再度ダイアリングをおこないます。
  ダイアリングの時点でBUSY などの理由により失敗した場合には、連続してダイアリング動作が発
生することを避けるために、30 秒間の再ダイアル待ち時間を設けています。この間は、発呼のトリ
ガとなるパケットがあっても全て無視されます。待ち時間経過後、自動的に再ダイアルする機能は用
意されていませんので注意してください。あくまでも、ダイアリングのきっかけとなるパケットがあ
ることが必要です。

                                           17


Chapter  5

アドレスとルーティング

  PPP を利用して、リモートのネットワークとの接続を正しくおこなうためには、アドレスとルーティ
ングの指定について、PPP の動作モードとあわせて理解しておくことが重要です。この章では、これ
らの事項についての説明をします。

5.1     IP アドレスの調停

  PPP ではIPCP というプロトコルを利用することにより、接続相手とのあいだで双方が用いるIP ア
ドレスを相談して決めることができます。この相談は、以下のような手順を踏むことにより決定され
ます。

 1. 双方は互いに、自分の側で使用したいIP アドレスを相手に伝えます。

 2. 相手の主張するアドレスを使わせてもよければ、それを認めます。

 3. 相手の主張が認められなければ、別のアドレスを使用することを提案します。

 4. 自分の主張がとおらなくても、相手の提案を受け入れることができれば、そのアドレスを使う
ことにします。

 5. 相手の提案で折れることができなければ、自分の主張を繰り返します。

 6. 上記の操作を何回か繰り返しても妥協することができなければ、接続をあきらめます。

  つまり、双方が互いに相手が利用を希望するアドレスをすんなりと受け入れることができれば、め
でたく接続を確立することができますが、相手が自分の希望を受け付けてくれない場合には何度か交
渉を繰り返し、それでも妥協点が見出せない場合には接続を確立することができないわけです。
  本実装では、自分側のアドレス/相手側のアドレスが、あらかじめ定められた範囲のなかにあるか
どうかで、動作を制御することができるようになっています。つまり、相手が主張あるいは提案した
アドレスが、あらかじめ定められた範囲のなかであればそれを認めますが、範囲外であれば認めずに
自分が使用したいアドレス(あるいは相手に使用させたいアドレス) を主張(提案) し続けます。
  自分側で使用したいアドレス、および相手側で使用してもらいたいアドレスは、set ifaddr コマ
ンドで指定することができます。また、現在の設定はshow ipcp コマンドで確認することができます。
 -------------------------------------------------------------------------------
| set ifaddr  src-range  dst-range                                              |
 -------------------------------------------------------------------------------
  ここで、src-range, dst-range は、自分側/相手側で使用したい(させたい) アドレスの範囲を表
現し、

                                           18

    ip-address[/mask-width]

の形式で指定します。mask-width は、アドレスの有効範囲を限定するためのビット長で、0 から32
までの値をとります。便宜的に、mask-width が省略された場合には32 が指定されたものと了解され
ます。
  また、ip-address として、0.0.0.0 が指定された場合には、相手の主張あるいは提案を無条件に
受け付ける効果を持ちます。

例1
 -------------------------------------------------------------------------------
| ppp> set ifaddr 192.244.176.60 192.244.176.33                                 |
| ppp> show ipcp                                                                |
| IPCP [Initial]                                                                |
|  his side: 0.0.0.0, 0                                                         |
|  my  side: 0.0.0.0, 0                                                         |
| connected: 0 secs, idle: 0 secs                                               |
| Defaults:  My Address: 192.244.176.60/32  His Address: 192.244.176.33/32      |
| ppp>                                                                          |
 -------------------------------------------------------------------------------

 自分側のアドレスとしては、192.244.176.60 の利用を主張し、それ以外のアドレスは認めない。

 相手側のアドレスとしては192.244.176.33 を使用するように提案し、それ以外のアドレスは認
めない。

という意味になります。

例2
 -------------------------------------------------------------------------------
| ppp> set ifaddr 0 0                                                           |
| IPCP [Initial]                                                                |
|  his side: 0.0.0.0, 0                                                         |
|  my  side: 0.0.0.0, 0                                                         |
| connected: 0 secs, idle: 0 secs                                               |
|                                                                               |
| Defaults:  My Address: 0.0.0.0/0  His Address: 0.0.0.0/0                      |
| ppp>                                                                          |
 -------------------------------------------------------------------------------
  完全に相手側にアドレスの決定を任せることを指定します。

例3
 -------------------------------------------------------------------------------
| ppp> set ifaddr 192.244.176.60/24 192.244.184.9/29                            |
 -------------------------------------------------------------------------------

 自分側のアドレスとしては、192.244.176.60 の利用を主張するが、相手が192.244.176.0 から
192.244.176.255の範囲のアドレスの使用を提案してきた場合には、それを受け入れる。

                                           19

 相手側の主張するアドレスが、192.244.184.8 から192.244.184.15 の範囲内であれば、それを
認める。そうでなければ、192.244.184.9 を使用するように提案する。

注意

  mask-width を省略した場合と、0 を指定した場合の意味の違いに注意してください。

 192.244.184.4 という指定は192.244.184.4/32 と同義で、アドレスが192.244.184.4 でなけれ
ばならないことを指定します。

 192.244.184.4/0 という指定は、192.244.184.4 を使いたいことを希望はしますが、相手側が
別のアドレスを指定すればそれに従います。

5.2     ルーティング

  上述したような仕組みにより、リモートのマシンあるいはルータとのアドレスの調停がおこなわれ
接続ができます。しかしながら、これだけではPPP でつながったそのマシンまでは到達することはで
きても、その先につながっているネットワークにはアクセスすることはできません。なぜなら、PPP
の接続の結果つくられるルーティングは相手側のアドレスへのホスト・ルートだけで、その先につな
がっているネットワークへのルーティング情報はまだ用意されていないからです。
  PPP を使って、自分側のネットワークと相手側のネットワークとを相互に接続するためには、双方
で互いのネットワークに対するルーティングを用意しなければなりません。RIP のような経路制御プ
ロトコルを使用している場合には互いにルーティング情報が交換されるのを待っていれば、自動的に
設定をおこなうことができます。そうでなければ、静的にルーティングを設定してやる必要がありま
す。
  自宅のPC をPPP を使って会社や学校のネットワークに接続するような場合には、自分側はリモー
トのネットワークのひとつのIP アドレスを使って、ぶらさがるという使い方が一般的です。そのよ
うな場合には、自分以外のアドレスに到達するため接続の相手先をディフォルト・ゲートウェイとし
て使用することになりますので、
 -------------------------------------------------------------------------------
| # route add default 接続相手のアドレス                                        |
 -------------------------------------------------------------------------------
  というコマンドを実行することになります。接続のたびに、このおまじないを実行するのは面倒で
すので、後述するppp.linkup というファイルを用意しておくことにより、接続後自動的にルーティ
ングを追加することが可能です。

5.3     自動モードとルーティング

  自動モードを使って、パケットの送出要求が発生した時に動的にダイアリングをおこない、接続を
確立することができることはすでに説明しました。しかしながら、リモートのネットワークにパケッ
トを送出するためには、あらかじめそのネットワークへのルーティングが用意されていなければなり
ません。
  set ifaddr コマンドを使うことにより、インタフェースで使用するアドレスを指定することがで
きますが、この時に作成されるルーティングは接続相手へのホスト・ルーティングだけです。ネット
ワークへのルーティングをからかじめ作成しておきたい場合には、ppp.conf 内でネットワークへの
ルーティングを指定しておきます。

                                           20

 -------------------------------------------------------------------------------
| iijnet:                                                                       |
|  set phone 0334569876                                                         |
|  set login "TIMEOUT 5 gin:-\\r-gin: ppp word: ppp"                            |
|  set ifaddr 192.244.188.5 192.244.176.50                                      |
|  add 192.244.176.0 255.255.255.0 192.244.176.50                               |
 -------------------------------------------------------------------------------
  この例のように指定しておけば、192.244.176.50 へのパケットが検出された時だけでなく、ネッ
トワーク192.244.176.0 上の任意のホストへのパケットが検出された時に自動的に発呼することがで
きるようになります。

5.4     ルーティングの自動設定

  自動モードを使用した場合には、接続に先立ってインターフェイスが活性化されていますので、前
述のようにインターフェイスを利用するルーティングをあらかじめ指定しておくことができます。し
かしながら、自動モード以外では接続が確立した時点ではじめてインターフェイスが活性化されます
ので、それまではそのインターフェイスを利用するルーティングを指定することはできません。
  このように、接続が確立してからルーティングを指定する場合には、ppp.linkup でルーティング
の指定をしておきます。このファイルでは接続相手を指定するラベル名やアドレスが指定できますの
で、接続先に応じたルーティングの設定をおこなうことが可能です。add コマンドでのアドレスの指
定では、HISADDRという文字列は接続先のアドレスを表現しますので、接続先のアドレスが前もって
わかっていなかったり、動的に変化するような場合にも対応することが可能です。
 -------------------------------------------------------------------------------
| iijnet:                                                                       |
|  add 192.244.176.0 255.255.255.0 HISADDR                                      |
 -------------------------------------------------------------------------------

                                           21


Chapter  6

着信機能の利用

  PPP プログラムを-directオプションを指定して使用することにより、直接モードで動作させるこ
とができます。このモードを使うと着信をサポートすることができます。

6.1     着信のための設定

  着信を受け付けるためにはアカウントの作成をはじめとして、モデムやtty の設定といった作業が
必要となります。ここでは、BSDI をシステムとして利用する場合の具体的な設定例を示します。

6.1.1    /etc/gettytab

  モデムが38400bps をサポートできるのであれば、bidir.19200 を参考にしてbidir.38400 のエン
トリを作成します。
 -------------------------------------------------------------------------------
| bidir.38400:\                                                                 |
|      :bi:ap:hf:tc=38400-baud:                                                 |
 -------------------------------------------------------------------------------

6.1.2    /etc/ttys

  モデムの接続されているtty でgetty を走らせるように設定します。設定後、kill -1 1 を実行し
ておきます。
 -------------------------------------------------------------------------------
| tty00  "/usr/libexec/getty bidir.38400"  dialup on                            |
 -------------------------------------------------------------------------------

6.1.3    アカウントの作成

  まず最初に/etc/passwd を編集してPPP でログインするためのアカウントを作成します。
 -------------------------------------------------------------------------------
| ppp:*:21:0:PPP Login:/home/ppp:/usr/local/bin/ppplogin                        |
 -------------------------------------------------------------------------------
  つぎに、PPP のアカウント用のホームディレクトリに.hushlogin と.ppp.conf を作成しておきま
す。

                                           22

 -------------------------------------------------------------------------------
| # cd "ppp                                                                     |
| # touch .hushlogin                                                            |
| # cp /etc/ppp.conf .ppp.conf                                                  |
| # chown ppp .hushlogin .ppp.conf                                              |
 -------------------------------------------------------------------------------
  PPP のアカウントでログインした場合には、以下のようなコマンドを実行するようにしておいてく
ださい。ここの例では/usr/local/bin/ppplogin が以下の内容になるわけです。また、このスクリプ
トが実行できるようにchmod しておくことも忘れずに。
 -------------------------------------------------------------------------------
| /usr/local/bin/ppp -direct                                                    |
 -------------------------------------------------------------------------------
  ログインに成功して直接モードでのPPP の動作が開始されると、"Packet mode enabled." という
メッセージが出力されます。発呼側のシステムでは、このメッセージを確認することにより、PPP が
動作を開始したことを確認することができます。

6.1.4    モデム

  モデムを以下のような設定にし、着信ができるようにしてください。

 フロー制御にはRTS/CTS を使用する

 リング1 回程度で着呼を受け付ける

 DTR がon からoff になったことを検出し、回線の接続を切断する

6.2     発信側の設定

  発信側では、着信側の設定に応じてログインができるようにchat script を作成します。パスワー
ドを送信するだけでなく、enabled という文字列を確認するところまでスクリプトを用意しておくと
いいでしょう。

                                           23


Chapter  7

フィルタリング機能

  外のネットワークとの通信を制御するために、フィルタリングの機能が用意されています。フィル
タリ
ング機能では、source およびdestination に対するパケットのアドレス、プロトコル、ポート番号
を限定することにより通過するパケットを制限することができます。
  フィルタには受信されるパケットに対するもの(ifilter) と送信されるパケットに対するもの(ofi
lter) 、およびダイアリング動作のトリガとなるパケットを指定するもの(dfilter) の3 種類が用意
されています。

7.1     指定方法

  フィルタの指定は、パケットの通過を許可/禁止する規則を列挙することによりおこないます。実
際にパケットを処理する場合には、列挙された順序で規則との一致を確認します。指定された規則の
いずれとも一致しない場合には、そのパケットの通過は禁止されます。
  規則の指定はset ifilter, set ofilter, またはset dfilter コマンドを用いておこないます。そ
の書式は次のとおりです。

    set filter-name rule-no action [ src_addr/src_width ] [ dst_addr/dst_width ]
                 [ proto [ src [ lt_eq_gt ] port ] [ dst [ lt_eq_gt ] port [ estab ]

filter-name  フィルタの名前として、ifilter, ofilter またはdfilter を指定します。

rule-no  規則の番号を指定します。規則は番号順に一致するものを探し、一致するものが見つかっ
た時点で、その規則で指定されているactionに従って処理されます。ただし、規則番号0 が定義され
るまでは全ての規則は無効となっており全てのパケットの通過が許可されています。
    規則番号として1 を指定すると、対応するフィルタの定義はすべてクリアされます。

action  permit またはdeny を指定することにより、規則と一致した時にそのパケットの通過を許可
するか禁止するかを指示します。clear を指定すると、対応する番号の規則の定義がクリアされます。

src_addr  パケットのソースアドレスを指定します。スラッシュに続いてビット幅が指定された場合
には、アドレス指定のうちの検査に利用される部分のビット幅であると解釈されます。

dst_addr  パケットのデスティネーションアドレスを指定します。スラッシュに続いてビット幅が指
定された場合には、アドレス指定のうちの検査に利用される部分のビット幅であると解釈されます。

proto  パケットのプロトコル種別を指定します。icmp, udp, tcp のいずれかを指定することができ
ます。
    proto が指定された場合には、以下のようにさらにオプションを指定することができます。

                                           24

     icmp src eq icmp-type
       指定したタイプのICMP パケットとだけ規則が一致します。
     udp src op port dst op value
       指定した範囲のソースあるいはデスティネーションのポート番号をもつUDP パケットとだけ
       規則が一致します。演算子opとしては、eq, lt, gt のいずれかひとつが指定できます。
     tcp src op port dst op value estab
       udp の場合と同じようにポート番号の範囲を指定できます。さらに、estab というキーワー
   ドが指定されている場合には、すでに接続が確立されている場合にだけ、規則が一致します。

7.2     設定例

  ここでは、自宅からインターネットワークへアクセスすることを実際に想定して、フィルタを設定
してみましょう。"自分のマシンからは比較的自由に外のネットワークをアクセスしたいけれども、
外のネットワークからはアクセスされたくない" というのは一般的な要望であろうと思われます。こ
こでは以下のような条件を想定してみましょう。

 ICMP パケットをきっかけとしてのダイアリングは禁止する。

 外のネットワークへのtelnet アクセスは許可する。

 外のネットワークへのftp アクセスは許可する。

 DNS のパケットの通過は許可する。

 自分の会社のネットワーク(この例では192.244.191.0/24) との通信は許可する。

 他の全てのパケットの通過は禁止する。

  具体的な設定例は7.1のようになります。

 まず、dfilter 0 でICMP パケットによるダイアリングを禁止します。dfilter 1 は、その他の
パケットでのダイアリングを許可するために必要です。0.0 は全てのアドレスとマッチすることに注
意してください。

 113 番ポートへのアクセスをするident パケットを通すようにしておきます。この許可がない
と、identdを動かしているftp サーバ等へのアクセスに時間がかかるようになってしまいます。

 ifilter 1 とofilter 1 はtelnet でのアクセスを許可するためのものです。estabを付けるこ
とにより、自分側から接続要求を出したものだけが受信されることを保証できます。

 同様にifilter 2 とofilter 2 でftp でのアクセスを許可しますが、これだけではデータの転
送ができませんので、ifilter 3 とofilter 3 を使ってこれを許可します。

 ifilter 4 とofilter 4 は、DNS サーバへの問い合わせを可能にします。

 ifilter 5 とofilter 5 で、アドレスを制限することにより、自分の会社のネットワークとの
間だけで任意のパケットの通信を可能にします。

                                           25
 -------------------------------------------------------------------------------
| #                                                                             |
| # Don't dial with ICMP packet                                                 |
| #                                                                             |
|  set dfilter 0 deny icmp                                                      |
|  set dfilter 1 permit 0/0 0/0                                                 |
| #                                                                             |
| # Allow ident packet pass through                                             |
| #                                                                             |
|  set ifilter 0 permit tcp dst eq 113                                          |
|  set ofilter 0 permit tcp src eq 113                                          |
| #                                                                             |
| # Allow telnet connection to the Internet                                     |
| #                                                                             |
|  set ifilter 1 permit tcp src eq 23 estab                                     |
|  set ofilter 1 permit tcp dst eq 23                                           |
| #                                                                             |
| # Allow ftp access to the Internet                                            |
| #                                                                             |
|  set ifilter 2 permit tcp src eq 21 estab                                     |
|  set ofilter 2 permit tcp dst eq 21                                           |
|  set ifilter 3 permit tcp src eq 20 dst gt 1023                               |
|  set ofilter 3 permit tcp dst eq 20                                           |
| #                                                                             |
| # Allow access to DNS                                                         |
| #                                                                             |
|  set ifilter 4 permit udp src eq 53                                           |
|  set ofilter 4 permit udp dst eq 53                                           |
| #                                                                             |
| # Allow access from/to my company network                                     |
| #                                                                             |
|  set ifilter 5 permit 192.244.191.0/24 0/0                                    |
|  set ofilter 5 permit 0/0 192.244.191.0/24                                    |
| #                                                                             |
| # Allow ping and traceroute response                                          |
| #                                                                             |
|  set ifilter 6 permit icmp                                                    |
|  set ofilter 6 permit icmp                                                    |
|  set ifilter 7 permit udp dst gt 33433                                        |
 -------------------------------------------------------------------------------

                                  Figure 7.1: フィルタの設定例

 ping やtraceroute にも答えないというのも、考えものなので6 と7 のルールでこれらに答え
るようにします。traceroute では、検査に使用するポート番号がパケットごとに変化しますので、g
t を使って範囲を指定しています。

 上記以外のパケットは規則のいずれとも一致しないので、通過を禁止され捨てられることにな
ります。

  上記のような設定がなされている場合に各フィルタを表示すれば、次のような表示が得られます。

                                           26
 -------------------------------------------------------------------------------
| ppp> show dfilter                                                             |
|  0 deny    0.0.0.0/0 0.0.0.0/0 icmp                                           |
|  1 permit 0.0.0.0/0 0.0.0.0/0                                                 |
| ppp> show ifilter                                                             |
|  0 permit 0.0.0.0/0 0.0.0.0/0 tcp dst eq 113                                  |
|  1 permit 0.0.0.0/0 0.0.0.0/0 tcp src eq 23 estab                             |
|  2 permit 0.0.0.0/0 0.0.0.0/0 tcp src eq 21 estab                             |
|  3 permit 0.0.0.0/0 0.0.0.0/0 tcp src eq 20 dst gt 1023                       |
|  4 permit 0.0.0.0/0 0.0.0.0/0 udp src eq 53                                   |
|  5 permit 192.244.191.0/24 0.0.0.0/0                                          |
|  6 permit 0.0.0.0/0 0.0.0.0/0 icmp                                            |
| ppp> show ofilter                                                             |
|  0 permit 0.0.0.0/0 0.0.0.0/0 tcp src eq 113                                  |
|  1 permit 0.0.0.0/0 0.0.0.0/0 tcp dst eq 23                                   |
|  2 permit 0.0.0.0/0 0.0.0.0/0 tcp dst eq 21                                   |
|  3 permit 0.0.0.0/0 0.0.0.0/0 tcp dst eq 20                                   |
|  4 permit 0.0.0.0/0 0.0.0.0/0 udp dst eq 53                                   |
|  5 permit 0.0.0.0/0 192.244.191.0/24                                          |
|  6 permit 0.0.0.0/0 0.0.0.0/0 icmp                                            |
|  6 permit 0.0.0.0/0 0.0.0.0/0 udp dst gt 33433                                |
| ppp>                                                                          |
 -------------------------------------------------------------------------------

7.3     注意事項

 フィルタリングができるのは、PPP で接続したホストとの間で交換されるパケットだけです。e
thernetあるいはその他のネットワークで接続したホストとの間で通信されるパケットの制御はでき
ません。

 フィルタリングの指定をする規則の最大数は、ifilter, ofilter ともに20 となっています。

 サポートされているプロトコル(ICMP, UDP, TCP) 以外のプロトコルが検出された場合には、ア
ドレスの指定によって通過が許可されていない限り、そのパケットの通過は禁止されます。

                                           27


Chapter  8

接続相手の認証

  本PPP では、接続相手を確認するための認証プロトコルとして、PAP とCHAP をサポートしていま
す。この章では、これらの認証方法を利用するための設定について説明します。

8.1     PPP での接続と認証手続き

  PPP によるIP 接続では、相手との接続を確立するまでに以下のような手順を踏みます。

 1. LCP によりリンクレベルの情報を交換する。ここでは、使用するMRU やACCMAP の値を交換する
とともに、認証プロトコルやLQR プロトコルを使用するかどうかも相談します。相手が認証プロトコ
ルをサポートしていない場合には、接続を断ることもできます。

 2. LCP で認証プロトコルを使用することになれば、LCP がオープンしたのちにPAP あるいはCHAP
を使って、接続する相手を確認します。ユーザ名(システム名) とパスワードを受け取ることにより、
接続相手を確認するとともに、使用するIP アドレスを限定することができます。相手が正しいユー
ザ名とパスワードを持っていない場合には、接続を切断します。

 3. IPCP によりIP アドレスの調停をおこないます。認証の際に取得した相手システムの名前に応
じて使用するIP アドレスを制御することができます。

  認証プロトコルを使用するかどうかは、enable/disable およびaccept/deny コマンドで制御する
ことができます。

        +---------------+---------------------------------------------------------------+
        | enable pap    |相手に対して、PAP を使って自分を証明することを要求します。     |
        | enable chap   |相手に対して、CHAP を使って自分を証明することを要求します。    |
        | disable pap   |相手に対して、PAP を使うことを要求しません。                   |
        | disable chap  |相手に対して、CHAP を使うことを要求しません。                  |
        | accept pap    |PAP の要求に答えられることを示します。                         |
        | accept chap   |CHAP の要求に答えられることを示します。                        |
        | deny pap      |PAP の要求には答えられないことを示します。                     |
        | deny chap     |CHPP の要求には答えられないことを示します。                    |
        +---------------+---------------------------------------------------------------+

                                           28

8.2     自分の証明

  接続相手が認証手続きを必要とする場合には、システム名とパスワードを相手に送って、自分が何
者であるかを明らかにしなくてはなりません。この情報は、set authname およびset authkey コマ
ンドによって指定します。
  例えば接続相手がPAP を要求する場合には、次のように設定をおこないます。
 -------------------------------------------------------------------------------
|  accept pap                                                                   |
|  disable chap                                                                 |
|  set authname MySystemName                                                    |
|  set authkey MyPassword                                                       |
 -------------------------------------------------------------------------------
  CHAP を使用する場合には、accpet chap, deny pap と設定しまが、この時もauthname とauthkey
の情報が利用されます。ただしCHAP では証明を要求した側から、そのシステム名がCHALLENGE パケッ
トとともに送られてきますので、その名前をもとに次の節で説明するppp.secret を探して対応する
秘密鍵を求めます。相手のシステム名がppp.secret に見つからない場合にのみ、authkey の内容を
秘密鍵として用います。

8.3     相手の確認

  認証プロトコルを使用するためには、まずenable コマンドによりその要求を発するように設定を
おこなっておきます。
 -------------------------------------------------------------------------------
|  enable chap                                                                  |
|  disable pap                                                                  |
 -------------------------------------------------------------------------------
  接続相手に自分を証明をすることを要求した場合には、相手側からシステム名とパスワードが送ら
れてきますので、これを確認しなければなりません。この確認作業は/etc/ppp.secret(あるいは$HOM
E/.pppsecret)を参照することによりおこなわれます。このファイルの中にシステム名が登録されて
いなかったり、パスワードが間違っている場合には、接続を拒否します。
  パスワードが正しい場合には、さらにppp.secret の中にアドレス範囲が指定されているかどうか
調べられます。アドレス範囲が指定されていた場合には、その範囲が後のIPCP でのアドレス調停の
際に相手側に使用させるアドレスを制約するのに用いられます。
 -------------------------------------------------------------------------------
| oscar    SdbE#3qw  192.244.186.17/29                                          |
| bigbird TopSecret 192.244.186.33/32                                           |
 -------------------------------------------------------------------------------
  アドレスの制限が指定されていた場合には、すでにifaddr コマンドにより制限が指定されていて
も、ppp.secret での指定の方が優先されます。

                                           29


Chapter  9

その他の機能

9.1     Idle Timer

  しばらくパケットの流れがないと自動的に回線を切断するidle timer 機能が実装されています。
ディフォルトのタイムアウト時間は180 秒の設定となっています。変更したい場合には、set timeou
t コマンドを使ってください
 -------------------------------------------------------------------------------
| ppp> set timeout 120                                                          |
| ppp> show timeout                                                             |
|  Idle Timer: 120 secs    LQR Timer: 30 secs                                   |
| ppp>                                                                          |
 -------------------------------------------------------------------------------
  自動モードで動作している場合には、切断後パケットの流れを検出すると、再度自動的にダイアリ
ングがおこなわれます。Idle timer が動作した場合には、リンク層での接続は切断されても、TCP
層での切断は接続されないことに注意してください。たとえば、telnet を使ってリモートホストに
ログインしていた場合には、回線が切断されても、telnet のセッションは残ったままになっていま
す。

9.2     ログ機能

  オプションの調停の様子やパケットの流れをログ・ファイルに記録することが可能です。PPP を起
動すると、ppp.log という名前のファイルが生成されます。このファイルに記録される情報の内容は、
set debugコマンドによって指定することができます。低レベルのログの記録を指定するほど記録さ
れる情報量は多くなりますが、その分オーバヘッドが大きくなりますので注意してください。Async
レベルの指定をしてftp を使ったりするとログファイルはアッという間にメガ単位になりますよ。
  記録するレベルとしては、以下のものが指定できます。指定の際に、複数のレベルを指定すれば、
それぞれのレベルでの記録が生成されます。

9.3     能動的オープン

  本PPP の実装では、相手側がPPP での接続を開始するまでは、こちら側からは何も接続動作をおこ
なわないようになっています。これは、LCP を受動的にオープンするようになっているためです。
  ところが、接続先によっては相手も受動的にLCP をオープンする場合も考えられます。そのような
場合には互いに相手がLCP を話し始めるのを待ってしまい、いつまで待っても接続ができないことに
なってし

                                           30

              +---------+-------------------------------------------------------+
              | phase   |フェーズの遷移の様子を記録します。                     |
              | chat    |モデムとのチャットの様子を記録します。                 |
              | lqm     |LQM のレポートを記録します。                           |
              | lcp     |LCP/IPCP/CHAP の動作の様子を記録します。               |
              | tcp/ip  |IP パケットの流れの様子を記録します。                  |
              | hdlc    |HDLC のレベルで、流れるパケットの内容を全て記録します。|
              | async   |モデムとの間で流れるデータを全て記録します。           |
              +---------+-------------------------------------------------------+

まいます。そこで、本実装ではset openmode を使って能動的にオープンすることを指示することが
できるようになっています。現在の設定が受動的(passive) と能動的(active) のどちらになってい
るかは、showlcp コマンドによって確認することができます。
 -------------------------------------------------------------------------------
| ppp> set openmode active                                                      |
| ppp> show lcp                                                                 |
| LCP [Closed]                                                                  |
|  his side: MRU 576, ACCMAP 00000000, PROTOCOMP 1, ACFCOMP 1 MAGIC 649fe9fb    |
|  my  side: MRU 512, ACCMAP 00000000, PROTOCOMP 1, ACFCOMP 1 MAGIC fd56a490    |
| Defaults:    MRU = 512, ACCMAP = 00000000         Open Mode: active           |
| ppp>                                                                          |
 -------------------------------------------------------------------------------

9.4     仮想的なネットワークの構築

  既存のネットワークを利用してPPP を使うと、ネットワークを経由しているのにもかかわらず仮想
的に2 点間を直接つないでいるように見せかけることができます。このテクニックを使えば、外のネッ
トワークからアクセスしているのにもかかわらず、あたかも自分の会社のネットワークに直接つなげ
ているような環境も構築できます。

9.4.1    PPP over TELNET

  まず最初に紹介する例は、TELNET プロトコルの上で、PPP を走らせるものです。会社側のネット
ワークに端末サーバが用意してあり、そこにダイアルすることにより、社内のネットワークにtelnet
 経由でログインするすることができると想定しましょう。端末サーバはtelnet の機能しかもってい
ないので、ログインすることはできても、ftp を使って会社のマシンから自分のマシンにファイルを
転送するようなことはできません。しかし、telnet のプロトコルの上でさらにPPP を走らせること
ができれば、端末サーバが間に介在していることを無視して、仮想的にtelnet しているホストと自
分のマシンがPPP を使ってIP 的に接続されることになりますから、ftp を使うこともできるように
なってしまいます。
  具体的には、つぎのような手順でこのような仮想的なIP リンクを作成することができます。

 1. 自分側のマシンでPPP を起動したら、escape コマンドを使ってtelnet プロトコルが自分のコ
マンドを処理するために利用するIAC(0xff) のコードをPPP ではエスケープして通すことを指定して
やります。

                                           31

  -----------------------------------------------------------------------------
  | % ppp                                                                       |
  | User Process PPP. Written by Toshiharu OHNO.                                |
  | Log level is 09                                                             |
  | Using interface: tun0                                                       |
  | Interactive mode                                                            |
  | ppp> set escape 0xff                                                        |
  | ppp>                                                                        |
   -----------------------------------------------------------------------------

2. term コマンドを使ってモデムからダイアリングすることにより会社の端末サーバにアクセスしま
す。
  -----------------------------------------------------------------------------
  | ppp> term                                                                   |
  | Enter to terminal mode.                                                     |
  | Type `~?' for help                                                          |
  | at                                                                          |
  | OK                                                                          |
  | atdt0399991111                                                              |
  |                                                                             |
  | CONNECT                                                                     |
  -----------------------------------------------------------------------------

3. ここでは、端末サーバに接続されるとtelnet で接続する相手のホスト名を聞いてくるものと仮定
しましょう。
  -----------------------------------------------------------------------------
  | Host: remote                                                                |
  |                                                                             |
  | SunOS UNIX (remote.iij.ad.jp)                                               |
  |                                                                             |
  | login:                                                                      |
  -----------------------------------------------------------------------------
 リモートホストにtelnet で接続されてUnix のログインプロンプトがでてきますので、ユーザ名と
パスワードを入力して普通にログインします。

4. リモートホスト側でもescape の指定を付けてppp を走らせます。ここでは、Sun 用のフリーのPP
Pであるppp-2.1.2 を使うもとの仮定します。
  -----------------------------------------------------------------------------
  | % /usr/local/etc/pppd 192.244.188.3:192.244.188.4 escape 0xff               |
  -----------------------------------------------------------------------------
 この例では、Sun 側のアドレスを192.244.188.3, 手元のマシン側のアドレスを192.244.188.4 と
指定しています。

5. 相手側でPPP を起動したので、PPP のパケットがtelnet の上を流れて手元の自分のマシンに到達
します。手元のマシンはそれに自動的に応答してPPP の接続を確立し、192.244.188.4 というアドレ
スが与えられます。

                                           32

     --------------------------------------------------------------------------
     | ppp>                                                                     |
     | PPP> show ipcp                                                           |
     | IPCP [Opend]                                                             |
     | his side: 192.244.188.3, 2d0f01                                          |
     | my  side: 192.244.188.4, 2d0f00                                          |
     | connected: 3 secs, idle: 3 secs                                          |
     |                                                                          |
     | Defaults:  My Address: 192.244.176.10  His Address: 0.0.0.0              |
     | PPP>                                                                     |
      --------------------------------------------------------------------------

9.4.2    PPP over TCP

  自分の利用するマシンがIP ネットワークに接続されているのであれば、TCP の任意のポート上にP
PPを載せることにより、IP ネットワークを経由した仮想的な直接リンクを作成することが可能です。
ここでは、接続相手としてMorning Start のPPP を使うものと仮定します。

 1. まず、接続先の側で未使用のポートを仮想PPP リンクで使用するために割当てます。ここでは、
2456番ポートを使うこととし、/etc/services に登録します。
     --------------------------------------------------------------------------
     | ppp      2456/tcp                                                        |
      --------------------------------------------------------------------------

 2. 上記のポートへの接続があったらPPP が走るように/etc/inetd.conf にサービスを登録してお
きます。
     ---------------------------------------------------------------------------------
     | ppp  stream  tcp    nowait  root  /usr/etc/pppd pppd 192.244.188.3:192.244.188.4|
      ---------------------------------------------------------------------------------
    登録したら、inetdにHUP シグナルを送り、inetd.conf を読み込み直させておきます。

 3. 自分側のマシンではモデムのデバイス指定で、tty を指定する変わりにリモードマシンのIP ア
ドレスとポード番号を指定します。termコマンドは指定したホストのポートに対してTCP での接続を
おこないます。その結果、PPP のプロトコルが走り始めるので、さらにPPP 的にリンクの確立がおこ
なわれます。
     --------------------------------------------------------------------------
     | ppp> set device remote:2456                                              |
     | ppp> term                                                                |
     |                                                                          |
     | ppp> Packet Mode                                                         |
     | PPP>                                                                     |
      --------------------------------------------------------------------------

  この方法を使った場合には、相手側システムへのTCP での接続がなされるとすぐにPPP の動作が開
始されます。実際に使用する場合には、PAP あるいはCHAP を使って接続相手を確認するのが望まし
いでしょう。

                                           33

9.5     データの圧縮機能

  本PPP では、Predictor-1 によりデータを圧縮する機能が実装されています。この圧縮機能を用い
るとおよそ1.5:1 程度の圧縮がおこなわれ、テキスト・データの転送を高速化することができます。
  圧縮機能はディフォルトで利用するようになっていますので、接続相手が圧縮機能をもっていれば
CCPを使って圧縮に使用するアルゴリズムの調停がおこなわれます。本実装ではアルゴリズムとしてP
redictor-1だけしかサポートしていないので、接続相手が圧縮機能をもっていても別のアルゴリズム
を使用する場合には、圧縮は機能しません。
 -------------------------------------------------------------------------------
| PPP> show ccp                                                                 |
| CCP [Opend]                                                                   |
| myproto = PRED1, hisproto = PRED1                                             |
| Input: 32860 --> 18784,  Output: 1167 --> 832                                 |
| PPP> show proto                                                               |
|      Protocol      in         out       Protocol       in        out          |
|     IP        :         0,         0   VJ_UNCOMP  :        0,         0       |
|     VJ_COMP  :          0,         0   COMPD      :      117,       116       |
|     LCP       :        10,        10   IPCP       :        3,         3       |
|     CCP       :         2,         2   PAP        :        0,         0       |
|     LQR       :         0,         0   CHAP       :        0,         0       |
|     Others    :         0,         0                                          |
| PPP>                                                                          |
 -------------------------------------------------------------------------------
  圧縮機能が使える場合には、show ccp コマンドにより、どの程度の圧縮がかかったかを確認する
ことができます。また、圧縮機能が使われた場合には、PPP パケットのプロトコルは圧縮パケットと
してカプセル化されて運ばれますので、show proto コマンドの表示の中ではCOMPD に分類されてし
まうことに注意してください。

9.6     リンク監視機能

  本PPP には、LQR 機能を使って相手側が正常に動作しているかを確認する機能があります。この機
能はenable lqr コマンドによりLQR の利用が許可されている場合に有効となります。この監視機能
では、相手側に対してLQR パケットを送出し、それに対して応答があるかどうかを確認します。LQR
パケットを5 回送出しても一回も応答がない場合には、相手はダウンしたと判断してリンクを強制的
に切断します。
  接続相手がLQR プロトコルをサポートしていない場合には、LQR の代わりにLCP ECHO を用いるこ
とにより、相手からの応答があるかどうかを検査します。同じように連続して5 回送出しても応答が
ない場合にはリンクを切断します。
  監視用のLQR(またはLCP ECHO) パケットを送出する時間間隔はディフォルトでは30 秒となってい
ますが、set timeout コマンドで変更することができます。
 -------------------------------------------------------------------------------
| ppp> enable lqr                                                               |
| ppp> set timeout 600 60                                                       |
| ppp> show timeout                                                             |
|  Idle Timer: 600 secs    LQR Timer: 60 secs                                   |
| ppp>                                                                          |
 -------------------------------------------------------------------------------

                                           34

9.7     専用線での接続

  専用線を使って接続する場合には、起動時に-dedicated を指定します。
 -------------------------------------------------------------------------------
| % ppp -dedicated                                                              |
 -------------------------------------------------------------------------------
  専用線モードを指定した場合には、モデムのキャリアを検出すると自動的に相手との接続をおこな
います。この際、相手も直接PPP を話すと仮定していますので、DialScript やLoginScript は参照
されずにすぐにLCP のやりとりが開始されることに注意してください。
  また、キャリアが落ちた場合にはプログラムは再びキャリアが上がるのを待ち、動作が終了するこ
とはありません。プログラムの動作を終了させるにはTERM シグナルを送るか、telnet での接続をお
こないquit all コマンドを実行してください。
  現在、PPP プログラムはモデム同士が自動的に接続をおこなってくれることを前提としています。

                                           35





                                       Part  III

                                      リファレンス






                                           36


Chapter  10

ファイル

10.1      ppp

  ppp は、PPP プログラムの実行可能ファイルです。起動時には以下のようにオプションとラベルを
指定することができます。

    ppp [ option ] [ label ]

  option としてはつぎのいずれかひとつを指定することができます。

-auto  PPP を自動モードで起動します。起動時にはlabelが指定されていることが必要です。PPP は
デーモンとして動作し、指定されたラベルに対応するネットワークへのパケットを検出すると、自動
的にダイアリングをおこない接続をおこないます。ダイアリングのきっかけとなるパケットの種類は
ダイアリングフィルタ(dfilter) によって特定することもできます。

-direct  PPP を直接モードで起動します。このモードは、通常着信を受ける場合に利用されるモー
ドで、標準入出力を使って通信をおこないます。"Packet mode enabled" というメッセージが出力さ
れた後に、LCP がオープンされます。このモードでは以下のコマンドはその効果をもちません。

      set device. 通信はモデムに対してではなく、標準入出力に対しておこなわれます。
      set speed. 起動時のtty の速度がそのまま利用されます。

-dedicated   PPP を専用線モードで起動します。

  optionが省略された場合には、対話モードで動作を開始し、コマンドプロンプトが表示されます。
プロンプトは相手と接続されていない間は小文字でppp> となっていますが、相手とネットワーク層
での接続が確立されると、大文字のPPP に変化します。
  対話モード以外では、PPP プログラムはバックグラウンドで動作するのでプロンプトは表示されま
せんが、telnet を使ってコマンドインタプリタと接続することができます。
  labelは、起動時に実行すべきコマンドが列挙されているppp.conf ファイルおよびppp.linkup ファ
イル中でのエントリを指定します。label の指定がない場合には、default のエントリに列挙されて
いるコマンドが実行されます。

                                           37

10.2      ppp.conf

  ppp.conf はPPP プログラムの起動時に実行するコマンドを記述するファイルです。ファイルの記
述の仕方は次のとおりです。

 1. # で始まる行はコメントであると解釈されます。

 2. ラベル名は行の左端から記入し、その行には他の情報を含むことはできません。

 3. ラベルに対応するコマンドはラベル名の行以降に連続して登録します。ただし、行の先頭には
ひとつ以上の空白を入れてください。また、各行には複数のコマンドを入れることはできません。

 4. 行が#で始まっている場合には、その行はコメントであると解釈されます。

  default というラベル名は、PPP の起動時に自動的に実行するコマンドを表現するために使用され
ます。
起動時にラベルが指定されていても、いなくても常にdefault ラベルに対応するコマンドは実行され
ます。
  起動時にラベル名が指定された場合には、default ラベルに対応するコマンドが実行された後で、
指定されたラベルに対応するコマンドが実行されます。
  PPP プログラムは、起動時にまず$HOME/.ppp.conf を探します。このファイルが見付からなかった
場合には、/etc/ppp.conf を探します。

10.3      ppp.secret

  ppp.secret は、接続相手をPAP/CHAP により認証する際に参照されるファイルです。ファイル中の
各行には接続相手毎に次の3 つのフィールドを持つことができます。

    <相手システム名>    <パスワード>    <IP アドレス範囲>

  各フィールドは空白またはタブで区切り、アドレス範囲の指定は省略することができます。アドレ
ス範囲が指定された場合には、その範囲が相手側のIP アドレスを制限するために使用され、起動時
にifaddrコマンドにより制限がされていた場合でも、その指定は無視されます。範囲の指定がない場
合にはそれ起動時にifaddr コマンドで指定された制限が有効となります。

10.4      ppp.linkup

  ppp.linkup は、相手との接続ができた時に実行するコマンドを記述するファイルです。記述方法
はppp.confと同じですが、ラベルの探し方が若干ことなります。

 1. まず、自分側のIP アドレスがラベルとしてあるかどうかを調べ、見付かればそのラベルに対応
するコマンドを実行します。

 2. 自分側のアドレスに対応するラベルがなければ、起動時に指定されたラベルがないかを調べま
す。

 3. いずれもない場合にはMYADDR というラベルがないかを調べます。

  PPP プログラムは、接続時にまず$HOME/.ppp.linkup を探します。このファイルが見付からなかっ
た場合には、/etc/ppp.linkup を探します。

                                           38


Chapter  11

コマンド

help

  helpあるいは?コマンドにより利用可能なコマンドのリストを表示することができます。
 ---------------------------------------------------------------------------------------
| ppp> help                                                                             |
|   accept  : accept option request             add     : add route                     |
|   close   : Close connection                  delete  : delete route                  |
|   deny    : Deny option request               dial    : Dial and login                |
|   disable : Disable option                    display : Display option configs        |
|   enable  : Enable option                     load    : Load settings                 |
|   save    : Save settings                     set     : Set parameters                |
|   show    : Show status and statictics        term    : Enter to terminal mode        |
|   quit    : Quit PPP program                  help    : Display this message          |
| ppp>                                                                                  |
 ---------------------------------------------------------------------------------------

accept

  acceptコマンドは、引数で指定される機能の相手側からの利用要求を受け付けることを指定します。
指定できる引数についてはdisaplayコマンドの説明を参照してください。要求を拒否するためには、
denyコマンドを使用します。

add

  addコマンドはルーティングを追加するためのコマンドです。引数として、デスティネーションの
ネットワークアドレス、サブネットマスク、ゲートウェイのアドレスの3 つをこの順番で指定するこ
とが必要です。ゲートウェイのアドレスとして、HISADDR という文字列が指定された場合には、接続
先のアドレスを表現するものと解釈されます。
 -------------------------------------------------------------------------------
|          PPP> add 192.244.176.0 255.255.255.0 HISADDR                         |
 -------------------------------------------------------------------------------

                                           39

close

  closeコマンドはLCP を切断することにより、相手側との接続を切断します。

delete

  deleteコマンドは、ルーティング情報を削除するためのものです。引数として、デスティネーショ
ンのネットワークアドレスとゲートウェイのアドレスの2 つをこの順番で指定することが必要です。
ゲートウェイのアドレスとして、HISADDR という文字列が指定された場合には、接続先のアドレスを
表現するものと解釈されます。
  例外として、最初の引数にALL という文字列が指定された場合には、ゲートウェイのアドレスは不
要です。この時、インターフェイスを使用しているルーティングを全て削除します。

deny

  denyコマンドは、引数で指定される機能に関して相手側からの利用要求を拒否することを指定しま
す。指定できる引数についてはdisaplayコマンドの説明を参照してください。要求を受理するために
はacceptコマンドを使用します。

dial

  dialコマンドは、引数で指定された接続先に対してダイアリングとログインをおこないます。正常
にロ
グインできた場合には、続いてパケット・モードに移行します。
  引数が省略された場合には、現在設定されているダイアリングあるいはログインの手順にしたがっ
て接続をおこないます。このコマンドは、インタラクティブ・モードで動作している場合にのみ利用
できます。

disable

  disableコマンドは、引数で指定される機能の利用要求を自分側から出さないことを指定します。
指定できる引数についてはdisplayコマンドの説明を参照してください。要求を出すためにはenable
コマンドを使用します。

display

  displayコマンドはPPP プロトコルの動作を指定するパラメータの設定内容を表示します。表示さ
れる内容はenable/disableおよびaccept/denyコマンドでの指定の結果を反映しています。

                                           40

 -------------------------------------------------------------------------------
| ppp> display                                                                  |
| Current configuration option settings..                                       |
|                                                                               |
| Name              My Side          His Side                                   |
| ----------------------------------------                                      |
| vjcomp           enable           accept                                      |
| lqr              disable          deny                                        |
| chap             disable          accept                                      |
| pap              disable          accept                                      |
| acfcomp          enable           accept                                      |
| protocomp        enable           accept                                      |
| pred1            enable           accept                                      |
| ppp>                                                                          |
 -------------------------------------------------------------------------------
  各パラメータの意味は次のとおりです。

  vjcomp      VJ ヘッダ圧縮機能の動作を制御します。ディフォルトはenable/accept です。
  chap        認証プロトコルとしてCHAP を使用するかどうかを制御します。ディフォルトはdis-
               able/accept です。
  lqr         LQR を使用するかどうかを制御します。ディフォルトはenable/accept です。
  pap         認証プロトコルとしてPAP を使用するかどうかを制御します。ディフォルトはen-
               able/accept です。
  acfcomp     アドレスコントロールフィールドの圧縮をおこなうかどうかを制御します。ディフォ
        ルトはenable/accept です。
  protocomp   プロトコルフィールドの圧縮をおこなうかどうかを制御します。ディフォルトはen-
               able/accept です。
  pred1       Predictor-1 による圧縮を使用するかどうかを制御します。ディフォルトはenable/
        acceptです。

enable

  enableコマンドは、引数で指定される機能の利用要求を自分側から出すことを指定します。指定で
きる引数についてはdisaplayコマンドの説明を参照してください。要求を出さないようにするために
はdisableコマンドを使用します。

load

  loadコマンドは、引数で指定された接続先に対応する設定を読み込みます。引数が省略された場合
には、ディフォルトの設定が読み込まれます。

save

  このコマンドは現在実装されていません。

                                           41

set

  setコマンドは各種の変数の値を設定/変更するためのものです。引数に変数と値を指定することに
より設定をおこないますが、変数名として?を指定すると変数の一覧を得ることができます。
 -------------------------------------------------------------------------------
| ppp> set ?                                                                    |
|   accmap  : Set accmap value               authkey : Set authentication key   |
|   authname: Set authentication name        debug   : Set debug level          |
|   device  : Set modem device name          dfilter : Set demand filter        |
|   dial    : Set dialing script             escape  : Set escape characters    |
|   ifaddr  : Set destination address        ifilter : Set input filter         |
|   login   : Set login script               mru     : Set Initial MRU value    |
|   ofilter : Set output filter              openmode: Set open mode            |
|   parity  : Set modem parity               phone   : Set telephone number     |
|   speed   : Set modem speed                timeout : Set Idle timeout         |
|   help    : Display this message                                              |
| ppp>                                                                          |
 -------------------------------------------------------------------------------

set accmap

  ACCMAP(Async Character Map) の初期値を設定するためのコマンドです。値は16 進数で指定しま
す。

 このコマンドはACCMAP の初期値を指定するもので、実際に使用される値は、LCP でのネゴシエ
ーションの結果決定されます。

 このコマンドが意味を持つのは、つぎにLCP をオープンしようとした時であることに注意して
ください。

 現在の設定値はshow lcpによって知ることができます。
 -------------------------------------------------------------------------------
| ppp> set accmap 0xa0000                                                       |
| ppp> show lcp                                                                 |
| LCP [Initial]                                                                 |
|  his side: MRU 0, ACCMAP 00000000, PROTOCOMP 0, ACFCOMP 0 MAGIC 00000000      |
|  my  side: MRU 0, ACCMAP 00000000, PROTOCOMP 0, ACFCOMP 0 MAGIC 00000000      |
|                                                                               |
| Defaults:    MRU = 512, ACCMAP = 000a0000         Open Mode: passive          |
| ppp>                                                                          |
 -------------------------------------------------------------------------------

set authkey

  認証に使用する鍵を指定します。認証プロトコルとしてPAP を使用する場合には、送出するパスワ
ードに対応し、CHAP を使用する場合には秘密鍵に対応します。また、設定された文字列はLoginScri
pt の中で\P として参照することができます。

                                           42

set authname

  認証に使用する名前を指定します。認証プロトコルとしてPAP を使用する場合には、送出するユー
ザ名に対応し、CHAP を使用する場合にはシステム名に対応します。また、設定された文字列はLogin
Scriptの中で\U として参照することができます。

set debug

  デバックレベルを指定します。このコマンドは接続がすでにある状態でも有効です。詳しくは9.2
を参照してください。

set device

  モデムの接続されているデバイスを設定します。接続先のホストを指定する場合には、コロンで区
切ってポート番号を指定します。
 -------------------------------------------------------------------------------
| ppp> set device /dev/tty00                                                    |
|        or                                                                     |
| ppp> set device remote:3456                                                   |
 -------------------------------------------------------------------------------

set dfilter

  ダイアリングのトリガとなるパケットを制限するフィルタを定義します。詳しくは7章を参照して
ください。

set dial

  ダイアリングのための手順を指定するチャットスクリプトを設定します。

set escape

  set accmap では制御できない範囲の文字をエスケープして送出するための指定です。
 -------------------------------------------------------------------------------
| ppp> show escape                                                              |
| ppp> set escape 0xff 0xfd                                                     |
| ppp> show escape                                                              |
|  0xfd 0xff                                                                    |
| ppp>                                                                          |
 -------------------------------------------------------------------------------

set ifaddr

  インターフェイスの自分側および相手側のアドレスとして使用したいアドレスの範囲を指定します。
3 番目の引数を指定された場合には、ネットマスクの指定であると解釈されます。
  指定されたアドレスは、希望使用IP アドレスとしてIPCP での接続時に利用されますが、実際に指
定されたアドレスが利用されるかどうかは相手の動作との関係で決定されます。詳しくは、5.1節を
参照してください。

                                           43

  現在の希望使用IP アドレスの設定および実際に使用されているアドレスは、show ipcpコマンドに
よって表示することができます。
 -------------------------------------------------------------------------------
| ppp> show ipcp                                                                |
| IPCP [Initial]                                                                |
|  his side: 0.0.0.0, 0                                                         |
|  my  side: 0.0.0.0, 0                                                         |
| connected: 0 secs, idle: 0 secs                                               |
|                                                                               |
| Defaults:  My Address: 192.244.184.4/0  His Address: 0.0.0.0/0                |
| ppp> set ifaddr 192.244.184 192.244.185.10/24                                 |
| ppp> show ipcp                                                                |
| IPCP [Initial]                                                                |
|  his side: 0.0.0.0, 0                                                         |
|  my  side: 0.0.0.0, 0                                                         |
| connected: 0 secs, idle: 0 secs                                               |
|                                                                               |
| Defaults:  My Address: 192.244.0.184/32  His Address: 192.244.185.10/24       |
| ppp>                                                                          |
 -------------------------------------------------------------------------------

set ifilter

  通過するパケットを制限するための入力フィルタを定義します。詳しくは7を参照してください。

set login

  ログインのための手順を指定するチャットスクリプトを設定します。

set mru

  LCP の調停で使用される自分側のMRU の初期値を指定します。ディフォルトは1500 バイトです。
  現在の初期値および、実際に使用されているMRU の値はshow lcp を使って調べることができます。

set ofilter

  通過するパケットを制限するための出力フィルタを定義します。詳しくは7を参照してください。

set openmode

  LCP をオープンするモードを指定します。指定できる値はactive またはpassive のいずれかです。
activeは能動的なオープンを指定し、パケット・モードに移行するとすぐにLCP をオープンするよう
になります。一方、passive は受動的なオープンであり、パケット・モードに移行しても相手側から
のLCP パケットが検出されるまではオープンの処理を開始しません。ディフォルトのモードはpassiv
e です。
  直接モードおよび専用線モードで使用した場合には、openmode での設定にかかわらず、常に能動
的にLCP がオープンされます。

                                           44

set parity

  termコマンドを使って端末モードとして動作する場合のパリティを指定します。指定できる引数は、
none,even またはodd のいずれかです。

set phone

  ダイアルスクリプト中で参照される電話番号(\T) を設定します。設定された文字列はLoginScript
 の中で\T として参照することができます。

set speed

  モデムとの通信速度を設定します。

set timeout

  アイドルタイマーとLQR タイマーの設定時間を秒単位で指定します。0 が指定された場合にはタイ
マーの機能は抑止されます。
  アイドルタイマーはネットワーク層でのパケットが指定の時間流れなかった場合にリンクを自動的
に切断するためのものです。一方、LQR タイマーはLQR のパケットを送出する時間間隔を指定するた
めのものです。LQR の機能が許可されていなかったり、相手によって拒否された場合にはLQR プロト
コルを使ってリンクを監視する代わりにLCP ECHO を使っての監視をおこないます。
 -------------------------------------------------------------------------------
| ppp> set timeout 300 60                                                       |
| ppp> show timeout                                                             |
|  Idle Timer: 300 secs    LQR Timer: 60 secs                                   |
| ppp>                                                                          |
 -------------------------------------------------------------------------------

show

  show コマンドは、各種の設定や動作状況を表示するためのコマンドです。利用の際は、引数とし
て表示させる情報を指定する必要があります。指定できる引数はshow ?で知ることができます。
 -------------------------------------------------------------------------------
| ppp> show ?                                                                   |
|   auth     : Show auth name/key            ccp     : Show CCP status          |
|   compress : Show compression statictics   debug   : Show current debug level |
|   dfilter  : Show Demand filters           escape  : Show escape characters   |
|   hdlc     : Show HDLC error summary       ifilter : Show Input filters       |
|   ipcp     : Show IPCP status              lcp     : Show LCP status          |
|   log      : Show log records              mem     : Show memory map          |
|   modem    : Show modem setups             ofilter : Show Output filters      |
|   proto    : Show protocol summary         route   : Show routing table       |
|   timeout  : Show Idle timeout value       version : Show version string      |
|   help     : Display this message                                             |
| ppp>                                                                          |
 -------------------------------------------------------------------------------

                                           45

show auth

  PAP/CHAP で使用する認証のための情報を表示します。ここで、設定する情報は相手に対して送出
する自分のシステム名とパスワードに相当します。相手から受け取るシステム名とパスワードはppp.
secretファイルを参照して確認されます。

 PAP を利用する場合には、AuthName が自分のユーザID に相当し、AuthKey がパスワードに相
当します。

 CHAP を利用する場合には、AuthName が自分のシステム名、AuthKey が秘密鍵であると解釈さ
れます。
 -------------------------------------------------------------------------------
| ppp> show auth                                                                |
| AuthName = MyUserName                                                         |
| AuthKey  = OurSecretKey                                                       |
| ppp>                                                                          |
 -------------------------------------------------------------------------------

show ccp

  CCP の状態と圧縮機能の動作の状況を表示します。
 -------------------------------------------------------------------------------
| PPP> show ccp                                                                 |
| CCP [Opend]                                                                   |
| myproto = PRED1, hisproto = PRED1                                             |
| Input: 32860 --> 18784,  Output: 1167 --> 832                                 |
 -------------------------------------------------------------------------------
  上の例の表示は、以下の事項を表しています。

 IPCP がオープンの状態にあり、自分側/相手側ともにPredictor-1 アルゴリズムを使う事がで
きる。

 受信側では、32860 バイト分のデータが18784 バイトに圧縮されて送信されてきた。(18784 バ
イトの圧縮データを受信し、32860 バイトに復元した。)

送信側では、1167 バイト分のデータを832 バイトに圧縮して送出した。

show compress

  show compress コマンドは、VJ 圧縮の動作状況を表示します。それぞれの項目の意味については、
ソース・プログラム(slcompress.c) を参照してください。
 -------------------------------------------------------------------------------
| PPP> show compress                                                            |
| Out:  104 (compress) / 111 (total)  1 (miss) / 15 (search)                    |
| In:  123 (compress), 2 (uncompress)  0 (error),  0 (tossed)                   |
| PPP>                                                                          |
 -------------------------------------------------------------------------------

                                           46

show debug

  現在のデバックレベルを表示します。詳しくは9.2節を参照してください。
 -------------------------------------------------------------------------------
| ppp> show debug                                                               |
| LCP (3)                                                                       |
| ppp>                                                                          |
 -------------------------------------------------------------------------------

show dfilter

  ダイアリングのトリガとなるフィルタの定義を表示します。詳しくは7節を参照してください。

show espace

  set escape で設定されているエスケープ文字を表示します。

show hdlc

  通信中に検出されたHDLC レベルのエラーの種類と発生回数を表示します。
 -------------------------------------------------------------------------------
| PPP> show hdlc                                                                |
| HDLC level errors                                                             |
|                                                                               |
| FCS: 0  ADDR: 0  COMMAND: 0  PROTO: 0                                         |
| PPP>                                                                          |
 -------------------------------------------------------------------------------

show ifilter

  定義されている入力フィルタを表示します。詳しくは7を参照してください。

show ipcp

  IPCP の動作状態を表示します。状態がオープンになっている場合には、自分側および相手側のイ
ンターフェイスで使用されているIP アドレスと圧縮プロトコルも表示されます。状態がオープンに
なっていない場合には、IP アドレスは使用させたいアドレスを表します。
  接続時間はIPCP がオープンされてからの経過時間、アイドル時間はIP パケットが全く流れていな
い時間を意味します。ただし、LCP がクローズされている場合には、この時間は変化しませんので注
意してください。

                                           47

 -------------------------------------------------------------------------------
| PPP> show ipcp                                                                |
| IPCP [Opend]                                                                  |
|  his side: 133.152.97.70, 2d0f01                                              |
|  my  side: 133.152.196.1, 2d0f00                                              |
| connected: 3095 secs, idle: 57 secs                                           |
|                                                                               |
| Defaults:  My Address: 192.244.176.10/0  His Address: 0.0.0.0/0               |
| PPP>                                                                          |
 -------------------------------------------------------------------------------

show lcp

  LCP の動作状況を表示します。状態がオープンになっている場合には、自分側および相手側のイン
ターフェイスで使用されているパラメータの値が表示されます。
  Defaultsとして表示される値は、set mru およびset accmap コマンドで変更することができます。
 -------------------------------------------------------------------------------
| PPP> show lcp                                                                 |
| LCP [Opend]                                                                   |
|  his side: MRU 1500, ACCMAP 00000000, PROTOCOMP 1, ACFCOMP 1 MAGIC 88f3d958   |
|  my  side: MRU 1500, ACCMAP 00000000, PROTOCOMP 1, ACFCOMP 1 MAGIC 6c8571e2   |
|                                                                               |
| Defaults:    MRU = 1500, ACCMAP = 000a0000        Open Mode: passive          |
| PPP>                                                                          |
 -------------------------------------------------------------------------------

show log

  記録されているログの最後の部分を表示します。完全なログを調べるためにはログファイル(ppp.l
og) を参照してください。
 -------------------------------------------------------------------------------
| PPP> show log                                                                 |
| 02-13 21:43:52 [692] PPP Started.                                             |
| 02-13 21:49:44 [692] Connected!                                               |
| 02-13 21:49:53 [692] Phase: Authenticate                                      |
| 02-13 21:49:53 [692]  his = 0, mine = 0                                       |
| 02-13 21:49:53 [692] Phase: Network                                           |
| 02-13 21:49:53 [692] OsLinkup: 192.244.176.44                                 |
| PPP>                                                                          |
 -------------------------------------------------------------------------------

show mem

  このコマンドはデバックのためのものです。

show modem

  show modem コマンドはモデム関連の設定に関する情報を表示します。

                                           48

 -------------------------------------------------------------------------------
| ppp> show modem                                                               |
| device: /dev/tty01 speed: 38400                                               |
| cs8, none parity                                                              |
| fd = 0, modem control = 0                                                     |
| outq: 81                                                                      |
| DialScript  = ABORT BUSY ABORT NO\sDIALTONE ABORT NO\sCARRIER TIMEOUT 5 "" AT |
| OK-AT-OK ATDT\T TIMEOUT 30 CONNECT                                            |
| LoginScript = TIMEOUT 10 gin:-\r-gin: Panon word: Panon                       |
| PhoneNumber = 031234567                                                       |
| ppp>                                                                          |
 -------------------------------------------------------------------------------

show ofilter

  出力フィルタの定義を表示します。詳しくは7章を参照してください。

show proto


  show protoコマンドはPPP で使用される各プロトコルのトラッフィクのようすを表示するもので、
それぞれのプロトコルで入出力されたパケット数を表示します。プロトコル種別の名前とその意味に
ついてはrfc1331 を参照してください。
 -------------------------------------------------------------------------------
| PPP> show proto                                                               |
|      Protocol      in         out       Protocol       in        out          |
|     IP        :        44,        12  VJ_UNCOMP   :        5,         5       |
|     VJ_COMP   :      1661,      2392  COMPD       :        0,         0       |
|     LCP       :        74,        74  IPCP        :       15,        15       |
|     CCP       :         0,         5  PAP         :        0,         0       |
|     LQR       :         0,         8  CHAP        :        6,         3       |
|     Others    :         0,         0                                          |
| PPP>                                                                          |
 -------------------------------------------------------------------------------

show route

  ルーティングテーブルを表示します。

show timeout

  show timeoutは、現在のアイドルタイマーとLQR タイマーの設定値を表示します。
 -------------------------------------------------------------------------------
| ppp> show timeout                                                             |
|  Idle Timer: 180 secs    LQR Timer: 30 secs                                   |
| ppp>                                                                          |
 -------------------------------------------------------------------------------

show version

  PPP ソフトウェアのバージョン番号を表示します。

                                           49

term

  termコマンドは、コマンド・モードから端末モードに移行するためのコマンドです。termコマンド
を利用することにより、モデムと直接通信することができるので、手動でのダイアリングや相手シス
テムへのログイン作業がおこなえます。このコマンドは対話モードで動作している場合にのみ利用で
きます。
  端末モードでは、以下の特殊シーケンスを利用することができます。
  ~p  パケット・モードでの通信動作を開始します。すなわち、LCP を起動し相手側システムとPPP
      によるリンクを確立しようとします。また、端末モードでの動作を終了し、コマンド・モー
    ドに戻ります。
  ~.  端末モードでの動作を終了し、コマンド・モードに戻ります。
  ~?  利用できる特殊シーケンスの一覧を表示します。
  端末モードは相手側でPPP が起動されたことを検出すると、自動的にパケット・モードに移行して
コマンド・モードに戻ります。したがって、通常~p を使う必要はありませんが、相手側PPP が受動
的にオープンされる場合には、~p を使うことにより、こちら側を能動的にオープンすることができ
ます。
 -------------------------------------------------------------------------------
| ppp> term                                                                     |
| Enter to terminal mode.                                                       |
| Type `~?' for help                                                            |
| at                                                                            |
| OK                                                                            |
 -------------------------------------------------------------------------------

quit

  quitコマンドは、PPP プログラムの動作を終了するためのものですが、動作するモードによって若
干その働きが違います。

 対話モードで動作している場合には、quitコマンドはPPP プログラムの動作を終了します。相
手側と接続がある場合には、このコマンドの使用に先立ってcloseコマンドによって接続を切断して
おくことを推奨します。

 それ以外のモードで動作している場合には、telnet によって作成されたモニタとの接続を切断
する働きをします。PPP プログラム自体を終了させたい場合には引数としてall を指定します。
 -------------------------------------------------------------------------------
| ppp> quit                                                                     |
| %                                                                             |
 -------------------------------------------------------------------------------
  PPP プログラムの動作を終了させた場合には、接続中に使用されていたルーティング設定は自動的
に削除されます。

                                           50


Appendix  A

チャット ・ スクリプト

  ダイアリングとログインの手続きを指定するには、モデムあるいは相手側との間でのやりとりを、
送/受信する文字列を記述することによりおこないます。この文字列をチャット・スクリプトと呼び
ます。

A.1      指定方法

  チャットスクリプトは基本的に「受信すべき文字列」とそれを受信した時に応答として送出する
「送信文字列」を交互に空白で区切ることにより、一連のやりとりを指定します。チャットスクリプ
トを最後まで処理した場合には、そのスクリプトの表現する手続きを成功したとみなし、途中で一定
時間以内に受信すべき文字列が検出できなかった場合には失敗したものとみなします。
  「受信すべき文字列」と「送信文字列」の指定の際には、表A.1 に示す特殊シーケンスが指定でき
ます。
「送信文字列」を送出する際には、その文字列に\c が含まれていない限り自動的にCR が最後に付加
されます。

     \d   2 秒間の待ちを表現                    \p   0.25 秒間の待ちを表現
     \s   スペースを表現                        \t   タブを表現
     \r   CR を表現                             \n   LF を表現
     ^X   Ctrl-X を表現                         \c   CR を付加しないことを表現(送信時)
     \P   authkey で指定した秘密鍵を表現        \T   phone で指定した電話番号を表現
     \U   authname で指定したシステム名を表現   \\   バックスラッシュを表現します

                                   Table A.1: 特殊シーケンス

  また、「受信すべき文字列」の指定においてはつぎのような特別な規則があります。

 TIMEOUT が指定された場合には、次の「送信文字列」はタイムアウトの秒数を表現するものと
解釈されます。以後、指定された時間以内に「受信すべき文字列」が検出できない場合には、チャッ
トの処理は失敗します。特にTIMEOUT が指定されない場合には、ディフォルトとして30 秒のタイム
アウトが用いられます。

 ABORT が指定された場合には、次の「送信文字列」はエラー文字列を表現するものと解釈され
ます。以後、エラー文字列を検出した時点でチャットの処理は失敗したものとして扱われます。

                                           51

 ハイフン(-) で区切ることにより、(受信文字列1)_(送信文字列)_(受信文字列2) の3 つの部分
に分けることができます。この場合には、受信文字列1 が検出されれば続く「送信文字列」の処理に
すすみますが、検出できないばあいには(送信文字列) を送信し、(受信文字列2) の検出を待ちます。

  チャットの途中でパリティを変更するためには次の文字列を指定します。これらの文字列は「受信
すべき文字列」、「送信文字列」のどちらでもないものとして解釈されます。

                         P_ZERO     8 ビット、パリティ無しに設定します
                         P_ODD      7 ビット、奇数パリティに設定します
                         P_EVEN     7 ビット、偶数パリティに設定します

                                   Table A.2: パリティの指定

A.2      例
 -------------------------------------------------------------------------------
| ppp> show modem                                                               |
| device: /dev/tty01 speed: 38400                                               |
| cs8, none parity                                                              |
| fd = 0, modem control = 0                                                     |
| outq: 81                                                                      |
| DialScript  = ABORT BUSY ABORT NO\sDIALTONE ABORT NO\sCARRIER TIMEOUT 5 "" AT |
| OK-AT-OK ATDT\T TIMEOUT 30 CONNECT                                            |
| LoginScript = TIMEOUT 10 gin:-\r-gin: Panon word: Panon                       |
| PhoneNumber = 031234567                                                       |
| ppp>                                                                          |
 -------------------------------------------------------------------------------
  上記のような設定がなされている場合には、ダイアリングとログインの手順はつぎのようになりま
す。

ダイアル手順

 BUSY, NO DIALTONE, NO CARRIER のいずれかの文字列を受信した時点でダイアリングに失敗
    したものと判断します。

 タイムアウトを5 秒に設定します。

 ("") は空の「受信すべき文字列」を指定するためのものです。

 AT を送信し、OK を受信するのを待ちます。5 秒以内に受信できなかった場合には、再度AT を
送出しOK が受信されるのを待ちます。5 秒以内に受信できなければ、今度は失敗したものと判断し
ます。

 ATDT コマンドを使ってphone で指定される電話番号へのダイアリングを指示します。すなわち、
    実際に送出される文字列は、"ATDT031234567" となります。

 30 秒以内にCONNECT という文字列が検出できれば、すべてのスクリプトが処理されたことにな
    るので、ダイアリングに成功したと判断されます。

                                           52

ログイン手順

 タイムアウトを10 秒に設定します。

 gin:という文字列を受信するのを待ちます。10 秒以内に受信できなければCR を送出し、gin:
が受信されるのを待ちます。5 秒以内に受信できなければ、今度は失敗したものと判断します。

 ログイン名としてPanon を送出し、word: という文字列が受信されるのを待ちます。

 パスワードとしてPanon を送出します。

                                           53


Appendix  B

IIJ  への接続

  この章ではIIJ のダイアルアップPPP サービスを利用するための設定について説明します。
  IIJ のPPP サービスでは、login, PAP, CHAP の3 種類の認証方法が利用可能です。これら3 種類
の認証方法はその方式が異なるだけで、ユーザはIIJ から割り当てられた同一のユーザ名とパスワー
ドを使うことができます。ここでは、割り当てられたユーザ名がMyUserName, パスワードがMyPassow
rd であると仮定して説明をすすめることにしましょう。
  IIJ のサービスでは、ユーザの使用するIP アドレスは動的に割り当てられます。また、IIJ 側の
ルータのIP アドレスもどのルータに接続されるかによって変わりますから、前もって知ることはで
きません。自分側と相手側の双方のIP アドレスとも未知なものとして接続しなければならないわけ
です。そのため、オンディマンドでの接続をするためにはちょっとした工夫が必要です。

B.1      ppp.conf

  まず最初に共通する要素をdefault としてまとめておきます。ここでは標準的なモデムをトーン式
でダイアルすることを想定してdial スクリプトを記述してありますが、モデムの種類によってはリ
ザルトコードの表示のされかたが異なることがあるかもしれません。
 -------------------------------------------------------------------------------
| default:                                                                      |
|  set device /dev/tty01                                                        |
|  set speed 38400                                                              |
|  disable lqr                                                                  |
|  deny lqr                                                                     |
|  set phone 12345678                                                           |
|  set authname MyUserName                                                      |
|  set authkey  MyPassword                                                      |
|  set dial "ABORT BUSY ABORT NO\\sCARRIR TIMEOUT 5 \"\" AT OK-AT-OK \\dATDT\\T |
| TIMEOUT 40 CONNECT"                                                           |
 -------------------------------------------------------------------------------
  次はlogin での認証をおこなう場合の設定例です。ユーザ名とパスワードはすでにauthname とaut
hkeyに設定されていますので、\U と\P で参照することができます。起動の際には、ppp iij と指定
するだけです。

                                           54

 -------------------------------------------------------------------------------
| iij:                                                                          |
|  set login "TIMEOUT 5 login:-\\r-login: \\U word: \\P"                        |
|  set timeout 0                                                                |
|  dial                                                                         |
 -------------------------------------------------------------------------------
  PAP を使いたい場合には、PAP を受け付けるように指定するとともに、能動的にオープンすること
を指定します。
 -------------------------------------------------------------------------------
| iij-pap:                                                                      |
|  accept pap                                                                   |
|  set login "TIMEOUT 5 login:-\\r-login:"                                      |
|  set timeout 0                                                                |
|  set openmode active                                                          |
|  dial                                                                         |
 -------------------------------------------------------------------------------
  CHAP を使う場合には、CHAP を受け付けることを指定するとともに、PAP を拒否するように指定し
てください。PAP が受け付け可能になっていると、CHAP は使われずにPAP が使われるようになって
しまいます。
 -------------------------------------------------------------------------------
| iij-chap:                                                                     |
|  accept chap                                                                  |
|  deny pap                                                                     |
|  set login "TIMEOUT 5 login:-\\r-login:"                                      |
|  set timeout 0                                                                |
|  set openmode active                                                          |
|  dial                                                                         |
 -------------------------------------------------------------------------------
  オン・ディマンドで自動的に発呼するためには、前もってディフォルトのルーティングを設定して
おく必要があります。ここでは、IIJ 側のアドレスが192.244.177.2 であると仮定しておきます。実
際には着呼する設備やサービス地域によってはこのアドレスではないかもしれませんが、この問題は
後で解決することとします。
 -------------------------------------------------------------------------------
| iij-demand:                                                                   |
|  set login "TIMEOUT 5 login:-\\r-login: \\U word: \\P"                        |
|  set ifaddr 0 192.244.177.2/20                                                |
|  add 0 0 192.244.177.2                                                        |
 -------------------------------------------------------------------------------
  このように指定しておけば、とりあえずIIJ 側のアドレスを192.244.177.2 と想定してルーティン
グの用意が整います。そこで、
 -------------------------------------------------------------------------------
| % ping 192.244.177.1                                                          |
 -------------------------------------------------------------------------------
を実行してやれば、このパケットをきっかけに発呼がおこなわれます。実際にはIIJ 側のアドレスは
192.244.177.2ではないかもしれませんが、192.244.177.2/20 と指定してあるために、IIJ 側からの
指示に従ってアドレスが修正されます。
  なお、自動発呼するためには自動モードで動作させる必要がありますから、

                                           55

 -------------------------------------------------------------------------------
| % ppp -auto iij-demand                                                        |
 -------------------------------------------------------------------------------
として起動する必要があります。

B.2      ppp.linkup

  通常IIJ のサービスを利用するのは、インターネットへのアクセスをするのが目的であると思われ
ます。
したがって、ディフォルトルートをIIJ の方に向けてやれば良いことになります。IIJ 側のアドレス
は前もって知ることはできませんが、HISADDR によって表現することができますので、以下のように
指定すれば接続時にディフォルトルートを設定することができます。
  自動モードを使った場合には、IIJ 側のIP アドレスが仮定したアドレスと違う場合があることを
考慮しなければなりません。そこで、起動時に仮定したルーティングをいったん消去してやり、あら
ためて相手側のアドレスをディフォルト・ルートとして登録することにします。
 -------------------------------------------------------------------------------
| iij-demand:                                                                   |
|  delete ALL                                                                   |
|  add 0 0 HISADDR                                                              |
| MYADDR:                                                                       |
|  add 0 0 HISADDR                                                              |
 -------------------------------------------------------------------------------

                                           56


Appendix  C

うまくつながらない場合

  うまくつながらない場合には、PPP の生成するログ・ファイルを調べることにより、その原因を追
求することが可能です。
  ディフォルトでは、LCP/IPCP の調停の様子までをログ・ファイルに出力するようになっています
が、デバックのレベルを変更することにより、TCP パケット、HDLC パケット、Async データの各段
階でのパケットダンプをとることも可能です。
 -------------------------------------------------------------------------------
| ppp> set debug hdlc lcp                                                       |
| ppp>                                                                          |
 -------------------------------------------------------------------------------
  もし、うまく相手とつながらない場合には、上記のようにHDLC, LCP, IPCP の各レベルでのトレー
スをとるように設定して生成したログ・ファイルを大野(tony-o@iij.ad.jp) まで送付してくだされ
ば、原因の調査をお手伝いします。
  なお、わたしへの連絡に先だって、以下のような設定を試してみることをおすすめします。

 PPP の実装によっては、IPCP の実装が正しくなかったり、古いRFC に基づいているものがあり
ます。disable vjcomp, deny vjcomp を指定しての接続を試してみてください。

 PPP の実装によっては、IP アドレスの指定が相手側と一致しないと接続できないものがありま
す。set ifaddr コマンドを使って相手側の設定と同じアドレスを指定してみてください。

 Free software あるいはPC 用のPPP のほとんどはLQR を実装していません。disable lqr を指
定しての接続を試してみてください。また、CCP もほとんど実装されていませんので、disable pred
1 をも指定してみてください。

                                           57


Appendix  D

Known  Problem

 現在、save コマンドは実装されていません。

 PPP デーモンはsetuid root で動作します。telnet による接続の受付にはなんの認証機能も用
意されていないので、誰でも現在動作しているリンクを切断あるいはデーモンの動作を終了させるこ
とができてしまいます。

 LQR のプロトコルは実装されていますが、それにもとづいたLQM ポリシーを制御することはで
きません。

 PAP/CHAP の実装において、パケットの再送機能が実装されていません。

 自動モードで動作している状態では、同一の組のアドレスを使用する直接モードのPPP を新た
に起動することができません。すなわち、自動モードで自動発呼できるような状態では、相手側から
の着信を受けて接続することができません。

 アイドルタイマーが計測する時間は正確ではありません。

 LCP/IPCP は、必要最低限の実装にはなっていますが、正確にRFC に定められる機能を実装して
はいません。そのためRFC1661 に対応していない部分もあります。またRFC1570 には対応していませ
ん。

 現在実装されているCCP およびPredictor-1 による圧縮機能は、Internet draft の仕様に基づ
いています。今後のIETF での議論によっては仕様の変更や廃止があるかもしれません。

                                           58