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 という2 つのファイルをその中に置きました。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 スクリプトは、2行目以降の引数を付けて /usr/etc/chat という プログラムを実行させるように書かれています。筆者は、このスクリプトを見 やすくするために本来コマンドラインで1行にするところをあえて引数を \ を使って複数行にしました。各行の最初の引数は、サーバーもしくはモデムか ら帰って来ると思われるストリングで、2番目は、Linux 側から送るストリン グです。 1. 引数の最初の行は、受け取るストリングは何もなく、次のストリングでモ デムに Unix LanRover(ホスト名XXXXX )の電話番号である1234567890 を ダイアルしろということを表しています。 2. 2行目は、モデムからの CONNECT という応答信号を期待し、こちらから CR(キャリッジリターン、ここではヌル引数「 ""」がそれ。)を送るとい うことを表しています。 3. 3行目は、接続スピード(これについては、後程詳しく説明。)を期待 し、こちらからCRを送るということを表しています。 4. 4行目は、ユーザー ID プロンプトの最後の部分と筆者のユーザー ID で す。 5. 5行目は、パスワードプロンプトの最後の部分とパスワードです。 6. 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 [注意:最初と2番目のエントリーの間には、少なくてもタブを1個入れる必 要があります。] また /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」 コマンドを使い、シリアルラインを設定しなければなりませんでした。以下の 1行を /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 と記述したのは、こういうことだった のです。シリアルラインの設定を変えることによって2倍以上のスループット を得ることが出来ました。 4.2. 接続スピード 通常筆者のモデムは、送受信とも 26400 bps のスピードで接続します。28800 bps で接続したこともありましたが、このときにはエラーが若干出まし た。26400 bps での接続では、エラーも出ず、安定しているようです。 5. 最後に(訳者注) 訳者が、これらのことを踏まえて、ppp 接続を自動的に設定、起動するXベー スのユーティリティー・プログラムを作りました。次のサイト及び各ミラー・ サイトからダウンロード出来ます。御利用下さい。 o (sgml conversion, y.senda, 2001/09)