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

Připojení virtuální privátní sítě (VPN) typu point-to-site (point-to-site) (VPN) můžete použít k připojení sdílených složek Azure 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, budete muset 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ě.

Platí pro

Typ sdílené složky SMB NFS
Sdílené složky úrovně Standard (GPv2), LRS/ZRS Yes No
Sdílené složky úrovně Standard (GPv2), GRS/GZRS Yes No
Sdílené složky úrovně Premium (FileStorage), LRS/ZRS Ano Yes

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 připojit místně. 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 a také další prostředky úložiště, jako jsou kontejnery objektů blob nebo fronty. 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 je například EAP_IDENTITY nepodporuje se odesílání EAP_NAK, možná budete muset nainstalovat další moduly plug-in:

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 virtuální síť. Připojení VPN typu point-to-site, které vytvoříte automaticky, je mostem 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ý se poskytne bráně virtuálního počítače
  • Klientský certifikát, který bude 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 budou připojovat vaše místní počítače s Linuxem. Nasazení této služby vyžaduje dvě základní komponenty:

  • Veřejná IP adresa, která bude identifikovat 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žije k ověření 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 zablokuje 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řipojení sdílené složky Azure

Teď, když jste nastavili síť 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é