Dela via


Konfigurera en punkt-till-plats-VPN (P2S) i Linux för användning med Azure Files

Du kan använda en punkt-till-plats-anslutning (P2S) för virtuellt privat nätverk (VPN) för att montera dina Azure-filresurser utanför Azure, utan att skicka data via det öppna Internet. En punkt-till-plats-VPN-anslutning är en VPN-anslutning mellan Azure och en enskild klient. Om du vill använda en P2S VPN-anslutning med Azure Files måste du konfigurera en P2S VPN-anslutning för varje klient som vill ansluta. Om du har många klienter som behöver ansluta till dina Azure-filresurser från ditt lokala nätverk kan du använda en VPN-anslutning från plats till plats (S2S) i stället för en punkt-till-plats-anslutning för varje klient. Mer information finns i Konfigurera en plats-till-plats-VPN för användning med Azure Files.

Vi rekommenderar starkt att du läser översikten över Azure Files-nätverk innan du fortsätter med den här artikeln för en fullständig diskussion om de nätverksalternativ som är tillgängliga för Azure Files.

Artikeln beskriver stegen för att konfigurera ett punkt-till-plats-VPN på Linux för att montera Azure-filresurser direkt lokalt.

Gäller för

Typ av filresurs SMB NFS
Standardfilresurser (GPv2), LRS/ZRS Ja Inga
Standardfilresurser (GPv2), GRS/GZRS Ja Inga
Premiumfilresurser (FileStorage), LRS/ZRS Ja Ja

Förutsättningar

  • Den senaste versionen av Azure CLI. Information om hur du installerar Azure CLI finns i Installera Azure PowerShell CLI och välj ditt operativsystem. Om du föredrar att använda Azure PowerShell-modulen i Linux kan du göra det. Anvisningarna nedan gäller dock för Azure CLI.

  • En Azure-filresurs som du vill montera lokalt. Azure-filresurser distribueras i lagringskonton, som är hanteringskonstruktioner som representerar en delad lagringspool där du kan distribuera flera filresurser samt andra lagringsresurser, till exempel blobcontainrar eller köer. Du kan lära dig mer om hur du distribuerar Azure-filresurser och lagringskonton i Skapa en Azure-filresurs.

  • En privat slutpunkt för lagringskontot som innehåller den Azure-filresurs som du vill montera lokalt. Information om hur du skapar en privat slutpunkt finns i Konfigurera Azure Files-nätverksslutpunkter.

Installera nödvändig programvara

Den virtuella Azure-nätverksgatewayen kan tillhandahålla VPN-anslutningar med flera VPN-protokoll, inklusive IPsec och OpenVPN. Den här artikeln visar hur du använder IPsec och använder strongSwan-paketet för att ge support på Linux.

Verifierad med Ubuntu 18.10.

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

INSTALL_DIR="/etc/"

Om installationen misslyckas eller om du får ett fel som EAP_IDENTITY inte stöds och skickar EAP_NAK kan du behöva installera extra plugin-program:

sudo apt install -y libcharon-extra-plugins

Distribuera ett virtuellt nätverk

Om du vill komma åt din Azure-filresurs och andra Azure-resurser lokalt via ett punkt-till-plats-VPN måste du skapa ett virtuellt nätverk eller ett virtuellt nätverk. P2S VPN-anslutningen som du skapar automatiskt är en brygga mellan din lokala Linux-dator och det virtuella Azure-nätverket.

Följande skript skapar ett virtuellt Azure-nätverk med tre undernät: ett för lagringskontots tjänstslutpunkt, en för lagringskontots privata slutpunkt, som krävs för att komma åt lagringskontot lokalt utan att skapa anpassad routning för den offentliga IP-adressen för lagringskontot som kan ändras och en för din virtuella nätverksgateway som tillhandahåller VPN-tjänsten.

Kom ihåg att ersätta <region>, <resource-group>och <desired-vnet-name> med lämpliga värden för din miljö.

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

Skapa certifikat för VPN-autentisering

För att VPN-anslutningar från dina lokala Linux-datorer ska kunna autentiseras för att få åtkomst till ditt virtuella nätverk måste du skapa två certifikat:

  • Ett rotcertifikat som kommer att tillhandahållas till den virtuella datorgatewayen
  • Ett klientcertifikat som kommer att signeras med rotcertifikatet

Följande skript skapar de certifikat som krävs.

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"

Distribuera virtuell nätverksgateway

Den virtuella Azure-nätverksgatewayen är den tjänst som dina lokala Linux-datorer ansluter till. För att distribuera den här tjänsten krävs två grundläggande komponenter:

  • En offentlig IP-adress som identifierar gatewayen till dina klienter var de än befinner sig i världen
  • Rotcertifikatet som du skapade tidigare och som ska användas för att autentisera dina klienter

Kom ihåg att ersätta <desired-vpn-name-here> med det namn som du vill använda för dessa resurser.

Kommentar

Det kan ta upp till 45 minuter att distribuera den virtuella Azure-nätverksgatewayen. Medan den här resursen distribueras blockerar bash-skriptet distributionen från att slutföras.

P2S IKEv2/OpenVPN-anslutningar stöds inte med Basic SKU. Det här skriptet använder VPNGw1 SKU för den virtuella nätverksgatewayen.

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

Konfigurera VPN-klienten

Den virtuella Azure-nätverksgatewayen skapar ett nedladdningsbart paket med konfigurationsfiler som krävs för att initiera VPN-anslutningen på din lokala Linux-dator. Följande skript placerar de certifikat som du skapade på rätt plats och konfigurerar ipsec.conf filen med rätt värden från konfigurationsfilen i det nedladdningsbara paketet.

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 

Montera Azure-filresurs

Nu när du har konfigurerat punkt-till-plats-VPN kan du montera din Azure-filresurs. Se Montera SMB-filresurser till Linux - eller Mount NFS-filresurs till Linux.

Se även