Sdílet prostřednictvím


Konfigurace sítě VPN typu point-to-site (P2S) v Linuxu pro použití se službou Azure Files

Můžete použít připojení typu point-to-site (P2S) virtuální privátní sítě (VPN) k namontování sdílených souborů Azure z prostředí mimo Azure, aniž byste museli odesílat data přes otevřený internet. Připojení VPN typu point-to-site je připojení VPN mezi Azure a individuálním klientem. Pokud chcete použít připojení P2S VPN se službou Azure Files, musíte nakonfigurovat připojení VPN typu point-to-site pro každého klienta, který se chce připojit. Pokud máte mnoho klientů, kteří se potřebují připojit ke sdíleným složkám Azure z místní sítě, můžete pro každého klienta použít připojení VPN typu site-to-site (S2S). Další informace najdete v tématu Konfigurace sítě VPN typu site-to-site pro použití se službou Azure Files.

Než budete pokračovat v tomto článku, důrazně doporučujeme přečíst si přehled sítí Azure Files, abyste si mohli přečíst kompletní diskuzi o možnostech sítí dostupných pro Azure Files.

Tento článek podrobně popisuje postup konfigurace sítě VPN typu point-to-site v Linuxu pro připojení sdílených složek Azure přímo místně.

Vztahuje se na

Model správy Model fakturace Mediální vrstva Přebytečnost SMB (malé a střední podniky) Síťový souborový systém (NFS)
Microsoft.Storage Zajištěno v2 HDD (standard) Místní (LRS) Ano Ne
Microsoft.Storage Zajištěno v2 HDD (standard) Zóna (ZRS) Ano Ne
Microsoft.Storage Zajištěno v2 HDD (standard) Geografie (GRS) Ano Ne
Microsoft.Storage Zajištěno v2 HDD (standard) GeoZone (GZRS) Ano Ne
Microsoft.Storage Poskytnuto v1 SSD (Premium) Místní (LRS) Ano Ano
Microsoft.Storage Poskytnuto v1 SSD (Premium) Zóna (ZRS) Ano Ano
Microsoft.Storage Platba dle skutečné spotřeby HDD (standard) Místní (LRS) Ano Ne
Microsoft.Storage Platba dle skutečné spotřeby HDD (standard) Zóna (ZRS) Ano Ne
Microsoft.Storage Platba dle skutečné spotřeby HDD (standard) Geografie (GRS) Ano Ne
Microsoft.Storage Platba dle skutečné spotřeby HDD (standard) GeoZone (GZRS) Ano Ne

Požadavky

  • Nejnovější verze Azure CLI. Informace o tom, jak nainstalovat Azure CLI, najdete v tématu Instalace rozhraní příkazového řádku Azure PowerShellu a výběr operačního systému. Pokud raději používáte modul Azure PowerShell v Linuxu, můžete. Následující pokyny jsou ale určené pro Azure CLI.

  • Sdílená složka Azure, kterou chcete namontovat na místním serveru. Sdílené složky Azure se nasazují v rámci účtů úložiště, což jsou konstrukce správy, které představují sdílený fond úložiště, ve kterém můžete nasadit více sdílených složek. Další informace o nasazení sdílených složek Azure a účtů úložiště najdete v tématu Vytvoření sdílené složky Azure.

  • Privátní koncový bod pro účet úložiště obsahující sdílenou složku Azure, kterou chcete připojit místně. Informace o vytvoření privátního koncového bodu najdete v tématu Konfigurace koncových bodů sítě služby Azure Files.

Instalace požadovaného softwaru

Brána virtuální sítě Azure může poskytovat připojení VPN pomocí několika protokolů VPN, včetně protokolu IPsec a OpenVPN. Tento článek ukazuje, jak používat protokol IPsec a pomocí balíčku strongSwan poskytovat podporu v Linuxu.

Ověřeno s Ubuntu 18.10.

sudo apt update
sudo apt install strongswan strongswan-pki libstrongswan-extra-plugins curl libxml2-utils cifs-utils unzip

INSTALL_DIR="/etc/"

Pokud instalace selže nebo se zobrazí chyba, jako EAP_IDENTITY není podporováno, odesílání EAP_NAK, možná budete muset nainstalovat další pluginy.

sudo apt install -y libcharon-extra-plugins

Nasazení virtuální sítě

Pokud chcete získat přístup ke sdílené složce Azure a dalším prostředkům Azure z místního prostředí přes síť VPN typu Point-to-Site, musíte vytvořit virtuální síť nebo VNet. Připojení VPN typu P2S si můžete představit jako most mezi místním počítačem s Linuxem a touto virtuální sítí Azure.

Následující skript vytvoří virtuální síť Azure se třemi podsítěmi: jednu pro koncový bod služby vašeho účtu úložiště, jednu pro privátní koncový bod vašeho účtu úložiště, která se vyžaduje pro přístup k místnímu účtu úložiště bez vytvoření vlastního směrování pro veřejnou IP adresu účtu úložiště, který se může změnit, a jeden pro bránu vaší virtuální sítě, která poskytuje službu VPN.

Nezapomeňte nahradit <region>, <resource-group>a <desired-vnet-name> odpovídajícími hodnotami pro vaše prostředí.

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 '"')

Vytvoření certifikátů pro ověřování VPN

Aby bylo možné ověřit připojení VPN z místních počítačů s Linuxem pro přístup k virtuální síti, musíte vytvořit dva certifikáty:

  • Kořenový certifikát, který je poskytován bráně virtuálního počítače
  • Klientský certifikát podepsaný kořenovým certifikátem

Následující skript vytvoří požadované certifikáty.

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"

Nasazení brány virtuální sítě

Brána virtuální sítě Azure je služba, ke které se místní klient Linuxu připojuje. Nasazení této služby vyžaduje dvě základní komponenty:

  • Veřejná IP adresa, která identifikuje bránu vašim klientům, ať jsou kdekoli na světě.
  • Kořenový certifikát, který jste vytvořili dříve, který se používá k ověřování klientů

Nezapomeňte nahradit <desired-vpn-name-here> názvem, který chcete pro tyto prostředky použít.

Poznámka:

Nasazení brány virtuální sítě Azure může trvat až 45 minut. Během nasazování tohoto prostředku tento skript Bash blokuje dokončení nasazení.

Připojení P2S IKEv2/OpenVPN nejsou u skladové položky Basic podporována. Tento skript používá skladovou položku VpnGw1 pro bránu virtuální sítě.

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

Konfigurace klienta VPN

Brána virtuální sítě Azure vytvoří balíček ke stažení s konfiguračními soubory potřebnými k inicializaci připojení VPN na místním počítači s Linuxem. Následující skript umístí certifikáty, které jste vytvořili na správném místě, a nakonfiguruje ipsec.conf soubor se správnými hodnotami z konfiguračního souboru v balíčku ke stažení.

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 

Připojit sdílený disk Azure

Po nastavení sítě VPN typu Point-to-Site můžete připojit sdílenou složku Azure. Viz Připojení sdílených složek SMB k Linuxu nebo připojení sdílené složky NFS k Linuxu.

Viz také