PPPD(8)

名称
pppd - Point to Point Protocol daemon

書式
pppd [ options ] [ tty_name ] [ speed ]

解説

Point to Point プロトコル (PPP) は、シリアル回線上で確立された Point-to-Point リンクを介したデータグラムの送受信方法を提供します。 PPP は、データグラムのカプセル化、拡張リンク制御 (LCP)、そして 異なるネットワーク層プロトコルの設定およびコネクション確立 (NCP) の 3 つの 機能から構成されるプロトコルです。

カプセル化データ構造 (スキーム) は、カーネル内のドライバにて実装されます。 pppd は、基本的な LCP 機能、認証機能、そして IP に特化した NCP (IP Control Protocol (IPCP) と呼ばれます) を提供します。

オプション

<tty_name>
    pppd で使用するシリアルポートの特殊ファイル名を指定します。必要であれば、 pppd は、指定した特殊ファイル名の前に "/dev/" 文字列を付加します。 指定されない場合には、 pppd は起動された tty を用います。またこの場合には、fork() を行わずに フォアグラウンドプロセスとして動作します。

<speed>
    tty の速度を設定します。

asyncmap <map>
    同期キャラクタのマップを <map> に設定します。 本マップは、シリアル回線を経由してコントロールキャラクタの受信が出来ない場合に 記述するものです。 pppd は、相手に 2 バイトのエスケープシーケンスとしてこれらのキャラクタの送信を 依頼します。引数は、32 ビットの 16 進数の数字であり、 エスケープキャラクタを表すビットを立てておきます。 ビット0 (00000001) は、0x00 をあらわし、 ビット31 (80000000) は、0x1f もしくは ^_ をあらわします。 複数の asyncmap オプションが与えられた場合、それらの値の論理和が 採用されます。 asyncmap が与えられなかった場合には、同期キャラクタはないものとして動作 します。相手は、すべてのコントロールキャラクタをエスケープします。

auth
    ネットワークパケットの送受信の前に、相手に自分自身の認証を要求します。

connect <p>
    <p> で指定したシェルコマンドもしくは実行可能コマンドを用いて、接続時の シリアル回線の設定を行います。ここで指定される典型的なコマンドは、"chat" で あり、このコマンドを用いてモデムにダイヤルコマンドを送ったり、リモート ppp セッションを開始したりします。

crtscts
    シリアルデータフローの制御にハードフロー制御を用います。

defaultroute
    IPCP ネゴシエーションが成功して、相手をゲートウェイとして用いる際に、デフォルト 経路をシステム経路制御テーブルに追加します。 本指定により追加されたデフォルトルートエントリは、PPP コネクションが切れた時に 破棄されます。

disconnect <p>
    <p> で指定したシェルコマンドもしくは実行可能コマンドを用いて、pppd が 接続を切った際のシリアル回線の設定を行います。ここで指定するコマンドを 用いて、ハードフロー不可のモデムを使った場合の モデムハングアップコントロールを行ったりできます。

escape xx,yy,...
    転送を行わない文字 (エスケープ文字) を指定します (相手が 同期制御文字マップから外すことを要求するかどうかについては特に問題にしません)。 エスケープ文字は、コンマで区切られた 16 進の数字で指定されます。 注意することは、どんなキャラクタでも escape オプションによって指定 が可能ですが、asyncmap オプションで指定したものとは別のキャラクタ を指定するということです。エスケープされるべきではない文字としては、 16 進で 0x20 から 0x3f までの範囲の文字、もしくは 0x5e で示される文字です。

file <f>
    オプションを、指定したファイル <f> から読み込みます (形式は以下に示します)。

lock
    デバイスへの確実な排他制御を行うために、pppd が UUCP 形式の シリアル装置のロックを採用するかどうかを指定します。

mru <n>
    ネゴシエーション時の MRU [Maximum Receive Unit] 値を <n> に設定します。 pppd は、通信相手に <n> バイトを超えないだけのパケット送信を要求します。 最小の MRU 値は、128 です。 デフォルトの MRU 値は 1500 です。低速のリンクには 296 が推奨されています。 (40 バイト分の TCP/IP ヘッダ + 256 バイトのデータ)。

netmask <n>
    インタフェースの netmask を <n> に設定します。netmask は、255.255.255.0 の ように、10 進 + ピリオドによる区切りで指定します。

