设置Xen domU虚拟机网络使其连接外部机器

 


virt-manager 安装完全虚拟化的 Xen 虚拟机系统,

与主机网络连接方式采用 "Virtual network"方式,设备选择default,IP配置成静态的。

安装完毕,不能与主机相连,于是将 IP 设置 DHCP 的,能与主机相互 ping 通,但不能和外部机器(如hdfs05: 10.10.111.5)连接。

查看虚拟机配置文件中联网方式,vif选项如下:

vif = [ "mac=00:16:3e:6b:dc:0d,bridge=virbr0" ]

而之前安装的一台 para-virtualized 虚拟机采用的是 "Shared physical device"模式上网,却能正常与主机和主机之外的机器连通。于是查看其配置文件,发现 vif选项如下:
vif = [ "mac=00:16:3e:7a:66:ed,bridge=xenbr0,script=vif-bridge" ]

于是也同样设置完全虚拟化得机器的联网方式,在 virt-manager 中再添加一块网卡,使用"Shared physical device"模式上网,桥接到 xenbr0,此时虚拟机配置文件中 vif 选项变为,
vif = [ "mac=00:16:3e:69:c1:2e,bridge=xenbr0", "mac=00:16:3e:6b:dc:0d,bridge=virbr0" ]
增加了字符串 "mac=00:16:3e:69:c1:2e,bridge=xenbr0",虚拟机增加了一块网卡。

启动虚拟机后,出现了两块网卡 eth0 和 eth1,配置它们的IP为静态IP。
eth1是新添加的网卡,

[root@vm03-full-glnode04 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:16:3E:6B:DC:0D 
          inet addr:10.10.97.134  Bcast:10.10.255.255  Mask:255.255.0.0
          inet6 addr: fe80::216:3eff:fe6b:dc0d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:461 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:138 (138.0 b)  TX bytes:77516 (75.6 KiB)
          Interrupt:185 Base address:0x8100

eth1      Link encap:Ethernet  HWaddr 00:16:3E:69:C1:2E 
          inet addr:10.10.97.144  Bcast:10.10.255.255  Mask:255.255.0.0
          inet6 addr: fe80::216:3eff:fe69:c12e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11091 errors:0 dropped:0 overruns:0 frame:0
          TX packets:317 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1348118 (1.2 MiB)  TX bytes:45546 (44.4 KiB)
          Interrupt:177 Base address:0x6000

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1422 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1422 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1968508 (1.8 MiB)  TX bytes:1968508 (1.8 MiB)

再次测试和外部机器hdfs05是否能连通,结果发现还是不能连通;于是我 ifdown eth0,再测试一下,发现连接成功了,然后我继续 ifup eth0,连接仍然成功,但是 service  network restart 重启网络,却不能再成功连接了。所以问题出在 eth0 这,于是我在 virt-manager 中删掉了网卡eth0,或者修改 vif 选项,修改为以下形式:
vif = [ "mac=00:16:3e:6b:dc:0d,bridge=virbr0" ],
然后修改 /etc/sysconfig/network-scripts/ifcfg-eth1,将其命名为 eth0,设备名字也修改为 eth0。
重新启动机器,只剩下网卡 eth0,和外部机器能正常连接。

总结:

使用半虚拟化或者完全虚拟化创建虚拟机系统时,若想虚拟机能和主机正常连通并且能和主机之外的机器正常连通,需要使用"Shared physical device"模式,桥接到xenbr0来上网。


附:

虚拟机配置文件

[root@glnode04 ~]# cat /etc/xen/vm03-CentOS-5.5-full
name = "vm03-CentOS-5.5-full"
uuid = "85a4defd-355f-e8fa-513e-7bd75f0526cd"
maxmem = 2048
memory = 512
vcpus = 4
builder = "hvm"
kernel = "/usr/lib/xen/boot/hvmloader"
boot = "c"
pae = 1
acpi = 1
apic = 1
localtime = 0
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
device_model = "/usr/lib64/xen/bin/qemu-dm"
sdl = 0
vnc = 1
vncunused = 1
keymap = "en-us"
disk = [ "file:/local/Xen_zkl/VM/vm03-CentOS-5.5-full/vm03-CentOS-5.5-full.img,hda,w", ",hdc:cdrom,r" ]
vif = [ "mac=00:16:3e:69:c1:2e,bridge=xenbr0" ]
serial = "pty"

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