命令记不住

登陆

KVM 网络 NAT/Bridge/Route/Isolate

KVM网络NAT/Bridge/Route/Isolate

KVM环境下虚拟机网络架构

1. KVM环境网络介绍

KVM网络分为NAT、Bridge、Route、Isolate四种模式,在生产环境中,主要使用NAT模式、Bridge两种模式。

1.1.NET模式
默认的虚拟机网络是NAT模式,网段192.168.122.0/24,依赖内核转发。查看数据包转发内核参数 [root@kvm]# sysctl -a |grep ipv4 |grep forward,每起一台虚拟机在宿主机网卡上会生成一个新的 vnet1 vnet2 ...



实验:
1.默认NAT模式

[root@kvm]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

2.修改默认网络

[root@kvm]# virsh net-list
[root@kvm]# net-edit default

3.重启net

[root@kvm]# net-destroy default
[root@kvm]# net-start default

1.2.桥接模式
首先创建网桥卡

[root@kvm]# virsh iface-bridge eth0 br0

桥接模式:



1.关闭所有虚拟机查看网桥

[root@kvm]# virsh shutdown web01
[root@kvm]# brctl show
[root@kvm]# virsh start web01
[root@kvm]# brctl show      // 多出vnet0

2.实验:
1.桥接模式(新创建kvm机器)

[root@kvm]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

2.修改NAT模式的kvm机器为桥接模式
br0 虚拟网桥卡
1:创建桥接网卡

[root@kvm]# virsh iface-bridge eth0 br0

2.取消桥接网卡

[root@kvm]# virsh iface-unbridge br0

3.virsh edit centos7

[root@kvm]# virsh edit centos7

1)    <interface type='bridge'>
      <mac address='52:54:00:55:aa:fa'/>
2)      <source bridge='br0'/>

3.在宿主机上,重启虚拟机生效,测试虚拟机网络

1、NAT模式

NAT模式是在安装libvirt后使用的默认模式,虚拟网络交换机以NAT模式运行,NAT模式支持KVM主机与虚拟机相互访问,同时也支持虚拟机访问外部网络,但不支持外部网络访问虚拟机。简单来说,NAT模式下虚拟机获取的IP地址是192.168开头的地址池,属于NAT模式分配的IP地址,和KVM主机IP地址并没有在同一网段,所以KVM主机可以访问虚拟机而外部网络不能访问。

(1)CentOS7系统安装libvirt默认创建的virbr0接口

[root@kvm-centos7 /]# ip addr
8: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
 link/ether 52:54:00:89:5e:bd brd ff:ff:ff:ff:ff:ff
 inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
    valid_lft forever preferred_lft forever
(2)Ubuntu 18.04系统安装libvirt默认创建的virbr0接口

root@kvm-server:/# ip addr
7: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
 link/ether 52:54:00:ed:52:28 brd ff:ff:ff:ff:ff:ff
 inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
    valid_lft forever preferred_lft forever

// NAT模式在生产环境中一般用于虚拟桌面。

2、Bridge模式

Bridge模式可以让虚拟机和KVM主机在同一网段,这样的配置,外部网络就可以访问虚拟机提供的服务了。Bridge模式的做法是新创建配置文件,将其关联到KVM主机物理网卡,通过这样的方式实现Bridge访问。

(1)KVM主机物理网卡ens2f1配置信息

[root@kvm-centos7 /]# cat /etc/sysconfig/network-scripts/ifcfg-ens2f1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
BOOTPROTO=static
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens2f1
UUID=05146ffb-e6a3-46e8-b541-229195f0da8d
DEVICE=ens2f1
ONBOOT=yes
BRIDGE=br0  #关联到br0配置文件
PADDR=10.92.10.122
NETMASK=255.255.255.0
GATEWAY=10.92.10.254
DNS1=119.6.6.6

(2)新创建的br0网卡配置信息

[root@kvm-centos7 /]# cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
BOOTPROTO=static
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
UUID=05146ffb-e6a3-46e8-b541-229195f0da8d
DEVICE=br0
ONBOOT=yes
IPADDR=10.92.10.122
NETMASK=255.255.255.0
GATEWAY=10.92.10.254
DNS1=119.6.6.6
ZONE=public

(3)查看相关配置信息

[root@kvm-centos7 /]# ip addr
3: ens2f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
 link/ether 00:10:18:72:16:66 brd ff:ff:ff:ff:ff:ff
7: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
 link/ether 00:10:18:72:16:66 brd ff:ff:ff:ff:ff:ff
 inet 10.92.10.122/24 brd 10.92.10.255 scope global noprefixroute br0
    valid_lft forever preferred_lft forever
 inet6 fe80::6b72:c989:1193:d011/64 scope link noprefixroute 
    valid_lft forever preferred_lft forever

