Een punt-naar-site-VPN (P2S) configureren in Linux voor gebruik met Azure Files
U kunt een punt-naar-site-VPN-verbinding (P2S) 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 punt-naar-site-VPN-verbinding met Azure Files wilt gebruiken, moet er een punt-naar-site-VPN-verbinding worden geconfigureerd 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
Bestands sharetype | SMB | NFS |
---|---|---|
Standaardbestandsshares (GPv2), LRS/ZRS | ||
Standaardbestandsshares (GPv2), GRS/GZRS | ||
Premium bestandsshares (FileStorage), LRS/ZRS |
Vereisten
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-bestandsshare die u on-premises wilt koppelen. Azure-bestandsshares worden geïmplementeerd binnen opslagaccounts. Dit zijn beheerconstructies die een gedeelde opslaggroep vertegenwoordigen waarin u meerdere bestandsshares kunt implementeren, evenals andere opslagbronnen, zoals blobcontainers of wachtrijen. 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 koppelen. 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 er een fout optreedt, zoals EAP_IDENTITY niet wordt ondersteund, EAP_NAK 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. De P2S VPN-verbinding die u automatisch maakt, is 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 en een clientcertificaat, dat wordt 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-machines verbinding maken. Voor het implementeren van deze service zijn twee basisonderdelen vereist: een openbaar IP-adres waarmee de gateway naar uw clients wordt geïdentificeerd waar ze zich ook ter wereld bevinden en een basiscertificaat dat u eerder hebt gemaakt, die wordt gebruikt om uw clients te verifiëren.
Vergeet niet om deze resources te vervangen door <desired-vpn-name-here>
de naam die u voor deze resources wilt gebruiken.
Notitie
Het implementeren van de gateway van het virtuele Azure-netwerk kan tot 45 minuten duren. Terwijl deze resource wordt geïmplementeerd, wordt dit bash-script geblokkeerd om de implementatie te voltooien.
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, dienovereenkomstig.
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. Met het volgende script worden de certificaten die u op de juiste plek hebt gemaakt, op de juiste plek opgeslagen en het bestand geconfigureerd ipsec.conf
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
Nu 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.