KVM网络类型介绍
KVM 包含四种网络类型:
- 隔离模式:虚拟机之间组建网络,该模式无法与宿主机通信,无法与其他网络通信,相当于虚拟机只是连接到一台交换机上。
- 路由模式:相当于虚拟机连接到一台路由器上,由路由器(物理网卡)统一转发,但不会改变源地址。
- NAT 模式:在路由模式中,虚拟机可以访问其他主机,但其他主机的报文无法达到虚拟机,而 NAT 模式则将源地址转换为路由器(物理网卡)地址,这样其他主机也知道报文来自那个主机,在 Docker 环境中经常被使用。
- 桥接模式:在宿主机中创建一张虚拟网卡作为宿主机的网卡,而物理网卡则作为交换机。
隔离模式
在隔离模式下,虚拟机之间可以相互通信,但不能与宿主机或外部网络通信。
Linux 在虚拟机中的网卡都包含前半段和后半段,前半段在虚拟机上,后半段在宿主机上。 eth0 在 Guest1 虚拟机上的网卡,对应的后半段为 vnet0,在 Guest1 上所有发往 eth0 的数据就直接发往 vnet0 了,也可以将 vnet0 看作是一张网卡。
Guest1 和 Guest2 如何通信:
在宿主机中创建一个虚拟交换机,让 vnet0 和 vnet1 分别为虚拟交换机的一个接口,交换机也可以叫做 bridge,只要两个虚拟网卡的前半段 IP 地址在同一个网段内,就可以相互通信,这就是隔离模式。
路由模式及 NAT 模式
路由模式将虚拟机的网络报文通过路由器转发,不会改变源地址。NAT 模式则通过 NAT 网关将源地址转换为物理网卡地址,实现虚拟机与外部网络通信。
在该模式下,虚拟机可以通过虚拟路由器(virbr0)连接到外部网络。在 NAT 模式下,虚拟机发送的报文通过 NAT 网关转发,外部网络无法直接访问虚拟机,但虚拟机可以访问外部网络。
桥接模式
在桥接模式下,宿主机会虚拟出一张虚拟网卡作为宿主机本身的通信网卡,而宿主机的物理网卡则成为桥设备(交换机)。所以虚拟机相当于在宿主机所在局域网内的一个独立的主机,它的行为和宿主机是同等地位的,没有依存关系。
NAT 网络
NAT 网络是虚拟机默认的网络,安装好 KVM 后就会有一个网卡。
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:72:d3:68 txqueuelen 1000(Ethernet)
RX packets 147745 bytes 8418411(8.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 246399 bytes 3673149(350.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
默认使用的地址是: 192.168.122.0 网段,该 virbr0 IP 地址也是使用 NAT 网络虚拟机的网关,虚拟机上网是通过防火墙配置 NAT 转换规则实现的。
virbr0 是一个桥接器,接收所有到网络 192.168.122.* 的内容。从下面命令可以验证:
brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.525400e6456c yes virbr0-nic
同时,虚拟机支持模块会修改 iptables 规则,通过命令可以查看:
iptables -t nat -L-nv
Chain PREROUTING (policy ACCEPT 16924 packets, 2759K bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 2009 packets, 125K bytes)
pkts bytes target prot opt in out source destination
42131847 MASQUERADE all -- * * 192.168.122.0/24 !192.168.122.0/24 ---->这条是关键,它配置了 NAT 功能。
Chain OUTPUT (policy ACCEPT 2011 packets, 125K bytes)
pkts bytes target prot opt in out source destination
iptables -t filter -L-nv
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
174 ACCEPT udp -- virbr0 * 0.0.0.0/0 udp dpt:53
创建步骤:
virsh net-define /usr/share/libvirt/networks/default.xml
此命令定义一个虚拟网络,default.xml 的内容:
<network><name>default</name><bridgename='virbr0'/><forward/><ipaddress='192.168.122.1'netmask='255.255.255.0'><dhcp><rangestart='192.168.122.2'end='192.168.122.254'/></dhcp></ip></network>
也可以修改 xml,创建自己的虚拟网络。
标记为自动启动:
virsh net-autostart default
Network default marked as autostarted
启动网络:
virsh net-start default
Network default started
网络启动后可以用命令 brctl show 查看和验证。
修改 /etc/sysctl.conf 中参数,允许 IP 转发:
net.ipv4.ip_forward=1
桥接网络
桥接网络允许虚拟机像物理主机一样接入物理网络,实现虚拟机与物理网络中的其他设备直接通信。下面是配置桥接网络的具体步骤,以CentOS操作系统为例。
- 给物理网卡设置 IP 信息: 使用
nmcli
命令配置物理网卡的 IP 地址、网关和 DNS 服务器。nmcli connection add con-name eno1 ifname eno1 ipv4.addresses 192.168.1.200/24 ipv4.method manual ipv4.gateway 192.168.1.1 ipv4.dns 114.114.114.114 type802-3-ethernet
- 创建一个桥接网卡: 使用
nmcli
命令创建桥接网卡,并设置桥接网卡的 IP 地址、网关和 DNS 服务器。nmcli connection add con-name br0 ifname br0 type bridge ipv4.method manual ipv4.addresses 192.168.1.200/24 ipv4.gateway 192.168.1.1 ipv4.dns 114.114.114.114 autoconnect yes
- 绑定物理网卡: 使用
nmcli
命令将物理网卡绑定到桥接网卡上。nmcli connection addtype bridge-slave ifname eno1 master br0
- 重启生效: 关闭并重新启动物理网卡和桥接网卡以应用配置。
nmcli connection down eno1nmcli connection down br0nmcli connection up br0
详细解释
- 给物理网卡设置 IP 信息: 首先,需要为物理网卡
eno1
配置 IP 地址、网关和 DNS 服务器。这里使用nmcli connection add
命令,其中:-con-name
指定连接名称,这里为eno1
。-ifname
指定接口名称,这里也是eno1
。-ipv4.addresses
设置 IP 地址和子网掩码,这里为192.168.1.200/24
。-ipv4.method
设置为手动配置。-ipv4.gateway
设置网关地址,这里为192.168.1.1
。-ipv4.dns
设置 DNS 服务器地址,这里为114.114.114.114
。-type
指定网络类型,这里为以太网(802-3-ethernet
)。 - 创建一个桥接网卡: 然后,创建一个名为
br0
的桥接网卡。使用nmcli connection add
命令,其中:-con-name
指定连接名称,这里为br0
。-ifname
指定接口名称,这里也是br0
。-type
设置为bridge
,表示这是一个桥接网卡。-ipv4.method
设置为手动配置。-ipv4.addresses
设置 IP 地址和子网掩码,这里为192.168.1.200/24
。-ipv4.gateway
设置网关地址,这里为192.168.1.1
。-ipv4.dns
设置 DNS 服务器地址,这里为114.114.114.114
。-autoconnect
设置为yes
,表示自动连接。 - 绑定物理网卡: 将物理网卡
eno1
绑定到桥接网卡br0
上,使物理网卡成为桥接网卡的一部分。使用nmcli connection add type bridge-slave
命令,其中:-ifname
指定物理网卡接口名称,这里为eno1
。-master
指定桥接网卡名称,这里为br0
。 - 重启生效: 为了使配置生效,需要关闭并重新启动物理网卡和桥接网卡。使用
nmcli connection down
和nmcli connection up
命令,依次关闭eno1
和br0
,然后重新启动br0
。
版权归原作者 周同学的技术栈 所有, 如有侵权,请联系我们删除。