実際には、始めて触れたコンピュータが、すでにGUIを装備していた、などという世代の人達には、GUIのない環境というのは考えられないのかも知れないし、便利なのも確かだからねぇ。パソコンごときでXがサクサク動くなんて、と遠い目をしてしまう人も必ずいるはずだ(笑)
で、次にハマるのが、pppによるISPへのダイアルアップ接続らしい。まぁこれもうなずけるよな。実際、Linux関係の情報を得るために、internetは欠かせないリソースだ。というか、internet以外から得られる情報など、本当に限られている。最初に読むであろうインストール本くらいじゃなかろうか。書籍類には確かにつぎこむけど、買おうと思う本の存在を知る手段自体が、オレの場合はinternetに依存しているし。
Microsoftの言う、Windowsで楽々internetってのもあながちウソじゃないよね。確かに、黙ってインストールすれば、ほぼどんなモデムでも認識し、Wizard様の言うとおりにしていれば、それらしくダイアルアップして接続できる。言葉は悪いが、こういった「ユーザは無能だという前提で何もスキルを期待しない」というカドの落し方にはいつも感心させられる。
だが、それが余計なお世話だったり、不安定だったり、似て非なるモノを勝手に「標準」などとウソぶいてゴリ押す傲慢さゆえに、関わり合いになりたくないワケだが(笑)
というわけで、Linuxをインストールした、Xも上がった、さて次はpppでダイアルアップだ、というときに、オレの絶対のおすすめがPPxPだ。もはや、これ以外のppp daemonを使うつもりはないってくらい良い。萌え萌えだぜ。これからpppの設定をしようと思っている人、今うまく設定できなくてハマッている人、pppの使い勝手に不満があるひとは、ぜひ参考にして欲しいし、使って欲しい。
まず、pppを実現するにはおおむね3通りの方法があると思う。一つは、伝統の pppd を使う方法。まぁpppdならまずどのディストリビューションにも入っているので、これが一番最初に触れ、インストール本を読み、そしてハマるという道だろう。で、2番目が、iij-ppp を使う方法。これも接続例が沢山あって、internetを漁ればいくらでも参考になる資料が見つかろう。で、3番目がオレの一押し PPxP だ。
kernelを再構築したことのある人なら、Network Supportの項目の中に、ppp support ってのがあるのを知っているだろう。pppd を紹介するインストール本にも必ずといっていいほど、kernel を再構築して ppp supportを有効にしましょう、なんて書いてあるよね。だが、これが必要なのは、上記のうちでは pppd を使う場合だけだ。iij-ppp や PPxP は、根本的に pppd とは実装が異なり、ユーザレベルで ppp を実現しているので、kernel による ppp support を要求しない。要求しないってことは、あっても使わず無視するってことなので、PPxPを使いたいから、kernelをppp supportなしで再構築しなきゃ、なんてこた必要ないので念のため(笑)
実際、オレもPPxPに出会う前は、pppd を正直に使っていた。ppp-on-dialer とか必死こいて書き、手動で ppp-on などとして接続していたもんだ。が、それじゃいかにもめんどくさいではないか。誰だって、オン・デマンド・ダイアルアップしたくなるに決まっている。Mail を拾いにいったり、モジラでどこかを見に行ったりしようとすると、自分以外へのアクセスを検出して自動的にダイアルアップしてくれれば、便利だもんねぇ。
で、せっかく pppd が設定できているのだから、と次は diald というのをいれてみた。コイツはなにをしてくれるかというと、SLIP を使って、オン・デマンド・ダイアルアップを提供してくれるのだ。実際には sl0 というデバイスをデフォルト・ルートに設定し、外部へのアクセスが全て sl0 に向くのを利用してダイアルアップのトリガにしているのだった。sl0 向けのパケットがくると、pppd をキックしダイアル・アップさせ、接続が確立するとデフォルト・ルートを ppp0 に設定しなおす。その後 ppp0 へのアクセスが無いまま、設定したアイドル時間がすぎるとタイムアウトして ppp 接続を切り、また sl0 の監視状態に戻る、という動作を繰り返す。
だが、今はどうか知らないが、オレが入れた当時のdialdはどうやらダイナミック・アドレスの問題が解決されていなかったり、パケットの再構築をしてくれなかったりで、どうにも使い勝手が悪かった。例えば、モジラを起動して URL を入力したとしよう。最初の一発目のパケットは sl0 に向き、diald がトリガとして検出する際に使われて捨てられてしまう。さらに ppp0 がデフォルト・ルートになるまで、つまりモデムがダイアリングしてモタモタしている間のパケットは、今だ sl0 に向いているので、どしどし捨てられる一方なのだった。
実際にはこの時点でのパケットは、DNSに問い合わせをしているだけなのだが、たまたまISPが混んでいて、何回かの RING が必要な時など、接続が完了するまえにモジラなどのアプリの方がタイムアウトしてあきらめてしまうことがよくあった。結局、対症療法として、/etc/resolv.conf に Name Server のアドレスを3回くらい繰り返して書くことでタイムアウトは減らせはしたが、いかにもダサいよねぇ。
さらに極悪なのが、これはダイナミック・アドレス問題と呼ぶそうなのだが、綺麗にセッションが解消しないという困った問題があった。またまたモジラで、どこかのページを見ていたとしよう。接続・切断は diald の支配下にあるので、放っておけば切れるからと PC を離れたとするよね。飯食いに行ったりしてさ。で、アイドル時間が経過すると diald は pppd を落して接続を切る。ここまではいいよな。が、その後が問題で、戻ってきてモジラを終了しようとすると、ダイアルアップを始めてしまうのだった。
そう。横から勝手に diald が ppp を切りはしたものの、モジラの方はそんなことは知らないので、セッションを終了しようとして、FIN パケットを一生懸命に投げていたのだった。正直に。で、diald がここで、その FIN パケットは無効で、自分がすでにセッションは切っちゃったもんね、という処理をしてくれればシアワセなのだが、こっちもバカ正直にダイアルアップしてくれちゃうのだった。そうしたらどうなると思う? 新しく ppp が確立するでしょ? すると普通はさっきの接続とは違う IP アドレスになっている。
こうなるともうムチャクチャで、モジラの出したFINパケットは漂流パケットと化してしまう。セッション終了を伝えるべき相手はとっくにいなくなっているし、さらにはACKを返して欲しい自分の IP アドレスさえ変わってしまっているのだから。モジラは熱心にFINパケットを出し続け、バカ正直なdialdはpppdにダイアルアップさせ続け… 以下同文。ご愁傷さま。さようならdiald。君は正直ないいヤツだったよ(笑)
前置きが例によって異常に長くなってしまったが、PPxP の設定も書いておこう。って、書くことないよ、簡単すぎて(笑) RedHat 5.1以降を使っている人なら、パッケージ置き場のがそのまま使えるハズだ。libreadline.soが必要なので、入っていないようならどこかから持ってきて入れる必要がある。赤帽な人はreadline-2.2-4.i386.rpm
などが入っていることを確認しよう。
PPxPは、ユーザレベルで ppp を実装している、と書いたが、それを実現するために、userlink.o というモジュールが必要で、こいつが提供してくれる ul0 というトンネルデバイスを PPxP は使って動く。で、このuserlink.oはkernelのconfigurationに依存するので、上記のPPxPパッケージをインストールすると自動的にmakeするようになっている。パッケージを使わない人は、userlink-0.98.tar.gzを落してきて自分でmakeしよう。特に難しいことはないが、moduleの形態を取っているので、kerneldを使ってmodulesをsupportしていないkernelでは当然ながら使えない。
上記のパッケージを入れると、例えばkernelのバージョンが2.0.35の場合は、/lib/modules/2.0.35/net に userlink.o ができているハズだ。非常にカッコ悪いのだが、これを/lib/modules/preferred/netの下に移動してからでないと使えないので注意が必要だ(userlink.oをmakeするscriptをもうちょっと練れば自動検出して適切なディレクトリに入れられるんだろうが、まぁいいかと放ってある)。例えば、
cd /lib/modules
cp -v 2.0.35/net/userlink.o preferred/net/userlink.o
rm -rf /2.0.35
などとしてしまおう。もしもpreferredや、preferred/net がない場合は、自分の環境に合わせて適切にね。
kernelによるmodule supportの関係でリブートが必要な人はリブートしよう。そうでない場合は、depmod -a してからinsmod userlink としてエラーが出なかったなら、lsmod で userlink がロードされているのが見えるはずだ。次はデバイスの準備をしよう。
PPxPはユーザ権限で動くので、仮にモデムが/dev/ttyS0にブラ下がっていたとして、PPxPを使いたいユーザ(つまり自分)が/dev/ttyS0にアクセス権がなければ起動することができない。RedHat 5.1 の場合は、/dev/ttyS* は uucp グループに属しているので、useraddなりなんなりで、自分を uucpグループに加えておこう。ここまでの作業はrootで行う。
これで晴れてPPxPが使えるようになっているはずなので、一般ユーザにもどっておもむろに ppxp としてみよう。
PPxP version 0.98082821
interface: ul0
ppxp>
となったら、ここまでの作業はグ〜だ。あとはISPから提供されている情報に合わせて設定するだけだ。それが難しいんだろって?ところがPPxPはそうじゃないのだ。次はモデムが生きているか、使えるモデムなのか確認しつつ、とっととISPにダイアルアップできるか確かめてしまうことにする。
PPxPのプロンプトが出ている状態で、qdial を実行しよう。すると、キャラクタ・ベースの設定画面が表示されるハズだ。ここでISPから指示された情報を適宜入力していこう。
デバイス名:のフィールドには、赤帽では /dev/modem が存在しないので、/dev/ttyS0など生のデバイス・ファイルを指定するか、またはあらかじめシンボリック・リンクを張っておこう。(注:オレはmodemconfigを一度も使わず、最初からPPxPなつもりでいたので/dev/modemがなかったが、modemconfigを使ったことがある赤帽な人は、/dev/modemができているそうだ。感謝>とるけま)ダイアル方式:はカーソルの左右でToneかPulseかdefault/ISDNを選べるので適宜選ぶ。これは結局、ATDコマンドでTかPかなにもなしか、の違いなので、モデムの出荷時の設定がPulseなのを明示的にToneで使ってるとか、そういう場合はちゃんとToneを選ばないとハマるかも。
電話番号、ユーザ名、パスワードなどは、ISPから指示されたものを間違いなく入力する。<詳細設定…>と<保存…>にはとりあえず手をつけず、画面最下行の<更新>を一旦選んでおき、速攻で<ダイアル>にトライしてみよう。<更新>を一度でも選んでからでないと、ダイアルしにいってくれないので注意だ。
どう?モデムにはアクセスした?OffHookして、ダイアルしてくれただろうか?
考えられる症状としては…
モデムがウンともスンとも言わない | モデムが生きてるか確認しよう。ハードウェアとしてLinuxから使えないWinModemという種類のモデムがあるが、これじゃないよね? 内蔵するタイプでWin95専用なものはクサイぞ。WinModemぢゃないし、普段はWin95などで使えているのに… という場合は、ユーザ権限でアクセスできるようにgroupを適切に設定したか? モデムが接続されているデバイスを正しく指定したか?などを調べよう。 |
ダイアルするが接続できない | モデムは生きている。初歩的だが、電話番号は合ってる?ユーザ名とパスワードをもう一度確認しよう。大文字小文字があったりしないか?それでもダメな場合は… |
接続できるがLogin:が出てしまう | とりあえず、ISPにPPPできている。認証方式がうまく噛み合っていないだけだ。認証の方式には簡単にいうと PAP、CHAP、Unix Login の3つあるが、ISPにはなにを指定されただろうか? なにも指定されていなければ、恐らく最近だと CHAP だと思う。qdialの<詳細設定…>で<認証プロトコル>をCHAP/MSかCHAP/MD5にしてもう一度トライしよう。上の例で、絶対に電話番号もユーザ名もパスワードもあってるのに!という人も、認証の方法でハマッている可能性があるので同じ様にトライだ。 |
いい線いってると思うけど、どうも接続できない、という人は、もうこれはqdialの守備範囲外なので、思い切って手で直接設定ファイルを編集してしまおう。一般ユーザとしてPPxPを使う予定の人は、~/.ppxpの下にあるファイルを、そうではなくて、rc.localなどに記述してブート直後にroot権限でPPxPを立ち上げちゃうつもりの人は、rootになって/etc/ppxpの下の設定ファイル類をいじろう。
大事なことだが、rootでPPxPしている人はおそらく/var/log/の下、一般ユーザで使っている人なら~/.ppxp/logなどの下に、セッションのログが残っているはずだ。最初にqdialでまず試している人は、qdial.log というファイルがあると思うので見て欲しい。うまく行かない場合に、どこでハマッているのか、フェーズがわかるはずだ。意味不明の英数字の羅列に最初は見えるかも知れないが、ログを読み解くというのは基本にして究極の必殺技だと思うので、ぜひスキルアップのためにも見よう。なるほど、こういう手順でつなぐのか、などときっと得るものがあるはずだ。
また、/etc/ppxp/modem の下に、PPxPで動作確認済みのモデムの設定ファイルがある。テキストなのでエディタで編集できる。generic というファイルを適当な名前にコピーして(一般ユーザの場合は、~/.ppxp/modem の下に置こう)、それを編集すればよい。また、PPxP自体の動作を設定するファイルは/etc/ppxp/confの下(一般ユーザなら~/.ppxp/confの下)にqdialなどがあるので、それを適当な名前にコピーして編集しよう。
ちなみにオレの場合はこんな風だ。
/etc/ppxp/conf/gte
source modem set MODE active set AUTH.PASSWD gte set LOG.FILE gte.log set LINE /dev/ttyS0 set SERIAL.MODEM me3314b set DIAL.LIST 626-0996 set DIAL.TYPE Tone set AUTH.PROTO PAP CHAP set IP.VJ no set IP.RESOLV yes set IDLE.TIME 300 source filter01
/etc/ppxp/modem/me3314b
include standard Name "Hayes AT compatible generic modem" Initialize "ATH0E1M0X4&M4&C1&D2&H1+FCLASS=0" MaxDTESpeed 115200
気をつけるところは…全部だな(笑) 特に、AUTH.PROTO の認証プロトコル、あとモデムのInitializeかな。
設定ファイルの最後の行 source filter01 だけど、このfilter01というファイルは最初からPPxPに含まれているので、ここには載せない。が、このファイルはエラく重要で、PPxPにオン・デマンド・ダイアルアップさせる場合のキモだ。が、PPxP自体が非常によくできているうえに、このfilter01の設定も特に文句をつけるような箇所がないほど網羅されちゃってるので、だまって使えばよかろう。
よく耳にする問題点として、家庭内LANを組み、MN128SOHOなどの類にダイアルアップ・ルータをやらせた際に、LANに接続されているWin95を起動するだけでダイアリングしちゃって困る、なんてのがある。これはWindows特有の、NETBIOSによる名前の解決(netbios-ns)でトリガが掛かっちゃってるものと思う。ポートの137番、138番あたりを無視すればよいのだが、その辺もPPxPでfilter01をただ使っていれば気にすることはない。まぁ今は各社デフォルトでフィルタしてるか、httpで簡単に設定できたりするに違いないのだが。
IP Masqueradeをサポートする設定でkernelを再構築してあるか、またはRedHat 5.1なんかだとインストールされるkernelそのままでもIP Masqueradeが使える。
例として、Ethernet Card 1枚にモデム1台という構成でIP Masqueradeを使うとしよう。Ethernet Card に 192.168.9.16 などのローカル・アドレスを割り付けていたとすると、/etc/rc.local の一番最後の方に
# PPxP initialize /usr/bin/ppxp gte -C bye # IP Masquerade initialize /sbin/ipfwadm -F -a m -S 192.168.9.0/24 -D 0.0.0.0/0 /sbin/ipfwadm -F -p deny modprobe ip_masq_cuseeme modprobe ip_masq_ftp modprobe ip_masq_irc modprobe ip_masq_quake modprobe ip_masq_raudio modprobe ip_masq_vdolive
などと書けばおしまいだ。えらく簡単。しかもタフで安全。
/usr/bin/ppxp gte -C bye ってのは、gte という設定ファイルを読んで、bye コマンドを実行してちょ、という意味だ。つまり、PPxPにdaemon動作をさせている。ppxpdというdaemonがメモリに残り、先のfilter01の指定に従って自動接続・切断してくれるようになる。イヤ〜ンなFINパケット地獄にも落ちない。
/sbin/ipfwadm -F -a m -S 192.168.9.0/24 -D 0.0.0.0/0 というのは、192.168.9.0なネットワークアドレスからのパケットだけフォワードしてね、という意味だ。/sbin/ipfwadm -F -p deny は、それ以外は全部捨ててちょ、ということ。これだけ。
その下のmodprobeの並びは、IP Masquerade越しにCU-SeeMeやircやRealAudioを使えるようにするための準備だ。
ここまでの設定が正しくできていれば、手でダイアルアップしなくても、それどころか誰一人Liunxにログインしてさえいなくても、Linuxが立ち上がってさえいれば、配下のWindowsだろうがNTだろうがMacだろうが、URLを入力するだけでinternetに接続でき、放っておけば確実に切ってくれる、かしこいダイアルアップ・ルータの出来上がりだ。
メール | 戻る |