FreeBSD ハンドブック
Prev | Chapter 19 PPP と SLIP | Next

# 19.2 ユーザ ppp の利用

原作: Brian Somers `<brian@FreeBSD.org>`, 協力: Nik Clayton `<nik@FreeBSD.org>`, Dirk-Willem van Gulik `<Dirk.vanGulik@jrc.it>`, Peter Childs `<pjchilds@imforei.apana.org.au>`.

## 19.2.1 ユーザ PPP

### 19.2.1.1 前提条件

以下の情報を手に入れておく必要があるでしょう:

- PPP で接続するインターネットサービスプロバイダ (ISP) のアカウント. さらに, 接続済みのモデム (またはその他のデバイス) があり, プロバイダとの接続が可能なように正しく設定されている.

- プロバイダの電話番号.

- ログイン名とパスワード. これは通常の unix 形式のログイン名と パスワードの組という場合もありますし, PPP PAP または CHAP の ログイン名とパスワードの組という場合もあります.

- 一つ以上のネームサーバの IP アドレス. 通常, プロバイダから IP アドレスを二つ指示されている はずです. 一つすら提供されていないならば, `ppp.conf` ファイル中で `enable dns` コマンドを使って ppp にネームサーバを設定するよう 指示できます.

プロバイダからは以下の情報が提供されているはずですが, どうしても必要というわけではありません:

- プロバイダのゲートウェイの IP アドレス. ゲートウェイとは, あなたがそこに接続をおこなって, デフォルトルート として設定することになるマシンです. プロバイダがこのアドレスを明示していなくても, 最初は 適当に設定しておいて, 接続時にプロバイダの PPP サーバから 正しいアドレスを教えてもらうことができます.

  このアドレスは, ppp から `HISADDR`として参照されます.

- プロバイダのネットマスク設定. プロバイダが明示していないとしても, ネットマスクとして `255.255.255.0` を使用しておけば問題ありません.

- もしプロバイダから固定の IP アドレスとホスト名の割り当てを 受けていれば, その情報を指定しておくこともできます. 割り当てを受けていなければ, 接続先から適切な IP アドレスを指定してもらいます.

もし, 必要な情報が不足していれば, プロバイダに連絡を取って 確認しておいてください.

### 19.2.1.2 ppp 対応カーネルの構築

説明でも述べているように, `ppp` はカーネルの `tun` デバイスを使います. 使っているカーネルがどれであっても, `tun` デバイスを設定しなければなりません. FreeBSDに付属しているデフォルトの `GENERIC` カーネルに合うように `tun` デバイスは前もって設定されています. しかしながら, 自分で修正したカーネルをインストールするのであれば, pppが正しく動くよう, カーネルが設定されているか確認しなくてはいけません.

これを確認するには, カーネルコンパイルディレクトリ (`/sys/i386/conf` または `/sys/pc98/conf`) に移動して, カーネルコンフィグレーションファイルを調べます. 以下の行がどこかに含まれている必要があります.

    pseudo-device tun 1

この行がカーネルコンフィグレーションファイルに 含まれていない場合, この行を追加して カーネルの再コンパイルとインストールをおこなう必要があります. 元々の `GENERIC` カーネルは 標準でこれを含んでいますので, カスタムカーネルをインストールしているのではなかったり, `/sys` ディレクトリが存在しないのであれば, 何も変更する必要はありません. カーネルコンフィグレーションの詳細については, FreeBSD カーネルのコンフィグレーション を参照してください.

以下のコマンドを実行することで, 現在のカーネルにトンネルデバイスが いくつ組み込まれているかを調べることができます:

    # ifconfig -a
    tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
        inet 200.10.100.1 --> 203.10.100.24 netmask 0xffffffff
    tun1: flags=8050<POINTOPOINT,RUNNING,MULTICAST> mtu 576
    tun2: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
        inet 203.10.100.1 --> 203.10.100.20 netmask 0xffffffff
    tun3: flags=8010<POINTOPOINT,MULTICAST> mtu 1500

