0
点赞
收藏
分享

微信扫一扫

KVM对多VLAN的支持

虚拟局域网(Virtual LAN,VLAN)是物理网络中的逻辑网络,它提高了网络管理的安全性与灵活性。通过使用VLAN标记,可以将每个以太网端口都视为包含许多逻辑端口。通过合理的规划与配置,可以在一台KVM宿主机中运行属于不同VLAN的虚拟机,如图1所示。

KVM对多VLAN的支持_配置文件

图1 同一个宿主机中可以运行属于多个不同VLAN的虚拟机

图中的物理网络有两个VLAN,其ID分别是11和12。虚拟机centos6.10属于ID为11的VLAN,,虚拟机Win2k3则属于ID为12的VLAN。

首先,需要在宿主机现有接口(例如以太网卡,绑定网卡或网桥设备)上创建VLAN接口,图5-35中这个接口是物理网卡ens32。在ens32上创建两个使用不同VLAN ID的虚拟网络接口VLAN11和VLAN12,ens32被称为VLAN11、VLAN12的“父”接口。

然后再创建两个网桥virbr1和virbr2。其中virbr1的子接口是VLAN11,virbr2的子接口是VLAN12。

将虚拟机centos6.10桥接到virbr1,而虚拟机Win2k3则需要桥接到virbr2。

在宿主机所在的物理网络中也需要进行设置,主要就是将宿主机网卡ens32所连接的交换机端口配置为trunk模式。

1 创建支持VLAN网络接口​

Linux是通过在内核中加载8021q模块来实现VLAN功能的。在RHEL/CentOS 8中,默认情况下会根据需要自动加载8021q模块。在其他的Linux发版本中,可能还需要使用modprobe命令来手工加载。

在RHEL/CentOS 8中,既可以通过iproute2、NetworkManager、Cockpit等多种工具来管理VLAN,也可以直接编辑/etc/sysconfig/network-scripts/目录下的网络接口脚本文件来实现VLAN的管理。由于iproute2中的ip命令所创建的VLAN不是永久性的,所以不推荐使用。下面,我们通过nmcli和Cockpit来两种工具来创建和管理VLAN。

1 # ip address 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:b3:73:36 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.231/24 brd 192.168.1.255 scope global noprefixroute ens32
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feb3:7336/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:fd:b2:60 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
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:fd:b2:60 brd ff:ff:ff:ff:ff:ff

2 # ls /etc/sysconfig/network-scripts/
ifcfg-ens32

3 # cat /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.1.231
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8

通过第1行命令查看当前网络接口的地址信息

第2行命令显示在/etc/sysconfig/network-scripts/目录中仅有ens32的接口配置文件ifcfg-ens32。通过第3行命令查看文件的内容,这是1个精简后过配置文件,仅保留必要的设置值。

4 # nmcli connection add type vlan con-name vlan11 ifname vlan11 vlan.parent ens32 vlan.id 11
Connection 'vlan11' (76131bf6-2889-4e44-9a4a-90281bd2e22a) successfully added.

5 # nmcli connection modify vlan11 ipv4.addresses '192.168.11.231/24' ipv4.gateway 192.168.11.1 ipv4.method manual

6 # nmcli connection up vlan11
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/10)

我们先通过NetworkManager的命令行工具nmcli来创建新连接。  

第4行命令创建一个新的连接,通过type指定类型为vlan,con-name指定新连接的名称为vlan11,ifname指定的接口名称也是vlan11,vlan.parent指定父接口是ens32,vlan.id指定VLAN的ID是11。

第5行命令设置VLAN网络接口的IPv4地址、网关和分配地址的模式。

第6行命令激活这个连接。

7 # ip -d address show vlan11  
10: vlan11@ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:b3:73:36 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 0 maxmtu 65535
vlan protocol 802.1Q id 11 <REORDER_HDR> numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
inet 192.168.11.231/24 brd 192.168.11.255 scope global noprefixroute vlan11
valid_lft forever preferred_lft forever
inet6 fe80::1db2:9a6c:6979:894e/64 scope link noprefixroute
valid_lft forever preferred_lft forever

8 # ip -d address show ens32
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:b3:73:36 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 46 maxmtu 16110 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
inet 192.168.1.231/24 brd 192.168.1.255 scope global noprefixroute ens32
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feb3:7336/64 scope link
valid_lft forever preferred_lft forever

在第7行命令中使用了-d选项,会显示连接的详细信息。自动生成的连接名称“vlan11@ens32”很直观,表示vlan11是在ens32之上实现的。除了IP地址等基本信息之外,“vlan protocol 802.1Q id 11”显示VLAN的协议和ID号。

对比一下第8行命令的输出,会发现新创建的vlan11“借用”了ens32的MAC地址“00:0c:29:b3:73:36”。