passive
    LCP の "passive" オプションを有効にします。本オプションを付加した場合には、 pppd はコネクションを試み、相手からの返答がない場合には、 pppd は相手から有効なLCPパケットが到着するまで待ち受けます。

silent
    本オプションを付加した場合、 pppd は LCP パケットを初期接続時に送信せず、相手から有効な LCP パケットが到達 するまで待ちます。

オプション

<local_IP_address>:<remote_IP_address>
    ローカルインタフェース、リモートインタフェースの IP アドレスを設定します。 片方の指定は無視しても問題ありません。IP アドレスは、ホスト名もしくは 10 進数 とドットを組み合わせた形式 (例: 150.234.56.78) のどちらでも指定可能です。 デフォルトのローカルアドレスは、システムの IP アドレスです。ただし、 noipdefault オプションが付加された場合にはこの限りではありません。リモートアドレスは、 何のオプションも付加していない場合には相手から取得可能です。結果として、 一番単純なケースの場合には、本オプションは不必要です。 ローカル IP アドレス、リモート IP アドレスが本オプションで指定される場合には、 pppd は IPCP ネゴシエーション時に相手から異なる値が来た場合には受け付けないこと を意味します。ただし、 ipcp-accept-local や ipcp-accept-remote が指定された場合にはこの限りではありません。

-all
    LCP や IPCP のいかなるオプションによるネゴシエーションの要求も許可もしません (デフォルト値を用います)。

-ac Address/Control compression negotiation を無効にします (デフォルトで指定 されます)。

-am asyncmap negotiation を無効にします (デフォルトの asyncmap を用います)。

-as <n>
    asyncmap <n> と同様です。

-d  デバッグレベルを増やします (debug オプションと同等です)。

-detach
    バックグラウンドプロセスにするための fork() をしません (それ以外では、 pppd はシリアル装置が指定された場合にはそうします)。

-ip IP address negotiation を無効にします (本オプションを指定した場合には、 リモート IP アドレスをコマンドラインもしくはオプションファイルで指定する 必要があります)。

-mn magic number negotiation を無効にします。本オプションを指定した場合には、 pppd はループバック回線を検出できません。

-mru
    MRU [Maximum Receive Unit] negotiation を無効にします (デフォルトの MRU 値 である 1500 を使用します)。

-p  passive オプションと同様です。

-pc protocol field compression negotiation を無効にします (デフォルトで 使用されます)。

+ua <p>
    相手から要求された場合には、PAP [Password Authentication Protocol] による認証に同意します。そしてファイル <p> に記述されたデータを用いて ユーザ名とパスワードを相手に送ります。ファイルには、相手でのユーザ名が 格納され、改行に引き続いてパスワードが、そしてそれに引き続いて改行 が含まれます。本オプションはほとんど用いられることはありません。

+pap
    自分自身の認証を行うのに PAP を用いることを相手に要求します。

-pap
    PAP による認証を行わない指定です。

+chap
    自分自身の認証を行うのに CHAP [Cryptographic Handshake Authentication Protocol]を用いることを 相手に要求します。

-chap
    CHAP による認証を行わない指定です。

-vj Van Jacobson 形式の IP header compression negotiation を無効にします (デフォルトでは有効になってます)。

debug
    デバッグレベルを増加させます (-d と同様です)。 本オプションを指定した場合、pppd は送受信したすべての制御パケット の内容を可読形式でログに記録します。パケットは syslogを 経由して記録されます。 本情報は、/etc/syslog.conf に最適な形で指定した場合にファイルに取得されます (syslog.conf(5) を参照して下さい)。

domain <d>
    ドメイン名 <d> をローカルホスト名に付加して、認証に用います。例えば、 gethostname() が porsche という名前を返してきたが、FQDN は porsche.Quotron.COM であるという場合には、本オプションを用いてドメイン名を Quotron.COM と指定すれば問題ありません。

modem
    モデム制御線を使用します。Ultrix では、本オプションは crtscts オプションと同様にハードウェアフロー制御のために用いられます (本オプションは 完全に実装されてません)。

kdebug n
    カーネルレベルの PPP ドライバのデバッグコードを有効にします。引数 n は、以下の数値の合計です。 1 は一般的なデバッグメッセージ出力を有効にします。2 は、受信した パケットの内容の出力を要求します。4 は、送信したパケットの内容の 出力を要求します。

local
    モデム制御線を使用しません。