> Note: FreeBSD 4.0やより最近のリリースでは, すでに使われている `tun` デバイスしか見つけることが できないでしょう. これは, 全く `tun` デバイスを見つけることが できないかもしれないということです. しかし, もしこうなって しまっても, 心配することはありません. そのデバイスは `ppp` が使おうとする時に動的に作られるはず だからです.

この例ではトンネルデバイスが四つ存在し, そのうち二つに 設定がおこなわれ, 使用中であることがわかります. 上の例で `RUNNING` フラグがオンになっている ものがありますが, これは そのインタフェースが何かに使用されていることを示している だけであるということに注意してください. つまり, `RUNNING` になっていない インタフェースがあったとしても, それはエラーではありません.

トンネルデバイスがカーネルに組み込まれておらず, 何らかの理由で カーネルの再構築ができない場合でも, 方法がないわけではありません. 動的にデバイスをロードすることができるはずです. 詳細については modload(8) や lkm(4) など, 適切なマニュアルを参照してください.

### 19.2.1.3 tun デバイスの確認

ほとんどのユーザは `tun` デバイス (`/dev/tun0`) が一つあれば充分でしょう. より多くのデバイスを使う場合 (すなわち, カーネルコンフィグレーション ファイルで `pseudo-device tun` の行に `1` 以外の数値を指定している場合), 以下で `tun0` と書かれている部分をすべて, あなたが使うデバイスの番号に あわせて読みかえてください.

`tun0` デバイスが正しく作成されていることを確認する最も簡単な方法は, それを作り直すことです. そのためには, 以下のコマンドを実行します:

    # cd /dev
    # ./MAKEDEV tun0

カーネルに 16 個のトンネルデバイスを組み込んだのであれば, `tun0` だけでなく他の tun デバイスも作成しておく必要があるでしょう:

    # cd /dev
    # ./MAKEDEV tun15

また, カーネルが正しく設定されているかどうかを調べるために 以下のコマンドを実行して, このような出力が得られることを確認します:

    # ifconfig tun0
    tun0: flags=8050<POINTOPOINT,RUNNING,MULTICAST> mtu 1500

まだ `RUNNING` フラグがセットされていない場合もあります. その時は以下のような出力が得られるでしょう:

    # ifconfig tun0
    tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500

前述したように, FreeBSD 4.0 以降のリリースでは `tun` デバイスは要求に応じて 作られるので, もしそのデバイスがまだ使われていなければ, 見つけられないかもしれないということを思い出してください.

### 19.2.1.4 名前の解決に関する設定

リゾルバ (resolver) はシステムの一部分で, IP アドレスとホスト名との 変換をおこないます. IP アドレスとホスト名を対応させるためのマップを, 二つの場所のうちの一つから探すように設定できます. 一つめは `/etc/hosts` (`man 5 hosts`) と呼ばれるファイルです. 二つめはインターネット ドメインネームサービス (DNS) と呼ばれる 分散データベースですが, これに関する議論は このドキュメントで扱う範囲を 越えていますので, これについての説明はおこないません.

リゾルバは名前のマッピングを おこなうシステムコールの集合体です. ただし どこからマッピング情報を見つけるのかは, 最初に指示しておく必要があります. これは まず `/etc/host.conf` ファイルを編集することでおこないます. 混乱の元になりますので, このファイルを `/etc/hosts.conf` と 呼んだりしてはいけません (余分な `s` がついていますね).

#### 19.2.1.4.1 `/etc/host.conf` ファイルの編集

このファイルには 以下の 2 行が (この順番で) 書かれているはずです:

    hosts
    bind

これは, 最初に `/etc/hosts` ファイルを調べ, そこで目的の名前が 見つけられなかった場合に DNS を引きにいくようリゾルバに指示します.

