Delen via


Een punt-naar-site-VPN (P2S) configureren in Linux voor gebruik met Azure Files

U kunt een punt-naar-site-verbinding (P2S) virtueel particulier netwerk (VPN) gebruiken om uw Azure-bestandsshares van buiten Azure te koppelen, zonder gegevens via het open internet te verzenden. Een punt-naar-site-VPN-verbinding is een VPN-verbinding tussen Azure en een afzonderlijke client. Als u een P2S VPN-verbinding met Azure Files wilt gebruiken, moet u een P2S VPN-verbinding configureren voor elke client die verbinding wil maken. Als u veel clients hebt die verbinding moeten maken met uw Azure-bestandsshares vanuit uw on-premises netwerk, kunt u een site-naar-site-VPN-verbinding (S2S) gebruiken in plaats van een punt-naar-site-verbinding voor elke client. Zie Een site-naar-site-VPN configureren voor gebruik met Azure Files voor meer informatie.

We raden u ten zeerste aan azure Files-netwerkoverzicht te lezen voordat u verdergaat met dit artikel voor een volledige bespreking van de beschikbare netwerkopties voor Azure Files.

In het artikel worden de stappen beschreven voor het configureren van een punt-naar-site-VPN op Linux om Azure-bestandsshares rechtstreeks on-premises te koppelen.

Van toepassing op

Beheermodel Betaalmodel Medianiveau Redundantie Kleine en Middelgrote Ondernemingen (SMB) NFS (Netwerkbestandssysteem)
Microsoft.Opslag Geconfigureerd v2 HDD (standaard) Lokaal (LRS) Ja Nee
Microsoft.Opslag Geconfigureerd v2 HDD (standaard) Zone (ZRS) Ja Nee
Microsoft.Opslag Geconfigureerd v2 HDD (standaard) Aardrijkskunde (GRS) Ja Nee
Microsoft.Opslag Geconfigureerd v2 HDD (standaard) GeoZone (GZRS) Ja Nee
Microsoft.Opslag Geconfigureerd v1 SSD (van hoge kwaliteit) Lokaal (LRS) Ja Ja
Microsoft.Opslag Geconfigureerd v1 SSD (van hoge kwaliteit) Zone (ZRS) Ja Ja
Microsoft.Opslag Betaal naar verbruik HDD (standaard) Lokaal (LRS) Ja Nee
Microsoft.Opslag Betaal naar verbruik HDD (standaard) Zone (ZRS) Ja Nee
Microsoft.Opslag Betaal naar verbruik HDD (standaard) Aardrijkskunde (GRS) Ja Nee
Microsoft.Opslag Betaal naar verbruik HDD (standaard) GeoZone (GZRS) Ja Nee

Vereiste voorwaarden

  • De meest recente versie van de Azure CLI. Zie De Azure PowerShell CLI installeren en uw besturingssysteem selecteren voor meer informatie over het installeren van de Azure CLI. Als u liever de Azure PowerShell-module op Linux gebruikt, kunt u dat doen. De onderstaande instructies zijn echter voor Azure CLI.

  • Een Azure-bestand dat u op locatie wilt koppelen. Azure-bestandsshares worden geïmplementeerd in opslagaccounts. Dit zijn beheerconstructies die een gedeelde opslaggroep vertegenwoordigen waarin u meerdere bestandsshares kunt implementeren. Meer informatie over het implementeren van Azure-bestandsshares en opslagaccounts vindt u in Een Azure-bestandsshare maken.

  • Een privé-eindpunt voor het opslagaccount met de Azure-bestandsshare die u on-premises wilt instellen. Zie Azure Files-netwerkeindpunten configureren voor meer informatie over het maken van een privé-eindpunt.

Vereiste software installeren

De gateway van het virtuele Azure-netwerk kan VPN-verbindingen bieden met behulp van verschillende VPN-protocollen, waaronder IPsec en OpenVPN. In dit artikel wordt beschreven hoe u IPsec gebruikt en het strongSwan-pakket gebruikt om de ondersteuning op Linux te bieden.

Geverifieerd met Ubuntu 18.10.

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

INSTALL_DIR="/etc/"

Als de installatie mislukt of als er een fout optreedt, zoals EAP_IDENTITY niet wordt ondersteund, en EAP_NAK wordt verzonden, moet u mogelijk extra invoegtoepassingen installeren:

sudo apt install -y libcharon-extra-plugins

Een virtueel netwerk implementeren

Als u toegang wilt krijgen tot uw Azure-bestandsshare en andere Azure-resources van on-premises via een punt-naar-site-VPN, moet u een virtueel netwerk of VNet maken. U kunt de P2S VPN-verbinding beschouwen als een brug tussen uw on-premises Linux-machine en dit virtuele Azure-netwerk.

Met het volgende script maakt u een virtueel Azure-netwerk met drie subnetten: één voor het service-eindpunt van uw opslagaccount, één voor het privé-eindpunt van uw opslagaccount. Dit is vereist voor toegang tot het opslagaccount on-premises zonder aangepaste routering te maken voor het openbare IP-adres van het opslagaccount dat kan worden gewijzigd en één voor uw virtuele netwerkgateway die de VPN-service biedt.

Vergeet niet om te vervangen <region>, <resource-group>en <desired-vnet-name> door de juiste waarden voor uw omgeving.

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

Certificaten maken voor VPN-verificatie

Als u wilt dat VPN-verbindingen van uw on-premises Linux-machines worden geverifieerd voor toegang tot uw virtuele netwerk, moet u twee certificaten maken:

  • Een basiscertificaat dat wordt verstrekt aan de gateway van de virtuele machine
  • Een clientcertificaat dat is ondertekend met het basiscertificaat

Met het volgende script worden de vereiste certificaten gemaakt.

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"

Virtuele netwerkgateway implementeren

De gateway van het virtuele Azure-netwerk is de service waarmee uw on-premises Linux-client verbinding maakt. Voor het implementeren van deze service zijn twee basisonderdelen vereist:

  • Een openbaar IP-adres waarmee de gateway voor uw clients wordt geïdentificeerd, waar ze zich ook ter wereld bevinden.
  • Het basiscertificaat dat u eerder hebt gemaakt, dat wordt gebruikt om uw clients te verifiëren

Vergeet niet om <desired-vpn-name-here> te vervangen door de naam die u voor deze resources wilt gebruiken.

Opmerking

Het implementeren van de gateway van het virtuele Azure-netwerk kan tot 45 minuten duren. Hoewel deze resource wordt geïmplementeerd, blokkeert dit bash-script dat de implementatie wordt voltooid.

P2S IKEv2/OpenVPN-verbindingen worden niet ondersteund met de Basic SKU. Dit script maakt gebruik van de VpnGw1-SKU voor de gateway van het virtuele netwerk.

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

De VPN-client configureren

De gateway van het virtuele Azure-netwerk maakt een downloadbaar pakket met configuratiebestanden die nodig zijn om de VPN-verbinding op uw on-premises Linux-machine te initialiseren. Het volgende script plaatst de certificaten die u op de juiste plek hebt gemaakt en configureert het ipsec.conf bestand met de juiste waarden uit het configuratiebestand in het downloadbare pakket.

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-bestandsshare koppelen

Nadat u uw punt-naar-site-VPN hebt ingesteld, kunt u uw Azure-bestandsshare koppelen. Zie SMB-bestandsshares koppelen aan Linux of NFS-bestandsshare koppelen aan Linux.

Zie ook