在RHEL6(6.3 x86_64)系统平台下搭建KVM的虚拟机后,虚拟机默认的网络是主机和虚拟机的虚拟网络,这个只能保证主机和虚拟机之间的通信,外部网络是无法访问到虚拟机的。如果要把KVM虚拟化出来的机器放到外网供用户访问就要使用桥接咯。不多说了,开始啦。
一、网络桥接模式
桥接模式的功能就是通过外网可以访问到该虚拟机,当然虚拟机在该网络模式下肯定也是可以访问外部网络的。
1.开启主机的桥接模式
- cd /etc/sysconfig/network-script
- cp ifcfg-eth0 ifcfg-br0
- vim ifcfg-br0
- DEVICE="br0"
- TYPE="Bridge"
- ONBOOT="yes"
- NM_CONTROLLED="no"
- BOOTPROTO="static"
- IPADDR="192.168.1.8"
- NETMASK="255.255.255.0"
- NETWORK="192.168.1.0"
- GATEWAY="192.168.1.1"
2.添加主机网卡为桥接成员
- vim ifcfg-eth0
- DEVICE="eth0"
- TYPE="Ethernet"
- HWADDR="D4:AE:52:8B:8C:28"
- NM_CONTROLLED="no"
- ONBOOT="yes"
- BRIDGE="br0"
把IP,网关,掩码等信息去掉,留下以上关键信息。
3.修改KVM虚拟机的网络连接模式为桥接模式
也可以在CLI模式下修改
- vim /etc/libvirt/qemu/Domain
- <interface type='bridge'>
- <mac address='52:54:00:c9:0f:28'/>
- <source bridge='br0'/>
- <model type='virtio'/>
- <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
- </interface>
4.开启内核路由转发功能
- sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/' /etc/sysctl.conf
- sysctl -p
5.重启网络服务,OK。
需要注意的是开启桥接功能需要安装软件包“bridge-utils”,如果发现配置好后没生效记得安装上去,或者最开始的时候检查一下,一般系统可能都默认安装了。
绑定多个IP:
如果需要绑定多个IP,可以这样:
- DEVICE=br0:0
- BOOTPROTO=static
- NM_CONTROLLED=yes
- ONBOOT=yes
- TYPE=Bridge
- UUID="46a39598-1df0-4149-99de-f93c940fc48e"
- IPADDR=192.168.1.66
- PREFIX=24
- GATEWAY=192.168.1.1
- DNS1=8.8.8.8
- DEFROUTE=yes
- IPV4_FAILURE_FATAL=yes
- IPV6INIT=no
- NAME="System br0:0"
- NETMASK=255.255.255.0
- USERCTL=no
- HWADDR=00:0C:29:1B:1B:C8
- LAST_CONNECT=1343786506
增加一个br0:0的桥接口就可以了。配置选项可以不用这么多,只留下关键的就可以。需要注意的是,如果重新绑定一个eth0:0是不行的,因为eth0本身也作为了桥的成员了。
还有一点需要注意的是,做桥接是必须关闭NetworkManager服务。这个服务平时也基本不用。
二、关于virbr0的设置
在安装好了KVM架构后,系统默认是会安装一个virbr0的网络接口,用ifconfig就可以查到该网络接口的状态。这是允许虚拟机访问外网,而外部网络的主机是访问不到虚拟机的,这种网络情况的虚拟机当然就只能作为后端服务器咯。
1.virbr0的IP更改
virbr0的默认IP是192.168.122.0/24网段的IP,如果你的虚拟机需要使用自己的IP规划,就得修改咯。看看怎么改:
- vim /etc/libvirt/qemu/networks/default.xml
- <network>
- <name>default</name>
- <uuid>8d004490-ee73-4e36-b9ef-821d7e73f9f6</uuid>
- <forward dev='br0' mode='nat'>
- <interface dev='br0'/>
- </forward>
- <bridge name='virbr0' stp='on' delay='0' />
- <mac address='88:58:00:51:98:C8'/>
- <ip address='192.168.10.1' netmask='255.255.255.0'>
- <dhcp>
- <range start='192.168.10.11' end='192.168.10.50' />
- </dhcp>
- </ip>
- </network>
配置文件如上咯,还有一个位置是/var/lib/libvirt/network/default.xml,这两个是一样的内容,不过这个应该是执行virsh net命令后根据/etc下的文件生成的。另外,注意上面配置文件中的forward字段里的内容,是br0,因为作了桥接了,否则使用virbr0的虚拟机能获取到IP,但是就是上不了网,原因就很可能出现在这咯,注意。
重新生成配置文件(var目录下的)
- virsh # net-define /etc/libvirt/qemu/network/default.xml
- virsh # net-destroy default
- virsh # net-start default
然后重启下服务:
- service libvirtd restart
再ifconfig查看就OK 了。
如果需要多个网段的(模拟VLAN或者称之为虚拟机隔离),复制一个defatlu.xml重新命名,再执行virsh net-define命令。
2.删除virbr0
有时候用不到这个设备可以关掉它:
- # virsh net-list
- Name State Autostart
- -----------------------------------------
- default active yes
- # virsh net-destroy default
- Network default destroyed
- # virsh net-undefine default
- Network default has been undefined
- # service libvirtd restart
- Stopping libvirtd daemon: [ OK ]
- Starting libvirtd daemon: [ OK ]
这都是在字符界面的操作,适合Linux高手们。我们完全可以在GUI窗口下操作:
启动Virtual Machine Manager,选择“Edit”,然后下拉菜单选择“Connection Details”
网络设置界面:
NAT模式的虚拟机配置代码:
- <interface type='network'>
- <mac address='52:54:00:24:4a:09'/>
- <source network='default'/>
- <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
- </interface>
注意比对与桥接的不同之处。virbr0是定义的default。要开启防火墙,把所有规则清除,做一个SNAT,虚拟机的网关填写virbr0的地址。其实默认KVM已经配好了防火墙。
本地网络:
这个界面和VMware Workstation的Virtual Network Editor非常类似,同样也非常的方便。
关于KVM或者是Xen里的网络配置呢,多数是跟我们桌面虚拟软件VMware Workstation或者Oracle VM VirtualBox的网络配置是类似的原理。只是KVM和Xen用于Linux(生产线)。