Linuxによる実現


 押入に寝かせていたEPSONの486マシンであるViVidyをルーターマシンとして使用する。中身は、多少いじっていて、CPUをCyrixの486DX2−66Mからインテルの486DX4−100Mに、メモリーを8Mから20Mに変更したものである。
 OSのLinuxは以前別マシンでSlackware3.5をインストールしたHDDがあったので、これをViVidyに取り付けて使用した。なお、Kernelは、2.0.34から2.0.36に上げてある。Kernelのバージョンアップは別に意味はないが、練習のためした程度のことである。
 このPCをCATVインターネットのルーターとするために行った変更は、今までルーターとして使っていたPC98Ndの場合より大変で、 である。

 ViVidyにインストールしたソフトは、DHCPクライアント、IPFWAD、SAMBA、DNSであるNAMED、NFSである。
○LANカードの二枚差し

  Linuxは通常起動時一枚のLANカードしか認識しないので、これに対して二枚を認識させるためには、 起動時にカーネルに複数枚のLANカードがあることを指示する必要がある。
 この方法には、2種類の方法があるようで、一つは、ブートイメージの後に続けて入力する方法で、

linux ether=0,0 eth1

とすることで二枚目のカードを認識させるようである。しかし、この方法だと自動でのブートが出来ず使いづらいので私は、 LILOのコンフギュレーションファイルである /etc/lilo.conf に書く方法を採用した。この方法は、ファイル中に

append = "ether0,0,eth1"

を追記し、LILOを /sbin/lilo で再設定すれば次の起動時に有効になるというものである。
具体的には、私はPlug&PlayのPCIカードではなく二枚ともE2000互換のISAカードを使用した関係上、 irqとioアドレスも指定して、以下のように設定した。また、私の使用したカードのirqとioアドレスの設定は、DOSから専用ソフトで行う方式のため、事前に別のWindowsが動くPCのDOS窓から設定したのであるが、 irqとioアドレスについてはLinuxマシンの空きirqを

#dmesg | grep irq

で調べるとともに、当然二枚が競合しないように適当な値に設定した。

# Start LILO global section
boot = /dev/hda
prompt
timeout= 30
vga = normal
# End LILO global section
#Linux bootable partition config begins
image = /vmlinuz
 append="ether=10,0x240,eth0 ether=05,0x280,eth1" --追加行
 root = /dev/hda1
 label = lin
 read-only
#Linux bootable config ends

 なお、これらの設定は、
こことか他のホームページを参考にさせていただき実施しました。

 これでハードの検出は出来るのだが、ドライバーの指定方法が今ひとつわからず、一枚の時の /etc/rc.d/rc.modules の該当個所を同じように修正してみたが、 これでは認識されず、Kernelの設定でISAのNE2000コンパチブルを yes に変え、再構築してやっと認識された。
 最初から yes になっておれば簡単だったかもしれないが、、ここに至るまでにはそれなりの試行錯誤を重ねた上であることをご理解頂きたい。

確 認
再起動後 dmesg で起動メッセージを見てみると、

ne.c:v1.10 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov)
NE*000 ethercard probe at 0x240: unable to get IRQ 10 (irqval=-16).
ne.c: No NE*000 card found at i/o = 0x240
ne.c:v1.10 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov)
NE*000 ethercard probe at 0x280: unable to get IRQ 5 (irqval=-16).
ne.c: No NE*000 card found at i/o = 0x280

で二枚のカードが認識されたことがわかる。

 次にIPアドレスの指定であるが、これは /etc/rc.d/rc.inet1 で行う。DHCPでアドレスをもらう側のカードには仮のアドレス192.168.1.5を割り当てておく。

# Edit for your setup.
IPADDR="192.168.0.100" # REPLACE with YOUR IP address!
NETMASK="255.255.255.0" # REPLACE with YOUR netmask!
NETWORK="192.168.0.0" # REPLACE with YOUR network address!
BROADCAST="192.168.0.255" # REPLACE with YOUR broadcast address, if you
# have one. If not, leave blank and edit below.
GATEWAY="192.168.0.100" # REPLACE with YOUR gateway address!

IPADDR1="192.168.1.5"
NETMASK1="255.255.255.0"
NETWORK1="192.168.1.0"
BROADCAST1="192.168.1.255"
GATEWAY1=""

