简介

为节约软件License购买成本,在合理的、不被查封的情况下,通过技术手段来降低license开销,实现软件的正版激活。本方案是实现License共享的方案之一,另一个方案为vAPP方案,可参考文档《License共享:vAPP方案》。

主体思路

软件License通常会采集系统层级的硬件信息来区分主机,如网卡MAC、主板信息等。本方案主要通过底层硬件的虚拟化,将所有虚机的硬件信息虚拟化为同一个,使其在系统层级内部无法感知硬件层级的差异,从License检测层面来看,就是同一台机器。

局限性

该方案的局限性较大,只要有以下几点:

  1. 网卡MAC在同一个局域网内无法相同,所以需要隔离至不同的私网,会造成网络结构过于复杂。

  2. 每个软件检测硬件的信息方式不同,对于检测简单的软件可用该方法,检测复杂的软件不推荐该方式,适配难度过高。

  3. 软件License检测方式对适配而言均为黑盒,适配难度高。

  4. 该方案目前暂时未大规模使用测试,无法评估其法律风险。

虚拟化配置

CPU

使用host-passthrough模式即可,参考xml相关配置:

1
2
3
4
5
6
7
8
9
...
<cpu mode='host-passthrough' check='none'>
<topology sockets='2' cores='2' threads='2'/>
<feature policy='disable' name='hypervisor'/>
<numa>
<cell id='0' cpus='0-7' memory='33554432' unit='KiB' memAccess='shared'/>
</numa>
</cpu>
...

网卡

可通过OpenStack设置Port MAC地址,然后挂载给虚机使用。若直接使用KVM,则可直接配置xml即可,参考配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
<devices>
...
<interface type='bridge'>
<mac address='fa:16:3e:fa:21:60'/>
<source bridge='br-int'/>
<virtualport type='openvswitch'>
<parameters interfaceid='e0f2760f-3652-4d68-9332-f95b77c8ff03'/>
</virtualport>
<target dev='tape0f2760f-36'/>
<model type='virtio'/>
<mtu size='1500'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
...
</devices>
...

硬盘

磁盘需要使用直通方式,ceph rbd在系统内部无法读取产品序列号,也无法设置其厂商id和产品id。

SMBIOS System Information

  1. 屏蔽透传给主机的底层系统信息,可修改为PC厂商的信息,或直接使用host模式。

参考xml相关配置:

1
2
3
4
5
6
...
<os>
<smbios mode="host"/>
...
</os>
...

Windows系统内可通过systeminfo命令查看效果。

smbios mode为smbios时,系统内部可查看到的信息如下:

smbiosmodesmbios

smbios mode为host时,系统内部可查看到的信息如下:

smbios-mode-host

实测案例

本次测试,使用NVIDIA的vGPU License进行测试,验证硬件克隆是否可以实现License共享。NVIDIA License与MAC地址绑定,通过官网填写License Manager Server MAC申请license后,即可从License Manager Server导入license文件,启用License管理分发功能。

本轮测试进行如下两个方案验证:

  • 场景一:Client MAC一致,请求同一个License Manager Server,验证是否可复用同一个License名额。

  • 场景二:License Manager Server的MAC一致,验证是否可复用同一个License.bin文件

验证结果:

  • 场景一:无法实现复用,MAC一致,第二个Client在申请时可以申请成功,但是会把第一个Client挤下去,无法实现共享。

  • 场景二:可以实现复用,多台License Manager Server MAC一致,网络隔离情况下,均可使用同一个License.bin文件,进行License分发。

参考文档