1998年10月30日

pppctl-0.9.4 --- pppd制御スクリプト

川俣 吉広
kaw@on.rim.or.jp

pppctlについて

pppctlはpppdパッケージに附属しているppp-onやppp-offなどと同様、 pppdデーモンを制御するためのbashシェルスクリプトです。 このスクリプトは、 主に他のプログラムから呼び出したり、 別のユーザインタフェース(例えばGUIのメニューなど)から呼び出して使う場合に 便利なように設計されています。 pppctlには具体的には次のような特長があります。

pppctlの最新バージョンは http://www.on.rim.or.jp/~kaw/pppctl/ から入手可能です。


お断り

このパッケージはフリーソフトウェアです。複製・改変・再配布の いずれも自由に行えます。

但し、改変したものを配布する場合は、原作者が川俣吉広である ことを明記して下さい。

このパッケージの運用は全て使用者の責任において行って下さい。 このパッケージを使用して、もし不具合や何らかの損失が生じた場合、 作者はそれらについては責任を負いかねます。


必要なもの

pppctlはbashのスクリプトで書かれていますので、 GNU bashとpppdパッケージがインストールされている 一般的なPC-UNIX等の環境であれば動作すると思われます(確認はしていません)。
作者が開発に使用している環境は以下のとおりです。


従って、pppctlを使用するには、

が *必須条件* です。



パッケージの内容

このパッケージは以下のようなファイル構成になっています。

        pppctl-0.9.4/
            README.txt          このファイル(プレーンテキスト)
            README.html         このファイル(HTML)
            bin/        実行ファイル格納用
                pppctl          pppctl本体
                pponeshot       pppctlの使用例1
                mailflush.sh    pppctlの使用例2
                simplegui.sh    pppctlの使用例3
            etc-ppp/    pppdシステムファイル
                ip-up           /etc/ppp/ip-up
                ip-down         /etc/ppp/ip-down
            init        初期設定ファイル
            links/      接続設定ファイルの格納ディレクトリ
                pap.sample      PAP認証用の接続設定
                login.sample    ログイン認証手順用の接続設定
                direct.sample   シリアルライン直結用の接続設定
            plugins/    プラグインの格納ディレクトリ
                up              PPP接続
                down            PPP切断
                ping            pingを実行
                sm              senqmail -q を実行 (メールの送信)
                fm              fetchmailを実行 (メールの受信)
                xm              smとfmを連続実行
                rc5             rc5desクライアントのバッファ更新




導入手順

