Udostępnij za pośrednictwem


Konfigurowanie sieci VPN typu punkt-lokacja (P2S) w systemie Linux do użycia z usługą Azure Files

Możesz użyć połączenia wirtualnej sieci prywatnej (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 i pojedynczym klientem. Aby użyć połączenia sieci VPN punkt-lokacja z usługą Azure Files, należy skonfigurować połączenie sieci VPN punkt-lokacja dla każdego klienta, który chce się połączyć. Jeśli masz wielu klientów, którzy muszą nawiązać połączenie z zasobami plików Azure ze swojej 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 usługą Azure Files.

Zdecydowanie zalecamy zapoznanie się z omówieniem sieci usługi Azure Files przed kontynuowaniem pracy z tym artykułem, aby zapoznać się z pełnym omówieniem opcji sieci dostępnych dla usługi 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.

Odnosi się do

Model zarządzania Model rozliczania Poziom mediów Redundancja Małe i Średnie Przedsiębiorstwa (SMB) System plików sieciowych (NFS)
Microsoft.Storage Wersja 2 została przygotowana HDD (standardowa) Lokalna sieć (LRS) Tak Nie.
Microsoft.Storage Wersja 2 została przygotowana HDD (standardowa) Strefa (ZRS) Tak Nie.
Microsoft.Storage Wersja 2 została przygotowana HDD (standardowa) Geo (GRS) Tak Nie.
Microsoft.Storage Wersja 2 została przygotowana HDD (standardowa) Strefa geograficzna (GZRS) Tak Nie.
Microsoft.Storage Zaprovisionowana wersja 1 SSD klasy premium Lokalna sieć (LRS) Tak Tak
Microsoft.Storage Zaprovisionowana wersja 1 SSD klasy premium Strefa (ZRS) Tak Tak
Microsoft.Storage Płać według zużycia HDD (standardowa) Lokalna sieć (LRS) Tak Nie.
Microsoft.Storage Płać według zużycia HDD (standardowa) Strefa (ZRS) Tak Nie.
Microsoft.Storage Płać według zużycia HDD (standardowa) Geo (GRS) Tak Nie.
Microsoft.Storage Płać według zużycia HDD (standardowa) Strefa geograficzna (GZRS) Tak Nie.

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 programu Azure PowerShell i wybieranie systemu operacyjnego. Jeśli wolisz używać 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. Dowiedz się więcej o tym, jak wdrażać udziały plików platformy Azure i konta magazynu, w sekcji 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 punktów końcowych sieci usługi Azure Files.

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ą, czyli VNet. Można myśleć o połączeniu VPN typu punkt-do-lokacji jako o moście pomiędzy lokalną maszyną z systemem Linux a tą siecią wirtualną na platformie Azure.

Poniższy skrypt tworzy sieć wirtualną platformy Azure z trzema podsieciami: jeden dla punktu końcowego usługi konta magazynu, jeden 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, oraz jeden dla bramy sieci wirtualnej, która zapewnia usługę sieci VPN.

Pamiętaj, aby zastąpić <region>, <resource-group> i <desired-vnet-name> odpowiednimi wartościami dla Twojego ś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 zostały uwierzytelnione i mogły uzyskać dostęp do sieci wirtualnej, należy utworzyć dwa certyfikaty:

  • Certyfikat główny udostępniany bramie maszyny wirtualnej
  • Certyfikat klienta 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ą łączy się lokalny klient systemu Linux. Wdrożenie tej usługi wymaga dwóch podstawowych składników:

  • Publiczny adres IP, który identyfikuje bramę dla klientów niezależnie od tego, gdzie znajdują się na świecie.
  • Utworzony wcześniej certyfikat główny używany do uwierzytelniania klientów

Pamiętaj, aby zastąpić <desired-vpn-name-here> nazwą, którą chcesz dla tych zasobów.

Uwaga

Wdrażanie bramy sieci wirtualnej platformy Azure może potrwać do 45 minut. Podczas wdrażania tego zasobu skrypt bash blokuje ukończenie wdrożenia.

Połączenia P2S IKEv2/OpenVPN nie są obsługiwane w przypadku SKU Podstawowa. Ten skrypt używa 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 tworzy pakiet do pobrania z plikami konfiguracji wymaganymi do zainicjowania połączenia sieci VPN na lokalnej maszynie z systemem Linux. Poniższy skrypt umieszcza utworzone certyfikaty we właściwym miejscu i konfiguruje plik ipsec.conf z odpowiednimi wartościami z pliku konfiguracji z pobranego pakietu.

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 zamontować zasób plikowy platformy Azure. Zobacz Instalowanie udziałów plików SMB w systemie Linux lub Instalowanie udziału plików NFS w systemie Linux.

Zobacz też