  Linux システムにおける PPP 接続
  Jerry Hall, jhall@adobe.com
  October 2 1995
  衛藤 誠司, seto@slip.net
  October 25 1997

  このドキュメントでは、自宅の Linux マシンと ppp サーバーをモデムを使っ
  て接続する方法について説明します。なおこのドキュメントは、ppp サーバー
  が IP アドレスを動的に割り当てることを前提に書かれています。

  1.  はじめに

  1.1.  ハードウェア

       Gateway 2000
               486/33ISA
               8MBメモリー
               200MBハードドライブ
               TMC-850 SCSIコントローラー
       Sony CD-ROM CDU-541
       SupraFAXModem 288

  （このセッティングは、必ずしも最高とは言えませんが、Linuxは非常によく
  走ります。ただ一回だけクラッシュしたと言えば、粗悪品のSCSIディスクドラ
  イブを取り付けたときでした。）

  1.2.  ソフトウェア

  o  Slackwareリリース2.2

  o  Linuxカーネル1.2

  1.3.  役に立つドキュメント類

  o  /usr/doc/faq/howto/PPP-HOWTO.gz (日本語訳)

  o  /usr/doc/faq/howto/NET-2-HOWTO.gz

  o  /usr/doc/faq/howto/Kernel-HOWTO.gz (日本語訳)

  o  /usr/doc/faq/howto/Serial-HOWTO.gz (日本語訳)

  o  /usr/src/ppp-2.1.2b/README.linux

  o  % man pppd

  o  % man chat

  o  % man netstat

  o  % man ifconfig

  [ヒント：howto ドキュメントは、"zless"コマンドを使って見ることができま
  す。 ]

  2.  インストール

  2.1.  ppp のカーネルへの追加

  最初に筆者が走らせたカーネルには、ppp が入っていなかったので、ppp サポ
  ートを指定してコンパイルし直す必要がありました。カーネルに ppp が入っ
  ているかどうか調べるには、次のコマンドを使います：

       % dmesg|grep -i ppp

  カーネルが ppp をサポートしている場合、次のようなメッセージを表示しま
  す：

       PPP: version 0.2.7 (4 channels) NEW_TTY_DRIVERS OPTIMIZE_FLAGS
       PPP line discipline registered.

  カーネルが ppp をサポートしていない場合には、以下のコマンドでカーネル
  をコンパイルして下さい：

       # cd /usr/src/linux
       # make config       # configの設定をします。以下を参照のこと。
       # make dep
       # make clean
       # make zImage
       # cp ./arch/i386/boot/zImage /vmlinuz
       # cd /etc
       # lilo

  すべてがうまくいったらリブートした際に上記のようなメッセージが見えるは
  ずです。

  "make config"コマンドを実行するとたくさんの質問に答えなければなりませ
  んが、以下の項目には必ず yes と答えてください：

  o  CONFIG_NET

  o  CONFIG_INET

  o  CONFIG_NETDEVICES

  o  CONFIG_PPP

  [注意：カーネルのコンフィギュアとコンパイルは、数多くのハードウェアの
  組合せがあるため、非常に込み入った作業となります。上記の項目は、その中
  のほんの一部です。]

  2.2.  ネットワーク・ツールとデーモンのインストール

  実際に接続する前に筆者は、次のようなネットワークのパッケージをインスト
  ールする必要がありました：

  o  net-tools

  o  ppp-2.1.2b

  筆者は、ソースをインストールしてコンパイルし、コンパイルしてできたバイ
  ナリーとコンフィギュレーション・ファイルをインストールしましたが、最初
  からバイナリーとコンフィギュレーション・ファイルをインストールしてもか
  まいません。

  3.  コンフィギュレーション・ファイル

  筆者は、/etc/ppp というディレクトリーを作り、options と chat という２
  つのファイルをその中に置きました。options は、pppd が実行されたときに
  自動的に読み込まれ、chat は、ppp 接続のために LanRover というサーバー
  にログインする際に使われる B シェルで書かれたスクリプトです。 以下は、
  それらのファイルです：

     /etc/ppp/options:

          /dev/cua2 38400 crtscts modem
          noipdefault
          defaultroute
          kdebug 2
          connect /etc/ppp/chat

     これらのオプションの説明については、man ページを参照してください。

     /etc/ppp/chat:

          #!/bin/sh
          #
          # サーバーXXXXXに接続
          #

          /usr/etc/chat \
          ""         ATDT1234567890 \
          CONNECT    "" \
          115200     "" \
          "ogin: "   jhall \
          "ssword: " XXXX \
          "XXXXX>"   ppp

  この chat スクリプトは、２行目以降の引数を付けて /usr/etc/chat という
  プログラムを実行させるように書かれています。筆者は、このスクリプトを見
  やすくするために本来コマンドラインで１行にするところをあえて引数を \
  を使って複数行にしました。各行の最初の引数は、サーバーもしくはモデムか
  ら帰って来ると思われるストリングで、２番目は、Linux 側から送るストリン
  グです。
  1. 引数の最初の行は、受け取るストリングは何もなく、次のストリングでモ
     デムに Unix LanRover（ホスト名XXXXX ）の電話番号である1234567890 を
     ダイアルしろということを表しています。

  2. ２行目は、モデムからの CONNECT という応答信号を期待し、こちらから
     CR（キャリッジリターン、ここではヌル引数「 ""」がそれ。）を送るとい
     うことを表しています。

  3. ３行目は、接続スピード（これについては、後程詳しく説明。）を期待
     し、こちらからCRを送るということを表しています。

  4. ４行目は、ユーザー ID プロンプトの最後の部分と筆者のユーザー ID で
     す。

  5. ５行目は、パスワードプロンプトの最後の部分とパスワードです。

  6. ６行目は、シェルプロンプトと ppp 接続を初期化するコマンドです。

  [ヒント：chat に -v スイッチを付けると chat をデバグモードで走らせるこ
  とができます。そうすることによってデバグ時にサーバーもしくはモデムから
  帰って来ると思われるストリングや Linux 側から送るストリングを見ること
  ができます。]

  システム管理者にユーザー ID とパスワードをもらった後、telnet を使って
  接続しようとするサーバーにログインして、どのように chat スクリプトを書
  けばいいか確かめるのもいいでしょう。 以下は、その例です：

       % telnet xxxxx
       Trying xxx.xxx.xxx.xxx...
       Connected to xxxxx
       Escape character is '^]'.
       @ Userid: jhall
       Password?
       Shiva LanRover/E PLUS, Version 3.5 95/03/07
       xxxxx>

  筆者は、デバグのために以下のステートメントを /etc/syslog.conf に追加し
  ました：

       local2.*    /dev/console
       local2.*    /usr/adm/ppplog

  [注意：最初と２番目のエントリーの間には、少なくてもタブを１個入れる必
  要があります。]

  また /etc/resolv.conf にネームサーバーの登録を忘れずに行ってください。

  4.  接続

  次のコマンドを実行して接続します：

       /usr/etc/pppd

  するとプロセスがフォークしてバックグランドで走ります。さらに
  /etc/syslog.conf に上記のようなセッティングをしておくとコンソールに次
  のようなメッセージが表示されます：

       Oct  1 11:59:08 almaden pppd[406]: pppd 2.1.2 started by jhall, uid 0
       Oct  1 11:59:33 almaden pppd[407]: Connected...
       Oct  1 11:59:34 almaden pppd[407]: Using interface ppp0
       Oct  1 11:59:35 almaden pppd[407]: Connect: ppp0 <--> /dev/cua2
       Oct  1 11:59:36 almaden pppd[407]: local  IP address xxx.xxx.xxx.xxx
       Oct  1 11:59:36 almaden pppd[407]: remote IP address xxx.xxx.xxx.xxx

  接続されたかどうか次のコマンドで調べます：

       /sbin/ifconfig

  このコマンドを実行すると次のようなメッセージが表示されます：

  <ループバックデバイスに対するアウトプットは、削除しました。>

       ppp0      Link encap:Point-Point Protocol
                 inet addr:xxx.xxx.xxx.xx  P-t-P:xxx.xxx.xxx.xx  Mask:255.255.0.0
                 UP POINTOPOINT RUNNING  MTU:1522  Metric:1
                 RX packets:5 errors:0 dropped:0 overruns:0
                 TX packets:6 errors:0 dropped:0 overruns:0

  これを見るとデバイスが設定されたことが分かります。

  次に筆者がしたことは、ログイン可能なワークステーションに rlogin でログ
  インしてみましたが、ping を使って特定のワークステーションに応答を確か
  めるのもよいでしょう。

  接続を切るには、次のコマンドを実行しますが、このコマンドを含めたスクリ
  プトを用意しておくと便利です：

       kill -TERM `cat /var/run/ppp0.pid`

  このコマンドを実行すると次のようなメッセージを表示して回線を切断しま
  す：

       Oct  1 12:03:50 almaden pppd[407]: Terminating link.
       Oct  1 12:03:50 almaden pppd[407]: Connection terminated.
       Oct  1 12:03:51 almaden pppd[407]: Exit.

  回線の接続や切断は、root で実行しなければなりません。筆者は、これを
  root 以外でできるようにしようと思い、setuid を色々といじってみました
  が、今のところ成功していません。

  4.1.  シリアルライン接続

  筆者は、最初マザーボードに初めから付いていたシリアルライン (COM1) を
  使って ppp 接続をしていました。そのマザーボードは、16450 UART チップを
  使用しており、送受信のためのバッファがないため、スピードが 38400 bps
  に限られていました。（このスピードで接続していると、いくつかのエラーが
  出ました。）このスピードは、データの圧縮によりモデムとシリアルラインと
  の接続に 115200bps まで最良の状態で通信できるため、 28800 bps のスピー
  ドで通信するモデムにとっては遅すぎます。

  それで筆者は、この問題を解決するために 16550A UART チップの乗った速い
  シリアル・カードを購入し、インストールしました。ところが、 Linux は
  115200 bps の転送速度をサポートしていないため、ブート時に「setserial」
  コマンドを使い、シリアルラインを設定しなければなりませんでした。以下の
  １行を /etc/rc.d/rc.serial に追加しました：

       /bin/setserial -b /dev/cua2 irq 9 spd_vhi       # 16550A

  ここで大切なことは、引数に「spd_vhi」をセットして、モデムのボーレート
  を 115200 bps に設定するということです。詳しくは、「setserial」のmanペ
  ージをご覧ください。

  このように設定すると、/etc/ppp/options ファイルで 38400 と記述していて
  も、実際は 115200 bps のスピードで LanRover と通信することになりま
  す。/etc/ppp/chat ファイルで 115200 と記述したのは、こういうことだった
  のです。シリアルラインの設定を変えることによって２倍以上のスループット
  を得ることが出来ました。

  4.2.  接続スピード

  通常筆者のモデムは、送受信とも 26400 bps のスピードで接続します。28800
  bps で接続したこともありましたが、このときにはエラーが若干出まし
  た。26400 bps での接続では、エラーも出ず、安定しているようです。

  5.  最後に（訳者注）

  訳者が、これらのことを踏まえて、ppp 接続を自動的に設定、起動するＸベー
  スのユーティリティー・プログラムを作りました。次のサイト及び各ミラー・
  サイトからダウンロード出来ます。御利用下さい。

  o  <ftp://sunsite.unc.edu/pub/Linux/system/network/serial/Motif-
     PPP-1.03-Beta.tar.gz>

  (sgml conversion, y.senda, 2001/09)