pppctlは一般ユーザによる使用が前提になっています。 したがって各種設定ファイルはユーザ毎に用意する必要があります。 具体的なインストール手順を以下に示します。

  1. パッケージをホームディレクトリで展開する。

    以下のようにコマンドを実行します。

            cd; gzip -dc pppctl-0.9.4.tar.gz | tar xvf -
           

    パッケージがpppctl-0.9.4というディレクトリ以下に展開されますが、 これを .pppctl という名前に変えます。

            mv pppctl-0.9.4 .pppctl
           
  2. ~/.pppctl/bin/pppctlが実行できるように設定する。

    このままでは pppctl は実行できませんので、 これを実行できるようにします。 それにはいくつか方法がありますが、次のような方法が考えられます。

    1. pppctlをPATHの通っているディレクトリにコピーする。
    2. PATHの通っているディレクトリから ~/.pppctl/bin/pppctlにリンクを張る。
    3. ~/.pppctl/bin を環境変数PATHに含める。
    4. 起動時に必ずフルパスで実行する :-)

    個人的には自分専用のコマンドを格納するディレクトリを作り、 ここにPATHを通す方法を取したうえで、 pppctlのシンボリックリンクを張ることをお勧めします。 上の 2 と 3 を組み合わせた方法です。

  3. pppctl中のbashの実行パスを確認する。

    pppctlの第一行目には

            #!/bin/bash
           

    と書いてありますが、 これがbashが実際にある場所と合っているかどうかチェックします。 合っていない場合はこの行をbashが実際にある場所に書き換えます。

  4. ~/.pppctl/etc-ppp/ip-up と ~/.pppctl/etc-ppp/ip-down を /etc/ppp にコピーする。

    ip-up と ip-down はpppd自身がそれぞれ接続時と切断時に実行するシェルスクリプトです。 pppctlが動作するためには 専用の ip-up と ip-down が必要です。 これは ~/.pppctl/etc-ppp/ ディレクトリに格納されていますので、 これを /etc/ppp ディレクトリにコピーします。

    注意: この作業はroot権限で行って下さい。

  5. 初期設定ファイルを編集する。

    初期設定ファイル ~/.pppctl/init はpppctlの実行時に必ず参照されます。 このファイルにはデフォルトの設定値を定義します。

    
            # init -- global user initiialization
            #
    
            # serial devices
            #
            sl_dev=ttyS0              シリアルポート
            sl_speed=115200           シリアルラインの通信速度
            sl_modeminit=ATE1Q0       モデムの初期化コマンド
            sl_dialprefix=ATDT        モデムのダイアルコマンド
    
            # Uncomment if debug pppd
            #
            # pp_extra_opts='debug kdebug 1'  pppdデバッグ用オプション
    
            # Uncomment if change default link file
            #
            # lk_id=rim               デフォルトの接続設定ファイル
    
            # default message output
            # in case of -v nor -q option given
            verbose=yes               デフォルトの状態表示 (yes / no)
           

    上の例ではデフォルトの接続設定ファイルを指定する変数 lk_id がコメントアウトされていますが、 lk_id を設定しないと接続名として default が使用され、 接続時に ~/.pppctl/links/default というファイルを参照します。

    initに限らず、pppctlでは全ての設定ファイルはシェルスクリプトとして解釈されます。 したがって記述する内容はbashのスクリプトの文法に従わなくてはなりません。 例えば変数に値を設定する場合は、= の前後に空白を入れるとエラーになります。

    sl_modeminit=ATE1Q0
            ×    sl_modeminit= ATE1Q0
            ×    sl_modeminit =ATE1Q0
            ×    sl_modeminit = ATE1Q0
           
  6. 接続設定ファイルを編集する。

    接続設定ファイルはpppdに渡すパラメータを設定するファイルです。 このパッケージには設定例として、

            pap.sample      モデムを使用したPAP認証用
            login.sample    モデムを使用したログイン認証手順用
            direct.sample   シリアルライン直結のログイン認証用
           

    の3つが入っています。 このうち自分の行いたい設定に近いファイルを default という名前でコピーし、 編集を行うと便利です。 pap.sampleを使った例を以下に示します。

    
            #: default  -  sample script for PAP authentication
            #:             with modem dialing
    
            # phone number                    モデムにダイアルさせる電話番号
            sl_modemdial=${sl_dialprefix}012-345-6789
    
            # IP addresses                    リモートとローカルに割り振るIPアドレス。
            pp_localip=0.0.0.0                特に必要がなければ 0.0.0.0 にします。
            pp_remoteip=0.0.0.0
    
            # PAP authentication entries      PAP認証のエントリ
            # (in /etc/ppp/pap-secrets)       /etc/ppp/pap-secretsで定義されている
            pp_host=ISP-HOST                  エントリを指定します。
            pp_user=ISP-LOGNAME
    
            # chat command                    chatコマンドとチャットスクリプト
            pp_chat="/usr/sbin/chat ABORT 'NO CARRIER' ABORT BUSY '' $sl_modeminit OK $sl_modemdial CONNECT"
           

    以上で設定は終りです。 接続ができるかどうかの確認をしてみましょう。 テスト用のプラグインファイル ~/.pppctl/plugins/ping 中のホスト名の指定を 何か適当なものに変更し、コマンドラインから、

            pppctl ping
           

    と入力してみます。 PPP接続が行われ、指定したホストにpingコマンドを実行した後 自動的にPPP接続が切断されれば設定はOKです。

接続が確立されていない状態で、接続を中断したい場合は Ctrl-C を入力します。 すると、pppctlとそこから起動されたpppdの両方が停止します。

その他、メールを送信するsm、受信するfmなどがありますが、自分の環境に 合うように適宜内容を編集して下さい。


使用例

pppctlは、

        pppctl -h
と -h オプションをつけて実行すると、使用法の簡単な説明を表示して終了します。


	Usage for pppctl 0.9.4:
	pppctl [options | plug-ins]...

	options are:
	-d, --disable                 : disable connecting
	-e, --enable                  : enable connecting
	-h, --help                    : print this help
	-i=linkID, --id=linkID        : specify link ID
	-l, --link                    : print descriptions of each link
	-p, --plugin                  : print descriptions of each plug-in
	-q, --quiet                   : quiet messages
	-r, --reset                   : reset all connections
	-s, --status                  : show current status
	-t=minutes, --timeout=minutes : forced disconnect after minutes
	-v, --verbose                 : verbose messages

