在《虚拟化与云计算系列文章:四、启动一个xen半虚拟化PV客户机》中,使用了网络源来安装PV Guest OS,今天按照此方法再一次安装时,发现新的环境中,Xen Host网络没配好,导致虚拟机无法访问外网,也就无法自动下载镜像和安装Guest系统。上次没有网络配置这一步的原因可能是,Host因为安装有Libvirt,所以存在一个直接可用的virbr0,而且libvirt自动配置好了iptables。然而这次是新安装的Host系统,网络环境需要一步一步手动配置。
参考: http://wiki.xenproject.org/wiki/Network_Configuration_Examples_(Xen_4.1%2B)#Red_Hat-style_bridge_configuration_.28e.g._RHEL.2C_Fedora.2C_CentOS.29
以CentOS6/Redhat6 Host为例,假设Host端有两个网卡eth0和eth1,并且eth1连接外网,eth0空闲。
Bridge方式:
1)关闭NetworkManager服务
# chkconfig NetworkManager off
# chkconfig network on
# service NetworkManager stop
# service network start
2)设置ifcfg配置文件
为了在RedHat类系统中创建一个桥接网络配置,需要在/etc/sysconfig/network-scripts/目录下设置两个ifcfg文件:
ifcfg-eth0
DEVICE=eth0
HWADDR=00:16:76:D6:C9:45
ONBOOT=yes
BRIDGE=xenbr0
NM_CONTROLLED=no
ifcfg-xenbr0自动获取IP方式:
DEVICE=xenbr0
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes
DELAY=0
NM_CONTROLLED=no
ifcfg-xenbr0静态IP方式,这里我们采用效仿libvirt给xenbro设置一个静态IP192.168.122.1:
DEVICE=xenbr0
TYPE=Bridge
BOOTPROTO=static
BROADCAST=192.168.122.255
IPADDR=192.168.122.2
NETMASK=255.255.255.0
ONBOOT=yes
DELAY=0
NM_CONTROLLED=no
重启网络
# service network restart
3)修改iptables允许bridge转发
注:在配好NAT方式后,发现即便iptables中没有这个配置也是可以的。domU之间可以互相Ping通,也可以访问外网。所以这一步可以省略。
# echo "-I FORWARD -m physdev --physdev-is-bridged -j ACCEPT" > /etc/sysconfig/iptables-forward-bridged
# lokkit --custom-rules=ipv4:filter:/etc/sysconfig/iptables-forward-bridged
# service iptables restart
在没有设置NAT方式的iptables和sysctl.conf的情况下,仅设置允许bridge转发,当虚拟机的配置是bridge=xenbr0时,虚拟机之间现在已经可以互通了。但是不能访问外网。
NAT方式:
配置iptables的Masquerading
比如我的网卡设置如下:
虚拟机设置192.168.122.x网段,默认网关为192.168.122.1,因此虚拟机到xenbr0(eth0)打通,通过配置MASQUERADE,将192.168.122.x的数据包伪装来经由eth1访问外网,并且还要设置FORWARD。
# iptables -t nat -A POSTROUTING -o eth1 -s 192.168.122.0/24 -j MASQUERADE
下面的省略也可以。。。
# iptables -A FORWARD -d 10.10.10.0/24 -o xenbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -s 10.10.10.0/24 -i xenbr0 -j ACCEPT
# iptables -A FORWARD -i xenbr0 -o xenbr0 -j ACCEPT
# iptables-save > /etc/sysconfig/iptables
# service iptables restart
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p /etc/sysctl.conf
精简后的iptables只有MASQUERADE
domU之间可以互通,domU也可以访问外网。。
5)查看验证
经过上述4步,Host端的网络基本配置完毕,可以重启一下,查看ifconfig和brctl如下:
用xl create -c /etc/xen/虚拟机配置文件 创建一个虚拟机(参考系列文章第四篇,虚拟机网络配置为vif = [ 'bridge=xenbr0' ]),再brcrl查看:
如果Host上没有运行dhcpd,则需要为虚拟机手动分配和xenbr0在一个网段的IP地址。
一般情况下,只要Host和Guest能够互ping通,则IP和网桥都是没太大问题的,主要的设置可能就是防火墙转发。