#### 19.2.1.4.2 /etc/hosts(5) ファイルの編集

このファイルはローカルネットワーク上に存在するマシンの IP アドレスと ホスト名を含んでいるはずです. 最低でも ppp を動作させるマシンのエントリが 含まれている必要があります. そのマシンのホスト名が `foo.bar.com` で, IP アドレスが `10.0.0.1` であると仮定すると, `/etc/hosts` は 以下の行を含んでいなければいけません:

    127.0.0.1  localhost.bar.com   localhost
    127.0.0.1   localhost.bar.com.
    10.0.0.1    foo.bar.com     foo
    10.0.0.1    foo.bar.com.

一つめの行は `localhost` を現在のマシンの別名として定義しています. マシン固有の IP アドレスが何であっても, この行の IP アドレスは 常に `127.0.0.1` でなければいけません. 二つめの行はホスト名 `foo.bar.com` (と, その省略形 `foo`) を IP アドレス `10.0.0.1` にマップします.

もしプロバイダから固定の IP アドレスとホスト名を割り当てられて いるのであれば, それを `10.0.0.1` エントリのかわりに使ってください.

#### 19.2.1.4.3 `/etc/resolv.conf` ファイルの編集

`/etc/resolv.conf` はリゾルバの振舞いを指定します. もし自前の DNS サーバを走らせているのなら, このファイルは空のままに しておくこともできます. 通常は, 以下のように書いておく必要があるでしょう:

    domain bar.com
    nameserver x.x.x.x
    nameserver y.y.y.y

``x.x.x.x`` と ``y.y.y.y`` はプロバイダから指示されたアドレスで, 接続するプロバイダが提供しているネームサーバを すべて書いてください. `domain` に指定するのは このマシンのデフォルトのドメイン名で, おそらく 書かなくても問題は無いでしょう. このファイルの各エントリの詳細については, `resolv.conf` のマニュアルページを参照してください.

バージョン 2 以降の ppp を使用している場合には, `enable dns` コマンドを使用してネームサーバのアドレスを プロバイダに問い合わせるように指示することができます. 上の指定とは異なるアドレスをプロバイダが指定してきた場合 (または `/etc/resolv.conf` でネームサーバが指定されていない場合), ppp はプロバイダが指定したアドレスで `resolv.conf` を書きかえます.

### 19.2.1.5 `ppp` の設定

ユーザ ppp と `pppd` (カーネルレベルの PPP 実装) は どちらも `/usr/share/examples/ppp` ディレクトリに置かれた設定ファイルを使います. ここには設定ファイルのサンプルが用意されていて, ユーザ ppp の設定を おこなう際に大変参考になりますので, 削除したりしないでください.

`ppp` の設定をするためには, 必要に応じていくつかのファイルを編集する必要が あります. 書き込む内容は, プロバイダが静的に IP アドレスを割り当てる (つまり, 固定の IP アドレスを一つ与えられて, 常にそれを使う) か, または動的に IP アドレスを割り当てる (つまり, PPP セッションごとに IP アドレスが変化する可能性がある) かということに ある程度依存します.

#### 19.2.1.5.1 静的 IP アドレスによる PPP 接続

まず `/etc/ppp/ppp.conf` という設定ファイルを作成する必要があります. これは以下の例とほとんど同じようなものになるでしょう.

> Note: `:` で終る行は 1 カラム目から始め, その他の行はスペースまたはタブで以下の例のように 段をつける (インデントする) 必要があります.

    1     default:
    2       set device /dev/cuaa0
    3       set speed 115200
    4       set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATE1Q0 OK-AT-OK \\dATDT\\TTIMEOUT 40 CONNECT"
    5     provider:
    6       set phone "(123) 456 7890"
    7       set login "TIMEOUT 10 \"\" \"\" gin:--gin: foo word: bar col: ppp"
    8       set timeout 300
    9       set ifaddr x.x.x.x y.y.y.y 255.255.255.0 0.0.0.0
    10      add default HISADDR
    11      enable dns

