Linux で PPP

PPP を拡張した PPxP というのもあるようです (真鍋さん のところを見てください)。 私は Slackware にもともと入っている PPP を使うことにしました。

まず大学に……

とりあえず Slackware 3.4 に入っている PPP 2.2.0 で学校につながるようにしました。 /usr/sbin/ppp-on に電話番号とアカウント名,パスワードを書き込みます。 下から3行目の /dev/ttyS0 は COM1 のことです。 COM2 にモデムがつながっているなら /dev/ttyS1 にします。 IP アドレス類は自動で決まるので 0.0.0.0 のままでかまいません。 サブネットマスクは 255.255.255.0 です。

/etc/ppp/ppp-on/dialer のほうは,最後が

        assword:        $PASSWORD
で終っていますが,うちの場合はダイヤル後にメニューが出て, Option: というプロンプトでPPP接続なら 1, 無手順接続なら 2 を入れなければならないようになっていますので,ここは
        assword:        $PASSWORD    \
        ption:          1
のように追加します。 また,中程で TIMEOUT 30 となっているところは,60 くらいにしないと私の自宅(市外)からではタイムアウトになってしまいました。

さらに,/etc/resolv.conf には

domain matsusaka-u.ac.jp
nameserver 192.244.75.X
nameserver 192.244.75.Y
のように書き込みます(XY は実際は数字です)。

これで root になって ppp-on と打ち込めば, 自動的につながります。 別の窓で tail -f /var/log/messages でも実行しておけば,接続の様子がリアルタイムにわかります。 Windows 95 で「接続後にターミナルウインドウを開く」 などとして手で打ち込んでいたときよりずっと楽になりました。 仕事が終れば ppp-off と打ち込めば電話が切れます。

Biglobe に接続

上の手順では Biglobe に接続できませんでした。 Biglobe が PAP を使っているためと思われます。 面倒なので,pppsetup というツールを使って設定することにしました。 このツールは Linux の配布によっては入っていると思いますが, たまたまうちのものには入っていませんでした。

SunSITE のミラーの ppp ディレクトリ,たとえば ftp://ftp.riken.go.jp/pub/Linux/sunsite/system/network/serial/ppp に最新の ppp および pppsetup が入っています。 これを書いている時点では次のようになっていました。

-r--r--r--   1 archive  archive   668649 Apr 24 02:11 ppp-2.3.4.tar.gz
-r--r--r--   1 archive  archive   108488 Jul  7 08:30 pppsetup-2.02.tar.gz

このうち pppsetup だけもらってきました。

これを展開して,次のようにしました。

su
mv pppsetup /usr/sbin
mv chat /usr/sbin
pppsetup

pppsetup がいろいろ聞いてきますので,適当に答えます。

これで OK です。あとは ppp-go と打ち込むだけで PPP 接続できます。 切るのは従来どおり ppp-off です。

ありがたいことに, /etc/resolv.conf 以外は,従来のファイルは上書きされませんでした。 そこで,大学に接続するためには ppp-on, そこで,Biglobe に接続するためには ppp-go でとりあえず使うことにしました。

/etc/resolv.conf については, 上記の二つのシェルスクリプトの適当なところに

ln -sf /etc/resolv.conf.b /etc/resolv.conf
または
ln -sf /etc/resolv.conf.m /etc/resolv.conf
と書いておいて,二つの /etc/resolv.conf.? から自動的に選ぶようにしました。 /etc/resolv.conf の書き方については man 5 resolver してください。

接続時間の表示

電話代が気になるので,超簡単な接続時間表示プログラムをつくりました。

#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    time_t t = time(0);
    if (argc > 1) t -= atoi(argv[1]);
    while (1) {
        cerr << time(0) - t << "  \r";
        sleep(1);
    }
}

これを g++ でコンパイルして,ppp-on スクリプトの最後に起動するようにしておきます。 その際,exec /usr/sbin/pppd ... となっている行の exec は削除しなければなりません。 つまり,このファイルの最後を次のようにするわけです。

/usr/sbin/pppd debug lock modem crtscts /dev/ttyS0 38400 \
        asyncmap 20A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP \
        noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT
/usr/local/bin/mytimer -19

うちの場合はちょうど -19 秒から始めれば 0 秒のときに電話がつながりました。 これで 180 秒になるまでぎりぎり使います。


リンクはご自由にどうぞ。

松阪大学 奥村晴彦 okumura@matsusaka-u.ac.jp

Copyright (c) 1998 Haruhiko Okumura. Last modified: Mon Sep 14 12:00:57 1998