mtu n
    MTU [Maximum Transmit Unit] 値を n に設定します。相手が MRU negotiation を通じて指定値より小さい値を要求してこない限り、pppd は、カーネルネットワーキングコードが PPP ネットワークインタフェース を経由して、n バイトを超えないデータパケットを送ることを要求します。

name <n>
    認証時に用いるローカルシステムの名前を <n> に設定します。

user <u>
    PAP 認証時に用いるユーザ名を <u> に設定します。

usehostname
    ローカルシステムの名前として、認証時に用いたホスト名の使用を強制 します。(本オプションの指定は、 name オプションの指定を無効にします。)

remotename <n>
    認証時のリモートシステムの名前を <n> とみなします。

proxyarp
    自システムの ARP [Address Resolution Protocol] テーブルに相手の IP アドレス と自イーサネットアドレスを追加します。

login
    PAP を用いた相手の認証に、システムパスワードデータベースを用います。

noipdefault
    ローカル IP アドレスが指定されない場合には、デフォルトの動作を無効に します。(可能であれば) IP アドレスはホスト名から決定されます。 本オプションを指定した場合には、(明示的にコマンドラインで指定されない、 もしくはオプションファイルで指定されない場合には) IPCP negotiation 時に 相手が IP アドレスを決定します。

lcp-echo-interval <n>
    本オプション指定時には、pppd は LCP echo-request frame を毎秒 ごとに相手に送信します。Linux では、echo-request は、相手からの パケットが n 秒間途切れた場合に相手に送信されます。通常は、相手は echo-request の受信時には echo-reply を送ることで返答をします。 本オプションは、相手との接続が切れたことを検出するために lcp-echo-failure オプションと併用されます。

lcp-echo-failure <n>
    本オプションが指定された場合、LCP echo-request をn 回送信しても、 相手から有効な LCP echo-reply が帰ってこない場合には pppd は相手が通信できない状態にあると推定します。このような事象が発生すると、 pppd はコネクションを終了します。本オプションの使用時には、 lcp-echo-interval のパラメータとして 0 以外のものを指定して下さい。 本オプションは、ハードウェアモデム制御線 (ハードフローコントロール) が使用できない場合に、pppd が物理的なコネクションが切断された後に pppd を終了するために用いられます。

lcp-restart <n>
    LCP restart (タイムアウトに起因する LCP パケット再送) の間隔を <n> 秒 に設定します。デフォルト値は 3 です。

lcp-max-terminate <n>
    LCP terminate-request の最大送信回数を設定します。デフォルト値は 3 です。

lcp-max-configure <n>
    LCP configure-request の最大送信回数を設定します。デフォルト値は 10 です。

lcp-max-failure <n>
    LCP configure-Rejects のかわりに LCP configure-NAKs による最大応答回数を 設定します。デフォルト値は 10 です。

ipcp-restart <n>
    IPCP restart (タイムアウトによる再送) 間隔を <n> 秒に設定します。 デフォルト値は 3 です。

ipcp-max-terminate <n>
    IPCP terminate-request の最大送信回数を <n> 回に設定します。 デフォルト値は 3 です。

ipcp-max-configure <n>
    IPCP configure-request の最大送信回数を <n> 解に設定します。 デフォルト値は 10 です。

ipcp-max-failure <n>
    IPCP configure-Rejects のかわりに IPCP configure-NAKs による最大応答回数を 設定します。デフォルト値は 10 です。

pap-restart <n>
    PAP restart (タイムアウトによる再送) 間隔を <n> 秒に設定します。 デフォルト値は 3 です。

pap-max-authreq <n>
    PAP authenticate-request の最大送信回数を <n> 回に設定します。 デフォルト値は 10 です。

chap-restart <n>
    CHAP restart (タイムアウトによる再送) 間隔を <n> 秒に設定します。 デフォルト値は 3 です。

chap-max-challenge <n>
    CHAP challenge の最大送信回数を <n> 回に設定します。デフォルト値は 10 です。

chap-interval <n>
    本オプションが指定された場合、 pppd は <n> 秒おきに認証のリトライをします。

ipcp-accept-local
    本オプションが与えられた場合、 pppd は、別のオプションによるネットワークインタフェースへの IP アドレスの 割当が行われている場合でも、相手からのローカル IP アドレスの割当を 受け付けます。

ipcp-accept-remote
    本オプションが指定された場合、 pppd は、別のオプションによるリモートホストの IP アドレスの指定が行われている 場合でも、リモートホストの IP アドレスの指定を受け付けます。

