LinuxBox化計画
導入記にも書いた通り、無事Bフレッツが導入された。
家の中には数台のコンピュータがあるため、お手軽さで
ルータ(ブロードバンドルータ)を購入して使っていた。

私の使っていたルータは、センチュリーシステムズXR-300/TX2という機種だった。
少々値がはるのが問題といえば問題だが、機能の豊富さ、
安定さはかなりのものだとは思う。特に、Bフレッツの場合、
二つのセッションを同時に使用出来る。この点についてもXR-300は
サポートしており、同時にISPとフレッツスクエアへの接続、
なんてことも出来た。
その他、フィルタの設定等もかなりよくできていた
(設定していなかったけど)。Linuxベースのため、感覚的にわかりやすい
という点もよかったと思う。

しかし、このルータ、PPPoEを使用すると、最大速度が28Mbps程度になる。
もともと環境が良かったのか、ルータを使用せずに直接繋ぐと、
フレッツスクエアで80Mbps以上、ISP経由での測定サイトでも40Mbps以上は
出ていた。ちょっとばかり残念な気分にはなるわけである。

折しも、宅内のLinuxサーバ(実験用、兼ファイルサーバ)がいい加減、
古い&怪しいというのと、新しいドメイン(musication.info)を取得した、
ということもあり「それじゃ、いっそのこと新しいのにする代わりに、
こいつにルータの代わりをさせるか」ということになったわけである。
ここでは、その際の流れを忘備録を兼ねて書いていこうと思う。

また、Bフレッツを前提に記述するが、基本的な設定部分については
ADSLでも同様だと思われる(2セッション接続を除く)。



マシン準備
今まで使っていたマシンは、AMD K6-200MHz (64Mbyte)という仮にも速いマシンとは 言えない環境だった。実はこれをこのまま使って、 mosquitoを使う、という案もあったのだが、これ以上この古いAT機(ATXではない)を 使いつづけるのも忍びないので、新しいマシンを物色していたところである。

そんなおり、ひょんなことから、N○Cの9○NXのマザーボードを入手することができた。 こいつは、Celeron533MHzが載ったマザーボードでマイクロATXのものである。 ビデオもオンボードでなかなか使い勝手のよさそうなものだった。

そこで、これに使えるミニタワーケースを2,980円で購入。併せてヒートシンクも 購入。ヒートシンクは大型のものを選択。あわよくばファンを回さないで使いたかったから である。

今回のマシンの大きな目的の一つに静音がある。常時稼働のため極力音がしない 環境を作りたかった。そのため、電源に関しては音の小さな8cmファンを別に購入してきた。 電源自体を静かなものにしてしまうのも手だが、あまりお金をかけたくないというのも 正直なところである。

メモリは128MbyteのDIMMを一本。Xを使うわけでもなし、128Mあれば十分である。

NICは、素性のいいものを二枚。今回はDECチップ(現在はIntelチップ?)。 DS21143とDS21140を使用したものになった。21143は一部で評判がわるかったみたいだが 今はそんなことはないと信じた(笑)。
RTLのカニチップだけは何としても避けた。今はどうなのかわからないがカニには 苦しめられた経験が有り本能的に排除。

HDDは、Seagateの40GB流体軸受のもの。これもポイントは音が小さいことである。 事実ほとんど音は聞こえない。容量的にちょっと難有りだがひとまずは40GBあれば 十分であろう。

ビデオカードはオンボードのi810。コンソールがうつれば十分である。

CD-ROM、FDDに関しては古いものをそのまま流用。


ハード準備
ハードの準備は基本的には組み立てるだけである。この手のコトになれていれば あっというま。今回は、これに加えて静音の準備がはいる。

まずCPUファンだが基本的に停止状態とする。これに関しては実際に稼働させて見て ヒートシンクを触診してみた感じで決めることにした。結果、かなりの温度になったこと もあるにはあったが実際には触ってちょっと暖かい程度。この程度で有れば ファンを回す必要はないと判断した。

電源のファンはとにかく一番うるさい。そこで一度分解する。ファンを取り外し 別の静かなファン(8cm)に交換することにする。 また、安い電源ユニットはファンの取りつけ部分の穴がパンチング(打ち抜きの穴)で ある。これはかなり大きな風きり音を発生するため、全て切り取る。カナ鋸でもいいが、今回は 手抜きでハンドニブラを使って切り取った(切り屑が散らばらないのでファンだけ 取り外せばOK)。

新しいファンは普通の3pinのものだ。もっとも一つは回転数パルス出力なので無視。 同じ場所からとってもいいのだが、このあとの改造のため、電源外のHDD等につなぐ 電源コネクタから変換をして再度電源ユニット内に引き込むことにする。