Bridge模式是生产环境中最常用的模式,用于虚拟机和外部网络的相互访问。

3、Route模式

Route模式属于特殊模式之一,使用Route模式,虚拟交换机连接到KVM主机物理网卡,在不使用NAT的情况下来回传输流量。使用Route模式时,所有虚拟机都位于其自己的子网中,通过虚拟交换机进行路由。外部网络不配置的路由信息是没法发现这些虚拟机,并且不能访问虚拟机。

4、Isolate模式

Isolate模式属于特殊模式之一,使用Isolate模式,连接到虚拟交换机的虚拟机可以相互通信,也可以与主机物理机通信,但其通信不会传到KVM主机外,也不能从KVM主机机外部接收通信。

2. 生产环境网络配置

在生产环境如何配置KVM主机以及虚拟机网络。

  • 场景:KVM主机上创建好的CentOS虚拟机需要对外提供服务,外部用户可以通过SSH访问虚拟机。
  • 分析:如果使用默认NAT模式,虚拟机可以访问外部网络,但是外部用户不能访问虚拟机,所以需要使用Bridge模式。

配置:通过创建桥接网络实现。

第1步,使用命令“yum install bridge-utils”安装桥接网络组件。

[root@kvm-centos7 ~]# yum install bridge-utils

第2步,选择KVM主机物理网络作为虚拟机对外通桥接网卡,推荐选择非KVM主机管理网络,案例中选择使用KVM主机enp2s0f1作为桥接网卡,查看配置文件。

[root@kvm-centos7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp2s0f1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
NAME=enp2s0f1
UUID=00421d64-dbef-47e2-a793-0305d05ecf79
DEVICE=enp2s0f1
ONBOOT=yes

第3步,通过复制网卡配置文件创建桥接网络br1。

[root@kvm-centos7 network-scripts]# cp ifcfg-enp2s0f1 ifcfg-br1
[root@kvm-centos7 network-scripts]# ls ifcfg-br1
ifcfg-br1
[root@kvm-centos7 network-scripts]# cat ifcfg-br1 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=enp2s0f1
UUID=00421d64-dbef-47e2-a793-0305d05ecf79
DEVICE=enp2s0f1
ONBOOT=yes

第4步,修改KVM主机配置enp2s0f1文件,注意添加BRIDGE以及NM_CONTROLLED两个参数。

[root@kvm-centos7 network-scripts]# vi ifcfg-enp2s0f1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp  #如果网络中存在DHCP服务器可以选择,也可手动指定
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=enp2s0f1
UUID=00421d64-dbef-47e2-a793-0305d05ecf79
DEVICE=enp2s0f1
ONBOOT=yes
BRIDGE=br1  #将物理网卡桥接到br1网卡,必须配置
NM_CONTROLLED=no  #配置是否NetworkManger服务控制该网络接口

第5步,修改桥接网卡br1配置文件,注意修改TYPE类为Bridge。

[root@kvm-centos7 network-scripts]# vi ifcfg-br1   
TYPE=Bridge  #将TYPE类型由Ethernet修改为Bridge,必须配置
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp  #如果网络中存在DHCP服务器可以选择,也可手动指定
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=br1
UUID=00421d64-dbef-47e2-a793-0305d05ecf79
DEVICE=br1
ONBOOT=yes

第6步,重启网络服务使用命令“brctl show”查看KVM主机物理网卡与桥接网卡建立是否正确,配置正确br1与enp2s0f1之间建立桥接关系。

[root@kvm-centos7 ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.001018721666       no              ens2f1
br1             8000.d8d385678b61       no              enp2s0f1
virbr0          8000.525400895ebd       yes             virbr0-nic

第7步,使用命令“virsh edit centos7-03”修改虚拟机配置文件。

[root@kvm-centos7 ~]# virsh edit centos7-03  
<interface type='bridge'>
      <mac address='52:54:00:bd:15:7a'/>
      <source bridge='br1'/>   #修改为新的桥接网络br1
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>

第8步,使用命令“brctl show”查看虚拟机与桥接网卡是否建立映射。

[root@kvm-centos7 ~]# brctl show             
bridge name     bridge id               STP enabled     interfaces
br0             8000.001018721666       no              ens2f1
br1             8000.d8d385678b61       no              enp2s0f1
                                                        vnet0
virbr0          8000.525400895ebd       yes             virbr0-nic

第9步,开启虚拟机电源,使用vnc viewer查看虚拟机获取的IP地址以及对外通信情况,通过外部ssh连接测试验证。

[1] https://opsxdev.com/opsxdevcom/20190304215354.png

[2] https://opsxdev.com/opsxdevcom/20190304215856.png