Fedora 18配置KVM虚拟机的桥接网络

参考来源:HowtoForge

本文讲述如何在Fedora 18下配置桥接网络,使得局域网中的其它机器能够访问KVM中的虚拟机。注:Fedora 18是宿主机器的操作系统

下面开始!

简而言之是以下几个步骤。

  1. 禁用SELinux(参考来源里面建议的,这里我不太推荐禁用SELinux)
  2. 虚拟服务端KVM的安装和配置我之前讲过了的,这里就不讲了(标签Fedora下去找吧)。
  3. 禁用NetworkManager对网络的管理,改用较为「原始」的network脚本来管理网络。(非必须,我后来启用了NetworkManager,桥接网络仍然可以工作,不过NetworkManager不能再管理桥接的有线网卡(或翻译为「以太网卡」)。)
  4. 在KVM中应用桥接网络。

下面详细讲一下第三步这个桥接网络的配置怎么操作的。

先终端下运行ifconfig看看你要桥接起来的网络端口名称(一般是eth0、em0什么的),我这里是p6p1!

终端下依次运行,

su -c 'systemctl disable NetworkManager.service'
su -c 'systemctl enable network.service'
su -c 'systemctl stop NetworkManager.service'

看看/etc/resolv.conf中DNS服务器是否正确,如果缺失nameserver那么运行system-config-network配置好。然后编辑/etc/sysconfig/network-scripts/ifcfg-p6p1(ifcfg-后面跟的是你的网络端口名)这个文件,将DNS1、DNS2、GATEWAY、IPADDR、NETMASK和SEARCH这几行都注释掉,同时把NM_CONTROLLED的值改为no,并添加一行BRIDGE=br0,贴上我的范例供各位参考吧。

UUID="9c0c0328-4126-4a5c-8848-e1fd63f4e60e"
NM_CONTROLLED="no"
#BOOTPROTO=none
DEVICE="p6p1"
ONBOOT="yes"
TYPE=Ethernet
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME=Ethernet
HWADDR=88:AE:1D:31:12:EA
#IPADDR0=192.168.0.20
PREFIX0=24
#GATEWAY0=192.168.0.1
#DNS1=192.168.0.1
#DNS2=8.8.8.8
BRIDGE=br0
USERCTL=no

然后新建并编辑/etc/sysconfig/network-scripts/ifcfg-br0文件,内容如下,

DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
DNS1=192.168.0.1
DNS2=8.8.8.8
GATEWAY=192.168.0.1
IPADDR=192.168.0.20
NETMASK=255.255.255.0
ONBOOT=yes

上面有些具体的值请按照你的实际情况修改。根据我个人的体会的话,把/etc/sysconfig/network-scripts/下ifcfg-开头的文件中不必要的(主要就是无线网络连接过的那几个)删掉,可以避免通过systemctl重启network服务出错。

配置完毕后重启Fedora,再在终端运行ifconfig看看输出是否正确,我的输出如下。

[will@localhost ~]$ ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.0.20  netmask 255.255.255.0  broadcast 192.168.0.255
inet6 fe80::8aae:1dff:fe31:12ea  prefixlen 64  scopeid 0x20<link>
ether 88:ae:1d:31:12:ea  txqueuelen 0  (Ethernet)
RX packets 5283  bytes 2273032 (2.1 MiB)
RX errors 0  dropped 1  overruns 0  frame 0
TX packets 5972  bytes 1221202 (1.1 MiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
inet 127.0.0.1  netmask 255.0.0.0
inet6 ::1  prefixlen 128  scopeid 0x10<host>
loop  txqueuelen 0  (Local Loopback)
RX packets 662317  bytes 38148744 (36.3 MiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 662317  bytes 38148744 (36.3 MiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

p6p1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
ether 88:ae:1d:31:12:ea  txqueuelen 1000  (Ethernet)
RX packets 6216  bytes 2441789 (2.3 MiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 6096  bytes 1227923 (1.1 MiB)
TX errors 0  dropped 0 overruns 0  carrier 1  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
ether aa:55:60:1a:b2:d3  txqueuelen 0  (Ethernet)
RX packets 0  bytes 0 (0.0 B)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 0  bytes 0 (0.0 B)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

如果这样就表示桥接网络配置完成了。然后修改KVM虚拟机的网络界面配置,把Source deviec改成主机桥接的网络,如下图所示。

virt-network