フロッピ一枚のルータ


ラクガキでも紹介しましたが, ここ でフロッピ一枚に収まる IP スクリーニングルータを開発しています. これはとても楽しいので, 今から IP マスカレードやってみたいし, ちょうど腐ってるマシンが一個ある, というひとには, ぴったりのプロジェクトだ.

配布形態は, dos のディスクイメージである. ダウンロードしたファイルをフロッピにナマ書きして使う. Linux なら

cat floppyfw-1.0pre13.img > /dev/fd0
こんな感じ. dd でも可. ヰンドウヅなら, rawrite だ. フロッピにはファイルシステムは不要. ってゆうか, 上のコマンド実行したらファイルシステムはぶっとんでしまうが.

できたフロッピは, そのまま dos でマウント可能だから, マウントしてみるのも良い. /mnt にマウントするとして, パッケージの設定は /mnt/config にある. ここで IP アドレスその他を 設定する. routing と packet forwarding 関連は /mnt/firewall.ini に書くと良い.

実際の運用形態は, こうやって作り, 設定したディスクを ドライブに入れて電源をシステムを起動する. ちょうど, Linux をインストールするときのように. すると, システムが ram disk に展開され, 起動する. 運用時はフロッピは抜いておく. 以上. である. 万一 crack されたら, 電源を落とし, 起動するだけで システムの再インストー ルは完了する. なんせ, ram disk だから, 電源を落としたらフォーマットした のと同じです.

loop back について少々

しかしながら, 実際に設定をいじくって使うというのであれば, 単に /dev/fd0 を /mnt にマウントしていじくってたのは便利が悪いので, loop back ブロックデバイスを使おう. loop back デバイスは, ファイルにセーブしたディスクイメージを マウントするのにつかう, ナイスな仕組みだ. cd-rom 焼きや, boot disk を作成するのに使うアレである.

ただし, これは loop back をカーネルに組み込んでないと使えないわけだが, 自分のカーネルで, これが有効になっているかどうかは, たとえば

