MNV のトラブルその2

〜MN II に繋がるルータを探せ! 〜


MNV 再び沈黙す

 だましだまし使っていた MNV ですが、さすがに我慢の限界を迎えるいいたり、使用を中断するまでに至りました。なにせ、Linux の apt-get でわずか 170MB 程度のデータを受信しきれないで、MNV がハングアップする、という状態が3度続き、電源入れなおしただけで MNV がハングアップする、という状態が2度もあると、とても安心して使用するような状況ではない、と判断されてもやむをえないのではないかと思います。いくらなんでも、何もしていない状態でハングアップしてしまうようでは、製品としての品質を疑わざるをえず、ロットの不要なんどでは、説明のつかない状況に至っているとしか思えませんでした。MNV を使わないということは、VoIP も使えないことになりますが、そもそも VoIP は ADSL のおまけでしかないため、メインの ADSL に不具合が生じるようでは、継続使用するわけには行かないのです。

 そこで、MNV の代替品としてあずかっていた MN II を使うことにしたわけですが、ここにも問題がありました。それは、手持ちのルータがない、ということでした。ルータがなくても、個々の PC 毎に ADSL にはつなげられますが、それぞれの OS 毎に設定をしければいけない面倒さ、そしてルータのある生活に慣れきった身には、便利なルータなしでの生活は考えられないため、なんとかしなければなりませんでした。

 金がないなら、頭を使うしかありません。足りない頭で考えた方法は、ルータを自作する、ということでした。ルータとして必要な機能は、(1) Ethernet の口が二つある、(2) Ethernet のルーティングができる、(3) ADSL に接続できる、の3点ですから、PC に Ethernet を二口用意すれば、十分可能な話なのです。以前に ISDN ダイアルアップルータを作成したことがあり、このときは一方がシリアルポートであっただけが異なるので、それほど大きく違うわけではありません。

Vine Linux 2.6 をブロードバンドルータに!

 さて、ルータに使用する OS の選択ですが、ここはあっさりと Linux にしました。Windows を使う事も不可能ではありませんが、Windows を使った場合、ある程度のスペックがないと、快適に使用することができません。しかし、ルータの性格上、GUI などはむしろ不要であり、設定ができる CUI さえあれば十分となりますので、ハイスペックな PC を要求する Windows を使うのでは、汗をかくというより、ドブに金を棄てると言ったほうが正しいとさえ感じます。そもそも、Windows でルータとして使えるようなスペックであれば、十分メインマシンとして使用しているはずです。なので、あっさり Linux を使うことで、決定しました。

 ディストリビューションについては、Vine Linux 2.6R1 を選択しました。別に他のディストリビューションでも良いのですが、手元にあったのが Vine Linux 2.6R1 だった、ということです。RedHat を選択しなかったのは、RedHat 9 以降の GUI 多用環境では、Linux を選択する意味がないので、このような選択となりました。

