3.2. お手製の PPP 設定ファイルをつくる

FreeBSD のインストール中に, たくさんの設定ファイルのサンプルが /usr/share/examples/ppp ディレクトリの中につくられます. 少し時間を取ってファイルの内容を眺めてみてください. これらのサンプルは実際の稼働例に基づいたもので, PPP プログラムの機能や特長がよくあらわれています.

これらのサンプルファイルを参考にし, 必要に応じて実際の設定に生かすことを強くお勧めします.

`ppp` プログラムに関する詳細な情報がほしいなら, ppp の man を 読んでください.

# man ppp


PPP ダイアラで使われている `chat` スクリプト言語に関する詳細な情報がほしいなら, chat の man を読んでください.

# man chat


この章の残りの部分は PPP 関連のファイルのお勧め設定です.

3.2.1. '/etc/ppp/ppp.conf' ファイル

'/etc/ppp/ppp.conf' ファイルにはダイアルアウト PPP 接続に必要な設定と情報が含まれています. このファイルには複数の接続の設定が含まれていてもかまいません. FreeBSD ハンドブック (XXX URL? XXX) には, このファイルの内容と文法に関する詳しい記述があります.

この章では, ダイアルアウト接続を行うための必要最小限の設定についてのみ説明します.

下の /etc/ppp/ppp.conf ファイルは, ガイド中の LAN において, ダイアルアウトインターネットゲートウェイの機能を提供するのに十分なものです.

Note: ppp.confの文法の完全なものはppp(8)に記述されています. 特に, コロンで終了しない行 (例えばdefault:interactive:), “!”で始まるコマンド (例えば!include) はラベルではないことに注意してください. また, コメントはインデントされなければいけないにも注意してください!

################################################################
# PPP 設定ファイル ('/etc/ppp/ppp.conf')
#
# デフォルト設定; PPP が発動した時常に実行され, 全ての
# システム設定に適用される.
################################################################
default:
  set device /dev/cuaa0
  set speed 57600
  disable pred1
  deny pred1
  disable lqr
  deny lqr
  set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATE1Q0M0 OK-AT-OK\\dATDT\\T TIMEOUT 40 CONNECT"
  set redial 3 10
#
#
################################################################
#
# interactive モード用の設定:
#
# `ppp -alias interactive` で発動せよ.
#
################################################################
interactive:
  set authname _リモートシステムでのユーザ ID_
  set authkey _リモートシステムでのパスワード_
  set phone 1-800-123-4567
  set timeout 300
  set openmode active
  accept chap
#
################################################################
#
# demand-dial (automatic) モードではこの設定が使われる:
#
# 'ppp -auto -alias demand' で発動せよ.
#
################################################################
demand:
  set authname _リモートシステムでのユーザ ID_
  set authkey _リモートシステムでのパスワード_
  set phone 1-800-123-4567
  set timeout 300
  set openmode active
  accept chap
  set ifaddr 127.1.1.1/0 127.2.2.2/0 255.255.255.0
  add 0 0 127.2.2.2
################################################################
# /etc/ppp/ppp.conf はこれでおしまい このファイル - 実際のシステムから持ってきたものですが - には, 設定に関連する三つのセクションがあります.

3.2.1.1. "default" セクション

'default:' セクションには, このファイルの他のどのセクションからも参照される値と設定がおさめられています. このセクションの内容が, 暗黙の内に他のセクションの設定に書き加えられるものと考えておけば良いでしょう.

ここは全てのダイアルアップセッションにおいて共通な 「グローバルなデフォルト設定」を置いておくのに丁度良い場所です. 例えばモデムの設定やダイアルの前準備等の, 通常接続先のシステムに応じて変更する必要のない設定を置くのに特に適しています.

サンプルとして挙げた '/etc/ppp/ppp.conf' ファイルの "default" セクションを一行づつ見ていきましょう.

set device /dev/cuaa0
この文は PPP プログラムに一番目のシリアルポートを使用するよう通知しています. FreeBSD 下における '/dev/cuaa0' デバイスとは, DOS, Windows, Windows 95 なんかで言うところの "COM1:" と同じポートのことです.

モデムが COM2: につながれている場合は, '/dev/cuaa1' を指定してください. COM3: の場合は '/dev/cuaa2' です.

set speed 57600