オプションファイル
オプションは、コマンドラインから与えられるのと同様に、ファイルに記述 されたものを用いることも可能です。 pppd は、コマンドラインからのオプションを読み込む前に、/etc/ppp/options および ~/.ppprc に記述されたオプションを読み込みます。 オプションファイルの内容は、空白文字を区切りとみなした単語の並びとして 解釈されます。 ただし、空白文字を含む文字列を 1 つの文字列として解釈させたい場合には、 当該文字列をクオート文字 (") で囲むことで可能になります。バックスラッシュ (\) は、直後のキャラクタをクオートします。シャープ文字 (#) はコメントの 始まりとして解釈され、改行を検出するまでコメントとみなされます。

認証
認証についての説明は、英語版のマニュアルを参照して下さい。

ROUTING

IPCP negotiation が成功した場合には、 pppd はカーネルに、PPP インタフェースで用いるローカル IP アドレスおよび リモート IP アドレスを通知します。これは、リモート終端への経路を作成するのに 十分な情報です。他のマシンとの通信は、一般的にはルーティングテーブルの さらなる更新や ARP テーブルの更新が要求されます。しかし、場合によっては、 これらのテーブルの更新は routed や gated などの デーモンプロセスが自動的に行います。しかし、大半のケースでは、デーモンプロセス まかせではない何らかの形でそれらのテーブルをいじる必要があります。

インターネットへの接続は、PPP インタフェース経由のみで行うマシンのような 場合には、時々リモートホストへの default route への追加が必要となる ことがあります。defaultroute オプションは、pppd がそのような default route を IPCP パケットが到着した際に決定します。そして、 リンクが終了したときには、この方法で確立した default route は削除されます。

LAN 上に接続されたサーバマシンの例を挙げると、他のホストがリモートホストと 通信を行うことを許可するために、proxy ARP の使用が必要なことがあります。 proxyarp オプションは、リモートホスト への ARP リクエストを、 同一サブネット上にあるサーバマシンの pppd が受けて、あたかも同じ ネットワーク上に ppp 経由でつながっているように見せかける機能を有効にします。 (ブロードキャストおよび ARP は、PPP インタフェースや ループバックインタフェースではサポートされません)。 エントリが見つかった場合には、pppd は 恒久的かつ公開された ARP エントリにリモートホストの IP アドレスと 見つかったネットワークインタフェースのイーサネットアドレスとを対にして 登録します。

利用例

最も簡単な例として 2 つのマシンのシリアルポートをつないで、以下の コマンドを実行して下さい。

    pppd /dev/ttya 9600 passive

各マシンについて、getty がシリアルポートに対して走行していないもの とみなします。どちらか片方のマシンで getty が走行している場合、 kermit か tip などの通信プログラムを用いて getty が 走行しているマシンにログインし、次のコマンドを実行して下さい。

    pppd passive

それから通信プログラムを終了し (コネクションが切断されていないことを 確認して下さい)、次のコマンドを実行して下さい。

    pppd /dev/ttya 9600

他のマシンへのログイン処理および、pppd の開始処理は、connect オプションを用いることで chat コマンドの起動を行わせ、自動的に 実現されます。このオプションを用いた例は以下の通りです。

    pppd /dev/ttya 38400 connect 'chat "" "" "login:" "username" "Password:" "password" "% " "exec pppd passive"'

(ただし、このように chat プログラムを起動すると、パスワードの文字列が pppd や chat のパラメータリスト (ps 等の出力で得られます) で見えてしま うことに注意して下さい。)

シリアルコネクションが複雑である場合には、エスケープされる コントロールキャラクタをアレンジする必要があります。特に、XON (^Q) および XOFF (^S) を、asyncmap a0000 を用いてエスケープすることは有効です。 パスが telnet を含む場合には、^] も同様にエスケープ (asyncmap 200a0000 を指定する) しなくてはなりません。 パスが rlogin を含む場合には、rlogin クライアントの動作している側の ホストで escape ff を指定しなくてはなりません。これは、多くの rlogin の実装がネットワーク透過でないところに起因します。 実装がネットワーク透過でない rlogin は、ネットワークストリームからの 8 バイトのデータの先頭に付加される 0xff, 0xff, 0x73, 0x73 を除去します。

診断メッセージ