ファイルでは行番号を取り除いておいてください. これは解説の際に参照する行を示すためにつけたものです.

Line 1:

  デフォルトエントリを指定します. このエントリ中のコマンドは ppp が起動された際に自動的に実行されます.

Line 2:

  モデムが接続されているデバイスを指定します. `COM1:` は `/dev/cuaa0` に, `COM2:` は `/dev/cuaa1` になります.

Line 3:

  通信速度 (DTE 速度) を指定します. もし 115200 が使えない (最近のモデムなら大抵使えるはずですが) 場合には, かわりに 38400 を指定してみてください.

Line 4:

  ダイアルスクリプトを指定します. ユーザ PPP は chat(8) 言語に似た, 受信待ち文字列と 送信文字列の対からなるスクリプトを使用します. この言語の機能に関しては, マニュアルページを参照してください.

Line 5:

  接続するプロバイダの名前 “provider” を エントリ名として指定します.

Line 6:

  このプロバイダの電話番号を指定します. 複数の電話番号を `:` や `|` で区切って指定することができます. これら区切り文字の違いについては, ppp(8) に 詳しく書かれています. 要約すると, 毎回違う番号に かけたいのであれば `:` を使います. 常に まず先頭の番号にかけてみて, つながらない時にだけ 2 番目以降の番号に かけたいのであれば `|` を使います. 例に示されているように, 常に電話番号全体を引用符で くくって (クォートして) おきます.

Line 7:

  ダイアルスクリプトと同様に, ログインスクリプトも chat 言語風の記述をおこないます. この例は, 以下のようなログインセッションを使用する プロバイダのためのものです:

      J. Random Provider
      login: foo
      password: bar
      protocol: ppp

  このスクリプトは必要に応じて 書きかえなければならないでしょう. 初めてスクリプトを書く時には, 予想した通りに 処理が進んだかどうかを確認するため, “chat” ログを とるようにしておいた方が良いでしょう.

  PAP や CHAP を使用する場合には, ここでログインすることは ありませんから, ログイン文字列は空白のままにしておくべきです. 詳細については PAP および CHAP による認証を参照してください.

Line 8:

  デフォルトの接続タイムアウト時間を (秒数で) 指定します. この例では, 300 秒間 通信がおこなわれなければ 自動的に接続を切るように指定しています. タイムアウトさせたくない場合には, この値を 0 に設定します.

Line 9:

  インタフェースのアドレスを指定します. 文字列 `x.x.x.x` は プロバイダに割り当てられた IP アドレスで置きかえてください. 文字列 `y.y.y.y` はプロバイダから指示されたゲートウェイ (接続先となるマシン) の IP アドレスで置きかえてください. プロバイダがゲートウェイのアドレスを 指示していない場合は, `10.0.0.2/0` を使用しておいてください. もし “仮の” アドレスを使用する必要がある場合には, 動的 IP アドレスによる PPP 接続に関する指示に従って, `/etc/ppp/ppp.linkup` にエントリを作成していることを 確認してください. この行が省略されている場合, ppp を `-auto` モードで動作させることはできません.

Line 10:

  プロバイダのゲートウェイへの経路を デフォルトルートとして 追加します. 特殊文字列 `HISADDR` は, 9 行目で指定された ゲートウェイのアドレスで置きかえられます. `HISADDR` は 9 行目までは初期化されていませんので, その行よりも後でしか使えないことに 注意してください.

Line 11:

  ネームサーバのアドレスが正しいか どうかを確認するため, プロバイダに問い合わせをおこなうよう ppp に指示します. プロバイダがこの機能をサポートしていれば, ppp は `/etc/resolv.conf` のネームサーバエントリを 正しいアドレスに更新することができます.

