Xen

SSPN(單伺服器專用網路)上的 Xen 自動 dom0 IP 分配

  • April 25, 2019

我目前正在使用 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 附加到生成的介面,即使介面以不同的名稱生成?

任何指針表示讚賞。

經過幾天的修補,我得出結論,這是可能的。我在 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 重新掛載,但我不會在這裡跑題,因為它會跑題。

引用自:https://serverfault.com/questions/963843