メッセージは LOG_DAEMON の機能を用いることで syslog デーモンに送られ ます (本機能は、pppd を、必要な機能として定義されるマクロである LOG_PPP を定義して再コンパイルすることで無視できます)。エラーや デバッグメッセージを見るためには、/etc/syslogd.conf ファイルを編集して、 pppd からのメッセージを適したデバイスやファイルに対して出力される ようにしてやることが必要です。

debug オプションを指定することで、送受信されるすべての 制御パケットの内容をログに記録するようにします。対象となる制御パケットは、 すべての LCP, PAP, CHAP, IPCP 制御パケットです。 本機能は、PPP ネゴシエーションが成功しない場合の原因特定に非常に有効です。 コンパイル時にデバッギングオプションが許可されている場合には、debug オプションは同時にデバッグメッセージの記録も指示します。

デバッギングは pppd プロセスに SIGUSR1 シグナルを送信することで有効になります。 デバッギングを無効にする場合には、 pppd プロセスに SIGUSR2 シグナルを送信することで可能です。

関連ファイル

/var/run/pppn.pid (BSD), /etc/ppp/pppn.pid (SunOS)
    ppp インタフェースユニット n に対応する pppd プロセスの プロセス ID

/etc/ppp/ip-up
    IP パケット (IPCP による) を送受信出来る接続が有効になった場合に走行される プログラムやスクリプトです。本プログラムは、パラメータとして interface-name tty-device speed local-IP-address remote-IP-address をとり、実行されます。

    本プログラムやスクリプトは、pppd の持つ同一の実在して、かつ有効な ユーザ ID を持つプロセスとして実行されます。また、ユーザ ID としては、 最低限有効なユーザ ID であることが望まれ、可能であれば、 スーパーユーザのユーザ ID であることが望まれます。これは、 到達経路を操作したり、特権デーモン (sendmail など) を動作させたりするのに 必要なためです。 /etc/ppp/ip-up や /etc/ppp/ip-down スクリプトの内容については、システム セキュリティの保持を考慮して作成して下さい。

/etc/ppp/ip-down
    IP パケットの送受信のためのリンクが得られない場合に走行するプログラムや スクリプトです。本スクリプトは、/etc/ppp/ip-up スクリプトで及ぼした変更 などを元にもどすために用いられます。なお、セキュリティ上の観点としては、 pppd と同様のユーザ ID で走行するという点で、ip-up スクリプトと同様 のものが求められます。

/etc/ppp/pap-secrets
    PAP 認証に必要なユーザ名、パスワード、そして IP アドレスが格納されます。

/etc/ppp/chap-secrets
    CHAP 認証に必要なユーザ名、シークレット、そして IP アドレスが格納されます。

/etc/ppp/options
    pppd のシステムデフォルトオプションが記述されます。このファイルは、コマンド ラインのオプションが解釈される前に読み込まれます。

~/.ppprc
    ユーザごとのデフォルトオプションを記述します。このファイルは、コマンド ラインのオプションが解釈される前に読み込まれます。

関連項目

RFC1144
    Jacobson, V. Compressing TCP/IP headers for low-speed serial links. 1990 February.

RFC1321
    Rivest, R. The MD5 Message-Digest Algorithm. 1992 April.

RFC1332
    McGregor, G. PPP Internet Protocol Control Protocol (IPCP). 1992 May.

RFC1334
    Lloyd, B.; Simpson, W.A. PPP authentication protocols. 1992 October.

RFC1548
    Simpson, W.A. The Point-to-Point Protocol (PPP). 1993 December.

RFC1549
    Simpson, W.A. PPP in HDLC Framing. 1993 December

注意
pppd が以下のシグナルを受信した場合、 pppd は以下の説明のとおりの挙動を示します。

SIGINT, SIGTERM
    これらのシグナルを受信した場合、pppd は (LCP をクローズすることで) リンクを切断し、シリアルデバイスの設定を復元して、プログラム終了します。

SIGHUP
    物理層レベルのリンクが切断されます。pppd は、シリアルデバイスの 設定を復元し (SunOS では、ここでエラーメッセージが生成されます)、 プログラム終了します。

バグ
モデム制御線の使用と modem オプション、local オプションの 動作については、完全に定義されていない。

作者
Drew Perkins, Brad Clements, Karl Fox, Greg Christy, Brad Parker (brad@fcr.com), Paul Mackerras (paulus@cs.anu.edu.au)