静的な IP アドレスを持っていて, 接続が完了する前にルーティングテーブルの エントリが正しく設定されているのであれば, `ppp.linkup` に エントリを追加する必要はありません. しかし, この場合でもエントリを追加して, 接続が完了した時点で プログラムを呼び出したいことがあるかもしれません. これについては後ほど sendmail を例として説明します.

これらの設定ファイルのサンプルが `/usr/share/examples/ppp` ディレクトリに 置かれています.

#### 19.2.1.5.2 動的 IP アドレスによる PPP 接続

プロバイダが静的な IP アドレスの割り当てをおこなっていない場合, `ppp` が相手側のホスト (ゲートウェイ) と交渉して, こちら側と相手側のアドレスを 決めるように設定することができます. これは, 起動時には“仮の”アドレスを使っておいて, 接続後に IP コンフィグレーション プロトコル (IPCP) を使用して `ppp` が IP アドレスを正しく設定できるようにすることで実現されます. 静的 IP アドレスによる PPP 接続に 以下の変更を加える以外は, `ppp.conf` の設定は同じです:

    9       set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0

繰り返しますが, 行番号は取り除いておいてください. これは解説の際に参照する行を示すためにつけたものです. なお, 少なくともスペース 1 個分の段づけ (インデント) が必要です.

Line 9:

  `/` 文字の後ろの数字は, アドレス交渉の際に固定しておきたい ビットの数です. 場合によっては, もっと適切な IP アドレスを 指定しておきたいこともあるかもしれませんが, ほとんどの場合には 上の例の通りで問題ありません.

  最後の引数 (`0.0.0.0`) は, アドレスの交渉の際に `10.0.0.1` ではなく `0.0.0.0` を使用するよう ppp に指示するためのものです. `set ifaddr` コマンドの最初の引数として `0.0.0.0` を指定してはいけません. さもないと, `-auto` モードで動作させる際に 初期経路を設定することができなくなります.

バージョン 1.X の ppp を使用する場合, `/etc/ppp/ppp.linkup` にもエントリを作成しておく必要があります. `ppp.linkup` は接続が確立された後に使用されます. この時点では, `ppp` は実際にどの IP アドレスを使うべきなのか わかっているはずです. 以下のエントリは存在する仮の経路を削除し, 正しい経路を作成します:

    1     provider:
    2       delete ALL
    3       add default HISADDR

Line 1:

  接続を確立する際に, `ppp` は以下のルールに従って `ppp.linkup` のエントリを検索します: まず `ppp.conf` で使用されたのと同じラベルを探します. もし見つからなければ, ゲートウェイの IP アドレスのエントリを 探します. このエントリは 4 オクテットの IP アドレス形式の ラベルです. それでも まだエントリが見つからなければ, `MYADDR` エントリを探します.

Line 2:

  この行は, 使用する tun インタフェースに関する既存の経路を (ダイレクトルートのエントリを除き) すべて削除するよう `ppp` に指示します.

Line 3:

  この行は `HISADDR` への経路をデフォルトルートとして 追加するように ppp に指示します. `HISADDR` は IPCP で 決定されたゲートウェイの IP アドレスで置きかえられます.

詳細なサンプルについては, `/usr/share/examples/ppp/ppp.conf.sample` ファイル中のpmdemand エントリと `/usr/share/examples/ppp/ppp.linkup.sample` を参照してください.

バージョン 2 の ppp から “sticky routes” が導入されました. `MYADDR` や `HISADDR` を含む `add` コマンドと `delete` コマンドを記憶して, `MYADDR` や `HISADDR` の アドレスが変化した際には経路の再設定をおこないます. したがって, これらのコマンドを `ppp.linkup` に 繰り返し記述する必要は無くなりました.

#### 19.2.1.5.3 かかってきた電話を `ppp` で受けるには

