ユーザ ppp と pppd (カーネルレベルの PPP 実装) は
どちらも/etc/ppp
ディレクトリに置かれた設定ファイルを使います.
設定ファイルのサンプルが提供されていて, ユーザ ppp の設定をおこなう際に
大変参考になりますので, 削除したりしないでください.
ppp の設定をするためには, 必要に応じて三つまでのファイルを編集する必要が あります. 書き込む内容は, プロバイダが静的に IP アドレスを割り当てる (つまり, 固定の IP アドレスを一つ与えられて, 常にそれを使う) か, または動的に IP アドレスを割り当てる (つまり, PPP セッションごとに IP アドレスが変化する可能性がある) かということに ある程度依存します.
/etc/ppp
ディレクトリにファイルを三つ作成する必要があります.
一つめのファイルはppp.conf
です. 以下の例とほぼ同じようなものに
なるでしょう. ``:'' で終る行は 1 カラム目から始まり, その他の行は
スペースまたはタブで以下の例のように段をつける (インデントする) 必要が
あることに注意してください.
/etc/ppp/ppp.conf
1 default:
2 set device /dev/cuaa0
3 set speed 38400
4 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATE1Q0 OK-AT-OK
\\dATDT\\T TIMEOUT 40 CONNECT"
5 provider:
6 set phone 01234567890
7 set login "TIMEOUT 10 gin:-BREAK-gin: foo word: bar col: ppp"
8 set timeout 120
9 set ifaddr x.x.x.x y.y.y.y
10 delete ALL
11 add 0 0 y.y.y.y
12 set openmode active
行番号はファイルに書かないでください. これは, 解説の際に
参照する行を示すためにつけたものです.
デフォルトエントリを指定します. このエントリ中のコマンドは ppp が起動された際に自動的に実行されます.
モデムが接続されているデバイスを指定します.
COM1: は/dev/cuaa0
に,
COM2: は/dev/cuaa1
になります.
通信速度 (DTE 速度) を指定します.
ダイアルスクリプトを指定します.
ユーザ ppp はchat(8)
言語に似た, 受信待ち文字列と
送信文字列の対からなるスクリプトを使用します.
この言語の機能に関しては, マニュアルページを参照してください.
接続するプロバイダの名前 ``provider'' を エントリ名として指定します.
このプロバイダの電話番号を指定します. 複数の電話番号を `:' で区切って指定することができます.
ログインスクリプトを指定します. ログインスクリプトも ダイアルスクリプトと同様の記述方法になります. この例は, 以下のようなログインセッションを使用している プロバイダのためのものです.
J. Random Provider
login: foo
password: bar
protocol: ppp
このスクリプトは必要に応じて書きかえる必要があるでしょう.
デフォルトの接続タイムアウト時間を (秒数で) 指定します. この例では, 120 秒間 通信がおこなわれなければ 自動的に接続を切るように指定しています.
インターフェースのアドレスを指定します. 文字列 x.x.x.x は プロバイダに割り当てられた IP アドレスで置きかえてください. 文字列 y.y.y.y はプロバイダから指示されたゲートウェイ (接続先となるマシン) の IP アドレスで置きかえてください.
この PPP 接続で使用する tun デバイスに関する, 既存のルーティングテーブルエントリをすべて削除します.
プロバイダ側の IP アドレスをデフォルトルートに指定します. この IP アドレスは常にプロバイダのゲートウェイの IP アドレスでなければいけません.
こちら側からネゴシエーションを開始するように指示します. これは接続相手が自分からネゴシエーションを開始するように 設定されている場合には必要ありませんが, 両側とも自分から Line Control Protocol (LCP) を開始するように設定されていても 何も問題はありません.
二つめのファイルは/etc/ppp/ppp.linkup
です:
x.x.x.x:
delete ALL
add 0 0 HISADDR
先ほどと同じように, プロバイダに割り当てられた IP アドレスで x.x.x.x を 置きかえます. このファイルは, この PPP 接続に関する既存のルートをすべて 自動的に削除したり, プロバイダから このマシンへのルートを デフォルトルートとして追加するのに使われます. (HISADDR マクロは自動的にプロバイダ側のアドレスに置きかえられます)
プロバイダが静的な IP アドレスを割り当ててくれるなら,
実は/etc/ppp.linkup
ファイルにエントリを書く必要はありません.
しかし, 繰り返しになりますが, 書いてあっても何の問題もありません.
最後は, 三つめのファイル/etc/ppp/ppp.secret
です.
このファイルでは ppp サーバへのアクセスを制御するためのパスワードを
設定することができます. 複数の人がこの ppp システムを使うのであれば,
パスワードを設定したいと思う場合があるかもしれません.
これらのファイルのサンプルが/etc/ppp
ディレクトリに置かれています.
プロバイダが静的な IP アドレスの割り当てをおこなっていない場合,
ppp
が相手側のホスト (ゲートウェイ) と交渉して,
こちら側と相手側のアドレスを決めるように設定することができます.
これは, 起動時には「仮」のアドレスを使っておいて,
接続時に LCP により ppp が IP アドレスを正しく設定できるようにすることで
実現されます. その他の設定は, 静的な IP アドレスを使う場合と同じです.
静的な IP アドレスを使う場合のppp.conf
ファイルの
エントリの該当部分を以下のように変更します:
ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0
delete ALL
add 0 0 10.0.0.2
こちら側と相手側, どちらの IP アドレスに対しても, 0 を指定するべきでは 「ありません」. もし 0 を指定すると, ppp が正しい初期エントリを ルーティングテーブルに設定することができなくなるでしょう.
``/'' 文字の後ろの数字は, アドレス交渉の際に固定しておきたいビット数です.
ppp.conf
を読み込んだ時点では, まだ HISADDR マクロが
使えないことにも注意してください.
このマクロが使えるのはppp.linkup
の中でだけです.
詳細なサンプルについては,
/etc/ppp/ppp.conf.sample
ファイル中の pmdemand エントリと
/etc/ppp/ppp.linkup.sample
を参照してください.
このセクションでは iijppp をサーバとして設定する方法について説明します.
かかってきた電話をppp
が受けるように設定する場合,
ppp
接続についてだけパケットをフォワードするようにしたいのか,
すべてのインターフェースについてフォワードするようにしたいのか,
それともまったくフォワードをおこないたくないのかを決めなければいけません.
ppp 接続についてだけフォワードをおこなうためには,
以下の行をppp.conf
ファイルに追加しておきます.
enable proxy
すべてのインターフェースについてパケットの転送をおこないたい場合は,
以下のオプションを/etc/rc.conf
に設定してください. (このファイルは
以前のバージョンの FreeBSD では/etc/sysconfig
と呼ばれていました)
gateway=YES
getty を使ってダイアルアップサービスをおこなうための優れた解説が FreeBSD でダイアルアップサービスをおこなうための設定 にあります.
getty に代わるものとしては, mgetty があります. これは getty をより柔軟にしたもので, ダイアルアップ回線での使用を意図して設計されています.
mgetty を使う場合の利点は, mgetty が積極的にモデムと通信する
ということです. つまり, もし/etc/ttys
でポートを閉じた場合,
モデムは電話をとらないようになります.
最近のバージョンの mgetty (0.99beta 以降) では, PPP ストリームの 自動検出もサポートされています. これにより, クライアント側で スクリプトを準備しなくともサーバにアクセスすることができます.
mgetty の入手方法と正しい設定については, このドキュメントの扱う範囲を 越えています. 訳者注: 最近の ports および packages には mgetty+sendfax が含まれています.
/etc/ppp/ppp-shell
という名前で, 以下のような内容のファイルを
作成します:
#!/bin/sh
IDENT=`echo $0 | sed -e 's/^.*-\(.*\)$/\1/'`
CALLEDAS="$IDENT"
TTY=`tty`
if [ x$IDENT = xdialup ]; then
IDENT=`basename $TTY`
fi
echo "PPP for $CALLEDAS on $TTY"
echo "Starting PPP for $IDENT"
exec /usr/sbin/ppp -direct $IDENT
このスクリプトには実行可能属性をつけておきます.
次に以下のコマンドを実行し, ppp-dialup
という名前で
このスクリプトへのリンクを作成します:
# ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-dialup
すべてのダイアルアップ ppp ユーザのログインシェルとして
このスクリプトを使用します. 以下は pchilds というユーザ名の
ダイアルアップユーザを/etc/password
へ登録した場合の例です.
(パスワードファイルを直接エディタで編集したりせず,
vipw
を使ってください)
pchilds:*:1011:300:Peter Childs PPP:/home/ppp:/etc/ppp/ppp-dialup
任意のユーザが読むことのできる, /home/ppp
ディレクトリを
作成します. /etc/motd
が表示されないようにするため,
以下のように大きさが 0 バイトのファイルを このディレクトリの下に
作成しておきます.
-r--r--r-- 1 root wheel 0 May 27 02:23 .hushlogin
-r--r--r-- 1 root wheel 0 May 27 02:22 .rhosts
上記と同じようにppp-shell
ファイルを作成し,
静的に IP アドレスを割り当てる それぞれのアカウントごとに
ppp-shell
へのシンボリックリンクを作成します.
例えば, クラス C のネットワークの経路制御を必要とする, 三人のダイアルアップ顧客 fred, sam, mary がいるとすると, 以下のコマンドを実行することになるでしょう:
# ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-fred
# ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-sam
# ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-mary
これらのユーザのダイアルアップアカウントでは, 上で作成した
それぞれのシンボリックリンクをログインシェルとして設定しておきます.
(つまり, ユーザ mary のログインシェルは/etc/ppp/ppp-mary
に
なります).
/etc/ppp/ppp.conf
ファイルは 大体以下のような内容になるでしょう:
default:
set debug phase lcp chat
set timeout 0
ttyd0:
set ifaddr 203.14.100.1 203.14.100.20 255.255.255.255
enable proxy
ttyd1:
set ifaddr 203.14.100.1 203.14.100.21 255.255.255.255
enable proxy
上の例のように段をつける (インデントする) 必要があることに注意してください.
default:
セクションはセッションごとにロードされます.
/etc/ttys
で有効にしてある各ダイアルアップ回線ごとに一つ,
上記のttyd0:
のようなエントリを作成します.
各行の相手側アドレスとして, それぞれ別の IP アドレスを
動的 IP ユーザのための IP アドレスのプールから割り当てておく必要があります.
上のサンプルの/etc/ppp/ppp.conf
の内容に加えて,
静的に IP を割り当てられたダイアルアップユーザ
それぞれのためのセクションを追加する必要があります.
ここでも fred, sam, mary の例を使うことにしましょう.
fred:
set ifaddr 203.14.100.1 203.14.101.1 255.255.255.255
sam:
set ifaddr 203.14.100.1 203.14.102.1 255.255.255.255
mary:
set ifaddr 203.14.100.1 203.14.103.1 255.255.255.255
必要であれば, それぞれの静的 IP ユーザのための経路制御情報も
/etc/ppp/ppp.linkup
ファイルに含めておくべきでしょう.
以下の例ではクライアントの ppp リンクを経由する
クラス C の203.14.101.0
ネットワークへの経路を追加しています.
fred:
add 203.14.101.0 netmask 255.255.255.0 HISADDR
sam:
add 203.14.102.0 netmask 255.255.255.0 HISADDR
mary:
add 203.14.103.0 netmask 255.255.255.0 HISADDR
AUTO_PPP オプションつきでコンパイルした mgetty を使えば, mgetty が PPP 接続の LCP フェーズを検出して, 自動的に ppp シェルを起動するように 設定することができます. しかし この場合, デフォルトの login/password シーケンスは発生しないので, ユーザの認証は PAP または CHAP を使っておこなう必要があります.
このセクションでは, ユーザ (あなた) が問題なく AUTO_PPP オプションつきの mgetty (v0.99beta またはそれ以降) の設定, コンパイル, インストールができているものと仮定しています.
/usr/local/etc/mgetty+sendfax/login.config
ファイルが
以下の行を含んでいることを確認してください:
/AutoPPP/ - - /etc/ppp/ppp-pap-dialup
これにより, PPP 接続を検出したら mgetty がppp-pap-dialup
スクリプトを実行するようになります.
/etc/ppp/ppp-pap-dialup
という名前で, 以下のような内容のファイルを
作成します (このファイルは実行可能属性をつけておく必要があるでしょう):
#!/bin/sh
TTY=`tty`
IDENT=`basename $TTY`
exec /usr/sbin/ppp -direct pap$IDENT
/etc/ttys
で有効になっている各ダイアルアップ回線ごとに,
対応するエントリを一つ/etc/ppp/ppp.conf
に作成します.
これは上で作成した定義と問題なく共存できるでしょう.
papttyd0:
enable pap
set ifaddr 203.14.100.1 203.14.100.20 255.255.255.255
enable proxy
papttyd1:
enable pap
set ifaddr 203.14.100.1 203.14.100.21 255.255.255.255
enable proxy
この方法でログインする各ユーザは, PAP によるユーザ認証をおこなうために
/etc/ppp/ppp.secret
ファイルにユーザ名とパスワードを書いておくか,
または/etc/password
ファイルを使うように
enable passwdauth
オプションを (/etc/ppp/ppp.conf に) 追加しておく必要があるでしょう. (*)
(*) このオプションは 2.2-961014-SNAP およびそれ以降のシステムか, または 2.1.x のシステムにおいて ppp のコードを更新している場合にだけ 使用可能だということに注意してください. (詳細に関しては, 以下のマイクロソフト拡張を参照してください)
2.2-961014-SNAP 以降では, DNS と NetBIOS ネームサーバの自動交渉 (negotiation) をサポートしている クライアント (例えば Win95/NT クライアント) との間で この機能を使うことができます. プロトコルの詳細については RFC1877 を参照してください.
これらの拡張機能を/etc/ppp/ppp.conf
ファイルで有効にした例を
以下に示します.
default:
set debug phase lcp chat
set timeout 0
enable msext
set ns 203.14.100.1 203.14.100.2
set nbns 203.14.100.5
これにより, クライアントはプライマリとセカンダリのネームサーバアドレス および NetBIOS ネームサーバホストを知ることができます.