抽空学学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'>
那这样的话我可以直接修改一个虚机的配置文件,应该也行,验证过后是可行的,更改内容如上。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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数据库查询与断言