vmware上のCentOSに仮想化ソフトxenをインストールする(4)ネットワークの構築

概要

仮想OS用のネットワークの構築方法です。

libvirtを使用する方法とxenbrを使用する方法があります。
libvirtはxenをインストールするときに付随する仮想アダプターです。
ドメイン0でifconfigをするとvirbr0というインターフェイスがいつの間にか追加されていることが確認できます。

[root@centos ~]# ifconfig
・・・
virbr0    Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
・・・

libvirtはbrctlコマンドで管理できますが、
デフォルトの192.168.122.0のネットワークを仮想OS用ネットワークにするだけなら、
新しくコマンドを覚える必要はありません。
また、virbr0経由でドメインUを外部に接続することも簡単にできます。

一方、xenbrは名前の通りxenに付随するブリッジです。
こちらもxenをインストールするとインターフェイスが追加されています。

xenbr0    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1

ここで重要なことは、
よく見るとわかるように同じブリッジであるはずですが、
virbr0には192.168.122.1というIPが割り振られていますが、
xenbr0にはIPがありません。xenbr0はeth0と仮想OSを接続するだけの名前の通りブリッジです。

そのためvirbr0を使用して仮想OS用のネットワーク構築することは非常に簡単ですが、
xenbrを使用して新しく仮想OS用のネットワークを構築するには、
新しく仮想OS用インターフェイスを作成してそこに新しいxenbrを接続してやる必要がります。

必然的にxenbrを使用して新しい仮想OS用ネットワークを構築することは手間がかかります。
しかし、virbrをの管理にはbrctlコマンドが必要ですので、
全く新しいネットワークを構築するとなるとどちらも同様の手間がかかります。

なお、私にはxenbrを使用した仮想OS用ネットワークを外部インターネットに接続する方法はよくわかりませんでした :x001:
(あまり調査しなかったということで・・・)

libvirtを使用したネットワーク構築方法

デフォルトの192.168.122.0ネットワークを仮想OS用ネットワークにします。
ドメイン0はデフォルトの192.168.122.1とします。

ドメイン0で、仮想OSの設定ファイルを編集します。
これはドメイン0がxen、ドメインUがxen01という名前の場合です。
bridgeをlibvirtの仮想アダプター名に変更します。

[root@centos xen]# vi /etc/xen/xen01
name = "xen01"
uuid = "d25e66a4-9887-8955-29ba-855d4213b4aa"
maxmem = 256
memory = 256
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
disk = [ "tap:aio:/var/lib/xen/images/xen01.img,xvda,w" ]
vif = [ "mac=00:16:3e:4a:3f:89,bridge=xenbr0,script=vif-bridge" ]
  ↓
name = "xen01"
uuid = "d25e66a4-9887-8955-29ba-855d4213b4aa"
maxmem = 256
memory = 256
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
disk = [ "tap:aio:/var/lib/xen/images/xen01.img,xvda,w" ]
vif = [ "mac=00:16:3e:4a:3f:89,bridge=virbr0,script=vif-bridge" ]

あとはドメインUを再起動するだけです。

//ドメインUのシャットダウン
[root@centos xen]# xm shutdown xen01

//ドメインUを起動
[root@centos xen]# xm create -c xen01