9 # cat /etc/sysconfig/network-scripts/ifcfg-vlan11  
VLAN=yes
TYPE=Vlan
PHYSDEV=ens32
VLAN_ID=11
REORDER_HDR=yes
GVRP=no
MVRP=no
HWADDR=
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=vlan11
UUID=76131bf6-2889-4e44-9a4a-90281bd2e22a
DEVICE=vlan11
ONBOOT=yes
IPADDR=192.168.11.231
PREFIX=24
GATEWAY=192.168.11.1

NetworkManager创建新的VLAN接口,还会在/etc/sysconfig/network-scripts/目录中创建网络接口配置文件,第9行命令显示了这配置文件的内容,其中最重要的属性有:

(1)VLAN=yes。

(2)TYPE=Vlan。

(3)PHYSDEV=ens32。

(4)VLAN_ID=11。

(5)DEVICE=vlan11。

(6)ONBOOT=yes。


提示:可以通过man nm-settings-ifcfg-rh来获得/etc/sysconfig/network-scripts/ifcfg-*设置的详细说明。

10 # lsmod | grep 8021q
8021q 40960 0
garp 16384 1 8021q
mrp 20480 1 8021q

当激活VLAN网络接口时,NetworkManager会自动将8021q模块加载到内核中,可以从第10行命令的输出中看到这个模块。

相对于nmcli,通过Cockpit来创建新的VLAN接口特别简单。

(1)在Cockpit左边导航中单击Networking,会显示当前的所有网络接口,如图2所示。

(2)单击Add VLAN按钮。


KVM对多VLAN的支持_centos_02

图2 Cockpit中的网络接口信息

(3)在VLAN Setting对话框中,选择要为其创建VLAN的物理接口ens32,设置VLAN ID为12,设置接口名称为vlan12,然后单击Apply按钮完成创建,如图5-37所示。


KVM对多VLAN的支持_配置文件_03

图3 设置新VLAN网络接口的信息


(4)新VLAN创建完毕,如图4所示。单击Configure IP链接配置网络设置。

KVM对多VLAN的支持_centos_04

图4 包括有新网络接口的列表

(5)在IPv4 Setting对话框中设置IP地址及缺省网关等设置,然后单击Apply按钮保存配置。如图5所示。

KVM对多VLAN的支持_VLAN_05

图5 为新的网络接口设置IP地址等信息

Cockpit也还会在/etc/sysconfig/network-scripts/目录中创建网络接口配置文件ifcfg-vlan12。

11 # cat /etc/sysconfig/network-scripts/ifcfg-vlan12
VLAN=yes
TYPE=Vlan
PHYSDEV=ens32
VLAN_ID=12
REORDER_HDR=yes
GVRP=no
MVRP=no
HWADDR=
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=vlan12
UUID=ae59cf5b-f088-4ba6-9f20-7eb2def383fe
DEVICE=vlan12
ONBOOT=yes
IPADDR=192.168.12.231
PREFIX=24
GATEWAY=192.168.12.1
PEERDNS=no
PEERROUTES=no

提示:也可以通过在/etc/sysconfig/network-scripts/目录中创建新的配置文件的方法来创建新的支持的VLAN接口。

2 创建使用VLAN网络接口的网桥​

有了两个支持VLAN的网络接口VLAN11和VLAN12,根据图5-35所示的拓扑,我们就需要在宿主机上创建两个网桥virbr1和virbr2。VLAN11是virbr1的子接口,VLAN12是virbr2的子接口。

与前面创建网桥方法类似,最简单的方法是通过Cockpit来创建。

(1)在Cockpit左边导航中单击Networking,会显示当前的所有网络接口,如图6所示。

(2)单击Add Bridge按钮。

KVM对多VLAN的支持_配置文件_06

图6 Cockpit中的网络接口信息

(3)在Bridge Setting对话框中,设置网桥名为virbr1,选择子接口为vlan11,然后单击Apply按钮完成创建,如图7所示。

KVM对多VLAN的支持_VLAN_07

图7 设置新网桥的信息

4. 类似地再创建使用VLAN12的新网桥virbr2,最后的结果如图8所示。

KVM对多VLAN的支持_VLAN_08

图8 包括有新网桥的列表

3 配置虚拟机使用VLAN​

将虚拟机centos6.10桥接到virbr1,而虚拟机Win2k3则需要桥接到virbr2。如果使用的是Cockpit,在Interface Type选择Bridge to LAN,在Source中选择适当的网桥,如图5-43所示。

KVM对多VLAN的支持_配置文件_09

图9 使用Cockpit更新虚拟机的网络配置

也可以通过virsh的edit等子命令来修改虚拟机的配置文件,最重要的是<source bridge='virbr1'/>这一行的设置。

<interface type='bridge'>
<mac address='52:54:00:32:f8:e2'/>
<source bridge='virbr1'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

在此实验环境中,我们可以使用Wireshark等协议分析工具在宿主机外面的网络中抓到来虚拟机而且打有VLAN标记的数据包,如图10所示。

KVM对多VLAN的支持_VLAN_10

图10 来自虚拟机centos6.10的带有VLAN标记的数据包

更多精彩内容:​​https://edu.51cto.com/topic/925.html​​ 

举报

相关推荐

0 条评论