1. 背景
上文 【云计算 | OpenStack】从零开始使用libvirt创建一个kvm虚机 中的虚机使用了基于Linux网桥的虚拟网卡,xml文件中关于interface
的定义如下
#添加网络配置,基于网桥
<interface type='bridge'>
<source bridge='br0'/>
<target dev='vnet1'/>
<alias name='net1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
其网络架构如下图所示
对应到vmware虚机(kvm虚机的宿主机)里,如下图
ens33
:vmware虚机的网卡,类似物理机的物理网卡,用于连接外网。其ip地址是向无线路由器发起dhcp请求动态获取vnet1
:kvm虚机在Linux网桥上对应的端口vnet2
:kvm虚机在Linux网桥上对应的端口
现在需求是让kvm虚机能够访问外网,本文围绕这点展开试验
2. 实践
整体思路就是让物理网卡ens33也挂载到Linux网桥br0上,使kvm虚机能通过dhcp获取到无线路由器分配的ip地址,其网络架构图如下
1、首先通过命令brctl addif br0 ens33
给网桥添加物理网卡ens3(也可以在网卡配置文件/etc/sysconfig/network-scripts/ifcfg-ens33
中添加BRIDGE=br0
)
2、通过dhclient br0
让网桥br0获取外部地址
3、通过ip a del 172.16.27.77/20 dev ens33
删除网卡ens33的地址(这个地址如果不删除,可能存在一些网络问题。网上有说如果物理网卡加入了网桥,就相当于网桥上的一个端口,类似vnet1和vnet2
,仅用来连接对端,所以可以不用配地址。至于原理尚不明晰,欢迎留言指出)
4、获取kvm虚机的vnc端口,通过vncviewer :port
进入kvm虚机
5、通过dhclient ens3
获取地址(此处网卡ens3已设置为开机自启并通过dhcp获取地址,所以如果重启虚机也可以直接获取地址)
6、测试kvm虚机能否上外网
3. 总结
- kvm虚机采用基于Linux网桥的虚拟网卡时,可以将宿主机的物理网卡添加到Linux网桥,从而打通kvm虚机的外部网络