この文はシリアルポートとモデム間での送信 / 受信速度を設定しています. この例で使用されているのは 28.8k のモデムですが, 値を 57600 に設定しておけば, 最近のモデムに組み込みのデータ圧縮機能のおかげでスループットが上がり, シリアルリンク間でより高い転送速度を得ることができます.

モデムとの通信に問題がある場合, この設定を 38400, あるいは 19200 まで下げてみてください.

disable pred1
deny pred1


この二行は PPP プログラムの "CCP/Predictor type 1" 圧縮機能を無効にしています. 現在のバージョンの `ppp` は draft Internet standards に従ったデータ圧縮法をサポートしていますが, 残念なことに, 多くの ISP では, この機能をサポートしていない機器が使用されています. どちらにせよ多くのモデムは実行時に圧縮を行っていますから, FreeBSD 側でこの機能を無効にし, リモート側がこの機能を要求してきた場合に拒否しても, 大してパフォーマンスは落ちないでしょう.

disable lqr
deny lqr


この二行は Point-to-Point protocol (PPP) の完全な仕様の一部である "Line Quality Reporting" (回線品質報告) 機能を制御しています. (詳細は RFC-1989 を参照してください.)

一行目 "disable lqr" は回線の品質状態をリモートエンドのデバイスへ報告しないよう, PPP プログラムに命じています.

二行目, "deny lqr" はリモートエンドからの回線品質報告要求を拒否するよう, PPP プログラムに命じています.

最近のダイアルアップ用のモデムには大抵自動エラー検出 / 訂正機能がついていますし, LQR 報告機能は多くのベンダの製品で完全には実装されていませんから, 通常はこの二行をデフォルト設定に加えておいても大丈夫でしょう.

set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATE1Q0M0
OK-AT-OK\\dATDT\\T TIMEOUT 40 CONNECT"


注意: (このドキュメントでは改行が入っているように見えるかもしれませんが, 実際にはこの文の途中で改行を入れないでください.)

