在Redhat Enterprise Linux 5 (RHEL5)上设置KVM虚拟机时有两种网络选项:1. Virtual network  2.Shared physical device 但预设的只有 Virtual network.





先来看看在 RHEL5 KVM 的环境预设会建立一个 bridge,由 QEMU 所提供出的 virbr0 预设安装 Virtual machine 时网络卡的选择也就是这种 Virtual network .


 


?    Virtual network - virbr0


1.QEMU 会在你的 Linux 产生一个 bridge 虚拟装置 "virbr0" .virbr0 不只是个单纯的 NAT 而已,他是一个 NAT + DHCP 的架构,所有的 Virtual machine 都会透过 virbr0 来指派一个私人网域 (private IP).预设为 192.168.122.2 ~ 192.168.122.254 (在他的设定档中可以定义其 DHCP 可指定的 IP 范围).


2.其预设的 default gateway 为 192.168.122.1/24 ,所有在这架构下的 Virtual Machine 虚拟机器的封包都必须透过这 NAT 去连结到其它的网络.


3. 如同一般的 NAT 所有的 Virtual Machine 虚拟机器都是被隐藏在 private私有网络,所以外部不能直接连接到 Virtual Machine 虚拟机器上.





这一个是由 Qemu 所产生所以设定档存放在 /etc/libvirt/qemu/networks/default.xml

<network>  
   <name>default</name>  
   <uuid>49a0ceb-5662-4a61-8149-98ea750d393b</uuid>  
   <bridge name="virbr0" />  
   <forward/>  
   <ip address="192.168.122.1" netmask="255.255.255.0">  
     <dhcp>  
       <range start="192.168.122.2" end="192.168.122.254" />  
     </dhcp>  
   </ip>  
 </network>

其中的 ip address 是 default gateway IP,range 则是 DHCP clients 所能使用的范围,都可以依据需求做改变.



  • Shared physical device

如果要使用第二种 "Shared physical device" 时需要经过手动设定才能使用.此时所有的 Virtual machine 的网络装置就会像是串接在一个 Hub 或是 Switch 上,只要是同区段的 IP 都可以互通. 在 Linux 下网络的模式有一个东西叫做 Bridge mode,有点像将多个 NIC Adapter ports 透过一个虚拟出来的 Bridge(Switch) 全部串在一起,再透过一个虚拟出来的网络装置出去,这就像是把 Linux 当成一个 switch 来使用了.
在一般的 Linux 环境下的方法也很简单:我们也可以透过下面几个简单的指令来产生自己所需要的 Bridge 装置出来.下面的图示你可以很清楚的看出来虚拟 NIC 和实体 NIC 是如何透过 bridge 模式串接在一起. 


 


如何配置共享网络(shared physical device)


1. 停止物理网卡eth0

ifdown eth0 

 2. 修改eth0的网卡配置 /etc/sysconfig/network-scripts/ifcfg-eth0 
 

 DEVICE=eth0 

 # change the hardware address to match the hardware address your NIC uses 

 HWADDR=00:16:76:D6:C9:45 

 ONBOOT=yes 

 BRIDGE=br0 

 NM_CONTROLLED=no



3. 创建一个新的网络接口br0


#动态IP配置


DEVICE=br0 
TYPE=Bridge 
BOOTPROTO=dhcp 
ONBOOT=yes 
 Delay=0
 #静态IP配置
 DEVICE=br0
 TYPE=Bridge
 BOOTPROTO=static
 IPADDR=<Static IP address>
 NETMASK=<Netmask>
 GATEWAY=<Gateway>
 ONBOOT=yes
 4. 启动网络
    ifup eth0
    ifup br0
 5. 配置Iptables,编辑/etc/sysconfig/iptables    
    -A RH-Firewall-1-INPUT -i br0 -j ACCEPT
 



参考资料:
http://kbase.redhat.com/faq/docs/DOC-19071