Teilen über


Konfigurieren eines P2S-VPN (Point-to-Site) unter Linux für die Verwendung mit Azure Files

Sie können eine Point-to-Site (P2S) VPN-Verbindung (Virtuelles Privates Netzwerk) verwenden, um Ihre Azure-Dateifreigaben von außerhalb von Azure einzubinden, ohne Daten über das offene Internet zu senden. Eine P2S-VPN-Verbindung ist eine VPN-Verbindung zwischen Azure und einem einzelnen Client. Um eine P2S-VPN-Verbindung mit Azure Files zu verwenden, müssen Sie eine P2S-VPN-Verbindung für jeden Client konfigurieren, der eine Verbindung herstellen möchte. Wenn Sie über viele Clients verfügen, die sich über Ihr lokales Netzwerk mit Ihren Azure-Dateifreigaben verbinden müssen, können Sie anstelle einer P2S-Verbindung für jeden Client eine S2S-VPN-Verbindung (Site-to-Site) verwenden. Weitere Informationen finden Sie unter Konfigurieren eines S2S-VPN (Site-to-Site) zur Verwendung mit Azure Files.

Es wird dringend empfohlen, vor der Lektüre des dieses Artikels den Artikel Azure Files – Überlegungen zum Netzwerkbetrieb zu lesen, der eine umfassende Erläuterung der für Azure Files verfügbaren Netzwerkoptionen enthält.

Der Artikel beschreibt die Schritte zur Konfiguration eines P2S-VPN unter Linux, um Azure-Dateifreigaben direkt lokal einzubinden.

Gilt für:

Verwaltungsmodell Abrechnungsmodell Medienebene Redundanz KMU NFS
Microsoft.Storage Bereitgestellt v2 HDD (Standard) Lokal (LRS) Ja Nein
Microsoft.Storage Bereitgestellt v2 HDD (Standard) Zone (ZRS) Ja Nein
Microsoft.Storage Bereitgestellt v2 HDD (Standard) Geo (GRS) Ja Nein
Microsoft.Storage Bereitgestellt v2 HDD (Standard) GeoZone (GZRS) Ja Nein
Microsoft.Storage Bereitgestellt v1 SSD (Premium) Lokal (LRS) Ja Ja
Microsoft.Storage Bereitgestellt v1 SSD (Premium) Zone (ZRS) Ja Ja
Microsoft.Storage Nutzungsbasierte Bezahlung HDD (Standard) Lokal (LRS) Ja Nein
Microsoft.Storage Nutzungsbasierte Bezahlung HDD (Standard) Zone (ZRS) Ja Nein
Microsoft.Storage Nutzungsbasierte Bezahlung HDD (Standard) Geo (GRS) Ja Nein
Microsoft.Storage Nutzungsbasierte Bezahlung HDD (Standard) GeoZone (GZRS) Ja Nein

Voraussetzungen

  • Die neueste Version der Azure CLI. Informationen zum Installieren der Azure CLI finden Sie unter Installieren der Azure PowerShell CLI , und wählen Sie Ihr Betriebssystem aus. Wenn Sie es vorziehen, das Azure PowerShell-Modul unter Linux zu verwenden, können Sie dies auch. Die folgenden Anweisungen gelten jedoch für Azure CLI.

  • Eine Azure-Dateifreigabe, die Sie lokal einbinden können. Azure-Dateifreigaben werden in Speicherkonten bereitgestellt, die Verwaltungskonstrukte sind, die einen freigegebenen Speicherpool darstellen, in dem Sie mehrere Dateifreigaben bereitstellen können. Weitere Informationen zum Bereitstellen von Azure-Dateifreigaben und Speicherkonten finden Sie unter Erstellen einer Azure-Dateifreigabe.

  • Ein privater Endpunkt für das Speicherkonto mit der Azure-Dateifreigabe, die Sie lokal bereitstellen möchten. Informationen zum Erstellen eines privaten Endpunkts finden Sie unter Konfigurieren von Azure Files-Netzwerkendpunkten.

Installieren der erforderlichen Software

Das virtuelle Azure-Netzwerkgateway kann VPN-Verbindungen mit mehreren VPN-Protokollen bereitstellen, einschließlich IPsec und OpenVPN. In diesem Artikel wird gezeigt, wie Sie IPsec verwenden und das strongSwan-Paket verwenden, um die Unterstützung für Linux bereitzustellen.