この行は PPP プログラムにモデムのダイアル法と, 以下のようなダイアル時の基本的なガイドラインを指定しています.

  • モデムが "BUSY" リザルトコードを返した場合, ダイアル試行は失敗したものとし,

  • モデムが "NO CARRIER" リザルトコードを返した場合もダイアル試行は失敗したものとし,

  • PPP プログラムは以下のイベント各々が 5 秒間のタイムアウト期間内に終了するものと想定する.

    • 初期状態では, PPP プログラムはモデムに対して何も想定していない (上の例の \"\" の部分で指定されている)

    • プログラムはモデムにモデム初期化文字列 "ATE1Q0M0" を送り, "OK" という返事が返ってくるのを待つ. レスポンスが帰ってこない場合, プログラムはモデムに attention コマンド ("AT") を送り, 再び "OK" という返事が返ってくるのを待つ.

    • プログラムは一秒間待ち時間を入れ ("\\d" の部分で指定されている), モデムにダイアリング文字列を送る. "ATDT" はトーンダイアリングを用いてダイアルを行う場合の標準モデムコマンドであり, 回線がトーンダイアルではない場合, "ATDT" を "ATDP" と置換する必要がある. "\\T" 文字列は実際の電話番号が入る場所である ("set dial 123-4567" で指定された値が自動的に挿入される).



  • 最後に, (最大) 40 秒のタイムアウトの前に, PPP プログラムはモデムが "CONNECT" リザルトコードを返すと想定している.



この対話におけるいかなる時点での失敗もダイアリングの失敗と解釈され, PPP プログラムは接続に失敗します.

(PPP ダイアラで使用されているミニスクリプト言語の詳細については "chat" の man を参照してください.)

set redial 3 10
この行はダイアル接続を直ちに確立することができなかった場合, リダイアルまで 10 秒の間隔を挟んで (必要な場合は 3 回まで) 再試行するよう, PPP プログラムに指定しています.

3.2.1.2. "interactive" セクション

'interactive:' セクションには, 特定のリモートシステムと「対話的 (interactive)」に PPP セッションを確立するときに使用される値と設定がおさめられています. このセクションの設定には, "default" セクションの内容が自動的に追加されます.

このガイド中の "interactive" セクションの例では, 接続先のリモートシステムは, 何らかの風変わりなスクリプト言語を使用しないでもユーザ認証を行うことができるものと想定しています. つまり, このサンプルでは接続を確立するために CHAP プロトコルを使用します.

おおざっぱに言うと, もし Windows95 のダイアラの「接続」ボタンを押しただけで接続が確立できる環境なら, このサンプルはうまく働きます.

一方, もし Microsoft Windows95 のダイアルアップネットワーク機能を利用して ISP に接続するとき, Microsoft Plus! の「ダイアルアップスクリプトツール」に頼るか, Windows 95 の接続オプションで「ダイアル後にターミナルウィンドウを表示する」を選択しなければならない場合, ISP と接続を行うためには, PPP 設定ファイルのサンプルや ppp の man で "expect / response" スクリプトの例を参考にする必要があるでしょう. "set login" コマンドはそのような目的に使用できます.

まあ、それよりも PAP / CHAP 認証を提供している ISP を探した方が良いかもしれませんけどね!

この設定例は, 以下のプロパイダと接続するために使えることが分かっています.



サンプルとして挙げた '/etc/ppp/ppp.conf' ファイルの "interactive" セクションを一行づつ見ていきましょう.

set authname _リモートシステムでのユーザ ID_
リモートシステムでログイン時に使用する名前を指定します.

set authkey _リモートシステムでのパスワード_
リモートシステムで使用するパスワードです.

set phone 1-800-123-4567
リモートシステムの電話番号です. PBX (Private Branch eXchange, 構内交換機) の内部にいる場合は, 9, を番号の前に加えることができます.

set timeout 300
300 秒 (5 分) 間データが流れなかった場合, 自動的に回線を切断するよう PPP プログラムに命じています. この値は必要に応じて変更することができます.

set openmode active
モデムが接続したらすぐに交渉を試みるよう PPP プログラムに命じています. 自動的にこれを行うリモートサイトもありますが, 自分からは行わないサイトもあります. このオプションを使えば, リンクのこちら側でイニシアチブを取って接続確立を試みることができます.

accept chap

ユーザ認証に "Challenge-Handshake Authentication Protocol" を用いるよう PPP プログラムに命じています. ローカル側とリモート側でユーザ ID とパスワードとしてやり取りされる値は, 上の 'authname' と 'authkey' のエントリからとられます.

3.2.1.3. "demand" セクション

特定のリモートサイトと「ダイアル・オン・デマンド」な PPP セッションを確立するときに使用される値と設定がおさめられています. このセクションの設定にも, "default" セクションの内容が自動的に追加されます.

最後の二行を除いて, このセクションの設定は "interactive" モードの設定で用いられているのと全く同じものです.

前の方でも述べているように, このガイド中にあらわれる "demand" セクションの例では, 接続先のリモートシステムは CHAP プロトコルを利用した接続確立法を理解できるものと想定しています.

サンプルとして挙げた '/etc/ppp/ppp.conf' ファイルの "demand" セクションを一行づつ見ていきましょう.

set authname _リモートシステムでのユーザ ID_
リモートシステムでログイン時に使用する名前を指定します.

set authkey _リモートシステムでのパスワード_
リモートシステムで使用するパスワードです.

set phone 1-800-123-4567
リモートシステムの電話番号です.

set timeout 300


300 秒 (5 分) 間データが流れなかった場合, 自動的に回線を切断するよう PPP プログラムに命じています. この値は必要に応じて変更することができます.

set openmode active


モデムが接続したらすぐにネゴジェーションを試みるよう PPP プログラムに命じています. 自動的にこれを行うリモートサイトもありますが, 自分からは行わないサイトもあります. このオプションを使えば, リンクのこちら側でイニシアチブを取って接続確立を試みることができます.

accept chap


ユーザ認証に "Challenge-Handshake Authentication Protocol" を用いるよう PPP プログラムに命じています. ローカル側とリモート側でユーザ ID とパスワードとしてやり取りされる値は, 上の 'authname' と 'authkey' のエントリからとられます.

set ifaddr 127.1.1.1/0 127.2.2.2/0 255.255.255.0


PPP リンクのローカル側とリモート側の「偽の」 IP アドレスのペアを設定し, ローカル側の 'tun0' (トンネル) デバイス に 127.1.1.1 の, リモート側には 127.2.2.2 の IP アドレスを生成するように PPP プログラムに命じています. 両方のアドレスに '/0' をつけておけば, それらのアドレスの先頭から 0 ビットまでが重要な部分で, 残りの部分はリンクが確立されたときに, ローカル側とリモート側のシステムの交渉によって変更してもよい (というか, この場合は必ず変更されなければならない) と PPP プログラムに教えることができます. 255.255.255.0 という文字列は, それらの仮想デバイス間に適用されるサブネットマスク値を PPP プログラムに教えています.

注意. この例では ISP がリンクの両端に対して IP アドレスを動的に提供するものと想定しています! もし ISP からローカル側で使用すべき具体的な IP アドレスの割り当てを受けている場合, 127.1.1.1代わりにその IP アドレスを入力してください.

逆に, ISP がリモート側で使用する具体的な IP アドレスを指定している場合, 127.2.2.2代わりにその IP アドレスを入力してください.

これらの場合においても, 各アドレスの後ろの '/0' を残しておくのが良い考えでしょう. もしそれらのアドレスが実際に変更された場合でも, PPP プログラムはその変更に対応することができるからです.

add 0 0 127.2.2.2


最後の行では, ISP システムの (偽の) IP アドレスを指す IP トラフィックのデフォルトルートを追加するよう, PPP プログラムに命じています.

注意: 前の行で 127.2.2.2 の代わりに ISP に指定されたアドレスを用いている場合, ここでも 127.2.2.2 の代わりにその番号を使用してください.

この「偽」の IP トラフィックルートを追加しておけば, アイドル中の PPP プログラムは以下の動作を自動的に行うことができます.

  • ISP と「自動的に」 接続を確立し,

  • リンクのローカル側とリモート側の IP アドレスを再設定し,

  • ローカルのマシンと ISP 間でパケットを転送する.



"default" セクションの timeout の値に指定された秒間 TCP/IP のトラフィックが流れなかった場合, PPP プログラムは自動的にダイアルアップ接続を切断し, 始めの状態に戻ります.

3.2.2. '/etc/ppp/ppp.linkup' ファイル

PPP の設定を完全にするために必要なもう一つのファイルが '/etc/ppp/ppp.linkup' です. このファイルにはダイアルアップリンクが確立した後に, PPP プログラムが実行すべき命令が含まれています.

ダイアルアップ接続の場合, PPP プログラムはリモート側の偽の IP アドレス (前の章の例では 127.2.2.2) に対して生成されたデフォルトルートを削除し, (ダイアルアップ接続の確立中にわかる) 実際のリモートエンドの IP アドレスを指す新しいデフォルトルートをインストールする必要があります.

典型的な '/etc/ppp/ppp.linkup' ファイル:

#########################################################################=

# PPP Link Up File ('/etc/ppp/ppp.linkup')
#
#  このファイルは PPP がネットワーク接続を確立した後でチェックされます.
#
#  このファイルは以下の順序で検索されます.
#
#  1) まず, ローカル側に割り当てられた IP アドレスが検索され,
#     関連するコマンドが実行されます.      
#
#  2) IP アドレスが見つからない場合, PPP の起動時に指定されたラベル名が
#     検索され, 関連するコマンドが実行されます.
#
#  3) いずれの場合にも当てはまらない場合, 'MYADDR:' ラベルの下の
#     コマンドが実行されます.
#
#########################################################################=

#
# このセクションは /etc/ppp/ppp.conf 内の "demand" の設定で
# 使用される.
demand:
 delete ALL
 add 0 0 HISADDR
#
# /etc/ppp/ppp.conf 中の他の全ての設定ではこちらを用いる
#
MYADDR:
 add 0 0 HISADDR
########################################################################
# End of /etc/ppp/ppp.linkup
'/etc/ppp/ppp.conf' で使用されているのと全く同じ "demand:" というタグのセクションがあることに注意して下さい. このセクションでは, "demand" の設定を用いてリンクが確立された場合,
  1. PPP プログラムが生成した全ての IP ルーティング情報を削除し,

  2. リモートエンドの実際のアドレスをデフォルトルートに追加する

よう, PPP プログラムに命じています.

'/etc/ppp/ppp.conf' 内で 'set ifaddr' や 'add 0 0' を使用している設定 (つまり, ダイアルオンデマンドの設定) においては, /etc/ppp/ppp.linkup 内で "delete ALL" や "add 0 0 HISADDR" コマンドを実行することが重要になります.

これこそがリンクのオンデマンド設定を制御するメカニズムだからです.

/etc/ppp/ppp.linkup 内で明示的に名前を指定されていない設定は, "MYADDR:" セクションにあるコマンドを (それが何であれ) 実行します. 非デマンドダイアルの設定 (例えばサンプルの "interactive:") はこれに該当します. このセクションでは, ISP (リモートエンド) の IP アドレスをデフォルトルートに追加しているだけです.