Mengonfigurasi VPN Titik-ke-Situs (P2S) di Linux untuk digunakan dengan Azure Files

Anda dapat menggunakan koneksi VPN point-to-situs (P2S) untuk memasang berbagi file Azure Anda dari luar Azure, tanpa mengirim data melalui internet terbuka. Koneksi VPN Titik-ke-Situs adalah koneksi VPN antara Azure dan klien individual. Untuk menggunakan sambungan VPN P2S dengan Azure Files, sambungan VPN P2S perlu dikonfigurasi untuk setiap klien yang ingin terhubung. Jika memiliki banyak klien yang perlu disambungkan ke berbagi file Azure dari jaringan lokal, Anda dapat menggunakan koneksi VPN Situs-ke-Situs (S2S), bukan koneksi Titik-ke-Situs untuk setiap klien. Untuk mempelajari lebih lanjut, lihat Konfigurasikan Site-to-Site VPN untuk digunakan dengan Azure Files.

Kami sangat menyarankan Anda membaca Gambaran umum jaringan Azure Files sebelum melanjutkan artikel panduan ini untuk diskusi yang lengkap tentang opsi jaringan yang tersedia untuk Azure Files.

Artikel ini menjabarkan langkah-langkah untuk mengonfigurasi Point-to-Site VPN untuk memasang berbagi file Azure lokal secara langsung.

Berlaku untuk

Jenis berbagi File SMB NFS
Berbagi file standar (GPv2), LRS/ZRS Yes No
Berbagi file standar (GPv2), GRS/GZRS Yes No
Berbagi file premium (FileStorage), LRS/ZRS Yes Yes

Prasyarat

  • Versi terbaru dari Azure CLI. Untuk informasi tentang cara menginstal Azure CLI, lihat Menginstal Azure PowerShell CLI dan memilih sistem operasi Anda. Jika Anda lebih suka menggunakan modul Azure PowerShell di Linux, Anda dapat melakukannya. Namun, instruksi di bawah ini adalah untuk Azure CLI.

  • Berbagi file Azure yang ingin Anda pasang secara lokal. Berbagi file Azure disebarkan dalam akun penyimpanan, yang merupakan konstruksi pengelolaan yang memberikan gabungan penyimpanan bersama tempat Anda dapat menyebarkan beberapa berbagi serta sumber daya penyimpanan lainnya, seperti antrean atau kontainer blob. Anda bisa mempelajari lebih lanjut cara menggunakan berbagi file Azure dan akun penyimpanan di Membuat berbagi file Azure.

  • Titik akhir privat untuk akun penyimpanan yang berisi berbagi file Azure yang ingin Anda pasang secara lokal. Untuk mempelajari cara membuat titik akhir privat, lihat Mengonfigurasi titik akhir jaringan Azure Files.

Pasang piranti lunak yang diperlukan

Gateway jaringan virtual Azure dapat menyediakan koneksi VPN yang menggunakan beberapa protokol VPN, termasuk IPsec dan OpenVPN. Artikel ini menunjukkan cara menggunakan IPsec dan menggunakan paket strongSwan untuk memberikan dukungan di Linux.

Diverifikasi dengan Ubuntu 18.10.

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

INSTALL_DIR="/etc/"

Jika penginstalan gagal atau Anda mendapatkan kesalahan seperti EAP_IDENTITY tidak didukung, mengirim EAP_NAK, Anda mungkin perlu menginstal plugin tambahan:

sudo apt install -y libcharon-extra-plugins

Pilih jaringan virtual

Untuk mengakses berbagi file Azure dan sumber daya Azure lokal lainnya melalui Point-to-Site VPN, Anda harus membuat jaringan virtual, atau VNet. Koneksi P2S VPN yang akan Anda buat secara otomatis adalah jembatan penghubung antara mesin Linux lokal Anda dan jaringan virtual Azure ini.

Skrip berikut ini akan membuat jaringan virtual Azure dengan tiga subnet: satu untuk titik akhir layanan akun penyimpanan, satu untuk titik akhir privat akun penyimpanan Anda, yang diperlukan untuk mengakses akun penyimpanan lokal tanpa membuat perutean kustom untuk IP publik dari akun penyimpanan yang dapat berubah, dan satu untuk gateway jaringan virtual yang menyediakan layanan VPN.

Jangan lupa untuk mengganti <region>, <resource-group>, dan <desired-vnet-name> dengan nilai yang sesuai untuk lingkungan Anda.

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

Buat sertifikat untuk autentikasi VPN

Agar koneksi VPN dari mesin Linux lokal Anda dapat diautentikasi untuk mengakses jaringan virtual, Anda harus membuat dua sertifikat: sertifikat akar, yang akan diberikan ke gateway mesin virtual, dan sertifikat klien, yang akan ditandatangani dengan sertifikat akar. Skrip berikut ini membuat sertifikat yang dibutuhkan.

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"

Sebarkan gateway jaringan virtual

Gateway jaringan virtual Azure adalah layanan tempat tujuan mesin Linux lokal Anda akan dikoneksikan. Penyebaran layanan ini memerlukan dua komponen dasar: IP publik yang akan mengidentifikasi gateway ke klien Anda di mana pun mereka berada dan sertifikat akar yang Anda buat sebelumnya yang akan digunakan untuk mengautentikasi klien Anda.

Jangan lupa untuk mengganti <desired-vpn-name-here> dengan nama yang diinginkan untuk sumber daya ini.

Catatan

Penyebaran gateway jaringan virtual Azure memerlukan waktu hingga 45 menit. Saat sumber daya ini sedang disebarkan, skrip bash ini akan memblokir agar penyebaran selesai.

Koneksi P2S IKEv2/OpenVPN tidak didukung dengan SKU Dasar. Karenanya, skrip ini menggunakan SKU VpnGw1 untuk gateway jaringan virtual.

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

Mengonfigurasi klien VPN

Gateway jaringan virtual Azure akan membuat paket yang dapat diunduh dengan file konfigurasi yang dibutuhkan untuk menginisialisasi koneksi VPN di mesin Linux lokal Anda. Skrip berikut ini akan menempatkan sertifikat yang Anda buat di spot benar dan mengonfigurasi file ipsec.conf dengan nilai yang benar dari file konfigurasi dalam paket yang dapat diunduh.

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 

Memasang berbagi file Azure

Setelah menyiapkan VPN Point-to-Site, Anda dapat memasang berbagi file Azure. Lihat Memasang berbagi file SMB ke Linux atau Memasang berbagi file NFS ke Linux.

Baca juga