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 --noautoconsole2.修改默认网络
[root@kvm]# virsh net-list [root@kvm]# net-edit default3.重启net
[root@kvm]# net-destroy default [root@kvm]# net-start default1.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 // 多出vnet02.实验:
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 --noautoconsole2.修改NAT模式的kvm机器为桥接模式
br0 虚拟网桥卡
1:创建桥接网卡[root@kvm]# virsh iface-bridge eth0 br02.取消桥接网卡
[root@kvm]# virsh iface-unbridge br03.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 foreverBridge模式是生产环境中最常用的模式,用于虚拟机和外部网络的相互访问。
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连接测试验证。