かかってきた電話を `ppp` が受けるように設定する際に, そのマシンが LAN に接続されているのであれば, パケットを LAN に転送するかどうかを決定する必要があります. 転送をおこなう場合には, その LAN のサブネットから IP アドレスを ppp クライアントに割り当て, 以下のコマンドを指定するのが良いでしょう.

    gateway_enable=YES

##### 19.2.1.5.3.1 どの getty を使いますか?

getty でダイアルアップサービスをおこなう場合の優れた解説が FreeBSD でダイアルアップサービスをおこなうための設定 にあります.

`getty` に代わるものとしては, mgetty があります. これは `getty` をより柔軟にしたもので, ダイアルアップ回線での使用を意図して 設計されています.

`mgetty` を使う場合の利点は, `mgetty` が積極的にモデムと通信する ということです. つまり, もし `/etc/ttys` でポートを閉じている場合, モデムは電話をとらなくなります.

最近のバージョンの `mgetty` (0.99beta 以降) では, PPP ストリームの 自動検出もサポートされています. これにより, クライアント側で スクリプトを準備しなくてもサーバに アクセスすることができます.

`mgetty` に関する, より詳細な情報については Mgetty と AutoPPP を参照してください.

##### 19.2.1.5.3.2 ppp の実行許可

`ppp` は通常, ID 0 のユーザ (root) として動作しなければいけませんが, 以下で説明するように, `ppp` を通常のユーザとしてサーバモードで実行させたい 場合には, そのユーザを `/etc/group` の `network` グループに 追加して, ppp を実行する許可を与えておかなければいけません.

また, そのユーザが設定ファイル内の目的のエントリに アクセスできるように, 以下のように `allow` コマンドで許可を与えておく必要があります:

    allow users fred mary

このコマンドがデフォルトエントリに 書かれている場合には, 指定されたユーザは すべてのエントリをアクセスできるようになります.

##### 19.2.1.5.3.3 動的 IP ユーザのための ppp シェルの設定

`/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 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

##### 19.2.1.5.3.4 静的 IP ユーザのための PPP シェルの設定

上記と同じように `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` に なります).

##### 19.2.1.5.3.5 動的 IP ユーザのための ppp.conf の設定

`/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

> Note: 上の例のように段をつける (インデントする) 必要があることに注意してください.

`default:` エントリはセッションごとにロードされます. `/etc/ttys` で有効にしてある各ダイアルアップ回線ごとに一つ, 上記の `ttyd0:` のようなエントリを作成します. 各行の相手側アドレスとして, それぞれ別の IP アドレスを 動的 IP ユーザのための IP アドレスのプールから割り当てておく必要があります.

##### 19.2.1.5.3.6 静的 IP ユーザのための `ppp.conf` の設定

上のサンプルの `/usr/share/examples/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

#### 19.2.1.5.4 `mgetty`, AutoPPP, マイクロソフト拡張の詳細

##### 19.2.1.5.4.1 `mgetty` と AutoPPP

`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
    exec /usr/sbin/ppp -direct pap

さらに, かかってきた電話すべてを自分で扱うエントリを `/etc/ppp/ppp.conf` に作成します.

    pap:
      enable pap
      set ifaddr 203.14.100.1 203.14.100.20-203.14.100.40
      enable proxy

この方法でログインする それぞれのユーザは, PAP によるユーザ認証を おこなうために `/etc/ppp/ppp.secret` ファイルにユーザ名とパスワードを 書いておくか, または `/etc/password` ファイルを使うように,

    enable passwdauth

ユーザに静的な IP アドレスを割り当てる場合には, そのアドレスを `/etc/ppp/ppp.secret` の第三引数として指定することができます. サンプルについては, `/usr/share/examples/ppp/ppp.secret.sample` を参照してください.

##### 19.2.1.5.4.2 マイクロソフト拡張

クライアントからの要求に応じて, ppp が DNS や NetBIOS ネームサーバの アドレスを通知するように 設定をおこなうこともできます.

