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
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
- 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
- Het basiscertificaat dat u eerder hebt gemaakt, dat 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. 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. 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.