オプションの意味は次の通りです。


	-d, --disable                 : 接続を一時的に禁止する
                                       (-iオプションとの組み合わせ可)
	-e, --enable                  : 禁止されていた接続を有効にする
                                       (-iオプションとの組み合わせ可)
	-h, --help                    : このヘルプメッセージを出力する
	-i=linkID, --id=linkID        : 接続設定ファイルを指定する
                                        -i=foo とすれば、接続時に
                                        ~/.pppctl/links/foo が参照される
	-l, --link                    : 接続設定ファイルの一覧を表示する
	-p, --plugin                  : プラグインファイルの一覧を表示する
	-q, --quiet                   : 動作メッセージをなるべく表示しない
                                        エラーメッセージのみ表示されます。
	-r, --reset                   : 接続を初期状態に戻すため、以下の
                                        動作を行う。
                                          ・全ての接続を切断する。
                                          ・/var/tmp 以下の作業ファイルを
                                            全て削除する。
                                          ・禁止された接続があった場合、
                                            禁止を解除する。
	-s, --status                  : 現在の状態を表示する
                                       (-iオプションとの組み合わせ可)
	-t=minutes, --timeout=minutes : PPP接続後、指定した時間(分)が経過
                                        したら、強制的に切断する。
	-v, --verbose                 : 動作メッセージを表示する

ここで、(-iオプションとの組み合わせ可) と書いてあるものは、 -i=isp1 というように-iオプションで指定した接続設定のみに対してその動作が 有効になることを言っています。例えば、

        pppctl -i=isp1 -d
などとすると、isp1 という設定については接続が行われなくなりますが、その他の 接続設定には影響を与えません。

例1) 一般的なコマンドラインからの入力

pppctlはシェルのコマンドラインから直接起動することができます。 実行例をいくつか示します。

pppctl up

PPP接続する(ppp-onスクリプトと同じ)。
すでに接続されている場合は何もしない。

pppctl down

PPP接続を切断する(ppp-offスクリプトと同じ)。
最初から接続されていない場合は何もしない。

pppctl sm fm

PPP接続されてない状態では、まず接続を行い、 接続に成功したらプラグインsmとfmを順に実行してメールの送信と受信を行う。 プラグインの実行が終ったら、PPPを切断する。 すでにPPPが接続されている状態で実行すると、プラグインの実行のみを行い、 回線の接続/切断は行わない。

pppctl xm

前の例と同じ、プラグインxmは内部でsmとfmを呼び出している。

pppctl -i=isp2 up fm

接続設定ファイル ~/.pppctl/links/isp2 を参照して 接続を行い、その後プラグイン up と fm を 実行する。fm 実行後も回線は接続されたままになる。
プラグイン up が他のプラグインと併用されると、 プラグインの実行終了後も回線は接続されたままになる。

(逆に回線接続状態でdownプラグインが他のプラグインと併用されると この例とは逆の動作をする。 つまり、down以外のプラグインを実行し、その後切断する)

pppctl -q rc5

PPP接続されてないなら、接続を行い、 接続に成功したらプラグイン rc5 を実行して rc5desクライアントのバッファを更新し、 その後切断する。
-qオプションが指定されているので何かエラーが発生しない限りはメッセージの出力は 行わない。

注意

pppctlは動作の際に現在の動作状態を格納したファイルを /var/tmpディレクトリに作成します。 pppdオリジナルのppp-on や ppp-offコマンドを使用したり、 iij-pppやPPxPなどの他のPPP実装系と混用すると (例えばppp-onで接続したものをpppctlで切断するなど) うまく動作しない場合があります。ご注意下さい。

例2) シェルスクリプトの部品として使う

pppctlは上の例で上げたようにコマンドラインから直接実行することも可能ですが、 冒頭に述べたように他のプログラムから起動した場合も便利に使えるように設計されています。 次のシェルスクリプトはその簡単な例です。


        #!/bin/sh
        if pppctl -q up
            $*
            pppctl -q down
        fi
このスクリプトを例えば pponeshot という名前で作成し、実行属性を付加したあと、

        pponeshot finger foo@bar.or.jp
