vagrant-kvmを使ってVMを立ち上げるで書いたように、vagrant-kvm
を使ってVMを立ち上げたのですが、デフォルトだとvagrant
というNATネットワークに属することになります。
NATネットワークではなく、VirtualBoxで言うところのホストオンリーネットワークに属させたい、という場合のやり方を書こうと思います。
環境
- ホストOS
- Ubuntu 14.04
- ゲストOS
- ubuntu 14.04
- KVM
- virsh 1.2.2
- Vagrant 1.6.5
- vagrant-kvm 0.1.9
手順
KVMのネットワーク構成について
まず、KVMでVMを立ち上げた場合、どうなるかですが、特に何もせず立ち上げた場合はdefault
というNATのネットワークに属します。
今回はvagrantを使って起動したのでvagrant
というネットワークに属しています。
virsh
を用いて確かめることが出来ます。
$ virsh net-list
Name State Autostart Persistent
----------------------------------------------------------
vagrant active yes yes
このネットワークの詳細ですが、net-dumpxml
を使うと確かめられます。
$ virsh net-dumpxml vagrant
<network connections='1'>
<name>vagrant</name>
<uuid>5450c7ae-3535-42d5-8d02-cb4cdb901c01</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:df:98:c3'/>
<domain name='vagrant.local'/>
<ip address='192.168.123.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.123.100' end='192.168.123.200'/>
<host mac='52:54:00:04:70:15' name='nic-1412957878' ip='192.168.123.7'/>
</dhcp>
</ip>
</network>
dhcpでIPアドレスを配っているので立ち上げたVMの数だけが追加されます。
実体は/etc/libvirt/qemu/networks/vagrant.xml
です。
同じディレクトリにnetwork-name.xml
が存在します。
中身がほぼ空なので、これを使ってホストオンリーネットワークを作ろうと思います。
$ cd /etc/libvirt/qemu/networks
$ sudo cp network-name.xml host_only.xml
$ sudo vim host_only.xml
<network>
<name>host_only</name>
<uuid>934780ae-3534-4ec4-8338-fe6a8379cbc5</uuid>
<bridge name='host_only0' stp='on' delay='0'/>
<mac address='52:54:00:25:f1:c6'/>
</network>
# ネットワークを定義します
$ virsh net-define host_only
Network host_only defined from host_only.xml
# 自動で起動するように設定します
$ virsh net-autostart host_only
error: failed to mark network host_only as autostarted
error: Requested operation is not valid: cannot set autostart for transient network
autostartを実行しようとしたら怒られました。
よく分からなかったのですが、
https://www.mynakedgirlfriend.de/libvirt-cannot-set-autostart-for-transient-network/
を見るに、一度virsh edit
してからなら出来るみたいです。
$ virsh
# net-editでMACアドレスの部分を消す。
virsh # net-edit host_only
<network>
<name>host_only</name>
<uuid>934780ae-3534-4ec4-8338-fe6a8379cbc5</uuid>
<bridge name='host_only0' stp='on' delay='0'/>
</network>
Network host_only XML configuration edited.
virsh # net-autostart host_only
Network host_only marked as autostarted
あとはこれをVMにattachすれば完了です。
ホスト側にIPアドレスを自動で割り当ててくれたりはしないので、手動で割り振って下さい。
そのあたりは調べれば出ると思うので省略します。暇だったらいつか書きます。
おまけ:固定IPアドレスのNATネットワーク
DHCPじゃなくて固定IPアドレスのNATネットワークも欲しくなったので追記しておきます。
上記のhost_only.xmlと同様に、xmlを作成します。
vagrant.xml
をコピーして作ると手っ取り早いと思います。
<network>
<name>hostonly0</name>
<forward mode='nat'/>
<bridge name='hostonly0' stp='on' delay='0'/>
<domain name='hostonly0.local'/>
<ip address='192.168.124.1' netmask='255.255.255.0'>
</ip>
</network>
uuidやmac addressは消します。
nameやbridge nameを変えて、ip addressのネットワークを他と被らないように変更したあと、dhcpの部分を消すだけです。
これで上記同様にすれば固定IPアドレスのNATネットワークが出来ます。