【转】libvirt kvm 虚拟机上网 – Bridge桥接
目录 [hide]
通过艰难的过程,终于使用libvirt安装完qemu kvm虚拟机了.但是发现虚拟机不能上网.虚拟机想要上网,有很多中方法.
先说两个定义:Guest机器为虚拟机,Host机器为开机运行的真实机器.
查看libvirt的教程,看到网络配置有许多中方式.详情可以访问http://libvirt.org/formatdomain.html#elementsNICS
- NAT (默认上网) 虚拟机利用host机器的ip进行上网.对外显示一个ip
 - Bridge 将虚拟机桥接到host机器的网卡上,guest和host机器都通过bridge上网.对外不同的ip,
 - …
 
Bridge桥接原理
Bridge方式即虚拟网桥的网络连接方式,是客户机和子网里面的机器能够互相通信。可以使虚拟机成为网络中具有独立IP的主机。
桥接网络(也叫物理设备共享)被用作把一个物理设备复制到一台虚拟机。网桥多用作高级设置,特别是主机多个网络接口的情况。
Bridge桥接原理
如上图,网桥的基本原理就是创建一个桥接接口br0,在物理网卡和虚拟网络接口之间传递数据。
在host机器配置桥接网络
首先可以按照ibm 文章的虚拟机配置一下host机的网络情况,这个的目的就是让host生成一个不日多个桥接,大家都通过这个桥接上网.下面我们来看看具体的步骤.
查看网卡是否工作
确保你想使用bridge网桥的网卡能够为kvm虚拟机模块提供网络连接能力并且网卡是否可以工作.这个网卡应该要能够给guest的kvm虚拟机提供相同的网络支持.接下来例子说明了网卡的配置,并且可以被外部网络访问.这个例子中,使用eth0网卡.
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
 | 
# ifconfigeth0      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................ | 
备份network-scripts网络脚本文件
备份网络配置到不同的目录下,将来可以用来恢复网络配置,. 根据下面的命令将网络脚本ifcfg-eth0 网卡到 /root目录:
| 
 1 
 | 
# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /root/. | 
进入network-scripts目录
进入/etc/sysconfig/network-scripts/目录.
| 
 1 
 | 
cd /etc/sysconfig/network-scripts/ | 
为桥接新建配置文件
为Linux的bridge创建一个新的配置文件为/etc/sysconfig/network-scripts/ifcfg-br0,这里br0是bridge网桥的名字,同eth0类似.使用以下命令
| 
 1 
 | 
cp ifcfg-eth0 ifcfg-br0 | 
具体的内容是基于已有的配置文件来进行的.
编辑bridge网桥配置文件
编辑配置文件,让数据包通过bridge(网桥)进行上网.你的网络配置很可能是通过静态ip(BOOTPROTO=static)上网或者是从DHCP服务器获得ip(BOOTPROTO=dhcp)上网的.
如果你的网络是通过静态ip地址来配置的,那么你的配置很可能是和下面一样的:
| 
 1 
2 
3 
4 
5 
6 
 | 
DEVICE=eth0BOOTPROTO=staticHWADDR=00:14:5E:C2:1E:40IPADDR=10.10.1.152NETMASK=255.255.255.0ONBOOT=yes | 
下面的表格显示了eth0和br0的静态ip配置内容,可以根据下面进行编辑
| /etc/sysconfig/network-scripts/ifcfg-eth0 | /etc/sysconfig/network-scripts/ifcfg-br0 | 
|---|---|
| DEVICE=eth0 TYPE=Ethernet HWADDR=00:14:5E:C2:1E:40 ONBOOT=yes NM_CONTROLLED=no BRIDGE=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配置情况.
| /etc/sysconfig/network-scripts/ifcfg-eth0 | /etc/sysconfig/network-scripts/ifcfg-br0 | 
|---|---|
| DEVICE=eth0 TYPE=Ethernet HWADDR=00:14:5E:C2:1E:40 ONBOOT=yes NM_CONTROLLED=no BRIDGE=br0 | DEVICE=br0 TYPE=Bridge NM_CONTROLLED=no BOOTPROTO=dhcp ONBOOT=yes | 
重启网络服务
重启网络以验证网络配置是否工作.
如果网络配置不正确,网络连接将会断开,你的电脑将失去访问能力.这样的话,检查以下配置文件,然后使用以下的命令重启以下网络服务:
| 
 1 
 | 
# service network restart | 
禁用网络过滤器
向文件/etc/sysctl.conf添加以下代码:
| 
 1 
2 
3 
 | 
net.bridge.bridge-nf-call-ip6tables = 0net.bridge.bridge-nf-call-iptables = 0net.bridge.bridge-nf-call-arptables = 0 | 
重新加载kernel参数
| 
 1 
2 
3 
4 
5 
6 
 | 
# 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:
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
 | 
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 | 
也可以使用以下的命令来查看网桥是否工作.
| 
 1 
2 
3 
4 
 | 
# brctl showbridge name     bridge id               STP enabled     interfacesvirbr0          8000.000000000000       yesbr0             8000.000e0cb30550       no              eth0 | 
如果是类似的输出,那么你的Linux的Bridge网桥就配置的差不多了.
为Guest虚拟机配置网络
配置Guest虚拟机的xml文件
在虚拟机的xml配置文件进行设置网络的连接方式为bridge桥接,并且桥接的设备为br0.其中mac地址要改变!不然MAC相同,局域网MAC地址相同的电脑不能上网.
| 
 1 
2 
3 
4 
 | 