などと実行するとPPP接続成功後、finger コマンドを実行し、終了後PPPを切断します。

この使用例からわかるように、pppctlは実行結果による返す戻り値が異なるので それにより呼び出し側の動作を変えることができます。 現バージョンでの戻り値の意味は以下の通りです

例3) crontabに入れて使う

pppctlはcronによる自動運転にも使用可能です。 crontab設定例です。


        30 0 * * * $HOME/bin/pppctl -q xm
        30 6 * * * $HOME/bin/pppctl -q xm rc5
        30 12 * * * $HOME/bin/pppctl -q xm
        30 15 * * * $HOME/bin/pppctl -q xm
        30 18 * * * $HOME/bin/pppctl -q xm
        30 21 * * * $HOME/bin/pppctl -q xm

この例では、毎日0, 6, 12, 15, 18, 21時30分にメールの送受信を 行っています。そして6時30分の接続ではrc5クライアントのバッファの 更新も行っています。cronから起動されたプログラムはバックグラウンドで走行し、 標準出力や標準エラー出力に何か出力された場合はその内容を起動したユーザに メールで送るような仕組みになっています。 上の例では -q オプションをつけて起動することで、 pppctlがエラーを発生したとき以外は、ユーザにメールが送られないようにしています。

注) cronの実装系によっては、先の設定は次のように書くこともできるようです。


        30 0,12,15,18,21 * * * $HOME/bin/pppctl -q xm
        30 6 * * * $HOME/bin/pppctl -q xm rc5

例4) ウィンドウマネージャに組み込んで使う

pppctlのもう一つの使用例として、Xのウィンドウマネージャのメニューに 組み込んで簡単に起動できるようにする例を示します。 以下のものは、ウィンドウマネージャfvwmの設定ファイル .fvwmrc 中の メニュー記述例です。


        PopUp "PPP-menu"
                Title   "PPP connection"
                Nop     ""
                Exec    "Connect"    exec ~/bin/pppctl -q up &
                Exec    "Disconnect" exec ~/bin/pppctl -q down &
                Nop     ""
                Exec    "PPP monitor"    exec kterm -T "PPP monitor" -e /usr/sbin/pppstats -i 10 &
                Nop     ""
                Exec    "Exchange mails" exec kterm -iconic -T "Exchanging news and mails..." -e /bin/sh -c "~/bin/pppctl xm ; sleep 15" &
        EndPopup

この例では、"Connect", "Disconnect" の項目では cron の設定のときと同じように、 pppctlのメッセージを抑制してバックグラウンドで実行しています。 この場合、画面には何も表示されません。 「接続の経過を表示したい」というのであれば、"Exchange mails"の項目のように、 ターミナルエミュレータ(この例ではkterm)の中で実行するようにします。 また、この例ではktermは最初-iconicオプションでアイコン化された状態になるようにしてあり、 pppctlの終了15秒後にkterm自体も終了するように設定してあります。

例5) サンプルスクリプト

ディレクトリ.pppctl/binにはpppctlスクリプト本体のほかにpppctlを利用した 次のようなシェルスクリプトのサンプルがあります。
        pponeshot      ...  例2で説明したものです。
        mailflush.sh   ...  senqmailのキューディレクトリにメールが溜っていたら
                            メールの交換をするスクリプトです。
                            cronから起動するとよいかも知れません。
        simplegui.sh   ...  xmessageを使用したシンプルなGUIインターフェースの
                            例です。

カスタマイズ