# Uncomment the line below to configure your ethernet card.
/sbin/ifconfig eth0 ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK}
/sbin/ifconfig eth1 ${IPADDR1} broadcast ${BROADCAST1} netmask ${NETMASK1}

確 認
 #ifconfig

 eth0とeth1のIPアドレスが、192.168.0.100と192.168.1.5と表示されれば正常に動いていることになる。

○DHCPクライアントのインストール

 LinuxのJFの
DHCP mini−HOWTOのクライアントの設定に従い、FTPサイトから dhcpcd-0.70.tar.gzをダウンロードし、

#tar -zxvf dhcpcd-0.70.tar.gz

で展開して、ディレクトリーに入り、 dhcpdc を make し、 install する。

#cd dhcpcd-0.70
#make
#make install

これで、 /usr/sbin に dhcpcd がインストールされるとともにDHCPcdの情報を保存する /etc/dhcpc というディレクトリーが出来る。

次に dhcpcd の起動であるが、これは上で仮にセットしておいた eth1 に対する設定を変更することで行うこととなる。そこで /etc/rc.d/rc.inet1 ファイルを次のように修正する。

# Edit for your setup.
IPADDR="192.168.0.100" # REPLACE with YOUR IP address!
NETMASK="255.255.255.0" # REPLACE with YOUR netmask!
NETWORK="192.168.0.0" # REPLACE with YOUR network address!
BROADCAST="192.168.0.255" # REPLACE with YOUR broadcast address, if you
# have one. If not, leave blank and edit below.
GATEWAY="192.168.0.100" # REPLACE with YOUR gateway address!

#IPADDR1="192.168.1.5"
#NETMASK1="255.255.255.0"
#NETWORK1="192.168.1.0"
#BROADCAST1="192.168.1.255"
#GATEWAY1=""

# Uncomment the line below to configure your ethernet card.
/sbin/ifconfig eth0 ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK}
#/sbin/ifconfig eth1 ${IPADDR1} broadcast ${BROADCAST1} netmask ${NETMASK1}
/usr/sbin/dhcpcd eth1

ここでは、旧の記述をコメントアウトしているが、削除してもよい。

確 認
 #ifconfig

 でeth1が表示されればOk。当然IPアドレスは0.0.0.0である。
 次にFreeBSDをインストールしたPC98Ndの場合と同様に、DHCPサーバーをインストールしたAT機(2)に接続してみる。AT機(2)を 先に立ち上げておいて、ViVidyを起動する。立ち上がったところで

 #ifconfig

でeth1にIPアドレスが設定されていればDHCPクライアントの設定が完了たことになる。
なお、ここでテスト用サーバーなど作らずに次のようにCATVに直接接続してみるのも一つの方法である。

モデムの電源を入れると、全面ランプが点滅してモデムの初期化が行われる。1分ほどで終わるのでこれが終わった頃を見計らい、ViVidyを立ち上げる。
すると起動時にDHCPCDがネットからIPアドレスなどの情報を取得して立ち上がる。その確認は、#ifconfig で割り当てられたIPアドレスがCATVからのものである 210.157.xxx.xxx となっていることと、 /etc/dhcpc に出来た resolv.conf の nameserver にCATVのDNSである 210.157.224.7 設定されていることで行う。


○IP−Masqueradeのインストール

 LinuxにおけるNATの実現は、IP−Masqueradeと呼ばれる手法を取るのが一般的のようである。
 IP−Masqueradeの組み込みは、
Linux IP Masquerade mini HOWTOに従い、
により行うこととなる。FreeBSDよりは少し簡単なようである。

(1)KernelへのIP−Masqeradeの組み込み
 私の使用しているKernelは、2.0.36なので上記資料の2.0.xの項により、Kernelオプションを変更する訳であるが、まず、

#cd /usr/src/linux

でKernelのソースのディレクトリーに移動しておいて

#make config

とする。XWindowをインストールしている場合は、 kterm などから #make xconfig とする方が操作は楽であるが、私の場合は、Xがまともに動いていなかったのでこの方法にした。詳しくは解説書などを参照されたい。
 ここで、出でくる質問の内、次の項目について Yes となるよう確認及び変更を行う。関係ない項目はそのままEnterで前の値が保持さる。

