版权声明:本文由陈煜东原创文章,转载请注明出处:
文章原文连接:https://www.qcloud.com/community/article/90html
来源:腾云阁 https://www.qcloud.com/communitylinux
经过艰难的过程,终于使用libvirt安装完qemu kvm虚拟机了.可是发现虚拟机不能上网.虚拟机想要上网,有不少中方法.服务器
先说两个定义:Guest机器为虚拟机,Host机器为开机运行的真实机器.网络
查看libvirt的教程,看到网络配置有许多中方式.详情能够访问http://libvirt.org/formatdomain.html#elementsNICSdom
Bridge方式即虚拟网桥的网络链接方式,是客户机和子网里面的机器可以互相通讯。可使虚拟机成为网络中具备独立IP的主机。
桥接网络(也叫物理设备共享)被用做把一个物理设备复制到一台虚拟机。网桥多用做高级设置,特别是主机多个网络接口的状况。jsp
首先能够按照ibm 文章的虚拟机配置一下host机的网络状况,这个的目的就是让host生成一个不日多个桥接,你们都经过这个桥接上网.下面咱们来看看具体的步骤.spa
确保你想使用bridge网桥的网卡可以为kvm虚拟机模块提供网络链接能力而且网卡是否能够工做.这个网卡应该要可以给guest的kvm虚拟机提供相同的网络支持.接下来例子说明了网卡的配置,而且能够被外部网络访问.这个例子中,使用eth0网卡..net
# ifconfig eth0 Link encap:Ethernet HWaddr 00:14:5E:C2:1E:40 inet addr:10.10.1.152 Bcast:10.10.1.255 Mask:255.255.255.0 inet6 addr: fe80::214:5eff:fec2:1e40/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:664 errors:0 dropped:526 overruns:0 frame:0 TX packets:163 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:69635 (68.0 KiB) TX bytes:25091 (24.5 KiB) Interrupt:74 Memory:da000000-da012800 ................
备份网络配置到不一样的目录下,未来能够用来恢复网络配置,. 根据下面的命令将网络脚本ifcfg-eth0 网卡到 /root目录:nuxt
# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /root/.
注意:不要把文件copy到/etc/sysconfig/network-scripts/目录或者其子目录rest
进入 /etc/sysconfig/network-scripts/目录.
cd /etc/sysconfig/network-scripts/
为Linux的bridge建立一个新的配置文件为/etc/sysconfig/network-scripts/ifcfg-br0,这里br0是bridge网桥的名字,同eth0相似.使用如下命令
cp ifcfg-eth0 ifcfg-br0
具体的内容是基于已有的配置文件来进行的.
编辑配置文件,让数据包经过bridge(网桥)进行上网.你的网络配置极可能是经过静态ip(BOOTPROTO=static)上网或者是从DHCP服务器得到ip(BOOTPROTO=dhcp)上网的.
若是你的网络是经过静态ip地址来配置的,那么你的配置极可能是和下面同样的:
DEVICE=eth0 BOOTPROTO=static HWADDR=00:14:5E:C2:1E:40 IPADDR=10.10.1.152 NETMASK=255.255.255.0 ONBOOT=yes
下面的显示了eth0和br0的静态ip配置内容,能够根据下面进行编辑
static ip配置
/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet HWADDR=00:14:5E:C2:1E:40 ONBOOT=yes NM_CONTROLLED=no BRIDGE=br0
/etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 TYPE=Bridge NM_CONTROLLED=no BOOTPROTO=static IPADDR=10.10.1.152 NETMASK=255.255.255.0 ONBOOT=yes
下面显示的eth0和br0的DHCP配置状况.
DHCP配置
/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet HWADDR=00:14:5E:C2:1E:40 ONBOOT=yes NM_CONTROLLED=no BRIDGE=br0
/etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 TYPE=Bridge NM_CONTROLLED=no BOOTPROTO=dhcp ONBOOT=yes
重启网络以验证网络配置是否工做.
若是网络配置不正确,网络链接将会断开,你的电脑将失去访问能力.这样的话,检查如下配置文件,而后使用如下的命令重启如下网络服务:
# service network restart
向文件/etc/sysctl.conf
添加如下代码:
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
# sysctl -p net.ipv4.ip_forward = 0 ... net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
经过运行ifconfig来验证如下配置是否成功.若是出现两个项,即网桥的br0和如今在工做的eth0:
br0 Link encap:Ethernet HWaddr 00:14:5E:C2:1E:40 inet addr:10.10.1.152 Bcast:10.10.1.255 Mask:255.255.255.0 inet6 addr: fe80::214:5eff:fec2:1e40/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:125 errors:0 dropped:0 overruns:0 frame:0 TX packets:81 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:16078 (15.7 KiB) TX bytes:18542 (18.1 KiB) eth0 Link encap:Ethernet HWaddr 00:14:5E:C2:1E:40 inet6 addr: fe80::214:5eff:fec2:1e40/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:206 errors:0 dropped:0 overruns:0 frame:0 TX packets:58 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:27308 (26.6 KiB) TX bytes:13881 (13.5 KiB) Interrupt:74 Memory:da000000-da012800
注意:你可能发现eth0的网络信息里面没有ipv4的地址了.或者你的GUI界面的网络显示你是断网的. 这不用担忧.由于eth0的网络能力已经经过br0进行工做.你的host网络仍是能正常工做的.
也可使用如下的命令来查看网桥是否工做.
# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.000000000000 yes br0 8000.000e0cb30550 no eth0
若是是相似的输出,那么你的Linux的Bridge网桥就配置的差很少了.
在虚拟机的xml配置文件进行设置网络的链接方式为bridge桥接,而且桥接的设备为br0.其中mac地址要改变!否则MAC相同,局域网MAC地址相同的电脑不能上网.
<interface type="bridge"> <!--虚拟机网络链接方式--> <source bridge="br0" /> <!-- 当前主机网桥的名称--> <mac address="00:16:e4:9a:b3:6a" /> <!--为虚拟机分配mac地址,务必惟一,不然dhcp得到一样ip,引发冲突--> </interface>
我使用的是CentOS Minimal Installation的发行版.使用如下命令就能够进行上网了. 一开始只有lo显示.没有看到eth0,后来想到了eth0被禁用了,因而开启便可.
# ifconfig eth0 up # dhclient eth0
如今还有个问题是,网络不随开机启动. 我打开/etc/sysconfig/network-scripts/ifcfg-eth0显示:
DEVICE=eth0 HWADDR=52:54:00:12:34:56 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=dhcp
虽然设置了开机启动,可是每次开机都须要运行上面的两个命令.这样就没办法远程控制主机了.
后来发现是udev弄的.udev在/etc/udev/rules.d/下面搞了一个持久命名规则(persistent-net.rules),对于网卡的持久命令,就采起了MAC地址的匹配方式
原来虚拟机安装后自带MAC网卡地址和我xml定义的网卡不同.因而我就将虚拟机的MAC网卡提取出来,替换xml文件的MAC网卡信息.而后undefine和define如下虚拟机.
重启虚拟机,发现此次网络可以自动开机得到了.
参考资料
http://blog.csdn.net/samlei/article/details/7598541
http://www.linuxtopia.org/online_books/rhel6/rhel_6_virtualization/rhel_6_virtualization_sect-Virtualization-Network_Configuration-Bridged_networking_with_libvirt.html
IBM – Configuring the network
http://ueaner.iteye.com/blog/1291350
http://blog.csdn.net/xiyuan1999/article/details/5125002