您可以使用點對站 (P2S) 虛擬專用網 (VPN) 連線,從 Azure 外部掛接 Azure 檔案共用,而不需透過開放式因特網傳送數據。 點對站 VPN 連線是 Azure 與個別用戶端之間的 VPN 連線。 若要搭配 Azure 檔案記憶體使用 P2S VPN 連線,您必須為每個想要連線的用戶端設定 P2S VPN 連線。 如果您有許多用戶端需要從內部部署網路連線至 Azure 檔案共用,您可以對每個用戶端使用站對站 (S2S) VPN 連線,而不使用點對站連線。 若要深入了解,請參閱設定站對站 VPN 以用於 Azure 檔案儲存體。
強烈建議您先閱讀 Azure 檔案儲存體網路概觀,再繼續閱讀此文章,以充分了解適用於 Azure 檔案儲存體的網路選項。
本文詳述在Linux上設定點對站 VPN 的步驟,以直接在內部部署掛接 Azure 檔案共用。
適用對象
管理模型 | 計費模型 | 媒體分層 | 冗餘性 | 中小企業 (SMB) | NFS |
---|---|---|---|---|---|
Microsoft 儲存服務 | 已佈建的 v2 | HDD (標準) | 本地 (LRS) | ![]() |
![]() |
Microsoft 儲存服務 | 已佈建的 v2 | HDD (標準) | 區域 (ZRS) | ![]() |
![]() |
Microsoft 儲存服務 | 已佈建的 v2 | HDD (標準) | 異地 (GRS) | ![]() |
![]() |
Microsoft 儲存服務 | 已佈建的 v2 | HDD (標準) | GeoZone (GZRS) | ![]() |
![]() |
Microsoft 儲存服務 | 已佈建的 v1 | SSD (進階版) | 本地 (LRS) | ![]() |
![]() |
Microsoft 儲存服務 | 已佈建的 v1 | SSD (進階版) | 區域 (ZRS) | ![]() |
![]() |
Microsoft 儲存服務 | 隨用隨付 | HDD (標準) | 本地 (LRS) | ![]() |
![]() |
Microsoft 儲存服務 | 隨用隨付 | HDD (標準) | 區域 (ZRS) | ![]() |
![]() |
Microsoft 儲存服務 | 隨用隨付 | HDD (標準) | 異地 (GRS) | ![]() |
![]() |
Microsoft 儲存服務 | 隨用隨付 | HDD (標準) | GeoZone (GZRS) | ![]() |
![]() |
先決條件
最新版的 Azure CLI。 如需如何安裝 Azure CLI 的資訊,請參閱 安裝 Azure PowerShell CLI 並選取您的作系統。 如果您想要在 Linux 上使用 Azure PowerShell 模組,您可以。 不過,下列指示適用於 Azure CLI。
您要在內部部署掛接的 Azure 檔案共用。 Azure 檔案共用會部署在記憶體帳戶內,這是管理建構,代表您可以在其中部署多個檔案共用的共用記憶體集區。 您可以在建立 Azure 檔案共用中深入了解如何部署 Azure 檔案共用和儲存體帳戶。
要在內部部署掛接的 Azure 檔案共用所屬的儲存體帳戶私人端點。 若要深入了解如何建立私人端點,請參閱設定 Azure 檔案儲存體網路端點。
安裝必要的軟體
Azure 虛擬網路閘道可以使用數種 VPN 通訊協定來提供 VPN 連線,包括 IPsec 和 OpenVPN。 本文說明如何使用 IPsec,並使用 strongSwan 套件在 Linux 上提供支援。
使用Ubuntu 18.10進行驗證。
sudo apt update
sudo apt install strongswan strongswan-pki libstrongswan-extra-plugins curl libxml2-utils cifs-utils unzip
INSTALL_DIR="/etc/"
如果安裝失敗,或您收到錯誤,例如 不支援EAP_IDENTITY、傳送EAP_NAK,您可能需要安裝額外的外掛程式:
sudo apt install -y libcharon-extra-plugins
部署虛擬網路
若要透過點對站 VPN 從內部部署存取 Azure 檔案共用和其他 Azure 資源,您必須建立虛擬網路或 VNet。 您可以將 P2S VPN 連線視為內部部署 Linux 機器與此 Azure 虛擬網路之間的網橋。
下列腳本會建立具有三個子網的 Azure 虛擬網路:一個用於記憶體帳戶的服務端點,一個用於記憶體帳戶的私人端點,這是存取內部部署記憶體帳戶所需的,而不需要為可能會變更的記憶體帳戶公用 IP 建立自定義路由,另一個用於提供 VPN 服務的虛擬網路網關。
請記得將 <region>
、<resource-group>
和 <desired-vnet-name>
替換為您環境中的適當值。
REGION="<region>"
RESOURCE_GROUP_NAME="<resource-group>"
VIRTUAL_NETWORK_NAME="<desired-vnet-name>"
VIRTUAL_NETWORK=$(az network vnet create \
--resource-group $RESOURCE_GROUP_NAME \
--name $VIRTUAL_NETWORK_NAME \
--location $REGION \
--address-prefixes "192.168.0.0/16" \
--query "newVNet.id" | tr -d '"')
SERVICE_ENDPOINT_SUBNET=$(az network vnet subnet create \
--resource-group $RESOURCE_GROUP_NAME \
--vnet-name $VIRTUAL_NETWORK_NAME \
--name "ServiceEndpointSubnet" \
--address-prefixes "192.168.0.0/24" \
--service-endpoints "Microsoft.Storage" \
--query "id" | tr -d '"')
PRIVATE_ENDPOINT_SUBNET=$(az network vnet subnet create \
--resource-group $RESOURCE_GROUP_NAME \
--vnet-name $VIRTUAL_NETWORK_NAME \
--name "PrivateEndpointSubnet" \
--address-prefixes "192.168.1.0/24" \
--query "id" | tr -d '"')
GATEWAY_SUBNET=$(az network vnet subnet create \
--resource-group $RESOURCE_GROUP_NAME \
--vnet-name $VIRTUAL_NETWORK_NAME \
--name "GatewaySubnet" \
--address-prefixes "192.168.2.0/24" \
--query "id" | tr -d '"')
建立 VPN 驗證的憑證
若要讓來自內部部署 Linux 電腦的 VPN 連線經過驗證才能存取您的虛擬網路,您必須建立兩個憑證:
- 提供給虛擬機閘道的根憑證
- 使用根憑證簽署的客戶端憑證
下列腳本會建立必要的憑證。
ROOT_CERT_NAME="P2SRootCert"
USERNAME="client"
PASSWORD="1234"
mkdir temp
cd temp
sudo ipsec pki --gen --outform pem > rootKey.pem
sudo ipsec pki --self --in rootKey.pem --dn "CN=$ROOT_CERT_NAME" --ca --outform pem > rootCert.pem
ROOT_CERTIFICATE=$(openssl x509 -in rootCert.pem -outform der | base64 -w0 ; echo)
sudo ipsec pki --gen --size 4096 --outform pem > "clientKey.pem"
sudo ipsec pki --pub --in "clientKey.pem" | \
sudo ipsec pki \
--issue \
--cacert rootCert.pem \
--cakey rootKey.pem \
--dn "CN=$USERNAME" \
--san $USERNAME \
--flag clientAuth \
--outform pem > "clientCert.pem"
openssl pkcs12 -in "clientCert.pem" -inkey "clientKey.pem" -certfile rootCert.pem -export -out "client.p12" -password "pass:$PASSWORD"
部署虛擬網路閘道
Azure 虛擬網路閘道是內部部署 Linux 用戶端所連線的服務。 部署此服務需要兩個基本元件:
- 一個公用 IP 位址,用於識別用戶端在世界各地的閘道
- 您稍早建立的根憑證,用於驗證您的用戶端
請記得將 <desired-vpn-name-here>
取代為您要用於這些資源的名稱。
備註
部署 Azure 虛擬網路閘道最多可能需要 45 分鐘的時間。 部署此資源時,此Bash腳本會阻止部署順利完成。
基本 SKU 不支援 P2S IKEv2/OpenVPN 連線。 此腳本會針對虛擬網路閘道使用 VpnGw1 SKU。
VPN_NAME="<desired-vpn-name-here>"
PUBLIC_IP_ADDR_NAME="$VPN_NAME-PublicIP"
PUBLIC_IP_ADDR=$(az network public-ip create \
--resource-group $RESOURCE_GROUP_NAME \
--name $PUBLIC_IP_ADDR_NAME \
--location $REGION \
--sku "Basic" \
--allocation-method "Dynamic" \
--query "publicIp.id" | tr -d '"')
az network vnet-gateway create \
--resource-group $RESOURCE_GROUP_NAME \
--name $VPN_NAME \
--vnet $VIRTUAL_NETWORK_NAME \
--public-ip-addresses $PUBLIC_IP_ADDR \
--location $REGION \
--sku "VpnGw1" \
--gateway-typ "Vpn" \
--vpn-type "RouteBased" \
--address-prefixes "172.16.201.0/24" \
--client-protocol "IkeV2" > /dev/null
az network vnet-gateway root-cert create \
--resource-group $RESOURCE_GROUP_NAME \
--gateway-name $VPN_NAME \
--name $ROOT_CERT_NAME \
--public-cert-data $ROOT_CERTIFICATE \
--output none
設定 VPN 用戶端
Azure 虛擬網路閘道會建立可下載的套件,其中包含初始化內部部署 Linux 機器上 VPN 連線所需的組態檔。 下列腳本會將您建立的憑證放在正確的位置,並使用 ipsec.conf
可下載套件中組態檔的正確值來設定檔案。
VPN_CLIENT=$(az network vnet-gateway vpn-client generate \
--resource-group $RESOURCE_GROUP_NAME \
--name $VPN_NAME \
--authentication-method EAPTLS | tr -d '"')
curl $VPN_CLIENT --output vpnClient.zip
unzip vpnClient.zip
VPN_SERVER=$(xmllint --xpath "string(/VpnProfile/VpnServer)" Generic/VpnSettings.xml)
VPN_TYPE=$(xmllint --xpath "string(/VpnProfile/VpnType)" Generic/VpnSettings.xml | tr '[:upper:]' '[:lower:]')
ROUTES=$(xmllint --xpath "string(/VpnProfile/Routes)" Generic/VpnSettings.xml)
sudo cp "${INSTALL_DIR}ipsec.conf" "${INSTALL_DIR}ipsec.conf.backup"
sudo cp "Generic/VpnServerRoot.cer_0" "${INSTALL_DIR}ipsec.d/cacerts"
sudo cp "${USERNAME}.p12" "${INSTALL_DIR}ipsec.d/private"
sudo tee -a "${installDir}ipsec.conf" <<EOF
conn $VIRTUAL_NETWORK_NAME
keyexchange=$VPN_TYPE
type=tunnel
leftfirewall=yes
left=%any
leftauth=eap-tls
leftid=%client
right=$vpnServer
rightid=%$vpnServer
rightsubnet=$routes
leftsourceip=%config
auto=add
EOF
echo ": P12 client.p12 '$PASSWORD'" | sudo tee -a "${INSTALL_DIR}ipsec.secrets" > /dev/null
sudo ipsec restart
sudo ipsec up $VIRTUAL_NETWORK_NAME
掛接 Azure 檔案共用
設定點對站 VPN 之後,您可以掛接 Azure 檔案共用。 請參閱 將 SMB 檔案共用掛接至 Linux 或 將 NFS 檔案共用掛接至 Linux。