Xenで1台でルータ・DMZ・ファイアウォール・内部クライアントを構築

仕事でやったネタだけど、こっちで紹介。次の勉強会まで時間空いてるし。dom0にはNetBSDを使用。dom0自体は内部クライアントネットワークからしか見えなくする。
つまり

[外部ネットワーク]−[FireWall]−[Client]
            |
           [DMZ]

となる。このマシン3台を全てXendomUで提供する。つまり究極のリッチサーバ(わら
参考にしたサイト:http://www.akaumigame.org/document/netbsd_xen.html

1)Xenのインストール

/usr/pkgsrc/xentools20

をインストールする。この後、

/usr/pkgsrc/xenkernel20

をインストールする。これでdom0カーネルがダウンロードされる。

2)grubのインストール
/usr/sysutils/grubをインストールして、grub-installでルートファイルシステムを持っているディスクにgrubをインストールする。なお、grubのコマンドなどは/grubにインストールされる。

3)カーネルのコピー

/usr/pkg/xen-kernel/xen.gz

を、/grubにコピーする。これがdom0カーネル

4)menu.lstの作成
grubの設定ファイル、/grub/menu.lstを作成する。

 default 0
 timeout 30
 
 title Xen
 kernel (hd0,0,a)/grub/xen-2.0.6.gz dom0_mem=131072
 module (hd0,0,a)/grub/netbsd-XEN0.gz console=pc
 

4)デバイスファイルの作成

cd /dev; sh MAKEDEV xen

5)再起動
ここでmenu.lstの設定間違えて起動しなくなってしまった。しょうがないのでFreeSbie落としてきてこれから起動して設定ファイル修正。
NetBSDFTPサイトの配布物からnetbsd-XEN0.gzを拾ってきてmoduleとして指定したけど起動しない。ので、またもやFreeSbieから起動して、gunzipでカーネルを展開してみる。なので

 module (hd0,0,a)/grub/netbsd-XEN0 console=pc

こうなる。これで起動したが、途中のRAID検出で固まった。
色々試してみたところ、VMWareの設定で、IDEとして作成したイメージファイルをSCSI扱いでmountしていたのがどうも怪しい。IDEに変更してそのまま起動。シングルユーザで

mount -rw /dev/wd0a /

して、/etc/fstabを修正してやっと起動。xendも立ち上がった。長かった・・・

6)domUで使用するディスクの作成
今回はdomUのOSとしてもNetBSDを使用する。また、バックアップ時の事を考えて、パーティションではなくディスクのイメージファイルを使用する。ddで空ファイルを作成する。

 dd if=/dev/zero of=nbsd1.img bs=1m count=5196 (5GBのドライブ作成)

NetBSDのインストールCDをVMWare内にFTPで取り込む。

 /usr/sbin/vnconfig -c vnd1 i386cd-3.0.iso

これをmountするのも微妙にはまった。正解は

 /sbin/mount -t cd9660 /dev/vnd1a /mnt

なのです。や、Xenで使う分にはmountしないでいいんだけど。

7)xen設定ファイル作成
/usr/pkg/etc/xen/nbsd1として作成する。とりあえず動作させようと思ったので、ネットワーク無しで作ってみた。

 kernel = "/grub/kernel/netbsd-INSTALL_XENU"
 memory = 128
 name = "nbsd1"
 cpu = -1
 nics = 1
 vif = [ 'mac=aa:00:00:50:02:f0, bridge=bridge0' ]
 disk = [ 'file:/usr/pkg/etc/xen/i386cd-3.0.iso,cd0a,r', 'file:/usr/pkg/etc/xen/nbsd1.img,wd0d,w' ]
 root = "/dev/wd0d"

とりあえずNICは適当に。CDからインストールしてから、後で設定しよう。

8)NetBSDインストール

 xm create nbsd1

で起動してインストールへ。CDのデバイス名がデフォルトでcd0aになってるので、これはxbd1に変更する必要がある。ちなみにdisk=で先に書いたほうがxbd1になって、後のほうがxbd0になる変な仕様。

9)ネットワーク
簡単に書くと、
ブリッジ作成->domU起動->dhclientでIP取得。

 # brconfig bridge0 add pcn0 add xvif9.0 up

でブリッジ作成して、domUを起動した後にdhclientでDHCPでのアドレスを取得出来た。

間違ってるとこ一杯あると思うしまだ目的に到達してないけど、とりあえず記載。