FreeBSDによる実現


 ルーターマシンとしてPC98Ndを設定変更する。  このマシンはこれまでnat付きpppによるダイアルアップルーターとして使用していたため、今回CATVとなることによる変更は、LAN接続でDHCPによるアドレス割り当てとなるための変更とNATの組み込みであることから、 である。なお、これ以外にサーバーとして必要なSAMBAとかネットワークプリンターの設定はこれまで通りであるので省略する。

 PC98Ndにインストールしたソフトは、DHCPクライアント、NATD、SAMBA、DNSであるNAMEDである。NFSも組み込んでいたが、PPPの時は動いてにもかかわらず何故か動作しなかった。
○LANカードの二枚差し

LANCARD  この二枚のカードを使用する。FreeBSDをノートPCにインストールする場合は、PAOを使用するが、このためPC−CARDはPAOの配下におかれることからサポートされているカードであれば、自動認識する。
 もし、NE2000コンパチなどのドライバーが同じカードを二枚使用する場合は、使用可能なリソースを広げる必要があるため /etc/pccard.conf の修正が必要なようである。
 詳しくは、
PAO−FAQ.jpをご覧下さい。
 私の場合は、ed0とfe0という異なったドライバーを使用するメルコのLPC−Tと富士通のFMV−182を使用したため、挿入するだけで認識された。内外の使い分けは、LPCが外、つまりケーブルモデム側でFMVは今まで通り家庭内LANである。

確 認
 立ち上がった状態でカードを抜き差しすると、変化のあったカードの名前とIRQを含んだメッセージが出るので、それで確認できた。ちなみにLPC−TがIRQ3でFMVは5であった。

 次にIPアドレスの付与であるが、これは/etc/rc.confで行う。FMVはこれまでと同じであるが、LPCは、DHCPによるIPアドレスの割り当てが可能となるように設定する必要がある。

変更前
pccard_ifconfig="fe0" #Specialized pccard ethernet configuration (or NO)
network_interface="fe0 lo0" #List of network interfaces(lo0 is loopback)
ifconfig_fe0="inet 192.168.0.100 netmask 255.255.255.0"
ifconfig_lo0="inet 127.0.0.1 #default loopback device configulation
pccard_ether="ep0 fe0 sn0" #Pccard ethernet interface(or NO)

変更後
pccard_ifconfig="fe0 ed0" #Specialized pccard ethernet configuration (or NO)
network_interface="fe0 ed0 lo0" #List of network interfaces(lo0 is loopback)
ifconfig_fe0="inet 192.168.0.100 netmask 255.255.255.0"
ifconfig_ed0="DHCP"
ifconfig_lo0="inet 127.0.0.1 #default loopback device configulation
pccard_ether="ed0 ep0 fe0 sn0" #Pccard ethernet interface(or NO)

 という設定である。ここで ifconfig_ed0="DHCP" とあるのはDHCPクライアントからIPアドレスを受け取るためのPAO独特の表現のようである。詳しくは「FreeBSD(98)徹底入門」のPAOの項を参照されたい。

確 認

 #ifconfig -a

 とするが、DHCP側のIPアドレスは当然0.0.0.0のままである。DHCPクライアントのインストールを待って確認することとする。

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

 「FreeBSD徹底活用1ネットワーク編」付属の2.2.7のCD−ROMからDHCPクライアントソフトである wide-dhcp-1.4.0p1.tgz をコピーして

#pkg_add wide-dhcp-1.4.0p1.tgz

でインストールする。 DHCPクライアントの実行にはカーネルを

pseudo-device bpfilter 4

という設定で再構築する必要があるようであるが、PAOの場合は初期設定でそうなっているようであり、このあたりはパスできた。   
参考

 次に起動の設定であるが、これも /etc/rc.conf で行う。

defaultrouter="NO"
dhcp_flags="-r -n"

でいいのであるが、パラメーターの -r は/etc/resolv.conf のnameserverをCATVのサーバーのものに書き換えてしまうものであり、私の場合は、自前のネームサーバーを持っていることから書き換えられるとまずいので、CATV側のネームサーバーアドレスを取得するため一度だけ動作させた後、削除している。

