LoginSignup
9
12

More than 5 years have passed since last update.

KVMでホストオンリーネットワークを作る

Last updated at Posted at 2014-10-10

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をコピーして作ると手っ取り早いと思います。

host_only.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ネットワークが出来ます。

9
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
12