バージョン 1.X の ppp で これらの拡張機能を有効にするには, 以下の行を `/etc/ppp/ppp.conf` の適切なセクションに追加する必要があるでしょう.

    enable msext
    set ns 203.14.100.1 203.14.100.2
    set nbns 203.14.100.5

バージョン 2 以降の ppp では, 以下のようになります:

    accept dns
    set dns 203.14.100.1 203.14.100.2
    set nbns 203.14.100.5

これにより, クライアントはプライマリと セカンダリのネームサーバアドレス および NetBIOS ネームサーバホストを知ることができます.

バージョン 2 以降の ppp では, `set dns` の行を省略した場合には `/etc/resolv.conf` に書かれているネームサーバのアドレスを使用します.

#### 19.2.1.5.5 PAP および CHAP による認証

いくつかのプロバイダでは, PAP または CHAP のいずれかの認証メカニズムを 使用して接続時の認証をおこなうように システムを設定しています. この場合, プロバイダは接続の際に `login:` プロンプトを送信せず, 最初から PPP で通信を始めようとするでしょう.

PAP ではパスワードがそのまま送られてしまうため, CHAP に比べると安全性が 低くなりますが, このパスワードはシリアル回線のみを通して送られます. そのため, クラッカーが “盗み聞き” する余地は多くないので, 通常ここの セキュリティは問題にはなりません.

静的 IP アドレスによる PPP 接続または 動的 IP アドレスによる PPP 接続の セクションに戻って, 以下の変更をおこないます:

    7       set login
    ...
    12      set authname MyUserName
    13      set authkey MyPassword

これまでと同様に, 行番号は取り除いておいてください. これは解説の際に参照する行を示すためにつけたものです. なお, 少なくともスペース 1 個分の段づけ (インデント) が必要です.

Line 7:

  PAP または CHAP を使用する場合, 通常 プロバイダはサーバへの ログインを必要としません. そのため, “set login” 文字列を 無効にしておかなければいけません.

Line 12:

  この行は PAP/CHAP ユーザ名を指定します. `MyUserName` に 正しい値を入れておく必要があります.

Line 13:

  この行は PAP/CHAP パスワードを指定します. `MyPassword` に 正しい値を入れておく必要があります. PAP と CHAP はデフォルトで両方とも 受け付けられるようになって いますが, PAP や CHAP を使用するという 意思を明示するために,

      15      accept PAP

  または

      15      accept CHAP

  という行を追加しておくのも良いでしょう.

#### 19.2.1.5.6 動作中の ppp の設定変更

適切な診断ポートが設定されている場合には, バックグラウンドで動作中の `ppp` プログラムと通信することができます. この設定をおこなうためには, 以下の行を設定ファイルに追加しておきます:

    set server /var/run/ppp-tun%d DiagnosticPassword 0177

これにより, ppp は指定された unix ドメインの ソケットをモニタして, クライアントから正しいパスワードを受け取った後に アクセスを許可します. このソケット名に含まれる `%d` は, この ppp が使用している `tun` デバイスの デバイス番号で置きかえられます.

一旦ソケットの設定が終了したら, スクリプト中で pppctl(8) を 使用して, 動作中の ppp を操作することができるでしょう.

### 19.2.1.6 システムの最終設定

これで `ppp` の設定は終りました. しかし `ppp` を動かす前に, まだ少し必要なことがあります. それらの設定は, すべて `/etc/rc.conf` ファイルを 編集することでおこないます. (このファイルは以前には `/etc/sysconfig` と呼ばれていました)

このファイルを上から順に設定していきます. まずは `hostname=` の行が設定されていることを確認します. 例えば以下のように:

    hostname="foo.bar.com"

もしプロバイダが静的な IP アドレスとホスト名を割り当てているのなら, ホスト名としてそれを使うのが おそらくベストでしょう.

