Partager via


Configurer un VPN point à site (P2S) sur Linux à utiliser avec Azure Files

Vous pouvez utiliser une connexion de réseau privé virtuel (VPN) point à site (P2S) pour monter vos partages de fichiers Azure en dehors d’Azure, sans envoyer de données sur Internet ouvert. Une connexion VPN point à site est une connexion VPN entre Azure et un client individuel. Pour utiliser une connexion VPN P2S avec Azure Files, vous devez configurer une connexion VPN P2S pour chaque client qui souhaite se connecter. Si de nombreux clients doivent se connecter à vos partages de fichiers Azure depuis votre réseau local, vous pouvez utiliser une connexion VPN site à site (S2S) au lieu d’une connexion point à site pour chaque client. Pour plus d’informations, consultez Configurer un VPN site à site pour une utilisation avec Azure Files.

Nous vous recommandons vivement de lire la vue d’ensemble de la mise en réseau Azure Files avant de poursuivre cet article pour une présentation complète des options de mise en réseau disponibles pour Azure Files.

L’article détaille les étapes de configuration d’un VPN point à site sur Linux pour monter des partages de fichiers Azure directement en local.

S’applique à

Modèle de gestion Modèle de facturation Échelon médiatique Redondance PME Système de fichiers en réseau (NFS)
Microsoft.Storage V2 approvisionné HDD (standard) Local (LRS) Oui Non
Microsoft.Storage V2 approvisionné HDD (standard) Zone (ZRS) Oui Non
Microsoft.Storage V2 approvisionné HDD (standard) Géo (GRS) Oui Non
Microsoft.Storage V2 approvisionné HDD (standard) GeoZone (GZRS) Oui Non
Microsoft.Storage V1 approvisionné SSD (Premium) Local (LRS) Oui Oui
Microsoft.Storage V1 approvisionné SSD (Premium) Zone (ZRS) Oui Oui
Microsoft.Storage Paiement à l’utilisation HDD (standard) Local (LRS) Oui Non
Microsoft.Storage Paiement à l’utilisation HDD (standard) Zone (ZRS) Oui Non
Microsoft.Storage Paiement à l’utilisation HDD (standard) Géo (GRS) Oui Non
Microsoft.Storage Paiement à l’utilisation HDD (standard) GeoZone (GZRS) Oui Non

Conditions préalables

  • Version la plus récente d’Azure CLI. Pour plus d’informations sur l’installation d’Azure CLI, consultez Installer Azure PowerShell CLI et sélectionner votre système d’exploitation. Si vous préférez utiliser le module Azure PowerShell sur Linux, vous pouvez. Toutefois, les instructions ci-dessous concernent Azure CLI.

  • Un partage de fichiers Azure que vous souhaitez monter localement. Les partages de fichiers Azure sont déployés dans des comptes de stockage, qui sont des constructions de gestion qui représentent un pool partagé de stockage dans lequel vous pouvez déployer plusieurs partages de fichiers. Vous pouvez en savoir plus sur le déploiement de partages de fichiers Azure et de comptes de stockage dans Créer un partage de fichiers Azure.

  • Point de terminaison privé pour le compte de stockage contenant le partage de fichiers Azure que vous souhaitez monter localement. Pour plus d’informations sur la création d’un point de terminaison privé, consultez Configuration des points de terminaison réseau Azure Files.

Installer les logiciels nécessaires

La passerelle de réseau virtuel Azure peut fournir des connexions VPN à l’aide de plusieurs protocoles VPN, notamment IPsec et OpenVPN. Cet article explique comment utiliser IPsec et utiliser le package strongSwan pour fournir la prise en charge sur Linux.

Vérifié avec Ubuntu 18.10.

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

INSTALL_DIR="/etc/"

Si l’installation échoue ou si vous obtenez une erreur telle que EAP_IDENTITY non prise en charge, l’envoi de EAP_NAK peut nécessiter l’installation de plug-ins supplémentaires :

sudo apt install -y libcharon-extra-plugins

Déployer un réseau virtuel

Pour accéder à votre partage de fichiers Azure et à d'autres ressources Azure depuis vos installations locales via un VPN de point à site, vous devez créer un réseau virtuel ou VNet. Vous pouvez considérer la connexion VPN P2S comme un pont entre votre machine Linux locale et ce réseau virtuel Azure.

Le script suivant crée un réseau virtuel Azure avec trois sous-réseaux : un pour le point de terminaison de service de votre compte de stockage, l’un pour le point de terminaison privé de votre compte de stockage, qui est requis pour accéder au compte de stockage local sans créer de routage personnalisé pour l’adresse IP publique du compte de stockage qui peut changer et un pour votre passerelle de réseau virtuel qui fournit le service VPN.

N’oubliez pas de remplacer <region>, <resource-group>et <desired-vnet-name> par les valeurs appropriées pour votre environnement.

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

Créer des certificats pour l’authentification VPN

Pour que les connexions VPN à partir de vos machines Linux locales soient authentifiées pour accéder à votre réseau virtuel, vous devez créer deux certificats :

  • Un certificat racine, fourni à la passerelle de machine virtuelle
  • Un certificat client, signé avec le certificat racine

Le script suivant crée les certificats requis.

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"

Déployer une passerelle de réseau virtuel

La passerelle de réseau virtuel Azure est le service auquel votre client Linux local se connecte. Le déploiement de ce service nécessite deux composants de base :

  • Adresse IP publique qui identifie la passerelle vers vos clients où qu’ils se trouvent dans le monde.
  • Certificat racine que vous avez créé précédemment utilisé pour authentifier vos clients

N'oubliez pas de remplacer <desired-vpn-name-here> par le nom souhaité pour ces ressources.

Remarque

Le déploiement de la passerelle de réseau virtuel Azure peut prendre jusqu’à 45 minutes. Bien que cette ressource soit déployée, ce script bash empêche la fin du déploiement.

Les connexions P2S IKEv2/OpenVPN ne sont pas prises en charge avec la référence SKU de base . Ce script utilise la référence SKU VpnGw1 pour la passerelle de réseau virtuel.

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

Configurer le client VPN

La passerelle de réseau virtuel Azure crée un package téléchargeable avec des fichiers de configuration requis pour initialiser la connexion VPN sur votre machine Linux locale. Le script suivant place les certificats que vous avez créés à l’emplacement approprié et configure le ipsec.conf fichier avec les valeurs correctes du fichier de configuration dans le package téléchargeable.

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 

Monter le partage de fichiers Azure

Après avoir configuré votre VPN point à site, vous pouvez monter votre partage de fichiers Azure. Consultez Monter des partages de fichiers SMB sur Linux ou monter un partage de fichiers NFS sur Linux.

Voir aussi