以上で説明したように、pppctlは動作時に初期化ファイル.pppctl/init、 接続設定ファイル.pppctl/links/*、 プラグインファイル.pppctl/plugins/* を参照します。 これらのファイルはすべてシェルスクリプト(の断片)であり、 pppctl内部で "." コマンドを用いて、pppctlと同じ環境で実行されます。 したがって前に述べたようにこれらのファイルの記述方法は シェルスクリプトの文法に従い、また、 pppctlで使用されている変数はすべてこれらの設定ファイルからアクセスできます。 これらの変数はすべて通常のシェル変数であり、 環境変数としては使用していません。 以下にpppctlで使用されている変数について解説します。

変数一覧

以下の変数はpppctlメインスクリプト内部で、設定/参照される変数群です。 変数verbosepppd_pathが初期化ファイル .pppctl/initで設定できる以外は、ユーザの設定ファイル (.pppctl/init, 接続設定ファイル, プラグインファイル) では参照するのみにとどめておいたほうが安全です。

pid_myself
自分自身のプロセスIDです。
pid_pppd
起動したpppdのプロセスIDです。
piddir
pppdがpidファイルを作成するディレクトリです。 通常/var/runです。
plugin
現在実行中のプラグインの名前です。
plugins
コマンドラインから指定されたプラグインの一覧です。
pppd_path
pppctlから起動するpppdのパスです。デフォルトは/usr/sbin/pppdです。 これと違うパスのpppdを起動する場合は.pppctl/initで設定します。
chat_path
pppdが起動するchatコマンドのパスです。デフォルトは/usr/sbin/chatです。 これと違うパスのpppdを起動する場合は.pppctl/initで設定します。
prog
pppctlの名前です。通常pppctlです。
statdir
次に説明するステータスファイルが作成されるディレクトリです。 通常/var/tmpです。 このディレクトリにアクセスできない場合にのみ、 .pppctl/initで設定できます。
statfile
pppctlが起動時に作成するステータスファイルです。
userdir
pppctlの設定ファイル類が格納されているディレクトリです。 通常$HOME/.pppctlです。
verbose
メッセージの表示モードを表す変数です。 この値がyesの場合は詳しいメッセージ表示を 行い、それ以外はエラー時以外メッセージを出力しません。 この変数はコマンドラインの-vオプションで yesに、-qオプションでnoに 設定されます。 コマンドラインオプションで設定しなかった場合のデフォルト値は、 初期設定ファイル.pppctl/initで設定しておくことができます。
version
pppctlのバージョン番号です

以下の変数は接続(link)状態に関する変数群です。 変数lk_id, lk_timeoutが初期化ファイル .pppctl/initで設定できる以外は、 ユーザの設定ファイルでは参照するのみにとどめておいたほうが安全です。

lk_disconnect
スクリプト終了時に回線切断を行うかどうかを指示する変数です。 値がyesの場合、切断を行います。 それ以外の値では切断を行わず、そのまま終了します。
lk_elapse
PPP接続が確立してからの経過秒数が格納されます。 この値は5秒ごとに更新されます。 また、この経過秒数の値は単一プロセス内でのみ有効です。
lk_id
実行時に-iオプションで指定された接続設定ファイル名です。 指定されなかった場合のデフォルトはdefaultですが、 .pppctl/initで上書きできます。
lk_perm
-eオプションが指定されたとき値enabled-dオプションが指定されたとき値disabledを取ります。
lk_stat
pppctlの現在の状態が格納されます。値には次の4つがあります。
        disconnected : 接続動作は許可されていますが、接続していません。
        disabled     : 接続動作が禁止されています。
        connecting   : 接続動作中です。
        connected    : 接続は完了しています。
       
lk_timeout
実行時に-tオプションで指定された接続後の強制切断時間が 格納されます。単位は分です。無指定、あるいは1以下の数値の場合は、 強制切断を行いません。
デフォルトの数値は.pppctl/initで設定できます。 この場合、この数値が-tオプションを指定しなかった場合のデフォルトに なります。

以下の変数は接続に関係するシリアルラインとネットワークプロトコルに 関係した値を保持します。 sl_* はシリアルラインに関する設定、 pp_* はPPPあるいはIPプロトコル関係の設定値を保持します。 これらの値は初期化ファイルに設定することで、 pppctl動作時のデフォルト値になります。 また、接続設定ファイル中で値を代入すると、 そのデフォルト値に上書きされ、指定した接続でのみの設定になります。 これらの値は最終的にはpppdに引数として渡されます。

sl_dev
接続に使用するシリアルラインのデバイスファイル名です。 名前はフルパスではなく、basenameで指定します。たとえば /dev/ttyS0ではなく、ttyS0です。
sl_modemdial
ダイアリングを行うために行うモデムのコマンドを指定します。
sl_modeminit
モデムの初期化文字列を指定します。
sl_speed
シリアルラインの通信速度(bps)です。
pp_auth
PAPおよびCHAP認証を行う場合に値が自動的に設定されます。 ユーザが指定する必要はありません。
pp_chat
chatコマンドに渡す引数(チャットスクリプト)を指定します。
pp_extra_opts
これらの変数以外にpppdに渡す引数が必要な場合、 この変数で指定します。 pppdのデバッグをする場合やプロトコル関係の特殊なパラメータを 設定したい場合などに有用です。
pp_host
PAPおよびCHAP認証を行う場合に、pppdは/etc/ppp/pap_secretsまたは、 /etc/ppp/chap_secretsファイルを参照しますが、この変数は そのファイル内のリモートホストのエントリを指定します。
pp_ippair
$pp_localip:$pp_remoteipのアドレスのペアが自動的に 設定されます。ユーザが指定する必要はありません。
pp_localip
接続後の自ホストのIPアドレスを指定します。 特に必要がない場合は設定をしないか、または0.0.0.0を 指定します。
pp_login
チャットスクリプト中に現れるログインプロンプトに対して 送出するアカウント名を設定します。 リモートのPPPサーバがログインプロンプトを出さず、 直接PAP/CHAP認証を行うタイプの場合は、 設定の必要はありません。
pp_passwd
チャットスクリプト中に現れるパスワードに対して 送出するパスワードを設定します。 リモートのPPPサーバがログインプロンプトを出さず、 直接PAP/CHAP認証を行うタイプの場合は、 設定の必要はありません。
pp_remoteip
接続後のリモートホストのIPアドレスを指定します。 特に必要がない場合は設定をしないか、または0.0.0.0を 指定します。
pp_user
PAPおよびCHAP認証を行う場合に、リモート側のアカウントを指定します。 /etc/ppp/chap_secretsファイルの pp_hostエントリにこのアカウントが記述されている 必要があります。

以下はPPP接続確立後の状態が格納された変数群です。 接続の設定に使用するpp_*sl_*の 変数群と同じ意味のものがありますが、 st_*に格納されている情報は接続後にpppdが出力した 値です。 プラグイン内で値を参照する場合はpp_*sl_*よりも こちらの値を使用したほうが確実です。 また、これらの変数はプラグイン内では読み出し専用で使用して下さい。

st_dev
接続に使用しているシリアルデバイスファイル名です。
st_id
接続に使用している設定名です。 スクリプトが正常に動作していれば、lk_idと同じものが 入ります。
st_iface
接続に使用しているネットワークインターフェース名です。
st_localip
実際に割り振られた自ホストのIPアドレスです。
st_remoteip
実際に割り振られたリモートホストのIPアドレスです。
st_speed
シリアルデバイスの通信速度(bps)です。

定義済み関数

pppctlではメッセージ出力用に以下の3つの関数が 定義されています。 これらの関数を使用してメッセージの出力を制御できます。

echov
変数verboseの値がyesに限り、 出力を行います。
echonv
echovと同じですが、改行を行いません。
echoe
標準エラー出力にエコーします。 変数verboseの値には影響されません。

-l, -pオプション用コメント

接続設定ファイル、プラグインファイルはシェルスクリプトの 一部分として実行されるので、文字#以降はコメントとして解釈されるのですが、 接続設定ファイルなら-lオプション、 プラグインファイルなら-pオプションを指定して実行した場合、 コメントのうち文字#:で始まるものが表示されるようになっています。


最後に

以上でpppctlに関する説明を終ります。このスクリプトは、ppp-onや ppp-offを私が接続しているプロバイダRIMNETで使うのに便利なように改良して いったpprimというものが原型になっています。 このスクリプトは私がRIMNETに接続するための専用スクリプトでしたので、 メイルの送受信等、今のpppctlにある機能を一部分サポートしていて それなりに便利に使えたのですが、接続条件が変わったり、 あるいは接続時に実行するコマンド等を変更したい場合のスクリプトの書き換えが大変でした。
というわけで、そういった運用の管理を容易にするためにあらたに作り直したのが このpppctlです。 とはいえ、まだまだ改良すべき点が沢山あると思いますし、 多くのプロバイダに対応した接続設定ファイルや、 便利なプラグインなども望まれるところです。 これらを作成された方はお気軽に 作者までお知らせ下さい。
このパッケージはiij-pppやPPxPなどの立派なPPP実装系とは比べるべくもありませんが、 ごく一般的なpppd+シェルスクリプトというシンプルな構成でもここまでできる という参考例になれば幸いです。
最後に、pppdを開発した Drew Perkins 氏らはもちろんのこと、 この pppctl で使用しているフリーなソフトウェアを作成された 全ての人々に感謝します。
また、αテストからつき合ってくれた小林明さん、ありがとうございました。