libvritのbridge

どうもご無沙汰してます、ショーイチです。
相当いまさらですが、libvirtにおけるbridge構成の構築の仕方をまとめてみました(よく忘れるので)。

環境

OS Ubuntu Server Edition 11.04
インストール時 SSHと仮想環境のみチェック
NIC 2枚挿してます
ネットワーク構成

f:id:shoichimasuhara:20110725211902p:image
ざっとこんな感じです。NICを2枚挿してるところがちょっと特別。いまさら2枚挿さなくてもいけるんじゃね?とか思ってやったら案の定いけた。失敬失敬。

構築

ブリッジ作成とか

コマンドでできるんですが、/etc/network/interfacesに書いてしまいましょう。

auto br0
iface br0 inet static
  address 192.168.1.2             # ブリッジのIP
  netmask 255.255.255.0
  broadcast 192.168.1.255
  pre-up ifconfig eth1 down
  pre-up ifconfig eth1 0.0.0.0 promisc up
  pre-up brctl addbr br0          # ブリッジの作成
  pre-up brctl addif br0 eth1     # ブリッジへeth1を登録
  pre-up ifconfig eth1 up
  post-down ifconfig eth1 down
  post-down brctl delif br0 eth1

これで再起動などしてifconfigを実行するとこんな感じ。

root@localhost:~# ifconfig
br0       Link encap:Ethernet  HWaddr 6c:62:6d:0d:98:ff  
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::6e62:6dff:fe0d:98ff/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:694 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2319 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:113815 (113.8 KB)  TX bytes:199378 (199.3 KB)

eth0      Link encap:Ethernet  HWaddr 00:0a:79:ba:35:b8  
          inet addr:192.168.0.2  Bcast:192.168.1.255  Mask:255.255.255.0
### snip ###
eth1      Link encap:Ethernet  HWaddr 6c:62:6d:0d:98:ff  
          inet6 addr: fe80::6e62:6dff:fe0d:98ff/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:175116 errors:0 dropped:0 overruns:0 frame:0
          TX packets:96415 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:220627162 (220.6 MB)  TX bytes:11663257 (11.6 MB)
          Interrupt:43 Base address:0xe000 

lo        Link encap:Local Loopback  
### snip ###

br0が出来てて、eth1がUP BROADCAST RUNNING PROMISC MULTICASTとなっていることが確認できます。

仮想マシン構築

ま、よしなに仮想マシンをvirshやvirt-managerで作ります。これに関しては本題ではないので割愛。

仮想マシンの定義ファイル変更

libvirt仮想マシン定義XMLのdevicesの中に以下を追加、または既存のネットワークインターフェースの記述と書き換えます。

<interface type='bridge'>
  <source bridge='br0'/>
  <model type='virtio'/>
</interface>

んでもって変更したのでdefine、起動。

root@localhost:~# virsh define /etc/libvirt/qemu/hoge.xml
root@localhost:~# virsh start hoge

確認

ifconfigを確認するとvnet0というtapデバイスが作成されていることが確認できます。

root@localhost:~# ifconfig
br0       Link encap:Ethernet  HWaddr 6c:62:6d:0d:98:ff  
### snip ###
eth0      Link encap:Ethernet  HWaddr 00:0a:79:ba:35:b8  
### snip ###
eth1      Link encap:Ethernet  HWaddr 6c:62:6d:0d:98:ff  
### snip ###
lo        Link encap:Local Loopback  
### snip ###
vnet0     Link encap:Ethernet  HWaddr fe:54:00:fc:13:bb  
          inet6 addr: fe80::fc54:ff:fefc:13bb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:84005 errors:0 dropped:0 overruns:0 frame:0
          TX packets:137864 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:10593470 (10.5 MB)  TX bytes:186869322 (186.8 MB)

ブリッジを確認するとvnet0もbr0へ登録されていることが確認できます。

root@localhost:~# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.6c626d0d98ff	no		eth1
							vnet0

仮想マシンのIPの設定

virshのコンソールかVNCなどから仮想マシンのifconfigまたは/etc/network/interfacesを編集して設定します。

以上で終わり〜。これをレンサバ屋さんがやったら同一空間のIP設定しまくりだよね、と。
変なところ多分あると思うんでコメントでツッコミ入れてください。