Xen 在 SSPN(单服务器专用网络)上自动分配 dom0 IP

Xen 在 SSPN(单服务器专用网络)上自动分配 dom0 IP

我目前正在使用 XCP-ng 7.6.3,并且想要增加一点安全性并利用流量整形,我决定使用 PCI 直通 NIC。为了能够访问 dom0,我创建了一个仅在 dom0 和位于 domU 中的防火墙之间共享的 SSPN。启动 domU 会生成一个vif<X>.<Y>附加的虚拟接口xapi<Z>,通过手动为后者分配 IP,我可以在管理中启用远程功能。到目前为止一切顺利,一切都按预期运行。

问题是,我没有找到让 dom0 在启动虚拟接口时自动为自己分配 IP 的方法。我查看了 XCP、Xen 和 XenServer 文档很长时间,但只能找到自动为另一端的 domU 分配 IP 的方法,而不是 dom0。可以自动执行此操作吗?

如果不是通过 xapi/XCP 配置,是否有办法(甚至是脚本)以编程方式将静态 IP 附加到生成的接口,即使接口以不同的名称生成?

任何指示都值得赞赏。

答案1

经过几天的摸索,我得出结论,这是可能的。我借助 dom0 中的 XenAPI python 模块,用 python 编写了一个服务。存储库在这里信息和手册参考这里

简而言之,如下所示的代码片段:

with xenapi_session() as x:
    vms = x.VM.get_all_records()  # Get a list of VMs for multiple uses

    # Find the ObscureRef of the target VM
    vmref = [k for k in vms.keys() if vms[k]['name_label'] == VMNAME][0]

    # Non-blocking listen for VM events
    token = ''  # Initial token
    while bEndless:
        output = x.event_from(['VM'], token, EVT_TIMEOUT)
        token = output['token']  # Current token

        for event in output['events']:
            # Check the IP assigned to the VIFs of the target VM, if it's running
            if (('add' == event['operation']) or
                    ('mod' == event['operation'])) and \
                    (vmref == event['ref']) and \
                    ('Running' == x.VM.get_power_state(vmref)):
                if 'snapshot' not in event:
                    continue
                vifs = event['snapshot']['VIFs']  # Virtual interfaces list
                for vif in vifs:
                    net = x.VIF.get_network(vif)  # Network ref
                    netrec = x.network.get_record(net)  # Network record
                    if SSPNNAME != netrec['name_label']:
                        continue

                    # netrec['bridge'] holds the xapiN identifier that can
                    # be used with "ip addr add"
                    rebind_ip_address(netrec['bridge'])

几乎就是制作一个可以完成我最初要求的服务所需的全部内容。最后,我在服务器中添加了一些更有用的功能,例如自动 NFS/CIFS SR 重新挂载,但我不会在这里离题,因为这会偏离主题。

相关内容