blog.monophile.net

コンピュータに関するメモ。

著者

山本一彰(Takaaki Yamamoto)

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 2015年にコンビネータ論理を基に計算完備な計算手法 "論理珠算"を開発し、 それを含む体系である"算道"を構成した。 その成果により、2016年に 第19回 文化庁メディア芸術祭 アート部門 新人賞 (文部科学大臣賞) を受賞。 現在はSRE(サイト信頼性エンジニア)として生計をたててている。

投稿

QEMU+KVM と仮想ブリッジとtapデバイスで FreeBSD の環境を用意してみる

概要

実験用の FreeBSD の環境が欲しかったため、QEMU+KVM の仮想環境で用意したときのメモ。 FreeBSD を立ち上げるためのメモだが、起動イメージを変えるだけで Linux も起動できるはず。 (最近、LXD のコンテナで Linux の環境は事足りてしまうから QEMU をあんまり必要にならなくなってしまった。)

仮想ホスト環境

  • OS: Ubuntu 16.04
  • CPU: Intel Core i5-4300M
  • 仮想環境: QEMU+KVM
  • 仮想ブリッジqbr: 10.0.0.254/24

仮想ゲスト環境

  • OS: FreeBSD11.1
  • CPU: 1コア
  • Mem: 1GB
  • NIC: 1つ (DHCPでアドレス(10.0.0.1-10.0.0.250)を配布1)

ツールののインストール

↓で QEMU と udhcpd をインストールしておく。

ホストネットワークの準備

まず sysctl でパケットを転送できるように設定しておく。

次に仮想ブリッジインターフェース qbr を作成する。

↑の結果↓のように qbr が設定されていることを確認できる。

iptablesでマスカレードの設定をする

↓のように iptables10.0.0.0/24 のプライベートアドレスはマスカレードするように設定する。

↑を実行した結果は↓のようになる。

qemu-ifup

QEMU で仮想ゲストを立ち上げる際にホスト側のネットワークインターフェースを調整するためのシェルスクリプト /etc/qemu-ifup を設定しておく。

↑はQEMU側が↓のように呼び出すことを想定されている。

DHCPサーバの設定

/etc/udhcpd.conf に↓を記述し、udhcpd を設定する。

interface qbr
start 10.0.0.1
end   10.0.0.250
opt dns 8.8.8.8
opt dns 8.8.4.4
opt subnet 255.255.255.0
opt router 10.0.0.254
opt domain local

今回は udhcpdsystemd を用いずに手動で起動する。

-fをつけることでフォアグラウンドでの動作になる。

仮想ゲストFreeBSD11.1の起動イメージのダウンロード

上記ページから AMD64(X86_64) の QCOW2 形式のイメージを選び、ダウンロードして unxz で伸長する。

仮想ゲスト FreeBSD11.1 の起動

tap デバイスの MAC アドレスをランダムに生成して、仮想マシンを起動する。

↑を実行すると↓のように起動画面が拝めた。

時間が経つと udhcpd がアドレスを配布したことがわかり、ログイン画面になる。 ちなみに、初期状態では root ユーザのパスワードは空の状態だった。

qemu-ifup で設定したとおり、起動時に QEMU によって作成された tap0 が qbr に接続されていた。

また、 curses ではなく、↓のようにして VNC 経由でコンソール画面を見ることも可能。

↑を実行すると 5900+ 起動したVNCの数だけポートがバインドされる。

5900番ポートがバインドされたので、↓のようにして仮想マシンの画面に接続することができる。

参考