Linux で ADSL を使う

 Linux で ADSL を使う場合、rp-pppoe というパッケージが良く用いられるのですが、Vine Linux 2.6R1では標準導入パッケージに含まれているため、ADSL の接続設定をするだけですぐに使えるようになっています。とはいえ、Linux を ADSL に直接接続するのは、一年以上前に一度試したきりであったので、最初はどこで設定するのか、とまどいました。最近ではすっかり GUI に慣れきってしまっていたため、設定コマンドを GUI のメニューから探してしまうほどでした。それでも、WindowMaker のメニューに TkPPPoE の文字を見つけたころには、設定コマンドである adsl-setup の存在を思い出しました。

 せっかく TkPPPoE を見つけておいて使わないことには、理由があります。基本的に、このマシンは X Window System を起動させないつもりであるため、GUI なツールでしか設定できないことは、後々困ることに繋がるためです。もっとも、以前試したときにも、adsl-setup を使っていたので、TkPPPoE の設定方法に悩むのも嫌だな、という気持ちがあったことも事実です。

 adsl-setup を実行すると、対話的に設定がなされていきます。表示が英語ですが、中学生程度の英語力で十分理解できる内容です。注意する点としては、ADSL モデムを使用するネットワークインターフェイスを間違えないこと、ですね。特に ADSL では、ネットワークカードの二枚差しを行うため、二つのインターフェイスのどちらを使っているのか、を間違えてしまうととんでもないことになります。実のところ、最初に間違えてしまいました(笑)。

 設定が完了したところで、一度接続試験を行います。ルータは複数の機能を組み合わせて機能するため、一つ一つの動作をきちんと確認していくことが、とても重要になります。途中の確認を怠ったばかりに、後で障害が発生した時に、その原因究明が非常に困難になってしまうことが、往々にしてあるためです。

 ADSL に接続するコマンドは adsl-connect になります。設定が正しければ、【...Connected!】のメッセージが表示されます。カンマが四つ以上つく場合には、設定に誤りがあることになりますので、再度設定を確認してください。誤りやすいところとしては、(1) eth の指定、(2) ユーザー名・パスワードの大文字小文字、あたりですね。

 接続ができたところで、安心してはいけません。一応回線は接続されていますが、本当に Web ブラウジングができるか、確認しておく必要があります。ここで、Mozilla を立ち上げてもよいのですが、時間がかかりますので、私は w3m を使って、Vine Linux の Web ページを表示できることで確認しました。Web ページが表示できない場合、(1)DNS 設定の誤り、(2) 実は回線が接続されていない、が考えられます。(1) は adsl-setup で再度確認してください。(2)は、IP アドレスでの接続が成功するかどうかで確認できます。この時点でうまくいかない場合は、ほぼ DNS の設定が誤っているためと思われます。

NAT(IP Masquerade) の設定

 無事 ADSL に接続できれば、後は個人使用のルータには必須の、NAT(ナット) または IP Masquerade (アイピーマスカレード)の設定となります。インターネットに接続するためには、原則として、一台の PC に一つのグローバルアドレスが必要になります。ADSL で接続した場合であってもルータに割り当てられた一つの IP アドレスでは、一台の PC しか接続できないことになってしまいます。

 このような事情から生まれたのが NAT であり、IP Masquerade と呼ばれるものです。これは、インターネットへデータを要求するときに、こっそりと割り当てられたグローバルアドレスに書き換えておき、データを受信したときにも、こっそりと、元の IP アドレスに戻す、という作業を行うことで、グローバルアドレスを直接割り当てられていない PC でも、インターネットを利用可能にする、という技術です。以前は NAT は一対一の対応を行うものを指し、IP Masquerade が一対多の対応を行うものでしたが、NAT の定義が拡張され、IP Masquerade も NAT の一つに含まれることになりました。

 NAT の設定を行うコマンドは iptables になります。この NAT を設定するコマンドも、使う kernel のバージョンによって、結構変わっています。ダイアルアップルータとして使用している Vine Linux 2.1(kernel 2.2) では ipchains であり、初めてインストールができた Vine Linux 1.1 (kernel 2.0)では ipfwadm でした。Linux の IP Masquerade は 本体である kernel の仕事であるため、kernel が変わるたびに変更されているようです。もしかすると、kernel 2.6 では、まだ違ったコマンドが用意されるかもしれません。

 ルータとして使用する時の最低限の設定は、下記の通りです。

     iptabels -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

 あまり詳しくはないので、簡単に説明すると、ppp0 は ADSL の回線口になり、LAN 上から Internet へ 向かうパケットは、すべてこの ppp0 を通過することになります。そして、POSTROUTING の指定があることから、内部処理を行い、ppp0 を通過する直前に、MASQUERADE (Local アドレスを Global アドレスへ付け替え)を行う、という設定になります。

 上記の設定では、ppp0 を通過するすべてのパケットが Masquerade 対象となりますので、LAN 外の不正なパケットも MASQUERADE されてしまう可能性があります。このため、実際には LAN 内の IP アドレスを発信元とするパケットのみを MASQUERADE の対象とすべきであると考えます。

     iptabels -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE

 -s オプションを追加して、パケットの送信元を確認しています。この設定を行うことで、少なくとも、正式な IP アドレスを所有しているパケット以外は LAN 外に流れ出ることはありません。