KVM网络全解析:四种模式让你轻松驾御虚拟机网络

打印 上一主题 下一主题

主题 529|帖子 529|积分 1587


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 后就会有一个网卡。
  1. virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  2.     inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
  3.     ether 52:54:00:72:d3:68 txqueuelen 1000 (Ethernet)
  4.     RX packets 147745 bytes 8418411 (8.0 MiB)
  5.     RX errors 0 dropped 0 overruns 0 frame 0
  6.     TX packets 246399 bytes 3673149 (350.2 MiB)
  7.     TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
复制代码
默认使用的地址是: 192.168.122.0 网段,该 virbr0 IP 地址也是使用 NAT 网络虚拟机的网关,虚拟机上网是通过防火墙配置 NAT 转换规则实现的。
virbr0 是一个桥接器,接收所有到网络 192.168.122.* 的内容。从下面命令可以验证:
  1. brctl show
  2. bridge name bridge id       STP enabled  interfaces
  3. virbr0       8000.525400e6456c  yes          virbr0-nic
复制代码
同时,虚拟机支持模块会修改 iptables 规则,通过命令可以查察:
  1. iptables -t nat -L -nv
  2. Chain PREROUTING (policy ACCEPT 16924 packets, 2759K bytes)
  3. pkts bytes target  prot opt in  out source  destination
  4. Chain POSTROUTING (policy ACCEPT 2009 packets, 125K bytes)
  5. pkts bytes target  prot opt in  out source  destination
  6. 421 31847 MASQUERADE  all -- * * 192.168.122.0/24 !192.168.122.0/24  ---->这条是关键,它配置了 NAT 功能。
  7. Chain OUTPUT (policy ACCEPT 2011 packets, 125K bytes)
  8. pkts bytes target  prot opt in  out source  destination
复制代码
  1. iptables -t filter -L -nv
  2. Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
  3. pkts bytes target  prot opt in  out source  destination
  4. 1 74 ACCEPT  udp  -- virbr0 * 0.0.0.0/0  udp dpt:53
复制代码
创建步骤
  1. virsh net-define /usr/share/libvirt/networks/default.xml
复制代码
此命令界说一个虚拟网络,default.xml 的内容:
  1. <network>
  2.   <name>default</name>
  3.   <bridge name='virbr0'/>
  4.   <forward/>
  5.   <ip address='192.168.122.1' netmask='255.255.255.0'>
  6.     <dhcp>
  7.       <range start='192.168.122.2' end='192.168.122.254'/>
  8.     </dhcp>
  9.   </ip>
  10. </network>
复制代码
也可以修改 xml,创建自己的虚拟网络。
标记为主动启动
  1. virsh net-autostart default
  2. Network default marked as autostarted
复制代码
启动网络
  1. virsh net-start default
  2. Network default started
复制代码
网络启动后可以用命令 brctl show 查察和验证
修改 /etc/sysctl.conf 中参数,答应 IP 转发:
  1. net.ipv4.ip_forward=1
复制代码
桥接网络

桥接网络答应虚拟机像物理主机一样接入物理网络,实现虚拟机与物理网络中的其他装备直接通讯。下面是配置桥接网络的具体步骤,以CentOS操纵系统为例。

  • 给物理网卡设置 IP 信息
    使用 nmcli 命令配置物理网卡的 IP 地址、网关和 DNS 服务器。
    1. 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 type 802-3-ethernet
    复制代码
  • 创建一个桥接网卡
    使用 nmcli 命令创建桥接网卡,并设置桥接网卡的 IP 地址、网关和 DNS 服务器。
    1. 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 命令将物理网卡绑定到桥接网卡上。
    1. nmcli connection add type bridge-slave ifname eno1 master br0
    复制代码
  • 重启见效
    关闭并重新启动物理网卡和桥接网卡以应用配置。
    1. nmcli connection down eno1
    2. nmcli connection down br0
    3. nmcli 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。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表