FreeBSD 5.3 で VLAN と FW と NAT

研究室の FireWall、ついに完全に死にました。
っていうか、金曜日の午前中には再起動で何とか生き返ったけど、夕方には完全に起動もしなくなったとかいう話。
んで、土曜日の夜11時半までかけて、同じラックに入っている FreeBSD 5.3 が動いているマシンを、FW の代わりに臨時で設定しました。
ということで、今後のために作業メモを残しておく。

その1 VLAN の設定

FireWall は、インターネット、DMZ、LAN の 3 つのポートが付いているんですが、FreeBSD マシンの NIC は 2 つ。仕方が無いので、1つをインターネット側の口にして、DMZ と LAN は tagged VLAN を使って 1 ポートで済ませることにする。
ということで、まずはネットワークスイッチの設定をしてから、FreeBSD のネットワークを設定。とはいっても、rc.conf に書くだけなんですけどね。

ifconfig_bge1="up"
cloned_interface="vlan0 vlan1"
ifconfig_vlan0="192.168.0.1 netmask 255.255.255.0 vlan 10 vlandev bge1"
ifconfig_vlan1="192.168.1.1 netmask 255.255.255.0 vlan 20 vlandev bge1"

その2 NAT 用の alias を作る

研究室の FireWall は、LAN 内に smtp や pop、imap、web サーバが複数台ずついる関係で、4つほどアドレスを持ってました。ということで、インターネット側の LAN の口に、alias を使ってアドレスを複数割り当ててゆきます。

ifconfig_bge0="172.16.0.1 netmask 255.255.0.0"
ifconfig_bge0_alias0="172.16.0.2 netmask 255.255.255.255"
ifconfig_bge0_alias1="172.16.0.3 netmask 255.255.255.255"
:

その3 ipfw と natd の設定

まずは、以下のオプションを付けてカーネルの作り直し。

options IPFIREWALL
options IPDIVERT

それから rc.conf に、ipfw と natd の設定を書く。

gateway_enable="YES"
firewall_enable="YES"
firewall_type="open"
natd_enable="YES"
natd_interface="bge0"
natd_flags="-f /etc/natd.conf"

firewall_type は NAT を使うだけなら open にしておけばいい。自分で設定を書くなら、設定ファイルのファイル名を書く。
natd_interface は、bge0 のようにインタフェース名を書けば natd の -interface オプションに、IP アドレスを書けば -aliase_address オプションに渡される。
natd_flags で、/etc/natd.conf を読むように指定。ちなみに、natd.conf で interface や alias_address を書いてあっても、rc.conf に natd_interfaceを書いておかないと、ipfw の設定がされないので NAT が利きません。ちょっとこれではまったよ〜 ;_;
natd.conf の書き方は man natd を見れば分かる。

困ったときは

/etc/rc.d/ipfw、/etc/rc.d/natd、/etc/rc.firewall、man ipfw、man natd を読めば、たいていのことは分かるはず^^;