概要
仮想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だけの仮想ネットワークが構築できたはずです。