OpenWRT(x86)を使ってVirtualBoxの仮想ネットワークのルーターを作る

2月、3月限定でネットワーク周りの仕事をしています。その中で「Raspberry Piを使ってルーターを作る」という作業があって、そのときに「OpenWRT」を使ったのですが、これが非常にいいです。 SDカードにイメージを書き込み、Raspberry Piを起動すればルーターになります。
それだけではなく、設定や管理がコマンドとWeb UIの両方でできたり、パッケージを使ってアプリを追加するとルーター内だけでFreeRadiusを使った認証が完結したり、VLAN切ったり、ルーターでやりたいほとんどの事がこれ一つでできます。
それでとても気に入ったOpenWRTですが、VirtualBoxでネットワークの検証をするときも使えるのでは?と思って設定した記録です。
イメージ
この画像の「OpenWRT」と書いてある部分です。外側(OpenWRTのWAN)がVirtualBoxのNATでホストのNICにつながって、内側(OpenWRTのLAN)はVirtualBoxの内部ネットワークIntnetでつながっている想定です。これだけだとOpenWRTに内側からしかアクセスできないので、ホストオンリーアダプターを使って直接アクセスできるようにしているのがポイントです。
ちなみにこの図は、LibreOffice DrawとVRT Network Equipment Galleryを使って書きました。
VirtualBoxの設定
OpenWRTのサイトにドキュメントがあるので、それも参考にするといいと思います。
OpenWRTのサイトにはx86用のイメージも置いてあるので、ダウンロードします。使ったイメージは、こちらのcombined-ext4.img.gzを使います。
VirtualBoxのvdiイメージに変換します。
$ gunzip openwrt-19.07.6-x86-64-combined-ext4.img.gz
$ vboxmanage convertfromraw --format VDI openwrt-19.07.6-x86-64-combined-ext4.img openwrt.vdi
VirtualBoxのマシンを作成します。このときに「仮想ハードディスクを追加しない」にしておきます。
- 名前: (適当に)
- タイプ: Linux
- バージョン: Linux 2.6/3.x/4.x(64-bit)
- メモリー: 256MB
- ハードディスク: 仮想ハードディスクを追加しない
作成したらvdiに変換したイメージを設定フォルダに移動して仮想マシンにHDDを追加します。
IDEは不要なので削除して、SATAコントローラーの下に作成したvdiイメージを追加します。SATAコントローラーの「ホストのI/Oキャッシュを使う」には必ずチェックを入れてください。タイプは「AHCI」にしていますが「Virtio SCSI」のほうが良いと思います。
ネットワークアダプターの設定
ネットワークアダプターの追加の前に、後で使うホストオンリーアダプターの設定を確認してから追加します。
VirtualBoxの[ファイル]→[ホストネットワークマネージャー]を開き、デバイスがあるか確認します。なければ作成してください。
ネットワークアダプターは3つ作ります。アダプター1は内側(LAN)用の「内部ネットワーク」、アダプター2は外側(WAN)用の「NAT」、アダプター3はホストからのOpenWRTアクセス用の「ホストオンリーアダプター」です。 設定は特に難しいところも無いのでスクリーンショットを参考にしてください。
OpenWRTの設定
これで仮想マシンを起動しますが、OpenWRTには内側(内部ネットワーク)からしかアクセスできません。ホストからOpenWRTにアクセスして設定を変更したいので、ホストオンリーアダプターでアクセスするための設定をします。
OpenWRTの仮想マシンを起動してメッセージが止まればEnterキーを押します。OpenWRTの初期状態はパスワードなしでrootにアクセスできるので、ホストオンリーアダプターでアクセスするNICの設定を追加します。
OpenWRTの設定は/etc/config/networkに以下の設定を追記します。
# vi /etc/config/network
config interface 'mgr'
option ifname 'eth2'
option proto 'static'
option ipaddr '192.168.56.3'
option netmask '255.255.255.0'
設定ではIPアドレスを192.168.56.3に設定していますが、ホストネットワークマネージャーで設定してある192.168.56.1とDHCPで使われる192.168.56.2を除いて192.168.56.0/24の範囲なら大丈夫です。
設定を追記したらネットワークをリロードします。
# service network reload
これでホストからもアクセスできるようになったので、ブラウザで設定した192.168.56.4にアクセスしたり、SSHでアクセスできます。
まとめ
これでVirtualBoxの内部ネットワークをつなぐルーターができたので、別の仮想マシンを作ってネットワークアダプターを「内部ネットワーク」にすればIntnet内のマシンが増やして実験できます。よかったよかった。