Konfigurowanie sieci VPN typu punkt-lokacja (P2S) w systemie Linux do użycia z usługą Azure Files
Możesz użyć połączenia sieci VPN typu punkt-lokacja (P2S), aby zainstalować udziały plików platformy Azure spoza platformy Azure bez wysyłania danych za pośrednictwem otwartego Internetu. Połączenie sieci VPN typu punkt-lokacja to połączenie sieci VPN między platformą Azure a indywidualnym klientem. Aby użyć połączenia sieci VPN punkt-lokacja z Azure Files, należy skonfigurować połączenie sieci VPN punkt-lokacja dla każdego klienta, który chce nawiązać połączenie. Jeśli masz wielu klientów, którzy muszą nawiązać połączenie z udziałami plików platformy Azure z sieci lokalnej, możesz użyć połączenia sieci VPN typu lokacja-lokacja (S2S) zamiast połączenia punkt-lokacja dla każdego klienta. Aby dowiedzieć się więcej, zobacz Konfigurowanie sieci VPN typu lokacja-lokacja do użycia z Azure Files.
Zdecydowanie zalecamy przeczytanie Azure Files omówienie sieci przed kontynuowaniem tego artykułu, aby zapoznać się z pełnym omówieniem opcji sieci dostępnych dla Azure Files.
W tym artykule szczegółowo opisano kroki konfigurowania sieci VPN typu punkt-lokacja w systemie Linux w celu zainstalowania udziałów plików platformy Azure bezpośrednio w środowisku lokalnym.
Dotyczy
Typ udziału plików | SMB | NFS |
---|---|---|
Udziały plików w warstwie Standardowa (GPv2), LRS/ZRS | ![]() |
![]() |
Udziały plików w warstwie Standardowa (GPv2), GRS/GZRS | ![]() |
![]() |
Udziały plików w warstwie Premium (FileStorage), LRS/ZRS | ![]() |
![]() |
Wymagania wstępne
Najnowsza wersja interfejsu wiersza polecenia platformy Azure. Aby uzyskać informacje na temat sposobu instalowania interfejsu wiersza polecenia platformy Azure, zobacz Instalowanie interfejsu wiersza polecenia Azure PowerShell i wybieranie systemu operacyjnego. Jeśli wolisz korzystać z modułu Azure PowerShell w systemie Linux, możesz. Poniższe instrukcje dotyczą jednak interfejsu wiersza polecenia platformy Azure.
Udział plików platformy Azure, który chcesz zainstalować lokalnie. Udziały plików platformy Azure są wdrażane na kontach magazynu, które są konstrukcjami zarządzania reprezentującymi udostępnioną pulę magazynu, w której można wdrożyć wiele udziałów plików, a także inne zasoby magazynu, takie jak kontenery obiektów blob lub kolejki. Aby dowiedzieć się więcej na temat wdrażania udziałów plików i kont magazynu platformy Azure, zobacz Tworzenie udziału plików platformy Azure.
Prywatny punkt końcowy dla konta magazynu zawierającego udział plików platformy Azure, który chcesz zainstalować lokalnie. Aby dowiedzieć się, jak utworzyć prywatny punkt końcowy, zobacz Konfigurowanie Azure Files punktów końcowych sieci.
Instalowanie wymaganego oprogramowania
Brama sieci wirtualnej platformy Azure może zapewnić połączenia sieci VPN przy użyciu kilku protokołów sieci VPN, w tym protokołów IPsec i OpenVPN. W tym artykule pokazano, jak używać protokołu IPsec i używa pakietu strongSwan do zapewnienia obsługi w systemie Linux.
Zweryfikowano z systemem Ubuntu 18.10.
sudo apt update
sudo apt install strongswan strongswan-pki libstrongswan-extra-plugins curl libxml2-utils cifs-utils unzip
INSTALL_DIR="/etc/"
Jeśli instalacja nie powiedzie się lub wystąpi błąd, taki jak EAP_IDENTITY nieobsługiwany, wysyłanie EAP_NAK może być konieczne zainstalowanie dodatkowych wtyczek:
sudo apt install -y libcharon-extra-plugins
Wdrażanie sieci wirtualnej
Aby uzyskać dostęp do udziału plików platformy Azure i innych zasobów platformy Azure ze środowiska lokalnego za pośrednictwem sieci VPN typu punkt-lokacja, musisz utworzyć sieć wirtualną lub sieć wirtualną. Połączenie sieci VPN typu punkt-lokacja, które utworzysz automatycznie, to most między lokalną maszyną z systemem Linux i tą siecią wirtualną platformy Azure.
Poniższy skrypt utworzy sieć wirtualną platformy Azure z trzema podsieciami: jedną dla punktu końcowego usługi konta magazynu, jedną dla prywatnego punktu końcowego konta magazynu, który jest wymagany do uzyskiwania dostępu do konta magazynu lokalnie bez tworzenia niestandardowego routingu dla publicznego adresu IP konta magazynu, który może ulec zmianie, a drugi dla bramy sieci wirtualnej, która udostępnia usługę sieci VPN.
Pamiętaj, aby zastąpić <region>
wartości , <resource-group>
i <desired-vnet-name>
odpowiednimi wartościami dla danego środowiska.
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 '"')
Tworzenie certyfikatów na potrzeby uwierzytelniania sieci VPN
Aby połączenia sieci VPN z lokalnych maszyn z systemem Linux były uwierzytelniane w celu uzyskania dostępu do sieci wirtualnej, należy utworzyć dwa certyfikaty: certyfikat główny, który zostanie dostarczony do bramy maszyny wirtualnej, oraz certyfikat klienta, który zostanie podpisany przy użyciu certyfikatu głównego. Poniższy skrypt tworzy wymagane certyfikaty.
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"
Wdrażanie bramy sieci wirtualnej
Brama sieci wirtualnej platformy Azure to usługa, z którą będą nawiązywane połączenia lokalne maszyny z systemem Linux. Wdrożenie tej usługi wymaga dwóch podstawowych składników: publicznego adresu IP, który zidentyfikuje bramę na klientach niezależnie od tego, gdzie znajdują się na świecie, oraz utworzony wcześniej certyfikat główny, który będzie używany do uwierzytelniania klientów.
Pamiętaj, aby zastąpić <desired-vpn-name-here>
ciąg nazwą, którą chcesz uzyskać dla tych zasobów.
Uwaga
Wdrażanie bramy sieci wirtualnej platformy Azure może potrwać do 45 minut. Podczas wdrażania tego zasobu ten skrypt powłoki bash zablokuje ukończenie wdrożenia.
Połączenia P2S IKEv2/OpenVPN nie są obsługiwane w przypadku jednostki SKU w warstwie Podstawowa . Ten skrypt używa odpowiednio jednostki SKU VpnGw1 dla bramy sieci wirtualnej.
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
Konfigurowanie klienta sieci VPN
Brama sieci wirtualnej platformy Azure utworzy pakiet do pobrania z plikami konfiguracji wymaganymi do zainicjowania połączenia sieci VPN na lokalnej maszynie z systemem Linux. Poniższy skrypt umieści certyfikaty utworzone w odpowiednim miejscu i skonfiguruje ipsec.conf
plik przy użyciu poprawnych wartości z pliku konfiguracji w pakiecie do pobrania.
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
Instalowanie udziału plików platformy Azure
Po skonfigurowaniu sieci VPN typu punkt-lokacja możesz zainstalować udział plików platformy Azure. Zobacz Instalowanie udziałów plików SMB w systemie Linux lub Instalowanie udziału plików NFS w systemie Linux.