— NetBSD — 1 min read
NetBSD 9.0からリリース版で導入された新しいハイパーバイザー NVMM (NetBSD Virtual Machine Monitor) をNetBSD 9.1/amd64で動かしてみる。
基本的には以下の情報を参考。
NVMMを有効にするため、カーネルモジュールをロードする。
$ modload nvmm$ dmesg|grep nvmmnvmm0: attached, using backend x86-vmx
起動時に有効にするには、/etc/modules.conf
にnvmm
と設定しておく。
qemu
をpkgsrcからインストール。最新のpkgsrcにはNVMM対応がマージされている。
$ pkgin install qemu
グループnvmm
で動作するようにパーミッションを変える。
$ chown root:nvmm /usr/pkg/bin/qemu-system-x86_64$ chmod g+s /usr/pkg/bin/qemu-system-x86_64
-accel nvmm
のオプション付きでqemuを起動。
FreeBSDで配布されているqcow2
のディスクイメージファイルをそのまま使ってみる。
$ qemu-system-x86_64 -smp 4 -m 8G FreeBSD-12.2-RELEASE-amd64.qcow2 -accel nvmmNetBSD Virtual Machine Monitor accelerator is operational
無事、FreeBSDが起動。試してないが、Windows 10も動作するとのこと。
VMをtap(4)インタフェース経由で接続し、 ホスト側のNetBSDをルータとして動作させることにより、 VMから外部のネットワークと通信可能となる。
NetBSD 6.0から導入されたパケットフィルタ NPF (NetBSD Packet Filter)を使って、 ゲストのVM側からホストのWAN側を経由して通信ができるようにする。
NPFはパケットフィルターに加え、ステートフルインスペクションやNATも可能。
/etc/ifconfig.tap0
を設定し、tapインタフェースを使えるようにする。
NetBSDではtap0
にIPアドレスをふることができる。ルータのLAN側ポートのアドレスと考えると分かりやすい。
/etc/ifconfig.tap0
には以下を設定。
1up2inet 192.168.0.1 netmask 255.255.255.0
tap0
からWAN側にルーティングできるように、/etc/sysctl.conf
にnet.inet.ip.forwarding=1
を加える。
1# Enable Packet Forwarding2net.inet.ip.forwarding=1
再起動することにより、パケットフォワーディングが有効となる。
NPFでVM側からWAN側に出られるように、NAPT (IPマスカレード)の設定をする。
NPFを有効にするには、/etc/rc.conf
にnpf=YES
を加え、
/etc/npf.conf
にルールを設定する。
VM側のネットワークアドレスを192.168.0.0/24
、ゲートウェイアドレスを192.168.0.1
VM(ゲスト)のIPアドレスを192.168.0.2
とする。
WAN側のインタフェースをiwn0
とする場合、/etc/npf.conf
の例は以下。
1$ext_if = inet4(iwn0)2$int_if = inet4(tap0)3$localnet = { 192.168.0.0/24 }45map $ext_if dynamic $localnet -> $ext_if67group "external" on $ext_if {8 pass stateful out final all9 pass stateful in final all10}1112group "internal" on $int_if {13 pass in final all14 pass out final all15}1617group default {18 pass final on lo0 all19 block all20}
ゲストとなるVMで、ゲートウェイアドレスを192.168.0.1
に設定、DNSアドレスを1.1.1.1
や8.8.8.8
などの
パブリックDNSを設定することで通信可能となる。