写在开始之前:

       由于我这里的操作系统是centos 5.5 64位的,而我所参考的是刚刚发布的《Virtualization Guide - Guide to Virtualization on Red Hat Enterprise Linux 6》,若是其中有什么不合时宜的地方还请指正


libvirt支持的网络配置:


1、虚拟网络使用NAT


2、直接分配物理pci设备或者SR-IOV(single root I/O virtualization)供虚拟网络使用


3、桥接网络

主机配置 << ENDHOST
>标准安装libvirt之后,默认的虚拟网络(default virtual network)采用的是NAT,可以通过virsh net-list --all 查看:
加入默认的虚拟网络丢失之后,可以采用下面的方法重新加载和激活:

# virsh net-define /usr/share/libvirt/networks/default.xml 
 
 标记默认网络自动启动: 
 
 # virsh net-autostart default 
 
 启动默认网络: 
 
 #virsh net-start default

libvirt 将会增加iptables规则以便保证虚拟机可以正常使用网络,记得检查 /etc/sysctf.conf中的net.ipv4.ip_forwart是否开启。
<<ENDHOST

客户端配置<<ENDCLIENT
unix/linux一直沿用至今的“一切皆文件”的开发设计理念,为我们在配置的各种参数和性能时,提供了非常多的方便。这里将会说明如何查看和调整客户端的网络配置:

#cd /etc/libvirt/qemu/ 
 
 #vim centos.xml (centos.xml是我安装的虚拟机<-->客户端) 
 
 ........... 
 
 ........... 
 
 <interface> 
 
            <source network='default'/> 
 
 </interface> 
 
 ............. 
 
 ............

下面将会看到使用bridge时,该字段的变化。----:说明,可以在<interface>域内加入<mac address='xx:xx:...' />以便定义起mac地址,当然这不是必要的。
<<ENDCLIENT


KVM网络配置(2)bridge network  


bridge networking也就是共享物理网络设备,在需要对interface做高级的配置和主机有多块网卡时,将会显得非常有用。

基于linux kvm 的bridge的创建我已经在我的另外一篇文章中提到,这里有些地方我不再解释。

cat<< __EOF_ >> 创建bridge

1、首先停止NetworkManager:

#service NetworkManager stop 
  
   #chkconfig NetworkManager off

或者在ifcfg-*中加入:

NM_CONTROLLED=no

然后重启网络:

#service network restart


2、修改需要bridge的那块网卡的脚本,比如ifcfg-eth0

#cd /etc/sysconfig/network-scripts 
  
    #vim ifcfg-eth0 
  
     .... 
  
 DEVICE=eth0 
  
 HWADDR=84:2B:2B:5E:61:99 
  
 ONBOOT=yes 
  
 BRIDGE=br0 
  
 MTU=9000 
  
    ....


3、建立ifcfg-br0

#cat > ifcfg-br0 << end 
  
 DEVICE=br0 
  
 TYPE=Bridge #这里主义大小写等格式 
  
 BOOTPROTO=static 
  
 IPADDR=58.63.239.197 
  
 NETMASK=255.255.255.0 
  
 GATEWAY=58.63.239.1 
  
 <<end

4、重启网络

#service network restart


5、添加iptables 规则,以便允许数据包通过这块bridge设备转发:

#iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT 
  
 #service iptables save 
  
 #service iptables restart

或者可以选择让iptables不对bridge流量进行控制:

cat >> /etc/sysctl.conf <<E 
  
 net.bridge.bridge-nf-call-ip6tables = 0 
  
 net.bridge.bridge-nf-call-iptables = 0 
  
 net.bridge.bridge-nf-call-arptables = 0 
  
 <<E 
  
 #sysctl -p /etc/sysctl.conf

6,重启或者重新加载libvirt:

#service libvirtd reload

7、查看我们配置的bridge设备是否可以使用:

#brctl show 
  
 bridge name     bridge id               STP enabled     interfaces 
  
 br0             8000.842b2b5e6199       no              eth0 
  
 virbr0          8000.000000000000       yes 
  
 #从上面的输出可以看到我们的bridge已经可以使用了,在建立虚拟机时就可以使用了( --network bridge:br0,如果你是用virt-manager来创建虚拟机的话,在选择网络那里的时候可以看到br0 -- eth0)。这里提出一点,virbr0是没有对应的设备的,它就是default virtual network(NAT),不要人为的给他绑定接口(interface,如eth*) 
  
 __EOF__