PPxPを使ったダイアルアップPPP接続 |
YAMAMORI Takenori ●yamamori |
現在,FreeBSDには,次のように3種類のPPPが存在します. まずこれらの違いについて簡単に触れておきましょう.
* /usr/sbin/pppd -- ppp-2.3.11, ppp-2.4.xなどの系列で知られるPPPを ベースにしたもの * /usr/sbin/ppp -- IIJ-PPP * PPxP -- XベースのGUIも備えたPPP |
/usr/sbin/pppdはカーネルレベルで実装されたPPPであり, 3種類のPPPの中では最も基本のPPPであるといえます. これは,ppp-2.3.11, ppp-2.4.xなどの名前で単独のソフトウェアとして配布されており, FreeBSDだけでなく,LinuxやSolarisなど多くのプラットフォームで動作します. ただし,ppp-2.3.11などのソースを見ればわかりますが, オリジナルソース上での対応はFreeBSD 3.xまでとなっています. では/usr/sbin/pppdに存在するのは何者かというと, これはソースがOS本体に取り込まれ, OS本体の配布ファイルとして配布されているものです.
/usr/sbin/pppdは,設定ファイルとして/etc/ppp/pap-secretsなどを使用し, pppdコマンドの引数として,ダイアルアップのためのchatコマンドを呼び出したり するなど,少々複雑な設定が必要です. このため,pppdは手軽にダイアルアップ接続したい場合には向かないかも知れません.
なお,コマンド名がpppdとデーモンのネーミングになっていますが, サーバ側だけでなく,ダイアルアップを行なうクライアント側もpppdを使用します.
/usr/sbin/pppはIIJ-PPPとして知られているもので, トンネルデバイスを使ってユーザプロセスとして実装されたPPPです. この/usr/sbin/pppも,pppdと同じくOS本体の配布ファイルとして配布されています. このpppの設定ファイルとしては/etc/ppp/ppp.confなどが使用され, このディレクトリが前述のpppdと同じ/etc/pppとなっているため, FreeBSD以外のプラットフォームでpppdを使ったことのある人は 少々混乱するかも知れません.
PPxPは,IIJ-PPPと同じくトンネルデバイスを使ってユーザプロセスとして実装され, さらに設定や操作をXベースのGUIを使って行なうこともできるPPPです. PPxPは,上記の2つのPPPとは異なり,OS本体の配布ファイルではなく, ports/packagesとしてインストール可能です. PPxPのGUIには数種類(tkppxp, xppxp, fppxpなど)あり, またテキストベースでの使用(ppxpコマンド)も可能ですが, 本章ではこの中からTcl/TkベースのGUIであるtkppxpを使った ダイアルアップPPP接続について解説します.
まず,PPP接続以前の問題として,PCのシリアルポートとモデムまたはTA (以下TAも含めて単にモデムと呼びます)とが ストレートのシリアルケーブルで接続され, シリアルラインレベルで正常に通信できることを確認する必要があります.
FreeBSDでのシリアルポートのデバイスファイルは下の表のようになります. これらのデバイスファイルにアクセスするためには, ユーザがdialerグループに属している必要があります.
-----------------------+------------------------ デバイスファイル名 | DOS/Windowsでの名称 (ダイアルアウト用)| -----------------------+------------------------ /dev/cuaa0 | COM1 /dev/cuaa1 | COM2 -----------------------+------------------------ |
シリアルポートのデバイスファイルにアクセスするために, ユーザをdialerグループに追加ます. そのためには,suコマンドでrootになり, /etc/groupファイルの中のdialerグループの行の右側に 自分の一般ユーザ名を追加します.(下図) シリアルポートを利用するユーザが複数いる場合は, ユーザ名をカンマ(,)で区切って並べて記述します.
…省略… staff:*:20:root guest:*:31:root bind:*:53: uucp:*:66: xten:*:67:xten dialer:*:68:yamamori ← この行の右側にユーザ名を追加 network:*:69: nogroup:*:65533: nobody:*:65534: |
/etc/groupの修正後,idコマンドまたはgroupsコマンドを使って, 自分が正しくdialerグループに追加されたかどうかを確認します.
$ id ←(余談:idはSysV系由来) uid=1000(yamamori) gid=0(wheel) groups=0(wheel), 68(dialer) $ groups ←(余談:groupsはBSD系由来) wheel dialer |
この時,すでに起動中の自分のプロセスには, グループの追加が反映されないことがあるため, 念のためいったんログアウトしてログインし直すとよいでしょう.
ここで,cuまたはtipコマンドを使って モデムにアクセスしてみます. いずれも,モデムに対して「atz」(リセット)コマンドを入力し, OKが返ってくるのを確認するだけでよいでしょう. cuやtipは,リターンキーの直後に「~.」を入力することによって終了します. なお,リターンキーの直後というのはカーソルが行頭にある状態という意味ではなく, バックスペースなどでカーソルを行頭に戻して「~.」を入力した場合は 終了にはならないため注意して下さい. なお,cuやtip以外に ppxpコマンドのターミナルモードを使う という方法もあります。
$ cu -l cuaa0 ← /dev/cuaa0にアクセス atz ← モデムリセットコマンドを入力 OK ← OKが返ってくるのを確認 ~. ← cuを終了 Disconnected. $ |
$ tip com1 ← com1という名前は/etc/remoteで定義されている atz ← モデムリセットコマンドを入力 OK ← OKが返ってくるのを確認 ~. ← tipを終了 [EOT] $ |
いずれの場合も,cuやtipの中で「atdp電話番号」 (トーン回線の場合は「atdt電話番号」)というモデムコマンドを入力して このまま発呼することが可能で,相手側が対応していれば シリアル端末形式(いわゆる無手順接続)での接続が可能です. ただし,残念ながら現在この方法での接続に対応しているISPはおそらくほとんど 存在しないと思います.
FreeBSD 4.4-RELEASEのpackagesには,ppxp-0.99120923およびその日本語版の ja-ppxp-0.99120923が含まれています. ここではja-ppxp-0.99120923を使うことにします. パッケージのインストールは/stand/sysinstallまたは pkg_addコマンドで行なって下さい. /usr/local/binにはtkppxpやqdial(実体はtkppxpへのシンボリックリンク) などのコマンドが, /usr/local/sbinにはデーモンであるppxpdがインストールされ, また,/usr/local/share/doc/ppxp/jaや /usr/local/share/doc/tkppxpなどのディレクトリ以下には HTMLやプレーンテキストでのドキュメントがインストールされます.
PPxPを使うには,まず始めにISP(Internet Service Provider)への 接続のための情報を入力設定する必要があります. どのようなISPにダイアルアップ接続する場合でも, 接続に必要な情報は,アクセスポイントの電話番号, 接続ユーザ名,接続パスワードの3つです.
接続情報の設定には,qdialという設定ツールを使います. qdialコマンドを実行すると,下図のようなウィンドウが開くため, ここに接続情報を入力して行きます. (qdialと同様のウィンドウは,tkppxpのメニューから 「Operation」→「Quick Dialup」と選択しても開けます)
まず最初に「標準設定」のタブの各項目を入力します. 「デバイス名」はここではCOM1を使用しているので/dev/cuaa0を, 「ダイアル形式」は普通のダイアル式電話なら「Pulse」を選択します. 「電話番号」「ログイン名」「パスワード」の欄には, それぞれアクセスポイントの電話番号,接続ユーザ名,接続パスワードを入力します. パスワードは確認のため2回入力し,また入力中は多量の"*****"という文字が エコーバックされて盗み見ができないように配慮されています.
・図 qdialの「標準設定」タブ
次に「詳細設定」のタブを開きます. 「認証プロトコル」(CHAP/MD5 PAPに設定)ほかの設定項目がありますが, 実はこれらの項目はほとんどの場合デフォルトのまま変更する必要はないでしょう. ここでは利用していませんが,アイドル時間による自動切断や, IPマスカレードを行ないたい場合はここで設定することができます.
・図 qdialの「詳細設定」タブ
最後に「DNS設定」のタブを開き,DNSの設定を行ないます. 多くのISPでは,PPP接続時にDNSサーバのIPアドレスを自動取得できます. そこでデフォルトの通り, 「接続時のresolv.confの書き換え」のYesにチェックを入れておけばよいでしょう. これでPPP接続中,/etc/resolv.confのnameserverの行がISPのDNSサーバの IPアドレスに自動的に書き換えられます. これは,接続が終了すると元に戻ります. ただし,DNSサーバの自動設定に対応していないISPもあるようで, その場合はFixにチェックを入れ,ISPのDNSサーバのIPアドレスを 下の欄に直接入力します.
結局,「DNS設定」のタブ内も, ほとんどのケースではデフォルトのままでよいことになります.
・図 qdialの「DNS設定」タブ
qdialのウィンドウ上で必要な設定が終ったら, 実はこのまま左下の「接続」ボタンを押してダイアルアップすることができます. しかし,ここではいったん設定を保存してから接続することにします.
下の「保存」ボタンを押すと,保存するファイル名を聞かれるため, ISP名などの適当な名前をつけて保存します. ここでは,gihyoという名前で保存することにします. なお,これらの設定は,すべて$HOME/.ppxpディレクトリ以下に保存されます.
qdialによる設定が完了したため,tkppxpを使って実際にPPP接続を行ないます. ここでは設定情報をgihyoというファイルに保存しているため, コマンドラインで「tkppxp gihyo」と入力して起動します. あるいは,tkppxpを引数なしで起動後, 「File」→「Load configration」と選択してgihyoを選んでもかまいません. なお,tkppxpや前述のqdialの起動時には, バックグラウンドでppxpdデーモンが自動的に起動されます.
tkppxpは下図のように, オーディオプレイヤ/レコーダ風の画面です. ここでPLAYボタンを押すと接続,STOPボタンで切断と, 操作も直観的にわかりやすくなっています.
それでは実際にPLAYボタンを押してPPP接続してみましょう. PLAYボタンを押すとモデムはダイアルを始め,しばらくすると接続が完了します. 接続が完了すると,ISPから割り当てられたIPアドレスが表示され, また,パケットの通信量がレベルメータで表示されます. このレベルメータやIPアドレスの表示もオーディオ用のものになぞらえられていて, tkppxpの芸の細かさを感じるところです.
・図 tkppxpの画面(PPP接続中)
試しにPPxPでの接続中に「ifconfig」や「netstat -rn」コマンドを実行してみると, インターフェイス名としてppp0ではなく,tun0の方が使われており, 確かにトンネルデバイスを使っていることがことがわかるはずです.
なお,もしうまく接続できない場合は, $HOME/.ppxp/log以下にあるlogファイルを見るか, または「File」→「View Log」とメニュー選択してログを表示し, エラーの原因を確認して下さい.
tkppxpの終了方法には,Quit(イジェクトボタン)と Bye(ポーズボタン)の2種類があります. Byeでtkppxpを閉じた場合は,tkppxpのウィンドウが終了するだけで, バックグラウンドで動作しているppxpdは起動されたままになり, PPP接続中ならば接続されたままになるため注意して下さい. Byeでtkppxpを終了後,再びtkppxpを起動すればもとの状態に戻ります. 一方,Quitでtkppxpを終了すると,PPP接続中ならば切断され, tkppxpが終了するとともにppxpdも終了します.