* Prompt for development and/or incomplete code/drivers
 CONFIG_EXPERIMENTAL

* Enable loadable module support
  CONFIG_MODULES

* Networking support
  CONFIG_NET

* Network firewalls
  CONFIG_FIREWALL

* TCP/IP networking
  CONFIG_INET

* IP: forwarding/gatewaying
  CONFIG_IP_FORWARD

* IP: firewalling
  CONFIG_IP_FIREWALL

* IP: masquerading (EXPERIMENTAL)
  CONFIG_IP_MASQUERADE

* IP: ipautofw masquerade support (EXPERIMENTAL)
  CONFIG_IP_MASQUERADE_IPAUTOFW

* IP: ICMP masquerading
  CONFIG_IP_MASQUERADE_ICMP

* IP: always defragment
  CONFIG_IP_ALWAYS_DEFRAG

* Dummy net driver support
  CONFIG_DUMMY

 次にKernelのコンパイルをおこなう。

#make dep
#make clean
#make zlilo
#make modules
#make modules_install

時間にして私の環境で20分程度である。これで、新しく出来たKernelとするため再起動する。Kernelのコンパイル失敗による起動不能対策は別途資料を参照下さい。

(2)IPフォアディングポリシィの設定
 これも、Linux IP Masquerade mini HOWTOのKernel2.0.Xの内容に従い /erc/rc.d/rc.local に

  ipfwadm -F -p deny
  ipfwadm -F -a m -S 192.168,0.0/24 -D 0.0.0.0/0

を追記する。

確 認
 FreeBSDの場合と同様の方法をとる。

  DHCPサーバー−−−−ViVidy−−−−VAIO
             eth1     eth0

と接続して、DHCPクライアントの確認に使ったLinuxのサーバーを起動した後、ViVidyを起動し、WindowsによるクライアントであるVAIOノートで telnet を立ち上げ、

telnet 192.168.1.1 実はDHCPサーバーのIPアドレスは 192.168.1.1 に設定

でDHCPサーバーとなっているマシンが応答すればパケットが通っていることとなる。

 さらにVAIOのDOS窓から

ping 192.168.1.1

として、応答を確認する。これでIP−Masqueradeが動作していることが確認できた。
念のため、 #ifconfig として、割当たられたIPアドレスを確認しておくと参考になるかもしれない。

また、ここではテスト用のサーバーを作ってテストしたが、直接CATVに接続してもよい。
その場合は、DHCPCDの設定が上で確認できているとすれば、パケットが通過することの確認だけでよい。上の接続でVAIOから実在するURLを指定して

#ping www.netwave.or.jp

で応答が帰ってくればOKである。

○DNSの設定

 DNSは無くても家庭内のLANは動くのであるが、その場合は、各クライアントのDNS指定でCATVのDNSアドレスを指定する必要があることから、煩雑である。
 また、FreeBSDでは、自前のDNSサーバーを設定していたので、サーバーを色々試してみるのに同じ環境にしたかったことからDNSを組み込むこととした。

 DNSの組み込みは、Slackware3.5には、bind8がインストールされているので、これを起動すればよい。
 ただ、これが一筋縄では行かず、
DNS HOWTOや先輩諸氏のホームページを参考にさせていただき、また、FreeBSDでの設定例を参考に、試行錯誤の結果次のように設定した。

/etc/named.conf ファイル

/*
* A simple BIND 8 configuration
*/
options {
   directory "/var/named";
   forward only;
   forwarders {
   210.157.224.7;
   };
};

logging {
   category lame-servers { null; };
   category cname { null; };
};

zone "anabuki.or.jp" in {
   type master;
   file "named.hosts";
};

zone "0.168.192.in-addr.arpa" in {
   type master;
   file "named.rev";
};

zone "." in {
   type hint;
   file "named.cache";
};

zone "0.0.127.in-addr.arpa" in {
   type master;
   file "named.local";
};

赤字の部分は、どのようにすればよいかわからないため、FreeBSDで使っていた named.boot を

#named-bootconf.pl < named.boot > named.conf

で変換することにより判明した内容を挿入した。これが無いと全く動作しなかった。特に forward only の部分は、FreeBSDの参考書にも無く、色んなホームページを探した結果の産物である。
内容を理解せずに設定しているのであるからこのようなことは仕方がないのかもしれない。

