在 Windows 上設定點對站 (P2S) VPN 以用於 Azure 檔案儲存體

您可以使用點對站 (P2S) VPN 連線,從 Azure 外部透過 SMB 掛接 Azure 檔案共用,而不需要開啟連接埠 445。 點對站 VPN 連線是 Azure 與個別用戶端之間的 VPN 連線。 若要將 P2S VPN 連線用於 Azure 檔案儲存體,您必須針對各個要連接的用戶端設定 VPN 連線。 如果您有許多用戶端需要從內部部署網路連線至 Azure 檔案共用,您可以對每個用戶端使用站對站 (S2S) VPN 連線,而不使用點對站連線。 若要深入了解,請參閱設定站對站 VPN 以用於 Azure 檔案儲存體

強烈建議您先閱讀直接 Azure 檔案共用存取的網路考量,再繼續閱讀此操作說明文章,以充分了解適用於 Azure 檔案儲存體的網路選項。

本文將詳細說明在 Windows (Windows 用戶端和 Windows Server) 上設定點對站 VPN,以直接在內部部署掛接 Azure 檔案共用的步驟。 如果您想要透過 VPN 來路由傳送 Azure 檔案同步流量,請參閱設定 Azure 檔案同步 Proxy 和防火牆設定

適用於

檔案共用類型 SMB NFS
標準檔案共用 (GPv2)、LRS/ZRS Yes No
標準檔案共用 (GPv2)、GRS/GZRS Yes No
進階檔案共用 (FileStorage)、LRS/ZRS Yes No

必要條件

  • 最新版本的 Azure PowerShell 模組。 請參閱安裝 Azure PowerShell 模組

  • 您要在內部部署掛接的 Azure 檔案共用。 Azure 檔案共用會部署在儲存體帳戶中,也就是代表儲存體共用集區的管理結構,您可以在此集區中部署多個檔案共用,以及其他儲存體資源。 在建立 Azure 檔案共用中深入了解如何部署 Azure 檔案共用和儲存體帳戶。

  • 具有儲存體帳戶私人端點的虛擬網路,包含要在內部部署掛接的 Azure 檔案共用。 若要了解如何建立私人端點,請參閱設定 Azure 檔案儲存體網路端點

  • 您必須在虛擬網路上建立閘道子網路。 若要建立閘道子網路,請登入 Azure 入口網站,瀏覽至虛擬網路,選取 [設定] > [子網路],然後選取 [+ 閘道子網路]。 當您建立閘道子網路時,您可指定子網路包含的 IP 位址數目。 所需的 IP 位址數目取決於您想要建立的 VPN 閘道組態。 最好指定 /27 或更大 (/26、/25 等) 以允許足夠的 IP 位址進行未來的變更,例如新增 ExpressRoute 閘道。

收集環境資訊

設定點對站 VPN 之前,您需要收集一些環境相關資訊。

若要使用 Azure 入口網站設定點對站 VPN,您必須知道資源組名稱、虛擬網路名稱、閘道子網路名稱和儲存體帳戶名稱。

建立 VPN 驗證的根憑證

若要驗證來自內部部署 Windows 電腦的 VPN 連線以存取您的虛擬網路,您必須建立兩個憑證:

  1. 根憑證,將提供給虛擬機器閘道
  2. 用戶端憑證,將會使用根憑證簽署

您可以使用透過企業解決方案產生的根憑證,也可以產生自我簽署憑證。 如果您使用企業解決方案,請從 IT 組織取得根憑證的 .cer 檔案。

如果您未使用企業憑證解決方案,請使用此 PowerShell 指令碼建立自我簽署的根憑證。 部署虛擬網路閘道之後,您將建立用戶端憑證。 可能的話,請將 PowerShell 工作階段保留為開啟狀態,因此在本文稍後建立用戶端憑證時,您不需要重新定義變數。

重要

從執行 Windows 10/Windows Server 2016 或更新版本的內部部署電腦中,以系統管理員身分執行此 PowerShell 指令碼。 請勿從 Azure 中的 Cloud Shell 或 VM 執行此指令碼。

