まず、このドキュメントで使われる用語について説明します。一般的に使われ ているものとは異なるものもあるかも知れませんので、他の場面で使う場合は ご注意下さい。明らかな間違いは訂正させていただきます。
PPPの両端のシステムです。単にピアと書くと相手側を意味することがありま す。
PPPの接続サービスを提供している側のピアです。
PPPの接続サービスを受ける側のピアです。プロバイダにダイアルアップする 場合はプロバイダ側がサーバーで、自分のマシンがクライアントです。
ピアに通信を許可するために行う手続きです。
ピアに自分を認証してもらうために行う手続きです。
ピア間の最小通信単位です。0x7Eから始まっています。
オンデマンド接続を実現するために用いられる仮のアドレスです。実際に接続 が行われると、PPPのネゴシエーションによって正当なアドレスが決定されま す。そのようなアドレスを仮アドレスに対して実アドレスと表記します。
PPPフレームを最初に発信するピアです。
PPPフレームが送られて来るのを待機するピアです。
また、インストール時などにユーザー権限をスイッチさせる必要があります。 いちいちそれを文章で書くのは面倒ですので、以下のルールを作っておきます:
コマンドラインのプロンプトが「#」の場合はroot権限を、「%」の場合は各自 のユーザー権限をそれぞれ意味します。また、これら以外の、ユーザー権限は、 その名前に「$」をともなったプロンプトで記載します。例えば、fooというユー ザー権限の場合は「foo$」です。
PPPはPoint to Point Protocolの略です。つまり、1対1で接続されたサイトを 結ぶためのプロトコルです。同じ働きをするものとして、SLIPやPLIPがありま す。これらとの決定的な違いはPPPはコンフィグレーション機能をプロトコル として備えているという点です。また、通信媒体の種類を特定していません。 つまり、TCP上の仮想ライン上でもシリアルライン上でもパラレルライン上で も使うことができます。ただし、PPPを乗せる手段が提供されていない通信媒 体では利用できません。つまり、シリアルラインでしか利用できないPPP実装 系も存在し得るということです。
PPPフレームはPPPのコントロールプロトコルや、ネットワーク層のプロトコル にPPPのヘッダを添えてHDLCに準拠したカプセル化を行った形になっています。 フレームヘッダは標準で5オクテットです。ただし、最初の3オクテットは定数 で、そのうちの後の2オクテットを削除しても通信に支障がありません。そこ で、その2オクテットを削って全部で3オクテットのヘッダにする機能がアドレ ス/コントロールフィールド圧縮です。削られた2オクテットがアドレスフィー ルドとコントロールフィールドなのです。シリアルラインなどの非同期メディ アではさらに特定コードに対してエスケープコードを使ってシングルバイトの カプセル化を行いますから、フレームサイズがやや大きくなります。
PPPのコンフィグレーション機能は一般化されていて、多種のコントロールプ ロトコルが同じ形式で情報交換するようになっています。そのうちで最も基本 的な位置にあるのがLCP(Link Control Protocol)です。ラインというのは物理 的な線です。場合によっては、それが仮想的なものであることもあります。例 えば、シリアルラインは物理的な通信媒体です。しかし、モデムを介した時点 で電話線上に用意された仮想的なシリアルラインを使って通信することになり ます。LCPはこれらのラインの上でピア間の接続、つまりリンクを確保する働 きをもっています。そして、そのリンク上にネットワーク層のプロトコルを乗 せるのがNCP(Network Control Protocol)の働きです。NCPにはIPCPやIPXCPな ど、ネットワーク層の各プロトコルに応じたコントロールプトロコルが定義さ れています。例えば、双方が利用するIPアドレスの決定はIPCPで行われます。
PPPには5つの基本状態があります。
未動作状態です。PPPフレームがライン上を通ることができません。
ラインが開通した状態です。PPPフレームを通すことができます。
LCPが確立し、他のフレームを通せる状態です。まず、証明/認証のためのプロ トコル(PAPやCHAP)を動かします。
証明/認証で合意してネットワーク層のプロトコルを通すことができる状態で す。この状態ではネットワーク層のコントロールプロトコルを自由に流すこと ができます。また、それぞれのコントロールプロトコルで合意した場合はその ネットワーク層のプロトコルを通すことができます。
終了状態です。LCPを含め、全てのコントロールプロトコルが終了処理を行い ます。完全に終了した時点でDead状態に遷移します。
PPxPでは、特定種類のラインやネットワーク層への偏りをできるだけ避けたい と考えています。PPPはモデム上でIPを通すためだけのものではありません。 PPPは自動コンフィグレーション機能を持ったトンネリングプロトコルなので す。例えば、私のノートマシンは研究室や出先ではDHCPで不特定のIPアドレス に設定され、自宅ではダイアルアップでやはりPPPに不特定のIPアドレスをふ られるという名無しホストです。TCP上の仮想ラインを使って常にPPPを張るよ うにしておけばこのノートマシンに特定のIPアドレスを割り振り、DNSに登録 することができるのです。
PPxPの本体はppxpdコマンドですが、これを直接起動するのではなくppxpコマ ンドなどのコンソールプログラムを使って利用します。以後、このドキュメン トではppxpコマンドを使って説明を行います。ppxpコマンド以外でも、コンソー ルの起動方法はほぼ同じです。
% ppxp [<script>...] [<option>...]
<option>にはコンソールとしてのオプションと個々のプログラムのオプ ションを指定します。コンソールとしてのオプションには接続したいppxpdプ ロセスを特定したり、ppxpdプロセスへ引き渡すコマンド等を指定する機能が あります。
特定のppxpdプロセスに接続したい場合に指定します。<remote>を指定 した場合は、そのホスト(remote)上にin.ppxpデーモンがインストールされて いなければなりません。
以降の引数はppxpdのコマンドとして処理されます。ppxpコマンドの起動と同 時に実行したいppxpd上のコマンドを指定します。
以降の引数をppxpのコマンドとして処理します。<ppxp command>はppxp 上のコマンドです。ppxpプロセスはこのコマンドを実行すると同時に終了しま す。
PPxPではほとんどの設定をppxpdコマンドが管理する変数で行ないます。変数 への設定はppxpコマンド上でsetコマンドを使って行ないます。また、コンソー ルの起動時に自動的に設定される変数もいくつかあります。例えば、コンソー ルの起動時に引数として<script>が指定された場合にはそのうちの最初 の名前が変数NAMEと変数AUTH.PASSWDにセットされます。
まずはqdialスクリプトを指定して起動してみましょう。起動後、設定を確認 するためにsetコマンドを実行して下さい。setコマンドは変数を設定するコマ ンドですが、設定値が指定されていないと、設定状況を表示するコマンドとし て働きます。
% ppxp qdial
PPxP version V.YYMMDDHH
interface: ul0
ppxp> set
-r--r--r-- root root VERSION=V.YYMMDDHH
...
-rw-rw-rw- manabe dsl NAME=qdial
-rw-rw-rw- root dsl MODE=active
-rw-rw-rw- root dsl LINE=/dev/modem
-rw-rw-rw- root dsl SERIAL.SPEED=115200
-rw-rw-rw- root dsl SERIAL.FLOW=crtscts
-rw-rw-rw- root dsl SERIAL.PARITY=none
-rw-rw-rw- manabe dsl SERIAL.MODEM=generic
...
ppxp>
変数は名前、属性(パーミッションとオーナー)、その値からなっています。例 えば、上の例の最後の行では変数SERIAL.MODEMの値がgenericで、変数の設定 者はmanabeでグループはdslになっています。そして、全てのユーザー/グルー プから書き換え可能です。また、SERIAL.MODEMはグループSERIALに属する変数 です。NAMEのようにグループに属さない変数もあります。
PPxPでは「終了」ということばがいくつかの意味を持っています。1つは通信 の終了です。これは、ppxp上ではdisconnectコマンドを使います。もう1つは コンソールの終了です。これはbyeコマンドです。そして、ppxpdデーモンの終 了です。これはquitコマンドです。
ppxp> quit
%
quitコマンドを実行するとppxpdデーモン自体が終了しますので、通信はもち ろん、コンソールも終了します。また、byeコマンドを実行するとコンソール のみが終了し、ppxpdデーモンは行き続けます。ですから、通信状態も保持さ れます。
PAP/CHAP認証によるダイアルアップ接続方法については、QuickStart.txtファ イルを御覧下さい。
ここではPPP接続ではなく、無手順接続について説明します。PPxPにはモデム 等を直接操作するためのターミナルモードがあります。cuコマンドを内蔵して いるようなものです。接続先でシェルログインが可能ならば、このターミナル モードを使って無手順接続することができます。まず、serialスクリプトで起 動後、変数LINEを設定して下さい。LINEは通信を行なうメディアを指定する変 数です。モデムならばシリアルデバイス名を指定します。例えば、2番目のシ リアルポートにモデムが接続されている場合はLinuxならば/dev/ttyS1になり ます。ターミナルモードに入るにはterminalコマンドを実行します。後は普通 の通信ソフト同様にモデムでダイアルして、プロンプトが表示されたらユーザー 名とパスワードを入力してログインします。
% ppxp serial
ppxp> set line /dev/ttyS1
ppxp> terminal
ath0
OK
atdt123456
CONNECT 14400/ARQ
pppserver!login: manabe
Password: <パスワード>
...
pppserver% logout
NO CARRIER
ath0
OK
term> disconnect
ppxp>
ターミナルモードから抜けるにはCtrlキーを押しながら\キーをたたき、続い て大文字のCを入力します。以後、これを略してCtrl+'\' 'C'と表記します。 ppxpではCtrl+'\'をターミナルモードのエスケープキーとして使っています。 エスケープキーの後に入力された1文字がコマンドキーです。'C'は「コンソー ルに戻る」というコマンドキーなのです。ppxpでターミナルモードを抜けても、 ppxpdデーモンではターミナルモードのままです。そのために、プロンプトが term>になっています。ここでdisconnectコマンドを実行すると、ppxpdデー モンもターミナルモードを抜けます。
認証/証明のために必要なユーザー(システム)名とパスワード(キー)は設定ディ レクトリのpasswdファイルで管理されています。passwdファイルは1行が1つの 登録で、以下のような書式になっています。
<entry>:<user>:<password>:<flag>:
<group>:<script>
passwdファイル内でエントリを特定するための名前です。重複しないようになっ ていれば何でも構いません。変数AUTH.PASSWDにこのエントリ名を指定するこ とでそのエントリが利用されるようになります。
ユーザー名です。PPP接続でのログイン名が入ります。
パスワード文字列です。生の文字列をそのまま書き込んでも利用できますが、 ppxp上でpasswdコマンドを使って入力すればコード化された文字列が入ります。
パスワード文字列のコード化方法などについての情報が入っています。手で生 のパスワード文字列を書き込んだ場合はここを00000000にしておいてください。
サーバーとして機能しているときに認証後に呼び出される設定スクリプト名で す。クライアントとして使っている場合は設定しないで下さい。
エントリの追加はエディタ等で直接書き換えるのではなく、ppxp上のpasswdコ マンドを使って行なうようにして下さい。また、パスワード文字列はコード化 されますが、暗号化されるわけではありません。簡単に元の文字列に戻せます ので、passwdファイルの扱いには十分注意して下さい。
ppxp上でhelpコマンドを実行すると、利用可能なコマンドの一覧が表示されま す。コマンド名は原則的にアルファベット順で前方一致検索されます。したがっ て、一般的にはコマンド名をフルスペルで入力する必要はありません。例えば、 disconnectコマンド以外にdで始まるものがなければ、disconnectをdと略する ことができます。