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 | ||
Sdílené složky úrovně Standard (GPv2), GRS/GZRS | ||
Sdílené složky úrovně Premium (FileStorage), LRS/ZRS |
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.