grep LOOP /usr/src/linux/.config
こういったコマンドで判る. 実行結果が
CONFIG_BLK_DEV_LOOP=m
あるいは `y' になっていれば, オッケーだし, この行がコメントになっていれ ば, ダメだ. まあ, vmware でも無い限り, そう頻繁に使うものでもないので, 普通は module にしてコンパイルかな. 配布パッケージを簡単に設定するだけなら, 普通に dd して作ったディスクを dos でマウントして, 見えるファイルを適当に操作するだけでもいいが, 自分で boot disk を作ったり cdrom を焼いたりするのにも使えるので, これを機会に CONFIG_BLK_DEV_LOOP=m としてカーネルをコンパイルする のがお勧めだ.

システム解説

ここではディスクイメージファイルを loop back でどこかにマウントしたもの として話を進めるが, 特に断らないかぎり, 普通にフロッピを dos でマウントしても, だいたい同じ操作ができる.

loop back でマウントするには, たとえばこんなコマンドだ.

mount IMAGE_FILE_NAME /mount/point -t msdos -o loop
loop back じゃないひとは, 普通に
mount /dev/fd0 /mount/point -t msdos
である. マウントポイントを ls してみると, ディレクトリが 4つとファイルが幾つかあ る. 起動の順番を, 説明しよう.
  1. syslinux というブートローダ(lilo みたな奴)が syslinux.cfg を見て起動を開始する
  2. ラムディスクイメージ initrd.gz が読み込まれる
  3. カーネル vmlinuz が読み込まれる
  4. linuxrc という初期化スクリプト(後述)が実行される.
  5. floppyfw.ini という初期化スクリプトに処理が引き継がれる.
  6. ネットワークの設定に必要なカーネルモジュールや各種コマンドが ram disk に展開される
  7. ネットワークの設定が実行される
  8. シェルを何個か起動する
  9. 10000000 日寝る

initrd はram disk イメージで, 中身は ext2 ファイルシステムである. こいつも loop back でどこぞにマウントしてみると, 中にはディレクトリが 幾つかと, linuxrc スクリプト, それに フロッピから bzip2 圧縮されている コマンドとカーネルモジュールを展開して設定するのに最低限必要な コマンド類(sh や cat や cp など)が入っている. ram disk スペースは, 約 3M となっている. linuxrc は, 見れば判るが(といっても loop back デバイスが無いと見れないが) フロッピを dos でマウントしてシステム初期化スクリプト floppyfw.ini を 引っ張りだすところで終っている. ってゆうか, このスクリプトはマジで楽しいので一見の価値ありだ. 見てのお楽しみなので, 内容についてはこれ以上書かずにおこう.

システムが起動してからの初期化スクリプトは floppyfw/floppyfw.ini である. こいつは実質, rc.X と同じ立場だ. config からパラメータを取得し, コマンドとモジュールを展開し, 他のスクリプトを実行する. このスクリプトに書かれてある処理の終了が, システム起動シーケンスの 終了にあたる. ただし, 最後の 1000000日寝るというプロセスを停止すると, そのあと カーネルパニッ クなので, 気を付けよう.

各種の設定は config firewall.ini modules.lst に書き込む. シェルスクリプトを直接いじくってもいいが, そういうことをしなくても 大抵の場合には対応できるようになっているので, 上のファイルに必要事項を書き込めばオッケーだ. ipchains とかの使い方に関しては, 開発元にもリソースへのリンクがあるし, LDP で howto とかをチェックすればいいでしょう. masquerade howto は 既に 2.2 用にアップデートされているぞ.

カーネルのアップグレード

10/22 現在のディスクイメージは カーネル 2.2.12 なので, アップグレードす る必要がある. カーネルのアップグレードは, ちょっと気を付ければわりかし簡 単なので, ここで紹介しよう.

手順は次の通り

  1. カーネルをコンパイル
  2. カーネルをディスクイメージにコピー
  3. モジュールを floppyfw/add.bz2 にコピー
  4. 追加するモジュールのリストを modules.lst に書く
このうち, 注意するのはカーネルのコンパイルとモジュールを add.bz2 にコピー するところだ.

カーネルのコンパイルでは, 原則は 2つ

必要なものは である. こいつらは, module にしたら動かない. module は add.bz2 を展開し てはじめて load できるので, 上のリストがダイレクトにカーネルに組み込まれ てないと, そこまでたどりつけない. これに加えて を module にしてコンパイルするよろし. これ以外は "n" にしてコンパイルしないとフロッピに 収まらない. 要するに, あまり選択の余地は無いのだ. これらの設定はふつうに make config でできる.

設定したら

make dep && make clean
で始まる例の奴を実行. make bzImage を使おう. カーネルイメージは手でインストールするので, make bzdisk とか bzlilo は ダメざますよ. make bzImage が終ったら, /usr/src/linux/arch/i386/boot/bzImage をディスクイメージの vmlinuz に コピーする. これでカーネルのインストールは終り. 次はモジュールのインストール. make modules が済んだら, モジュールもインストールしちゃダメざます. こいつも手でコピーするのだ.

モジュールは floppyfw/add.bz2 に含まれている. こいつは bzip 圧縮の tar ファイルだ. ~/hoge とかいうディレクトリでも掘り, その中に add.bz2 を展開する. 展開すると, ~/hoge/lib/modules/ にモジュールが入っているはず. とりあえず, その中身を全消しする. それから, /usr/src/linux/modules/にあるものを全部 ~/hoge/lib/modules に コピー. コピーしたら, ~/hoge で

chown -R root.root ~/hoge
tar cvf ../add *
cd ..
bzip2 -9 add
こうしてできた add.bz2 をフロッピに書き戻して, カーネルのアップグレード は終了. モジュールのリストは moduels.lst を編集してくれ. ついでに, カーネルをコンパイルしたときの .config も, メモとして フロッピに入れとくと良いでしょう. 次に設定を変更するときに, 大いに助けになるはずだ. .config というふざけた名前のファイルは dos じゃあ作れないので, 何かテキトーな名前にするよろし. 他に, loadkeys と普段使っているキーマップも add.bz2 に入れとくと 設定初期には助かる. us 101 キーなので, | とか \ とかを捜すのが大変だ. loadkeys は, 何とか入るサイズである.

ハードディスク関係のドライバも全部とっぱらって, ディスクレス ルータを 作ろう!そして, マシンから実際にハードディスクも抜いてしまおう. これで, サーバを机から落としても大丈夫. ってそんなことする奴居ねえよ.

そうそう. 最後にわしらがむちゃくちゃはまった tip を紹介しよう. このパッケージは, フロッピの write protect を外しとかないと動かないから 気を付けろ!