$rootcertname                = 'CN=P2SRootCert'
$certLocation                = 'Cert:\CurrentUser\My'
$vpnTemp                     = 'C:\vpn-temp'
$exportedencodedrootcertpath = "$vpnTemp\P2SRootCertencoded.cer"
$exportedrootcertpath        = "$vpnTemp\P2SRootCert.cer"

if (-Not (Test-Path -Path $vpnTemp -PathType Container)) {
    New-Item -ItemType Directory -Force -Path $vpnTemp | Out-Null
}

if ($PSVersionTable.PSVersion.Major -ge 6) {
    Import-Module -Name PKI -UseWindowsPowerShell
}

$selfSignedCertParams = @{
    Type              = 'Custom'
    KeySpec           = 'Signature'
    Subject           = $rootcertname
    KeyExportPolicy   = 'Exportable'
    HashAlgorithm     = 'sha256'
    KeyLength         = '2048'
    CertStoreLocation = $certLocation
    KeyUsageProperty  = 'Sign'
    KeyUsage          = 'CertSign'
}
$rootcert = New-SelfSignedCertificate @selfSignedCertParams

Export-Certificate -Cert $rootcert -FilePath $exportedencodedrootcertpath -NoClobber | Out-Null

certutil -encode $exportedencodedrootcertpath $exportedrootcertpath | Out-Null

$rawRootCertificate = Get-Content -Path $exportedrootcertpath

$rootCertificate = ''

foreach ($line in $rawRootCertificate) { 
    if ($line -notlike '*Certificate*') { 
        $rootCertificate += $line 
    } 
}

部署虛擬網路閘道

Azure 虛擬網路閘道是您的內部部署 Windows 機器所將連線到的服務。 如果尚未執行此操作,必須先在虛擬網路上建立閘道子網路,才能部署虛擬網路閘道。

部署虛擬網路閘道需要兩個基本元件:

  1. 一個公用 IP 位址,用於識別用戶端在世界各地的閘道
  2. 您在上一步中建立的根憑證,將用於驗證用戶端

您可以使用 Azure 入口網站或 Azure PowerShell 來部署虛擬網路閘道。 部署最多需要 45 分鐘的時間才能完成。