新しいファンを取りつけると大穴があいてしまい、危険なので代わりに針金でできた ファンガードつける。これは風きり音が小さいので問題ない。
さらにこの手のファンは通常12Vで回転している。5Vを印加するとゆっくりと回るように なるため5Vにする。ここで先ほどのHDD用のコネクタが活躍する。 HDD等に使う4pinのコネクタの端子を一度引き抜き、5V側に刺しなおすわけだ。 こうすることで、余計な半田づけが不要になり、また実際にファンを回しながら 音を聴いてから判断が出来るようになる。その際いちいち電源を分解する必要もなくなる。 このため、4pin端子からファン用の3pin端子への変換ケーブルを用意しておくと よい。

これ以外の部分については、普通の組み立てと同じである。HDDは実際に回して見たところ よほどHDDに近づかない限り音はわからない。ケースにふたをしたらまず聞こえることはない だろう、ということで特に対策を施すことはしなかった。

なお、この改造による、電源ユニットの発熱だが上記CPU、メモリ、HDDの構成で わずかに熱を持つ程度で問題になる熱にはならなかった。


OSインストール
OSは当然Linuxである。問題のディストリビュータだが、手慣れているRedHatにした。 実際はなんでもいいとおもうが....。新規になにか買うのも癪だし、 今さら本も不要(かなぁ?)なので、ftp版を使用することにする。
RedHatのFTP版は、ftp://ftp.kddlabs.co.jp/pub/Linux/packages/RedHat/redhat/ からダウンロードするのが一番速いだろう。

サーバ設定で深く考えずに一気にインストールする。
私は1パーティションでUNIX系OSを使うこと自体が許せないのでパーティションは 以下のように設定した。
FilesystemsizeMounted on
/dev/hda1800MB/
/dev/hda227000MB/home
/dev/hda34000MB/usr
swap256MB-

インストールにおいてネットワークアドレスの入力項目がでてくる。本来であれば ここは後回しにしたいところだが、私はついつい入力してしまった。 これが後でなんだかよくわからない現象に遭遇する原因となる・・・


OSインストール2
OSのインストールが完了したら、細かい部分については個人の好みなので省略。
私の場合は、まず自分のユーザを作り、tcshを使う設定にしたのち、 .cshrcを書き換えて、使いやすい環境にする。このあたりは他のサイトを参考にして 頂いたほうが間違い無いだろう。私の環境偏ってるから。

ルータにするためには、なによりPPPoEの設定が必要である。RedHatにも当然PPPoEは 含まれている。ところが、どういうわけかRedHat7.2インストール直後の状態で、 PPPoEに必要なファイルの一部が無い状態になっている。一から設定を書けばいいわけだが 面倒なので、まず一度RedHat標準でインストールされているPPPoEを削除する。 PPPoEの削除は、rpmコマンドから行う。

rpm -evh (インストールされているRPMパッケージ名)

新しいPPPoEは、http://www.roaringpenguin.com/pppoe/ からダウンロードする。rpmなので、インストールもrpmを使用してインストールする。

rpm -ivh rp-pppoe-3.4-1.i386.rpm

インストールは、古いrp-pppoeを削除しないと正しく行われない。 必ず削除してからインストールをする。



PPPoEの設定
PPPoEのインストールが完了したら、接続の設定を行う。専用のコマンドが用意されて いるのでそれを用いる。

/usr/sbin/adsl-setup

このコマンドのあと対話形式で設定内容を入力する。これと言って難解なものは ないと思われるが、ここでは、ユーザ情報以外の設定は以下のようにする。
INTERFACEeth0
Demand valueno
DNSserver
FirewallMASQUERADE 又は NONE
Firewallに関しては、/etc/ppp/pppoe.confを書き換えることで変更が可能である。

以上の設定で、

/usr/sbin/adsl-start

を実行すれば、接続を行うはずである。Connect!という文字が表示されないようなら /etc/ppp/pppoe.confを確認してみる必要が有る。


NIC
ルータとして動作させるため、このマシンにはNICが二枚刺さっている。 これの設定をしなければならない。 一枚めのNIC(eth0)はONUを経由して外のネットワークへと向かう。よってデフォルト ではIPアドレスの付与をせずに、PPPドライバに行わせることになる。 起動時のIPアドレス付与をなくすために /etc/sysconfig/network-scripts/ifcfg-eth0 を以下のように修正する。
DEVICE=eth0
ONBOOT=no

二枚目のNIC(eth1)は宅内ネットワークに接続され、192.168.0.254を IPアドレスとして設定する。同様に/etc/sysconfig/network-scripts/ifcfg-eth1 を以下のように修正する。
DEVICE=eth1
BOOTPROTO=static
BROADCAST=192.168.0.255
IPADDR=192.168.0.254
NETMASK=255.255.255.0
NETWORK=192.168.0.0
ONBOOT=yes
ここまでの設定で起動すれば、eth1を使用したLAN側は普通に使えるように なっているはずだ。


route?!
ここまでが確認出来れば、サーバからISP経由で接続された外部のマシンへ アクセス出来るはずだ。

ping www.google.co.jp

と入力して、echoがかえってくれば接続自体は完了している。

