Share via


錯誤0xC004F074「無法連絡任何密鑰管理服務 (KMS) 」

本文討論如何解決當您嘗試在 Microsoft Azure 中啟用 Windows 虛擬機 (VM) 時所發生的0xC004F074錯誤。

必要條件

徵狀

當您嘗試啟用 Azure Windows VM 時,您會在 Windows 腳本主機中遇到下列錯誤訊息:

錯誤:0xC004F074 軟體授權服務報告無法啟動電腦。 無法連絡任何金鑰管理服務 (KMS) 。 如需其他資訊,請參閱應用程式事件記錄檔。

原因

VM 無法連線到 KMS 服務進行啟用。 如果 Azure KMS 用於啟用 (預設選取範圍) ,則啟用要求必須來自 Azure 公用 IP 位址。 此連線失敗的可能原因包括:

  • 強制通道,其中所有流量都會路由傳送至 Azure 外部 (通常使用 Azure ExpressRoute 或網路虛擬設備) 內部部署環境

  • 網路虛擬設備或標準內部負載平衡器封鎖的流量

調查

若要判斷問題的特定原因,請遵循下列各節中的三部分程式。

第 1 部分:設定適當的 KMS 用戶端安裝金鑰

注意事項

Azure 虛擬桌面) 中執行 Windows 10 企業版 多重工作階段 (也稱為虛擬桌面) Windows 10 企業版 的 VM 不需要此部分。

若要判斷您的 VM 是否正在執行多重工作階段版本,請執行下列軟體授權管理員腳本命令:

slmgr.vbs /dlv

如果輸出包含 Name: Windows(R), ServerRdsh edition 字串,則 VM 會執行多重工作階段版本,而您可以略過此部分的其餘部分。

注意事項

如果您部署 Windows 10 企業版 多重會話 VM,然後將產品金鑰更新為另一個版本,則無法將 VM 還原為 Windows 10 企業版 多重會話。 相反地,您必須重新部署 VM。 如需詳細資訊, 請參閱我可以將 Windows VM 升級至 Windows 企業版多重會話嗎?

針對從自定義映像建立的 VM,您必須為 VM 設定適當的 KMS 用戶端安裝金鑰。 依照下列步驟執行:

  1. 在提升許可權的 [命令提示字元] 視窗中,執行下列軟體許可證管理員腳本命令:

    cscript c:\windows\system32\slmgr.vbs /dlv
    
  2. Description檢查輸出中的值,以判斷 VM 是從零售 (RETAIL 通道建立,) 還是大量 () VOLUME_KMSCLIENT 授權媒體。

  3. 如果先前的命令輸出指出通道 RETAIL ,請執行下列軟體許可證管理員腳本命令。 第一個命令會設定所使用之 Windows Server 版本的 KMS 用戶端安裝金鑰 ,而第二個命令會強制進行另一次啟用嘗試。

    cscript c:\windows\system32\slmgr.vbs /ipk <kms-client-setup-key>
    cscript c:\windows\system32\slmgr.vbs /ato
    

    例如,如果您使用 Windows Server 2016 Datacenter,第一個命令會如下所示:

    cscript c:\windows\system32\slmgr.vbs /ipk CB7KF-BWN84-R7R2Y-793K2-8XDDG
    

第 2 部分:檢查 VM 是否位於標準 SKU 內部負載平衡器後方