このファイル以外に、/var/named/ に置く必要のある named.hostsnamed.localnamed.rev を示す。

 起動は、 /etc/rc.d/rc.inet2 にある named に関するコメント行指定をはずします。

 確 認
#nslookup

として > が帰ってきたところで trisal などと登録したホスト名を入れてIPアドレスが帰ってくれば成功である。
また、外部に対しては、 /etc/resolv.conf の nameserver に 192.168.0.100 とViVidyを指定した上で、ping www.netwave.or.jp などとして応答があれば旨く設定できていることとなる。

○クライアントの設定

 DNSの組み込みでFreeBSDの場合と環境が同じになったので、FreeBSDの項を参照されたい。

 確 認
windowsのクライアントからNetscapeを立ち上げ適当なホームページにアクセスする。またFTPサイトにもアクセスする。さらに、DOS窓からTelnetも動かしてみる。

c:>telnet r2.niftyserve.or.jp

これで応答が帰ってくればOKである。

 以上がLinuxによるルーターの実現である。立ち上げ時、たまにIPアドレスが取得できないこともあったが、現在は順調に稼働している。しかし、これは私の環境でのことであり、環境が異なる場合の動作を保証するものではないことに留意いただきたい。

 さらに、UNIX系サーバーの特徴である telnet によるリモートからのルーターのメンテとクライアント用プリントサーバー実現のため、SAMBAとNFSDを組み込んでおり、また、リモートプリンターの組み込みも試みているが、この設定は時間が出来たら書くことにする。
○ハードディスクの増設

 以上の構成で暫く使用してきたが、ダウンロードしたファイルが増加してしまい端末のHDDに収容しきれなくなったことから、HDDを取り替えてファイルサーバーとしても使用することとした。
 HDDは最近どんどん大容量化してしまい、10G以上のものしかなくなってきている。古いマシンなのでBIOSが認識できるか不安はあったが、将来性を考え15Gのものを購入した。
 早速ViVidyのスレーブに取り付けてみたが、案の定自動設定では8Gまでしか認識しない。これでは無理なようであるので、他のATマシンに付けている3Gと交換することとした。3GからWindowsをコピーして起動するとさすがに読み書きのスピードは1.5倍に高速化しており、それなりに効果が認められるので、これで使用することとした。
 ところが3GをViVidyに取り付けるべく方法を考えている時に、何気なく見たホームページの中にBIOSが自動認識するサイズ以上のHDDをインストールする方法が記載されているではないか。
 その方法は、フルサイズで認識出来る別のマシンでフォーマットしたものを取り付ければ、BIOSの認識は取り替え前の容量であってもLinuxがフルサイズで認識するというものであった。
 そこで、Windows用に取り付けていたマシンで、フォーマットとLinuxのインストールをすることとし、作業に取りかかった。まず、BIOSでHDDのパラメータを確認しておく。
 インストールするLinuxは、このところ慣れているTurboLinuxとして、まず、FTPインストールに必要なインストーラー起動用フロッピーを作成する。そのフロッピーで起動して、15GのHDDを14Gのディスクサーバーエリアと、1GのLinuxエリア、それに少々のSWAPエリアに分割して、FTPインストールを開始する。
 2時間程度でインストールは終了したので、それをViVidyに取り付けてみる。HDDを入れ替えているので、念のためBIOSのHDD設定で強制的にひかえておいたパラメータをセットする。そのまま起動すると問題なく立ち上がりLinuxが15GのHDDを認識した。
 TurboLinuxは以前Noteで経験していたが、LANカードのセッティングだけはNoteとは違っている。まず、Liloの記述をSlackWareと同じにしてみるが、二枚目は認識しない。あちこちのホームページを探したが決定的な説明が無く、結局TurboLinuxのホームページにある4.0のマニュアルを見ていくと、ne2000互換のisaカードは/etc/conf.modulesに記述するとあるためその指示に従い
alias eth0 ne
alias eth1 ne
options ne io=0x240,0x280
と記述する。これで、二枚のLANが無事認識された。後は
NoteへのTurboLinuxのインストールのページを参照されたい。
 その後は順調に稼働している。