Linuxシステムにおけるppp接続 10/2/95 12/10/95(翻訳) 10/25/97(翻訳修正) 著者:Jerry Hall jhall@adobe.com 翻訳:衛藤 誠司 seto@slip.net このドキュメントでは、自宅のLinuxマシンとpppサーバーをモデムを使って 接続する方法について説明します。なおこのドキュメントは、pppサーバーが IP アドレスを動的に割り当てることを前提に書かれています。 ハードウェア ------------ Gateway 2000 486/33ISA 8MBメモリー 200MBハードドライブ TMC-850 SCSIコントローラー Sony CD-ROM CDU-541 SupraFAXModem 288 (このセッティングは、必ずしも最高とは言えませんが、Linuxは非常によく 走ります。ただ一回だけクラッシュしたと言えば、粗悪品のSCSIディスクド ライブを取り付けたときでした。) ソフトウェア ------------ Slackwareリリース2.2 Linuxカーネル1.2 役に立つドキュメント類 ---------------------- /usr/doc/faq/howto/PPP-HOWTO.gz /usr/doc/faq/howto/NET-2-HOWTO.gz /usr/doc/faq/howto/Kernel-HOWTO.gz /usr/doc/faq/howto/Serial-HOWTO.gz /usr/src/ppp-2.1.2b/README.linux % man pppd % man chat % man netstat % man ifconfig [ヒント:howtoドキュメントは、"zless"コマンドを使って見ることができます。] 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と答えてください: CONFIG_NET CONFIG_INET CONFIG_NETDEVICES CONFIG_PPP [注意:カーネルのコンフィギュアとコンパイルは、数多くのハードウェアの 組合せがあるため、非常に込み入った作業となります。上記の項目は、その中 のほんの一部です。] ネットワーク・ツールとデーモンのインストール -------------------------------------------- 実際に接続する前に筆者は、次のようなネットワークのパッケージをインス トールする必要がありました: net-tools ppp-2.1.2b 筆者は、ソースをインストールしてコンパイルし、コンパイルしてできたバイ ナリーとコンフィギュレーション・ファイルをインストールしましたが、最初 からバイナリーとコンフィギュレーション・ファイルをインストールしてもか まいません。 コンフィギュレーション・ファイル -------------------------------- 筆者は、 /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にネームサーバーの登録を忘れずに行ってください。 接続 ---- 次のコマンドを実行して接続します: /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を色々といじってみましたが、今のと ころ成功していません。 シリアルライン接続 ------------------ 筆者は、最初マザーボードに初めから付いていたシリアルライン(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倍以上のスループットを得ること が出来ました。 接続スピード ----------- 通常筆者のモデムは、送受信とも26400 bpsのスピードで接続します。28800 bpsで接続したこともありましたが、このときにはエラーが若干出ました。26400 bpsでの接続では、エラーも出ず、安定しているようです。 最後に(訳者注) --------------- 訳者が、これらのことを踏まえて、ppp接続を自動的に設定、起動するXベース のユーティリティー・プログラムを作りました。次のサイト及び各ミラー・サイ トからダウンロード出来ます。御利用下さい。 ftp://sunsite.unc.edu/pub/Linux/system/network/serial/Motif-PPP-1.03-Beta.tar.gz