抽空学学KVM(八):虚拟机的网络---Bridge模式

之前学习了采用default网络创建虚机时,此时虚机的网络类型为NAT,其主要通过libvirt服务借助iptables中的NAT表和内核转发参数实现,但生产中用的不多,今天学习一下应用更广的桥接模式(bridge模式)。

桥接模式的大概网络如下:

 

 

 以前宿主机由Eth1配置相应IP地址后,与外部相连,由NAT模式下的birbr0网卡与内部虚机通讯,birbr0为内部虚机的网关。在桥接模式下,Eth1仅仅作为是与外部相连的接口,上面没有IP地址,然后连接到内部的虚拟交换机BR0,同时宿主机上会配置BR0网卡IP地址,虚机上的网络与BR0交换机相连,此时对于虚机而言可理解为为通过vswitch与eth1后与外部直接相连。

KVM提供了创建桥接网络的命令:

virsh # iface-bridge --help
NAME
iface-bridge - create a bridge device and attach an existing network device to it

virsh # iface-bridge ens32 br0 
Created bridge br0 with attached device ens32
复制代码
[root@KVM03-10 ~]# ip add 
……
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000     #ens32上的地址移动到了br0上
    link/ether 00:0c:29:87:38:bc brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:0c:29:87:38:bc brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.15/24 brd 10.0.0.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe87:38bc/64 scope link 
       valid_lft forever preferred_lft forever

[root@KVM03-10 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32          #对比一下,网卡的配置文件
DEVICE=ens32
ONBOOT=yes
BRIDGE="br0"
[root@KVM03-10 ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0            #开启了STP
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="10.0.0.15"
NETMASK="255.255.255.0"
GATEWAY="10.0.0.2"
STP="on"
DELAY="0"
[root@KVM03-10 ~]

[root@KVM03-10 ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c298738bc yes ens32                #显示ens32已经桥接在了BR0上

virbr0 8000.52540087f8b7 yes virbr0-nic
vnet0

复制代码

这个时候我可以修改以前的虚机的配置文件,也可以重新创建,先试试重新创建吧

重新创建:

virt-install --virt-type kvm --os-type rhel7 --name test-kvm-bridge --memory 1024 --vcpu 1 --disk /opt/centos2.1.raw-clone-20201104.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

复制代码
[root@KVM03-10 opt]# virsh list --all 
 Id    Name                           State
----------------------------------------------------
 1     test-kvm                       running
 2     test-kvm-bridge                running            #虚机创建成功

[root@KVM03-10 opt]# virsh console test-kvm-bridge
Connected to domain test-kvm-bridge
Escape character is ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-514.el7.x86_64 on an x86_64

localhost login: root
Password: 
Last login: Mon Nov  2 22:55:25 on ttyS0
[root@localhost ~]# ip add 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000      #登陆以后发现虚机中并没有IP地址,这是因为我vmware workstations的vnet8没开启DHCP功能
    link/ether 52:54:00:4b:b9:6a brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# 
复制代码
复制代码
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0       #手动配置IP地址后,虚机与外网连通性正常,这个时候就可以用电脑SSH登陆虚机了
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
PEERDNS="yes"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR=10.0.0.100
NETMASK=255.255.255.0
GATEWAY=10.0.0.2
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (61.135.185.32) 56(84) bytes of data.
64 bytes from 61.135.185.32 (61.135.185.32): icmp_seq=1 ttl=128 time=58.1 ms
64 bytes from 61.135.185.32 (61.135.185.32): icmp_seq=2 ttl=128 time=66.7 ms
 
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 58.191/62.482/66.773/4.291 ms
[root@localhost ~]# 
复制代码

对比虚机的xml文件发现,虚机的interface配置有区别

<interface type='bridge'>
<mac address='52:54:00:4b:b9:6a'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>

那这样的话我可以直接修改一个虚机的配置文件,应该也行,验证过后是可行的,更改内容如上。

 

posted @   woshinidaye  阅读(673)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言
点击右上角即可分享
微信分享提示