次のページ
前のページ
目次へ
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
次のページ
前のページ
目次へ