<!doctype linuxdoctr system>
<article>
<title>Linux システムにおける PPP 接続</title>
<author>Jerry Hall, jhall@adobe.com</author>
<date>October 2 1995</date>
<trans>衛藤 誠司, seto@slip.net</trans>
<tdate>October 25 1997</tdate>

<![IGNORE[
Linuxシステムにおけるppp接続

10/2/95
12/10/95（翻訳）
10/25/97（翻訳修正）

著者：Jerry Hall 
      jhall@adobe.com

翻訳：衛藤 誠司
      seto@slip.net
]]>

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

<sect>はじめに
<p>

<sect1>ハードウェア
<p>
<tscreen><verb>
Gateway 2000
	486/33ISA
	8MBメモリー 
	200MBハードドライブ
	TMC-850 SCSIコントローラー
Sony CD-ROM CDU-541
SupraFAXModem 288
</verb></tscreen>

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

</sect1>

<sect1>ソフトウェア
<p>
<itemize>
<item>Slackwareリリース2.2 
<item>Linuxカーネル1.2
</itemize>

</sect1>

<sect1>役に立つドキュメント類
<p>
<itemize>
<item>/usr/doc/faq/howto/PPP-HOWTO.gz (<htmlurl 
url="http://www.linux.or.jp/JF/JFdocs/PPP-HOWTO.html" name="日本語訳">)
<item>/usr/doc/faq/howto/NET-2-HOWTO.gz
<item>/usr/doc/faq/howto/Kernel-HOWTO.gz (<htmlurl 
url="http://www.linux.or.jp/JF/JFdocs/Kernel-HOWTO.html" name="日本語訳">)
<item>/usr/doc/faq/howto/Serial-HOWTO.gz (<htmlurl 
url="http://www.linux.or.jp/JF/JFdocs/Serial-HOWTO.html" name="日本語訳">)
<item>/usr/src/ppp-2.1.2b/README.linux
<item><tt>% man pppd</tt>
<item><tt>% man chat</tt>
<item><tt>% man netstat</tt>
<item><tt>% man ifconfig</tt>
</itemize>

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

</sect1>
</sect>

<sect>インストール
<p>

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

<tscreen><verb>
% dmesg|grep -i ppp
</verb></tscreen>

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

<tscreen><verb>
PPP: version 0.2.7 (4 channels) NEW_TTY_DRIVERS OPTIMIZE_FLAGS
PPP line discipline registered.
</verb></tscreen>

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

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

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

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

<itemize>
<item><tt>CONFIG_NET</tt>
<item><tt>CONFIG_INET</tt>
<item><tt>CONFIG_NETDEVICES</tt>
<item><tt>CONFIG_PPP</tt>
</itemize>

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

</sect1>

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

<itemize>
<item>net-tools
<item>ppp-2.1.2b
</itemize>

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

</sect1>
</sect>

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

<descrip>
<tag><tt>/etc/ppp/options</tt>:</tag>

<tscreen><verb>
/dev/cua2 38400 crtscts modem 
noipdefault 
defaultroute 
kdebug 2 
connect /etc/ppp/chat
</verb></tscreen>

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

<tag><tt>/etc/ppp/chat</tt>:</tag>
<tscreen><verb>
#!/bin/sh
#
# サーバーXXXXXに接続
#
   
/usr/etc/chat \
""         ATDT1234567890 \
CONNECT    "" \
115200     "" \
"ogin: "   jhall \
"ssword: " XXXX \
"XXXXX&gt;"   ppp
</verb></tscreen>

</descrip>

この <tt>chat</tt> スクリプトは、２行目以降の引数を付けて 
<tt>/usr/etc/chat</tt> 
というプログラムを実行させるように書かれています。筆者は、このスクリプト
を見やすくするために本来コマンドラインで１行にするところをあえて引数を 
<tt>\</tt> を使って複数行にしました。各行の最初の引数は、サーバーもしくは
モデムから帰って来ると思われるストリングで、２番目は、Linux 側から送る
ストリングです。

<enum>
<item>引数の最初の行は、受け取るストリングは何もなく、次のストリングでモデ
ムに Unix LanRover（ホスト名XXXXX ）の電話番号である1234567890 をダイ
アルしろということを表しています。

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

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

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

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

<item>６行目は、シェルプロンプトと ppp 接続を初期化するコマンドです。
</enum>

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

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

<tscreen><verb>
% telnet xxxxx
Trying xxx.xxx.xxx.xxx...
Connected to xxxxx
Escape character is '^&rsqb;'.
@ Userid: jhall
Password? 
Shiva LanRover/E PLUS, Version 3.5 95/03/07
xxxxx&gt;         
</verb></tscreen>

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

<tscreen><verb>
local2.*    /dev/console
local2.*    /usr/adm/ppplog
</verb></tscreen>

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

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

</sect>

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

<tscreen><verb>
/usr/etc/pppd
</verb></tscreen>

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

<tscreen><verb>
Oct  1 11:59:08 almaden pppd&lsqb;406&rsqb;: pppd 2.1.2 started by jhall, uid 0
Oct  1 11:59:33 almaden pppd&lsqb;407&rsqb;: Connected...
Oct  1 11:59:34 almaden pppd&lsqb;407&rsqb;: Using interface ppp0
Oct  1 11:59:35 almaden pppd&lsqb;407&rsqb;: Connect: ppp0 &lt;--&gt; /dev/cua2
Oct  1 11:59:36 almaden pppd&lsqb;407&rsqb;: local  IP address xxx.xxx.xxx.xxx
Oct  1 11:59:36 almaden pppd&lsqb;407&rsqb;: remote IP address xxx.xxx.xxx.xxx
</verb></tscreen>

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

<tscreen><verb>
/sbin/ifconfig
</verb></tscreen>

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

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

<tscreen><verb>    
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
</verb></tscreen>

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

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

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

<tscreen><verb>
kill -TERM `cat /var/run/ppp0.pid`
</verb></tscreen>

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

<tscreen><verb>
Oct  1 12:03:50 almaden pppd&lsqb;407&rsqb;: Terminating link.
Oct  1 12:03:50 almaden pppd&lsqb;407&rsqb;: Connection terminated.
Oct  1 12:03:51 almaden pppd&lsqb;407&rsqb;: Exit.
</verb></tscreen>

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

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

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

<tscreen><verb>
/bin/setserial -b /dev/cua2 irq 9 spd_vhi       # 16550A
</verb></tscreen>

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

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

</sect1>

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

</sect1>
</sect>

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

<itemize>
<item><url 
url="ftp://sunsite.unc.edu/pub/Linux/system/network/serial/Motif-PPP-1.03-Beta.tar.gz">
</itemize>


(sgml conversion, y.senda, 2001/09)
</sect>

</article>