//ドメインUのIPは192.168.122.xxxの適当なIPをふる。
//defautl Gatewayには、ドメイン0のvirbr0のIPを指定しておけば外部とのアクセスも簡単です
[root@xen01 ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.122.0   *               255.255.255.0   U     0      0        0 eth0
169.254.0.0     *               255.255.0.0     U     0      0        0 eth0
default         192.168.122.1   0.0.0.0         UG    0      0        0 eth0

xenbrを使用したネットワークの構築方法

まずは仮想OS用のネットワークのインターフェイスを作成する必要があります。
vmware上で複数のNICのあるかのように見せるべく、新しくダミーインターフェイスを作成します。
そのダミーインターフェイスと、これまた新しく作成するxenbr1を関連付けます。

まずはドメイン0の/etc/modprobe.confを追記します。

[root@centos ~]# vi /etc/modprobe.conf
alias eth0 netloop
alias scsi_hostadapter mptbase
alias scsi_hostadapter1 mptspi
alias scsi_hostadapter2 ata_piix
alias peth0 pcnet32
alias dummy0 dummy
options dummy numdummies=1

次にダミーインターフェイス用のifcfgファイルを作成します。
ここで設定するIPが、仮想OS用のネットワークになります。

[root@centos ~]# vi /etc/sysconfig/network-scripts/ifcfg-dummy0
DEVICE=dummy0
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
IPV6INIT=no
PEERDNS=yes
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=192.168.100.1
ARP=yes

そしてドメイン0を再起動します。
するとifconfigでダミーインターフェイスが作成されていることを確認できます。

[root@centos ~]# ifconfig
dummy0    Link encap:Ethernet  HWaddr 26:2D:F3:D6:2B:43
          inet addr:192.168.100.55  Bcast:192.168.100.255  Mask:255.255.255.0
・・・

次に、仮想ブリッジxenbr1を作成します。
xenbrはxendの起動時に/etc/xen/scripts/network-bridge
というスクリプトで作成されます。
そこでnetwork-bridgeを編集して、作成したダミーインターフェイスにxenbr1を関連付けるようにします。

//もとのファイルをコピー
[root@centos ~]# cp /etc/xen/scripts/network-bridge /etc/xen/scripts/network-bridge.org
//network-bridgeを下記内容にする
[root@centos ~]# vi /etc/xen/scripts/network-bridge
#!/bin/sh
# Exit if anything goes wrong
set -e

# First arg is operation.
OP=$1
shift

script=/etc/xen/scripts/network-bridge.org ←コピーしておいた元のファイル

case ${OP} in
    start)
        $script start vifnum=0 bridge=xenbr0 netdev=eth0
        $script start vifnum=1 bridge=xenbr1 netdev=dummy0
        ;;
    stop)
        $script stop vifnum=0 bridge=xenbr0 netdev=eth0
        $script stop vifnum=1 bridge=xenbr1 netdev=dummy0
        ;;
    status)
        $script status vifnum=0 bridge=xenbr0 netdev=eth0
        $script status vifnum=1 bridge=xenbr1 netdev=dummy0
        ;;
    *)
echo 'Unknown command: ' ${OP}
echo 'Valid commands are: start, stop, status'
exit 1
esac

xendを再起動するかnetwork-bridgeを実行します。

//xendを再起動
[root@centos scripts]# service xend restart
//それでもだめならnetwork-bridgeを実行
[root@centos scripts]# sh network-bridge start

するとifconfigでxenbr1が作成されていることを確認できます。
これはnetwork-bridgeで設定したように、ダミーインターフェイスのブリッジとして
仮想OSと連携することができます。

[root@centos scripts]# ifconfig
・・・
xenbr1    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:29 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:9054 (8.8 KiB)  TX bytes:0 (0.0 b)
・・・

最後にドメインUのブリッジの設定を、ドメイン0に新しく作成したxenbr1にします。
ドメインUのIPは、当然xenbr1に接続しているダミーインターフェイスと同じネットワークにします。
ここから先はlibvirtと同じです。

[root@centos scripts]# vi /etc/xen/xen01
name = "xen01"
uuid = "d25e66a4-9887-8955-29ba-855d4213b4aa"
maxmem = 256
memory = 256
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
disk = [ "tap:aio:/var/lib/xen/images/xen01.img,xvda,w" ]
vif = [ "mac=00:16:3e:4a:3f:89,bridge=xenbr1,script=vif-bridge" ]

上記ファイルを編集したら、ドメインUを再起動してください。
もちろんドメインUのIPを変更したら、ドメインUのネットワークも再起動してください。

これで、ドメイン0とドメインUだけの仮想ネットワークが構築できたはずです。

タイトルとURLをコピーしました