私の場合、ここでechoが無かった。原因に関して、結論をいってしまうと インストール時に行った、インターフェースに対するIPアドレスの付与が 原因である。宅内では、192.168.0.0/24を使用している。ここで外部に 対するルーティングもデフォルトルートが192.168.0.254という自分自身 に設定されてしまっており、そのため外部参照ができないという状態に 陥っていた。

ここで、きちんと設定を探すべきなんだろうが、面倒で超手抜きということで /usr/sbin/adsl-start に以下の記述を追加した。

tty -s && $ECHO " Connected!" # ←この行の次に二行追加
route del default
route add default dev ppp0

これで、もともと設定されたデフォルトルートをむりやり削除した後新しい デフォルトルートとして、ppp0を設定してやる。

かなり強引な手法で、まっとうなひとからみたら、激怒モノかもしれない。 でも、とりあえずはいいことにする(をぃ)。


クライアントの設定
設定しているLinuxルータ配下に繋がる、LAN側の各マシンについては、 そのデフォルトルートの設定をする必要が有る。 当環境では、今まで使用していた、XR-300に置き換えで設定をしたので 各クライアントについては、一切変更はしなかったが、そうで無い場合は、 各マシンのデフォルトルートの設定をしなおす必要がある。 今回であれば、デフォルトルートは、192.168.0.254となる。


同時2セッション接続
Bフレッツベーシックは、同時に二つのセッションを張ることができる。
これは、単純に例で行けば、ONE配下に二つのPCを接続してそれぞれからフレッツ接続 ツールを使用して別のISPに繋ぐ、といったことが出来る、ということである。
電話線で言ったら二本の線が使えるということとだいたい同じだと思えばいいだろう。

これをうまく使うことで、一つのセッションはISP経由でインターネットへ、 もう一つはNTT東のフレッツスクエアへの接続を常時しておく、というような 設定も可能になる。フレッツスクエアのコンテンツが今後どの程度になるかは わからないが、フレッツスクエアの速度計測だけでもわざわざつなぎ換えることなく 実行出来るのは楽といえば楽である(そうか?)。

そこで同時に2セッション使用するように設定を変更する。 ここでももっとスマートな手法が本来あるはずで、そっちで行うべきだが ここでは手抜きの極致を行うことにする(単にわかんないだけ)。

先に行った /usr/sbin/adsl-start の修正を全て元に戻す(routeの二行を 削除して元に戻す)。

接続するそれぞれのセッションについてのユーザ情報の設定を行う。 まず /etc/ppp/chap-secrets。

# Secrets for authentication using CHAP
# client server secret IP addresses
"user@foo.ne.jp" * "passwd"
"guest@flets" * "guest"

下二行がユーザ情報である。一つめがISPの設定。これはadsl-setupコマンド実行時に 既に設定されているはずである。次の行がフレッツスクエアへの接続情報である。 NTT東ではこの設定でよいはずである。

次に、 /etc/pap-secrets。

# Secrets for authentication using PAP
# client server secret IP addresses
"user@foo.ne.jp" * "passwd"
"guest@flets" * "guest"

PAPのほうもCHAPと同様の内容にする。

その後新しいスクリプトを作成する。 テストということで、/root/net-connect というスクリプトを作成する。

#!/bin/sh

/usr/sbin/adsl-connect eth0 user@foo.ne.jp &
sleep 30
/usr/sbin/adsl-connect eth0 guest@flets &
sleep 30
/sbin/route del default
/sbin/route add -net 172.26.0.0/16 dev ppp1
/sbin/route add default dev ppp0

一つめは、ISPへの接続をeth0を使用して行うためのもの。 二つめはフレッツスクエアへの接続をeth0を使用して行うためのもの、である。 それぞれにsleepを入れてあるのは、順番がズレてしまわないようにするための 手抜き設定である(ppp0とppp1)。

その次にそれぞれのルーティングの設定である。172.26.0.0/16はフレッツスクエアへ ルートで、これを使用することで、フレッツスクエアへのアクセスがあった場合は ppp1を使用したルーティングをとる。 それ以外の場合は、デフォルトとしてppp0を見に行くという設定となっている。
なおこのファイルは、DNS設定時に更に追加修正を行う

このスクリプトを、マシン起動時に、行うようにrc.localあたりに書いてしまえば起動時に接続して環境も設定してくれるという寸法だが、どうにも美しくない。
とはいえ、これでも取り敢えずは使えるのでこのまま....(ほんとかよ)


その他
このあと、ルータとしての機能ではなくて普通のサーバとしての設定。
実は、このマシンは外部からの参照もできるようにしてある。詳しいことを書くと 穴だらけになるので詳細は省くが、
  • 1. 別ドメインの取得
    2. 1に関連してnamedの設定(プライマリ及びセカンダリの設定も含む)
    3. apacheの設定
    4. 等など....
  • それらについては、他のサイトのほうが詳しいと思われるので省略する。



    一つ前に戻る