LINUXを使った1フロッピールータの試作



 
たかさきもとひろ:高知LINUXユーザ会
はじめに
古いPCをルータにする上でネックになるのは信頼性です。その中でも最も信頼のおけないのはハードディスクでしょう。

わが家のルータは486DX-33MHz(IBM PSV2045)という骨董品です。今の所は内蔵の340MハードディスクにVine Linux1.1をインストールして使っていますが、年代物のためそのうちクラッシュに見舞われるのは必至(^^)です。
そこで、1FDルータを試作してみました。お粗末な代物ですが、皆様のたたき台にと思って公開してみます。


1フロッピールータの作り方

Plamo Linux 1.43のブートディスクに含まれるinitrd.gzに変更を加えていきます。

PlamoのインストールディスクはFATのイメージなので、mount -t msdos /dev/fd0 /somewhereして下さい。
initrd.gzを/tmpにコピーし、gzip -d initrd.gzとして展開します。
できたinitrdをmount -t ext2 /tmp/initrd /hoge -o loopとして/hogeにマウントします
(Kernel configurationでloop back device = y or mとする必要がありますが、たいていのディストリビューションではデフォルトのままでOKです)。

これ1枚でいろんなことができるLinuxですから、たくさんのファイルがありますが、ルータとしてはほとんど不要なので思い切って捨てましょう。そうしないとipfwadmなどが追加できません。
デフォルトではinsmodやipfwadmなど、大事なファイルがないので追加します。
ブートディスクにあるライブラリはld.soとlibc.so.4.7.6だけなので、makeの時staticなバイナリを作らないとライブラリが足らんと怒られます。

insmodはVineのディストリビューションにinsmod.staticというのがなぜかあるので、これをそのまま使っています。

staticなipfwadmをMakeする方法は以下のとおりです。
Makefileを
CC      = gcc -static
に変更。
あとは、普通にmakeするだけです。

staticなバイナリであるかどうかは、ldd hogeすればわかります。

ネットワークの設定に関係するファイルは、/etc/rcと/rc.d/rc.inet1の二つです。

mnt以下にはinitrdのイメージが展開されているので、ファイルを追加・削除します。
その後、umount /mnt --> gzip -c initrd >initrd.gzとして元に戻します。

MS-DOSの起動ディスクに、initrd.gzとvmlinuzをコピーします。
loadlin vmlinuz initrd=initrd.gz root=/dev/ram0 ether=5,0x300,eth0 ether=3,0x280,eth1で起動します。
実験機のNICはISAのNE2000コンパチで、一枚目がIRQ=5, IO=300、二枚目がIRQ=3、IO=280となっています。
もちろん、IRQやIOは自分の環境に合わせて変更して下さい。
うまくいったら、autoexec.batに書き込みましょう。

/etc/rcは以下のとおりです。

#!/bin/sh
# remove /etc/mtab* so mount creates the /etc/mtab file

/bin/rm -f /etc/mtab* /etc/nologin /var/run/utmp
echo -n "" >> /etc/utmp
echo -n "" >> /etc/utmp

/bin/mount -av -t nonfs
/bin/rm -f /usr/spool/uucp/LCK*
/bin/rm -f /auto/run/*

#NICの初期化
#NE2000はカーネルに組込み済

#/sbin/insmod /lib/modules/2.0.36/net/tulip.o 
#/sbin/insmod /lib/modules/2.0.36/net/3c509.o
#/sbin/insmod /lib/modules/2.0.36/net/ne2k-pci.o
#/sbin/insmod /lib/modules/2.0.36/net/wd.o

if [ -x /etc/rc.d/rc.inet1 ]; then
#ホストネームの設定
        /bin/hostname -S router.takasaki.com
#ネットワークの初期設定のスクリプトを実行
        /bin/sh /etc/rc.d/rc.inet1
fi

/bin/mount /proc /proc -t proc 1> /dev/null 2> /dev/null

#ip_masq_の追加

/sbin/insmod /lib/modules/2.0.36/ipv4/ip_masq_cuseeme.o
/sbin/insmod /lib/modules/2.0.36/ipv4/ip_masq_ftp.o
/sbin/insmod /lib/modules/2.0.36/ipv4/ip_masq_irc.o
/sbin/insmod /lib/modules/2.0.36/ipv4/ip_masq_quake.o
/sbin/insmod /lib/modules/2.0.36/ipv4/ip_masq_raudio.o
/sbin/insmod /lib/modules/2.0.36/ipv4/ip_masq_vdolive.o
/etc/rc.d/rc.inet1は以下のとおりです。
# Attach the loopback device.
/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo

#eth0の設定
IPADDR01="192.168.0.200"
NETMASK01="255.255.255.0"
NETWORK01="192.168.0.0"
BROADCAST01="192.168.0.255"

#eth1の設定
IPADDR02="192.168.5.200"        
NETMASK02="255.255.255.0"
NETWORK02="192.168.5.0"
BROADCAST02="192.168.5.255"

#default gatewayの設定
GATEWAY="192.168.0.10"

#ルーティングテーブル
/sbin/ifconfig eth0 ${IPADDR01} broadcast ${BROADCAST01} netmask ${NETMASK01}
/sbin/ifconfig eth1 ${IPADDR02} broadcast ${BROADCAST02} netmask ${NETMASK02}

/sbin/route add -net ${NETWORK01} netmask ${NETMASK01} eth0
/sbin/route add -net ${NETWORK02} netmask ${NETMASK02} eth1

if [ ! "$GATEWAY" = "" ]; then
 /sbin/route add default gw ${GATEWAY} netmask 0.0.0.0 metric 1
fi
Download
以上の方法で作ったたたき台のファイルは以下にあります。
initrd.gz

vmlinuz (Kernel2.0.36)

.config(Kernel configのサンプル)

  • vmlinuz (Kernel2.0.36):NICは私の環境に合わせてISAのNE2000のみ組み込みです。
  • あと数種類(tulip.o 、3c509.o、ne2k-pci.o、wd.o)はmoduleになっています。
  • 最低限のルータとしての機能は確認してあります。他に良いアイデアがありましたらお教え下さい。
    pingとnetstatがない、おまけにsyslogもないのでなんとかしたい。
    gcc -staticでmakeすると途方もなく大きなファイルになるので入れられない(涙)
    まとめ
    とりあえずルーターとしての働きはします。あとはipfwadmでファイアーウォールの設定をするだけです。実用にはなりますが、いまいちまとまりがない(^^) あくまでも素人の行った実験とご理解ください。


    もっとよくできた1FDルータ

    FloppyfwというDebian-Kernel2.2.12ベースの素晴らしい1フロッピールータもあります。こちらの方が完成度も高くおすすめですが、私のような素人にはいじりにくいのが欠点?です。
    このページの日本語版を作成しました。作者のThomasさんの許可を得てここに置いてあります。
     
    第3回高知Linuxユーザ会・ 第11回高知ネットワーク研究会
    1999.12.11

    全てのソフトウェアはSlackware, Plamo Linux, Vine Linuxの配布ファイルであり、私には著作権はありません。
    エーアイムック231「楽しくやがて哀しきジャンクの世界:ジャンクの花園」 p121-122に紹介されている「フロッピーオンリーのルータを作る」を全面的に参考にしました。
    1999.12.11

    たかさきもとひろ(mo_taka@mxb.mesh.ne.jp)
    http://www2.biglobe.ne.jp/~motaka/