Überprüft mit Ubuntu 18.10.

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

INSTALL_DIR="/etc/"

Wenn die Installation fehlschlägt oder Sie einen Fehler erhalten (wie z. B. EAP_IDENTITY wird nicht unterstützt, EAP_NAK wird gesendet), müssen Sie möglicherweise zusätzliche Plug-Ins installieren:

sudo apt install -y libcharon-extra-plugins

Bereitstellen eines virtuellen Netzwerks

Um von einer lokalen Umgebung aus über ein P2S-VPN auf Ihre Azure-Dateifreigabe und andere Azure-Ressourcen zuzugreifen, müssen Sie ein virtuelles Netzwerk (VNET) erstellen. Sie können sich die P2S VPN-Verbindung als Brücke zwischen Ihrem lokalen Linux-Computer und diesem virtuellen Azure-Netzwerk vorstellen.

Das folgende Skript erstellt ein virtuelles Azure-Netzwerk mit drei Subnetzen: eines für den Dienstendpunkt Ihres Speicherkontos, eines für den privaten Endpunkt Ihres Speicherkontos, der für den Zugriff auf das lokale Speicherkonto erforderlich ist, ohne benutzerdefiniertes Routing für die öffentliche IP des Speicherkontos zu erstellen, das sich ändern kann, und eines für Ihr virtuelles Netzwerkgateway, das den VPN-Dienst bereitstellt.

Denken Sie daran, <region>, <resource-group> und <desired-vnet-name> durch die entsprechenden Werte für Ihre Umgebung zu ersetzen.

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

Erstellen von Zertifikaten für die VPN-Authentifizierung

Damit VPN-Verbindungen von Ihren lokalen Linux-Computern für den Zugriff auf Ihr virtuelles Netzwerk authentifiziert werden können, müssen Sie zwei Zertifikate erstellen:

  • Ein Stammzertifikat, das dem Gateway des virtuellen Computers bereitgestellt wird
  • Ein Clientzertifikat, das mit dem Stammzertifikat signiert ist

Das folgende Skript erstellt die erforderlichen Zertifikate.

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"

Bereitstellen eines Gateways für virtuelle Netzwerke

Das virtuelle Azure-Netzwerkgateway ist der Dienst, mit dem Ihr lokaler Linux-Client eine Verbindung herstellt. Für die Bereitstellung dieses Diensts sind zwei grundlegende Komponenten erforderlich:

  • Eine öffentliche IP-Adresse, die das Gateway zu Ihren Clients identifiziert, wo immer sie sich in der Welt befinden.
  • Das stammzertifikat, das Sie zuvor erstellt haben, das zum Authentifizieren Ihrer Clients verwendet wird

Denken Sie daran, <desired-vpn-name-here> durch den Namen zu ersetzen, den Sie für diese Ressourcen verwenden möchten.

Hinweis

Die Bereitstellung des virtuellen Azure-Netzwerkgateways kann bis zu 45 Minuten dauern. Während diese Ressource bereitgestellt wird, wird die Bereitstellung durch dieses Bash-Skript blockiert.

P2S IKEv2/OpenVPN-Verbindungen werden nicht mit der Standard-SKU unterstützt. Dieses Skript verwendet die VpnGw1-SKU für das virtuelle Netzwerkgateway.

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

Konfigurieren des VPN-Clients

Das virtuelle Azure-Netzwerkgateway erstellt ein herunterladbares Paket mit Konfigurationsdateien, die zum Initialisieren der VPN-Verbindung auf Ihrem lokalen Linux-Computer erforderlich sind. Das folgende Skript platziert die Zertifikate, die Sie an der richtigen Stelle erstellt haben, und konfiguriert die ipsec.conf Datei mit den richtigen Werten aus der Konfigurationsdatei im herunterladbaren Paket.

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 

Einbinden einer Azure-Dateifreigabe

Nachdem Sie Ihr Point-to-Site-VPN eingerichtet haben, können Sie Ihre Azure-Dateifreigabe bereitstellen. Siehe SMB-Dateifreigaben unter Linux einbinden oder NFS-Dateifreigaben unter Linux einbinden.

Siehe auch