<interface type="bridge"> <!--虚拟机网络连接方式-->    <source bridge="br0" /> <!-- 当前主机网桥的名称-->    <mac address="00:16:e4:9a:b3:6a" /> <!--为虚拟机分配mac地址,务必唯一,否则dhcp获得同样ip,引起冲突--></interface> | 
在虚拟机配置网络
我使用的是CentOS Minimal Installation的发行版.使用以下命令就可以进行上网了. 一开始只有lo显示.没有看到eth0,后来想到了eth0被禁用了,于是开启即可.
| 
 1 
2 
 | 
# ifconfig eth0 up# dhclient eth0 | 
现在还有个问题是,网络不随开机启动. 我打开/etc/sysconfig/network-scripts/ifcfg-eth0显示:
| 
 1 
2 
3 
4 
5 
 | 
DEVICE=eth0HWADDR=52:54:00:12:34:56ONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=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
 
【转】libvirt kvm 虚拟机上网 – Bridge桥接的更多相关文章
- libvirt kvm 虚拟机上网 – Bridge桥接
		
版权声明:本文由陈煜东原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/90 来源:腾云阁 https://www.qclou ...
 - CentOS 6.9下KVM虚拟机网络Bridge(网桥)方式与NAT方式详解(转)
		
摘要:KVM虚拟机网络配置的两种方式:NAT方式和Bridge方式.Bridge方式的配置原理和步骤.Bridge方式适用于服务器主机的虚拟化.NAT方式适用于桌面主机的虚拟化. NAT的网络结构图: ...
 - KVM虚拟机安装及桥接网络配置
		
1.查看CPU是否支持intel或AMD的虚拟技术 cat /proc/cpuinfo | grep -E "vmx|svm" --color --vmx intel的CPU sv ...
 - Ubuntu18.04服务器使用netplan网络构建桥接kvm虚拟机
		
参考链接 Ubuntu 18.04 LTS安装KVM虚拟机 如何在 Ubuntu 18.04 服务器上安装和配置 KVM KVM日常管理和克隆 KVM详解 1.准备工作 首先需要检查一下CPU是否支持 ...
 - 命令行安装kvm虚拟机、桥接网络、用virt-manager管理
		
宿主机CentOS Linux release 7.2.1511 (Core),内核3.10.0-327.el7.x86_64 1.配置宿主机网络桥接 想让虚拟机有自己的ip且外网可访问,需要在安装虚 ...
 - 使用 libvirt创建和管理KVM虚拟机
		
1. libvirt介绍 Libvirt是一个软件集合,便于使用者管理虚拟机和其他虚拟化功能,比如存储和网络接口管理等等.Libvirt概括起来包括一个API库.一个 daemon(libv ...
 - kvm上已安装的虚拟机修改为桥接网络
		
kvm上安装的虚拟机默认使用的nat网络格式,现在已经调整kvm主机为桥接方式了,但是已经安装的虚拟机还是nat方式,所以需要修改一下 让KVM虚拟主机使用桥接网络br0 修改虚拟机的配置文件,默认存 ...
 - 校园网 虚拟机VMware Linux桥接模式 无法上网 问题
		
只是解决常见虚拟机桥接模式 无法上网问题,基本的百度都有 基本知识 虚拟机有三种网络连接模式:桥接模式,net模式,仅主机 桥接模式:同一网段允许的话,相当于一个独立的物理主机,独立ip net模式: ...
 - 云计算概述及Centos7下安装kvm虚拟机
		
云计算(cloud computing)是基于互联网的相关服务的增加.使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源 云计算到底是什么? 按定义:云计算指的是一种使用模式,是基 ...
 
随机推荐
- postgresql基本操作:查看数据库、索引、表、表空间大小
			
一.简介 PostgreSQL 提供了多个系统管理函数来查看表,索引,表空间及数据库的大小,下面详细介绍一下. 二.数据库对象尺寸函数 函数名 返回类型 描述 pg_column_size(any) ...
 - Python天天美味(13) - struct.unpack
			
转载自:http://www.cnblogs.com/coderzh/archive/2008/05/04/1181462.html Python中按一定的格式取出某字符串中的子字符串,使用struc ...
 - Bandicam视频录制技巧总结+小丸工具箱压缩视频解决视频体积问题
			
1.视频录制. 录制质量建议选择100,保证原文件的质量才能更好地保证渲染转码后输出视频的质量.音效这里就一个关键点,就是编码器默认的MPEG-1 L2,会导致会声会影渲染输出出错,程序强行关闭,Ve ...
 - 如何区分JS中的this?!
			
->我们一般只研究函数执行的时候里面的this->this是谁和当前的函数在哪执行和在哪定义没有半毛钱的关系 1)看函数执行的时候,函数名之前是否有".",有的话&qu ...
 - CSS3详解:transform
			
CSS3 transform是什么? transform的含义是:改变,使…变形:转换 CSS3 transform都有哪些常用属性? transform的属性包括:rotate() / skew() ...
 - List,set,Map 的用法和区别
			
Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap Collecti ...
 - 关于SSH整合中对于Hibernate的Session关闭的问题
			
在web.xml的Struts2的配置上面加上 <filter> <filter-name>OpenSessionInViewFilter</filter-name> ...
 - Android拍照保存图片内存大小
			
图片拍摄的大小会随着硬件而变化,比如,像素高的相机拍出来的图片要比像素低的图片内存要大. 如此一来,针对机型可能调用camera app保存照片的时候,图片大小会不一样. 为了缩小图片大小,我们需要把 ...
 - python--迭代--7
			
原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 一.什么是迭代 在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历 ...
 - jQuery中过滤选择器first和first-child的区别
			
:first过滤器只匹配第一个子元素,而:first-child过滤器将为每个父元素匹配个子元素. 对于下面html代码: <ul> <li>John</li> & ...