次に `network_interfaces` 変数を調べます. 必要に応じて (on demand) プロバイダにダイアルするようにシステムを設定したい場合には, `tun0` デバイスがこのリストに追加されていることを確認しておきます. それ以外の場合には, tun0 デバイスをリストから削除しておきます.

    network_interfaces="lo0 tun0" ifconfig_tun0=

> Note: `ifconfig_tun0` 変数が空で, `/etc/start_if.tun0` という名前の ファイルが作成されていなければなりません. このファイルの内容は以下のようになります.

>     ppp -auto mysystem

> このスクリプトはネットワークの設定時に実行され, ppp デーモンを自動モードで立ち上げます. このマシンがもし LAN のゲートウェイであれば, `-alias` スイッチも使用したいと思うかもしれません. 詳細に関しては, マニュアルページを参照してください.

以下のようにルータプログラムを `NO` に設定します.

    router_enable="NO"

`routed` は, `ppp` が作成したデフォルトのルーティングテーブル エントリを削除してしまう場合がありますので, (初期設定では起動されるようになっている) `routed` デーモンが 起動されないようにしておくことが重要です.

`sendmail_flags` 行が `-q` オプションを含まないように 設定しておいた方がよいでしょう. さもないと, `sendmail` が アドレスを調べようとして発信をおこなってしまう場合があります. 以下のような設定で良いでしょう:

    sendmail_flags="-bd"

この結果, PPP リンクを立ち上げた時には いつでも以下のコマンドを実行して, キューにたまっているメールを `sendmail` に送信させる作業が必要になるでしょう.

    # /usr/sbin/sendmail -q

`ppp.linkup` 中で `!bg` コマンドを使用することで, これを自動的に おこなうこともできます:

    1     provider:
    2       delete ALL
    3       add 0 0 HISADDR
    4       !bg sendmail -bd -q30m

こうするのが嫌であれば, SMTP トラフィックをブロックするように “dfilter” を設定しておくこともできます. 詳細についてはサンプルファイルを参照してください.

後はマシンをリブートするだけです.

リブートが終ったら,

    # ppp

コマンドを実行し, 続いて PPP セッションを開始させるために `dial provider` と入力することもできますし, (`start_if.tun0` スクリプトを作成していない場合に), 外部へのトラフィックが発生した時に, `ppp` が自動的に セッションを確立してくれるようにしたいのであれば, 以下のコマンドを実行することもできます.

    # ppp -auto provider

### 19.2.1.7 まとめ

要約すると, 初めて ppp を設定する際には, 以下のステップが不可欠です:

クライアント側:

1. カーネルに `tun` デバイスが組み込まれていることを確認.

2. `/dev` ディレクトリに `tun`X`` デバイスファイルが 存在することを確認.

3. `/etc/ppp/ppp.conf` にエントリを作成. ほとんどのプロバイダでは, `pmdemand` の例で充分でしょう.

4. 動的 IP アドレスを使用するなら, `/etc/ppp/ppp.linkup` に エントリを作成.

5. `/etc/rc.conf` (または `sysconfig`) ファイルを更新.

6. 必要に応じてダイヤル (demand dialing) したいのであれば, `start_if.tun0` スクリプトを作成.

サーバ側:

1. カーネルに `tun` デバイスが組み込まれていることを確認.

2. `/dev` ディレクトリに `tun`X`` デバイスファイルが 存在することを確認.

3. (vipw(8) コマンドを使って) `/etc/passwd` にエントリを作成.

4. このユーザのホームディレクトリに `ppp -direct direct-server` か何かを実行するプロファイルを作成.

5. `/etc/ppp/ppp.conf` にエントリを作成. `direct-server` の例で充分でしょう.

6. `/etc/ppp/ppp.linkup` にエントリを作成.

7. `/etc/rc.conf`ファイルを更新.

Prev | Home | Next
PPP と SLIP | Up | カーネル PPP の利用

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。