確 認
 クライアントの確認にはサーバーが必要なため、AT機(2)をDHCP-BETA-5.16.tar.gzによりLinuxのDHCPサーバーに設定した。サーバーを立ち上げた後、PC98Ndを立ち上げると見事

ifconfig -a

でed0にIPアドレスが設定されていた。
○NATDのインストール

 FreeBSDにおけるNATの実現方法には2種類あり、一つはIP_Filterもう一つはFreeBSD固有のnatdだそうである。
 どちらが良いのかよく分からないが、
ここを参考に対応サービスが多そうなのと設定が簡単そうだったのでnatdを使うことにした。

 設定は、同じホームページにあるNATDに従い、
を正確に行った。

(1)NATDのインストール
 FTPサイト(ftp://ftp.suutari.iki.fi/pub/natd/)からnatd_1.11.tar.gz を入手し、適当なディレクトリー(例えば/usr/local)に置いて、tarコマンドで展開する。

#tar zxvf natd_1.11.tar.gz

 これにより新たなディレクトリ (natd_1.11) がつくられるので、このディレクトリの中へ移動して、make コマンドにより コンパイルが開始され、natd が生成される。

# make
# make install

 この make install コマンドによって /usr/local/sbin に natd を、 /usr/local/man/man8 に natd.8.gz を置く操作が行われる。

(2)カーネルの再構築
 IPFWが動作するようカーネルを再構築する。このため/usr/src/sys/pc98/conf に移動して、現行のコンフィグファイルのコピーを作成した。 今回は MyKernel と名付けたが名前は何でも良い。

# cp (現行のコンフィグファイル名) MyKernel

 具体的には GENERIC を現行コンフィグファイルとすると、以下のようになる。

# cp GENERIC MyKernel

先程作った新コンフィグファイル (MyKernel) を IPFW が利用できるように 編集する。 作業は、以下の2行をコンフィグファイルの一番下に追加する。

optionsIPFIREWALL
optionsIPDIVERT

 この後、カーネルの再構築を行う。

# cd /usr/src/sys/pc98/conf
# config MyKernel
# cd ../../compile/MyKernel
# make depend
# make
# make install
# reboot

 PC98Ndでは make で1時間強 かかった。CPUのスピードなのかメモリーなのか分からないが、Linuxに比べると何倍もかかったような気がする。
 再起動後は、何も設定されていないと外部からの入力を受けて付けないため、リモートでの操作は行うことができなくなるので気を付ける必要があるようである。

確 認
 起動時に次のメッセージが出ることで設定を確認した。

IP packet filtering initialized, divert enable, logging disabled

(3)各種ファイルの編集
 ・/etc/services の編集 (要 root 権限)
  ディレクトリ /etc にある services に以下の一行をファイルの一番最後に記入する。

  natd6668/divert # Network Address Translation socket

 これを記述することで、全てのパケットを6668番ポートに通して、そこで NATD が 認識して NAT を行うことができるようになる。

 ・/etc/rc.conf の編集 (要 root 権限)
  ディレクトリ /etc の中にある rc.conf の一部を書き換える。

  gateway_enable="YES"
  router_enable="NO"

 ・natd.cf の作成 (要 root 権限)
  ディレクトリ natd_1.11/sample の中にあるファイル natd.cf.sample を /etc の中に natd.cf という名前でコピーする。

  # cp natd_1.11/sample/natd.cf.sample /etc/natd.cf

  そして /etc に移動してその中身を編集します。

  log no
  interface ed0
  port 6668

 一つ目の項目は、とりあえず何かあったら見ることができるようにログファイル alias.log を /var/log の中に作るように指示する部分であるが、 私はハードディスクのことを考えnoとしている。
 二つ目の項目ではインターフェースの指定で外部側のカードであるed0を指定。
 三つ目の項目は/etc/services に利用を 宣言したポート番号6668を指定。
 これら以外はデフォルトのままで OK のようです。
 以上で設定は終了ですが、最後にもともとこの natd.cf.sample の述ミスである

same_port yes に same_ports yes とs を追加しておきます。

 ・natd.sh の作成 (要 root 権限)
 /usr/local/etc/rc.d の中に 起動用のファイルnatd.shを作成し、

  #! /bin/sh
  # Start up Network Address Translation Daemon (natd)
  /sbin/ipfw -f flush
  /sbin/ipfw add divert 6668 ip from any to any via ed0
  /sbin/ipfw add pass all from any to any
  /usr/local/sbin/natd -f /etc/natd.cf;
  echo 'Network Address Translation Daemon (natd)';

と入力する。詳細はこちらを参照して下さい。次にこのファイルを実行モードに換えます。

  # chmod +x natd.sh

再起動して、起動時の画面に以下のようなコメントがでれば成功です。

  Network Address Translation Daemon (natd)

これでもう NAT として利用できるようになっているようです。

確 認

  DHCPサーバー−−−−PC98Nd−−−−VAIO
                ed0     fe0

と接続して、DHCPクライアントの確認に使ったLinuxのサーバーを起動した後、PC98Ndを起動し、下の方法でネットワーク関係を設定したWindowsによるクライアントであるVAIOノートで telnet を立ち上げ、

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

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

 さらにVAIOのDOS窓から

ping 192.168.1.1

として、応答を確認する。これでNATDが動作していることが確認できた。
さらにIPアドレスの確認のため

pc98nd# ifconfig -a
sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 552
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    inet 127.0.0.1 netmask 0xff000000
ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    inet 192.168.1.6 netmask 0xffffff00 broadcast 192.168.1.255
    ether 00:00:e8:25:62:91
fe0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    inet 192.168.0.100 netmask 0xffffff00 broadcast 192.168.0.255
    ether 00:00:0e:40:99:56

で、DHCPで割り付けられたIPアドレスが192.168.1.6であることが分かる。
○PPP自動起動の中止

 これまで、PPPの自動起動を設定していた /etc/rc.local の中のPPP起動部分をコメントアウトする。
 この結果は、起動時のメッセージに ppp という表示がないことで確認できる。

○クライアントの設定

 基本的にpppで使っていた時と同じである。内容は、

 ・Windowsマシン
  「コントロールパネル」−−「ネットワーク」−−のLANカードのプロパティで

  IPアドレス 192.168.0.1〜3、サブネットマスク 255.255.255.0
  DNSを使う。 ホスト 各パソコン名 ドメイン anabuki.or.jp DNSサーバー 192.168.0.100
  ゲートウェイ 192.168.0.100

 ・Linuxマシン
  /etc/rc.d/rc.inet1 で GateWay=192.168.0.100
  resolv.conf で nameserver 192.168.0.100

で安定して動いている。書籍やインターネットの資料には GateWay だけでよいとの記述も見受けられるが、何故か私の環境ではDNSの指定が無くては ping で UnKnown Host というメッセージが出て動作しなかった。理由をご存じの方がおられたら、どうか教えていただきたい。

確 認
 NATDでパケットが中継できていることは前で確認できているので、ここではケーブルモデムを接続して本番で動作させてみる。
 念のため ifconfig -a でIPアドレスを確認する。CATVからのIPアドレスである 210.142.xxx.xxx がセットされていればOKである。
 次にDNS関係を設定する。 でDNSの設定が出来るので、windowsのクライアントからNetscapeを立ち上げ適当なホームページにアクセスする。また、FTPサイトにもアクセスする。さらに、Telnetも動かしてみる。

c:>telnet r2.niftyserve.or.jp

これで応答が帰ってくればOKである。後は、どの端末からも自由にインターネットが使えるはずである。

 以上がFreeBSDによるルーターの実現である。これまでのところこの設定で何の支障もなく動いているが、これは私の環境でのことであり、環境が異なる場合の動作を保証するものではないことに留意いただきたい。