請遵循下列步驟來檢查 VM 是否位於預設封鎖輸出因特網流量的標準 SKU 內部負載平衡器後方:

  1. [Azure 入口網站 中,搜尋並選取 [虛擬機]

  2. 在虛擬機清單中,選取 VM 的名稱。

  3. 在 VM 的功能表窗格中,找出 [ 網络] 標題,然後選取 [ 負載平衡]。 如果您看到訊息指出 沒有要顯示的負載平衡資源,則 VM 不在任何負載平衡器後方。 在此情況下,您可以繼續進行 第 3 部分:確認 VM 與 Azure KMS 服務之間的連線

  4. 如果您看到負載平衡器資源,請選取負載平衡器的名稱,以移至負載平衡器的 [ 概觀 ] 頁面。

  5. 在負載平衡器的功能表窗格中,選取 [ 屬性]

  6. 在 [ 屬性] 頁面上,找出 [SKU ] 和 [ 負載平衡類型] 的值,然後查看下表以取得結論。

    SKU負載平衡類型的值 總結
    SKU 值為 Standard而負載平衡類型 值為 Private VM 位於標準 SKU 內部負載平衡器後方,預設會封鎖輸出因特網流量。 若要啟用輸出連線,請參閱 解決方案 2: (針對標準內部負載平衡器) 使用 NAT 閘道或標準公用負載平衡器
    SKU 值不是 標準值, 而負載平衡類型 值為 Public VM 不在標準 SKU 內部負載平衡器後方,且預設不會封鎖輸出因特網流量。 繼續進行 第 3 部分:確認 VM 與 Azure KMS 服務之間的連線

第3部分:確認 VM 與 Azure KMS 服務之間的連線

  1. 請確定 VM 已設定為使用正確的 Azure KMS 伺服器。 若要這樣做,請執行下列軟體許可證管理員腳本命令:

    Invoke-Expression "$env:windir\system32\cscript.exe $env:windir\system32\slmgr.vbs /skms azkms.core.windows.net:1688"
    

    此指令應該會傳回下列文字:

    金鑰管理服務電腦名稱設定為成功 azkms.core.windows.net:1688。

  2. 請確定 VM 中的防火牆不會封鎖埠 1688 上 KMS 端點的輸出網路流量。 若要這樣做,請套用下列其中一個選項:

    • 在 PowerShell 中執行 Test-NetConnection Cmdlet 以檢查連線能力:

      Test-NetConnection azkms.core.windows.net -port 1688
      

      如果允許連線嘗試,Cmdlet 會在輸出文字中顯示 「TcpTestSucceeded: True」。

    • 執行 PsPing 工具來檢查連線能力:

      .\psping.exe azkms.core.windows.net:1688
      

      在命令輸出中,第二行到最後一行應該類似下列文字:

      Sent = 4, Received = 4, Lost = 0 (0% loss)

      如果 Lost 大於 0 (零) ,VM 就無法連線到 KMS 伺服器。 在此情況下,如果 VM 位於虛擬網路中且已指定自訂 DNS 伺服器,您必須確定 DNS 伺服器可以解 azkms.core.windows.net 析功能變數名稱。 如果無法,請將 DNS 伺服器變更為可解析 的 azkms.core.windows.net伺服器。

      注意事項

      如果您從虛擬網路移除所有 DNS 伺服器,VM 會使用 Azure 的內部 DNS 服務。 此服務可以解析 kms.core.windows.net

  3. 使用 Azure 網路監看員 下一個躍點測試,確認下一個躍點類型是從受影響 VM 到特定目的地的因特。 若要套用下一個躍點測試,請遵循下列步驟:

    1. [Azure 入口網站 中,搜尋並選取 [虛擬機]

    2. 在虛擬機清單中,選取 VM 的名稱。

    3. 在 VM 的功能表窗格中,找出 [ 說明 ] 標題,然後選取 [ 連線疑難解答]

    4. 在 VM 的 [ 連線疑難解答 ] 頁面上,指定下列域值。

      欄位
      目的地類型 手動指定
      URI、FQDN 或 IP 位址 適用於) 的 20.118.99.22440.83.235.53 (azkms.core.windows.net ,或適用於您區域之適當 KMS 端點的 IP
      目的地埠 1688
      來源埠 1688
      診斷測試 下一個躍點
    5. 選取 [ 執行診斷測試 ] 按鈕。

    6. 診斷測試完成之後,請檢閱按鈕下方的 [ 結果 ] 方塊。 從來源) 測試 (下一個躍點的 [狀態] 值應為 [成功],而 [詳細數據] 值應包含文字中的 [下一個躍點類型:因特網]。 如果下一個躍點類型是 因特網,請針對每個剩餘的IP重複下一個躍點測試。 不過,如果下一個躍點類型顯示為 VirtualApplianceVirtualNetworkGateway 或因特 以外的任何專案,則可能會發生下列其中一個案例:

      • 默認路由會在流量傳送至 Azure KMS 端點之前,將流量路由傳送至 Azure 外部。

      • 流量在路徑的某處遭到封鎖。

      針對這些案例,請參閱 解決方案 1: (針對強制通道) 使用 Azure 自定義路由將啟用流量路由傳送至 Azure KMS 伺服器

  4. 確認連線azkms.core.windows.net成功之後,請在提升許可權的 Windows PowerShell 提示字元執行下列命令。 這個指令會嘗試啟動 Windows VM 數次:

    1..12 | ForEach-Object {
        Invoke-Expression "$env:windir\system32\cscript.exe $env:windir\system32\slmgr.vbs /ato";
        Start-Sleep 5
    }
    

    如果啟用嘗試成功,命令會顯示類似下列文字的訊息:

    啟用 Windows (R) ,Server Datacenter edition (<kms-client-product-key>) ...產品已成功啟用。

解決方案 1: (針對強制通道) 使用 Azure 自定義路由將啟用流量路由傳送至 Azure KMS 伺服器

如果原因是在 Azure 外部路由傳送流量的強制通道案例,請與您的網路管理員合作,以判斷正確的動作方向。 在強制通道案例中,Windows 啟用失敗的解決方案一節會說明其中一個可能的解決方案。 如果此解決方案與貴組織的原則一致,請套用此解決方案。

解決方案 2: (針對標準內部負載平衡器) 使用 NAT 閘道或標準公用負載平衡器

如果標準內部負載平衡器封鎖流量,則有兩種不同的方法可修正此問題,如 使用來源網路位址轉換 (輸出連線的 SNAT) 中所述:

建議您使用 Azure 虛擬網路 NAT 設定,在生產環境部署中進行輸出連線。 如需 Azure NAT 閘道的詳細資訊,請參閱 什麼是 Azure NAT 閘道。

不過,如果需要封鎖所有因特網流量,請確定您在必須啟用的 VM 子網上使用網路安全組 (NSG) 規則來拒絕輸出因特網存取。 請注意,由於平臺內部規則,連至埠 1688 上 KMS IP 的作業系統啟用流量仍會保持啟用狀態。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 意應見反社群