若要使用 Azure 入口網站部署虛擬網路閘道,請遵循下列指示。

  1. 登入 Azure 入口網站

  2. 在 [搜尋資源、服務和文件] 中,輸入虛擬網路閘道。 在 Marketplace 搜尋結果中找出 [虛擬網路閘道],然後選取該項目。

  3. 選取 [+ 建立] 以建立新的虛擬網路閘道。

  4. 在 [基本] 索引標籤中,填入 [專案詳細資料] 和 [執行個體詳細資料] 的值。

    Screenshot showing how to create a virtual network gateway using the Azure portal.

    • 訂用帳戶:從下拉式清單選取您想要使用的訂用帳戶。
    • 資源群組:當您在此頁面上選取您的虛擬網路時,會自動填入此設定。
    • 名稱:為您的閘道命名。 為您的閘道命名與為閘道子網路命名不同。 這是您要建立之閘道物件的名稱。
    • 區域:選取您要在其中建立此資源的區域。 閘道的區域必須與虛擬網路相同。
    • 閘道類型︰選取 [VPN]。 VPN 閘道使用 VPN 虛擬網路閘道類型。
    • SKU:從下拉式清單選取支援您要使用的功能的閘道 SKU。 請參閱閘道 SKU。 請勿使用基本 SKU,因為其不支援 IKEv2 驗證。
    • 世代:選取您要使用的世代。 我們建議使用第 2 代 SKU。 如需詳細資訊,請參閱閘道 SKU
    • 虛擬網路:從下拉式清單選取您要新增此閘道的虛擬網路。 如果您看不到想要建立閘道的虛擬網路,請確定您選取了正確的訂用帳戶和區域。
    • 子網路:此欄位應呈現灰色,並列出您建立的閘道子網路名稱及其 IP 位址範圍。 如果您看到 [閘道子網路位址範圍] 欄位,則表示您尚未設定閘道子網路 (請參閱必要條件)。
  5. 指定與虛擬網路閘道相關聯之 [公用 IP 位址] 的值。 建立虛擬網路閘道時,系統會將公用 IP 位址指派給此物件。 主要公用 IP 位址只會在刪除或重新建立閘道時變更。 不會因為重新調整、重設或其他內部維護/升級而變更。

    Screenshot showing how to specify the public IP address for a virtual network gateway using the Azure portal.

    • 公用 IP 位址:將 [新建] 保持選取。
    • 共用 IP 位址名稱:在文字方塊中,輸入公用 IP 位址執行個體的名稱。
    • 公用 IP 位址 SKU:系統會自動選取設定。
    • 指派:指派通常是自動選取的,可以是動態或靜態。
    • 啟用主動-主動模式:選取 [已停用]。 只有當您要建立主動-主動閘道設定時,才能啟用此設定。
    • 設定 BGP:選取 [已停用] (除非您的組態特別需要此設定)。 如果您需要此設定,則預設的 ASN 為 65515,不過您可以變更此值。
  6. 選取 [檢閱 + 建立] 以執行驗證。 驗證通過後,選取 [建立] 以部署虛擬網路閘道。 部署最多需要 45 分鐘的時間才能完成。

  7. 當部署完成時,請選取 [前往資源]

  8. 在左窗格中,選取 [設定] > [點對站組態],然後選取 [立即設定]。 您應該會看到 [點對站設定] 頁面。

    Screenshot showing how to configure a point-to-site VPN using the Azure portal.

    • 位址集區:新增您想要使用的私人 IP 位址範圍。 VPN 用戶端會動態收到您指定範圍內的 IP 位址。 主動/被動設定的最小子網路遮罩為 29 位元,主動/主動設定的最小子網路遮罩為 28 位元。
    • 通道型別:指定您想要使用的通道型別。 透過原生 Windows VPN 用戶端連線的電腦會先嘗試 IKEv2。 如果這些電腦未能連線,則會回復到 SSTP (如果您從下拉式清單中選取 IKEv2 和 SSTP)。 如果您選取 OpenVPN 通道型別,您可以使用 OpenVPN 用戶端或 Azure VPN 用戶端進行連線。
    • 驗證型別:指定您想要使用的驗證型別 (在此案例中,選擇 [Azure 憑證]。
    • 根憑證名稱:根憑證的檔案名稱 (.cer 檔案)。
    • 公用憑證資料:使用記事本開啟根憑證,並複製/貼上此文字欄位中的公用憑證資料。 如果您使用本文中的 PowerShell 指令碼來產生自我簽署根憑證,則根憑證會位於 C:\vpn-temp 中。 請務必僅貼上 -----BEGIN CERTIFICATE----- 與 -----END CERTIFICATE----- 之間的內容。 請勿包含任何其他空格或字元。

    注意

    如果您沒看到 [通道] 型別或 [驗證] 型別,則您的閘道是使用基本 SKU。 基本 SKU 不支援 IKEv2 驗證。 如果您想要使用 IKEv2,則必須使用不同的閘道 SKU 來刪除並重新建立閘道。

  9. 選取頁面頂端的 [儲存],以儲存所有的組態設定並將根憑證公開金鑰資訊上傳到 Azure。

建立用戶端憑證

每個使用點對站連線來連線至虛擬網路的用戶端電腦都必須安裝用戶端憑證。 您需從根憑證產生用戶端憑證,並將其安裝在每部用戶端電腦上。 如果您沒有安裝有效的用戶端憑證,用戶端嘗試連線時所進行的驗證將會失敗。 您可以從企業解決方案產生的根憑證建立用戶端憑證,也可以從自我簽署的根憑證建立用戶端憑證。

使用企業解決方案建立用戶端憑證

如果您使用企業憑證解決方案,請以一般的名稱值格式 name@yourdomain.com 產生用戶端憑證。 請使用此格式,而不是「網域名稱\使用者名稱」的格式。 請確定用戶端憑證所根據的憑證範本,是將「用戶端驗證」列為使用者清單中第一個項目的使用者憑證範本。 按兩下憑證,然後檢視 [詳細資料] 索引標籤中的 [增強金鑰使用方法],即可檢查憑證。

從自我簽署的根憑證產生用戶端憑證

如果您未使用企業憑證解決方案,您可以使用 PowerShell 建立具有虛擬網路閘道 URI 的用戶端憑證。 此憑證會以您先前建立的根憑證簽署。 當您從自我簽署根憑證產生用戶端憑證時,此憑證會自動安裝在您用來產生它的電腦上。

如果您想要在另一部用戶端電腦上安裝用戶端憑證,請將憑證匯出為 .pfx 檔案 (包含整個憑證鏈結)。 這麼做將會建立一個 .pfx 檔案,其中包含用戶端進行驗證所需的根憑證資訊。 若要將自我簽署的根憑證匯出為 .pfx,請選取根憑證,然後使用與匯出用戶端憑證所述的相同步驟來進行匯出。

識別自我簽署的根憑證

如果您使用用於建立自我簽署根憑證的相同 PowerShell 工作階段,您可以直接跳到產生用戶端憑證

否則,請使用下列步驟來識別電腦上安裝的自我簽署根憑證。

  1. 取得電腦上安裝的憑證清單。

    Get-ChildItem -Path 'Cert:\CurrentUser\My'
    
  2. 從傳回的清單尋找主體名稱,然後將其旁邊的指紋複製到文字檔。 在下列範例中,有兩個憑證。 CN 名稱是您要從中產生子憑證之自我簽署根憑證的名稱。 在此情況下,稱為 P2SRootCert

    Thumbprint                                Subject
    ----------                                -------
    AED812AD883826FF76B4D1D5A77B3C08EFA79F3F  CN=P2SChildCert4
    7181AA8C1B4D34EEDB2F3D3BEC5839F3FE52D655  CN=P2SRootCert
    
  3. 使用上一個步驟中的指紋,宣告根憑證的變數。 將 THUMBPRINT 取代為您要從中產生用戶端憑證之根憑證的指紋。

    $rootcert = Get-ChildItem -Path 'Cert:\CurrentUser\My\<THUMBPRINT>'
    

    例如,使用上一個步驟中的 P2SRootCert 的指紋,命令會如下所示:

    $rootcert = Get-ChildItem -Path 'Cert:\CurrentUser\My\7181AA8C1B4D34EEDB2F3D3BEC5839F3FE52D655'
    

產生用戶端憑證

使用 New-AzVpnClientConfiguration PowerShell Cmdlet 來產生用戶端憑證。 如果您未使用相同的 PowerShell 工作階段來建立自我簽署根憑證,您必須識別自我簽署根憑證,如上一節所述。 在執行指令碼之前,請將 <resource-group-name> 取代為您的資源組名稱,並將 <vpn-gateway-name> 取代為您剛部署的虛擬網路閘道名稱。

重要

從您想要連線到 Azure 檔案共用的內部部署 Windows 電腦,以系統管理員身分執行此 PowerShell 指令碼。 該電腦必須執行 Windows 10/Windows Server 2016 或以上版本。 請勿從 Azure 中的 Cloud Shell 執行此指令碼。 執行指令碼之前,請務必先登入您的 Azure 帳戶 (Connect-AzAccount)。

$clientcertpassword = '<enter-your-password>'
$resourceGroupName  = '<resource-group-name>'
$vpnName            = '<vpn-gateway-name>'
$vpnTemp            = 'C:\vpn-temp'
$certLocation       = 'Cert:\CurrentUser\My'

$vpnClientConfigParams = @{
    ResourceGroupName    = $resourceGroupName
    Name                 = $vpnName
    AuthenticationMethod = 'EAPTLS'
}
$vpnClientConfiguration = New-AzVpnClientConfiguration @vpnClientConfigParams

$webRequestParams = @{
    Uri = $vpnClientConfiguration.VpnProfileSASUrl
    OutFile = "$vpnTemp\vpnclientconfiguration.zip"
}
Invoke-WebRequest @webRequestParams

$expandArchiveParams = @{
    Path            = "$vpnTemp\vpnclientconfiguration.zip"
    DestinationPath = "$vpnTemp\vpnclientconfiguration"
}
Expand-Archive @expandArchiveParams

$vpnGeneric = "$vpnTemp\vpnclientconfiguration\Generic"
$vpnProfile = ([xml](Get-Content -Path "$vpnGeneric\VpnSettings.xml")).VpnProfile

$exportedclientcertpath = "$vpnTemp\P2SClientCert.pfx"
$clientcertname         = "CN=$($vpnProfile.VpnServer)"

$selfSignedCertParams = @{
    Type              = 'Custom'
    DnsName           = $vpnProfile.VpnServer
    KeySpec           = 'Signature'
    Subject           = $clientcertname
    KeyExportPolicy   = 'Exportable'
    HashAlgorithm     = 'sha256'
    KeyLength         = 2048
    CertStoreLocation = $certLocation
    Signer            = $rootcert
    TextExtension     = @('2.5.29.37={text}1.3.6.1.5.5.7.3.2')
}
$clientcert = New-SelfSignedCertificate @selfSignedCertParams

$mypwd = ConvertTo-SecureString -String $clientcertpassword -Force -AsPlainText

Export-PfxCertificate -FilePath $exportedclientcertpath -Password $mypwd -Cert $clientcert |
    Out-Null

設定 VPN 用戶端

Azure 虛擬網路閘道會建立可供下載的套件,其中包含在您的內部部署 Windows 機器上初始化 VPN 連線所需的組態檔。 設定套件包括您所建立 VPN 閘道專用的設定。 如果您變更閘道,例如變更通道型別、憑證或驗證型別,您必須產生另一個 VPN 用戶端設定檔組態套件,並在每個用戶端上安裝。 否則,您的 VPN 用戶端可能無法連線。

您將使用 Windows 10/Windows Server 2016 中引入的 Always On VPN 功能來設定 VPN 連線。 此套件也包含可執行檔,會在需要時設定舊版 Windows VPN 用戶端。 本指南使用 Always On VPN,而不是舊版 Windows VPN 用戶端,因為 Always On VPN 用戶端可讓您直接從 Azure VPN 進行連線/中斷連線,而無須具備電腦的系統管理員權限。

安裝用戶端憑證

若要安裝針對虛擬網路閘道進行驗證所需的用戶端憑證,請在用戶端電腦上執行下列步驟。

  1. 匯出用戶端憑證後,找出 .pfx 檔案並將其複製到用戶端電腦。
  2. 在用戶端電腦上,按兩下 .pfx 檔案以安裝。 將 [存放區位置] 保留為 [目前使用者],然後選取 [下一步]
  3. 在 [要匯入的檔案] 頁面上,請勿進行任何變更。 選取 [下一步]。
  4. 在 [私密金鑰保護] 頁面上,輸入憑證的密碼,或確認安全性主體是否正確,然後選取 [下一步]
  5. 在 [憑證存放區] 頁面上,保留預設的位置,然後選取 [下一步]
  6. 選取 [完成]。 在憑證安裝的 [安全性警告] 上,選取 [是]。 您可以安心對此安全性警告選取 [是],因為這是您產生的憑證。
  7. 現在已成功匯入憑證。

安裝 VPN 用戶端

本節可協助您設定屬於 Windows 操作系統一部分的原生 VPN 用戶端,以連線到您的虛擬網路 (IKEv2 和 SSTP)。 此設定不需要其他用戶端軟體。

檢視設定檔

在用戶端電腦上,瀏覽至 [C:\vpn-temp],然後開啟 vpnclientconfiguration 資料夾,以檢視下列子資料夾:

  • WindowsAmd64WindowsX86,這兩個資料夾分別包含 Windows 64 位元和 32 位元的安裝程式套件。 WindowsAmd64 安裝程式套件不只適用於 AMD,也適用於所有受支援的 64 位元 Windows 用戶端。
  • Generic,這個資料夾包含用來建立自有 VPN 用戶端組態的一般資訊。 當閘道上設定了 IKEv2 或 SSTP+IKEv2 時才會提供 Generic 資料夾。 如果僅設定 SSTP,則不會提供 Generic 資料夾。

設定 VPN 用戶端設定檔

您可以在每個 Windows 用戶端電腦上使用相同的 VPN 用戶端組態套件,但前提是版本必須符合用戶端的架構。

注意

若要執行安裝程式套件,您必須擁有欲連線之 Windows 用戶端電腦上的系統管理員權限。

  1. 選取 Windows 電腦架構所對應的 VPN 用戶端組態檔。 若是 64 位元的處理器架構,請選擇 VpnClientSetupAmd64 安裝程式套件。 若是 32 位元的處理器架構,請選擇 VpnClientSetupX86 安裝程式套件。

  2. 對套件按兩下來加以安裝。 如果您看到 SmartScreen 快顯視窗,請選取 [更多資訊],然後選取 [仍要執行]

  3. 連線到您的 VPN。 前往 [VPN 設定] 並找到您所建立的 VPN 連線。 其名稱會與您的虛擬網路名稱相同。 選取 Connect。 可能會顯示一個快顯訊息。 按一下 [繼續] 以使用較高的權限。

  4. 在 [連線狀態] 頁面上,選取 [連線] 以開始連線。 如果出現 [選取憑證] 畫面,請確認顯示的用戶端憑證是要用來連接的憑證。 如果沒有,請使用下拉箭頭來選取正確的憑證,然後選取 [確定]

掛接 Azure 檔案共用

在您已設定點對站 VPN 後,您可以使用此 VPN 將 Azure 檔案共用掛接到內部部署的電腦。

若要使用儲存體帳戶金鑰掛接檔案共用,請開啟 Windows 命令提示字元並執行下列命令。 以您自己的值取代 <YourStorageAccountName><FileShareName><YourStorageAccountKey>。 如果 Z: 已被使用,請將它取代為可用的磁碟機代號。 您可以在 Azure 入口網站中找到儲存體帳戶金鑰,方法是瀏覽至儲存體帳戶,然後選取 [安全性 + 網路] > [存取金鑰]。

net use Z: \\<YourStorageAccountName>.file.core.windows.net\<FileShareName> /user:localhost\<YourStorageAccountName> <YourStorageAccountKey>

輪替 VPN 根憑證

如果根憑證因為過期或新需求而需要輪替,您可以將新的根憑證新增至現有的虛擬網路閘道,而不需要重新部署虛擬網路閘道。 使用下列指令碼新增根憑證之後,您將需要重新建立 VPN 用戶端憑證

<resource-group-name><desired-vpn-name-here><new-root-cert-name> 取代為您自己的值,然後執行指令碼。

#Creating the new Root Certificate
$ResourceGroupName           = '<resource-group-name>'
$vpnName                     = '<desired-vpn-name-here>'
$NewRootCertName             = '<new-root-cert-name>'
$rootcertname                = "CN=$NewRootCertName"
$certLocation                = 'Cert:\CurrentUser\My'
$date                        = Get-Date -Format 'MM_yyyy'
$vpnTemp                     = "C:\vpn-temp_$date"
$exportedencodedrootcertpath = "$vpnTemp\P2SRootCertencoded.cer"
$exportedrootcertpath        = "$vpnTemp\P2SRootCert.cer"

if (-Not (Test-Path -Path $vpnTemp -PathType Container)) {
    New-Item -ItemType Directory -Force -Path $vpnTemp | Out-Null
}

$selfSignedCertParams = @{
    Type              = 'Custom'
    KeySpec           = 'Signature'
    Subject           = $rootcertname
    KeyExportPolicy   = 'Exportable'
    HashAlgorithm     = 'sha256'
    KeyLength         = 2048
    CertStoreLocation = $certLocation
    KeyUsageProperty  = 'Sign'
    KeyUsage          = 'CertSign'
}
$rootcert = New-SelfSignedCertificate @selfSignedCertParams

$exportCertParams = @{
    Cert      = $rootcert
    FilePath  = $exportedencodedrootcertpath
    NoClobber = $true
}
Export-Certificate @exportCertParams | Out-Null

certutil -encode $exportedencodedrootcertpath $exportedrootcertpath | Out-Null

$rawRootCertificate = Get-Content -Path $exportedrootcertpath

$rootCertificate = ''

foreach($line in $rawRootCertificate) { 
    if ($line -notlike '*Certificate*') { 
        $rootCertificate += $line 
    } 
}

#Fetching gateway details and adding the newly created Root Certificate.
$gateway = Get-AzVirtualNetworkGateway -Name $vpnName -ResourceGroupName $ResourceGroupName

$vpnClientRootCertParams = @{
    PublicCertData               = $rootCertificate
    ResourceGroupName            = $ResourceGroupName
    VirtualNetworkGatewayName    = $gateway
    VpnClientRootCertificateName = $NewRootCertName
}
Add-AzVpnClientRootCertificate @vpnClientRootCertParams

另請參閱