Bagikan melalui


Mengonfigurasi VPN titik-ke-situs (P2S) di Linux untuk digunakan dengan Azure Files

Anda dapat menggunakan koneksi jaringan privat virtual (VPN) titik-ke-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 koneksi VPN P2S dengan Azure Files, Anda harus mengonfigurasi koneksi VPN P2S untuk setiap klien yang ingin terhubung. Jika Anda memiliki banyak klien yang perlu tersambung ke berbagi file Azure dari jaringan lokal, Anda dapat menggunakan koneksi VPN situs-ke-situs (S2S) alih-alih koneksi titik-ke-situs untuk setiap klien. Untuk mempelajari selengkapnya, lihat Mengonfigurasi VPN situs-ke-situs untuk digunakan dengan Azure Files.

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

Artikel ini merinci langkah-langkah untuk mengonfigurasi VPN titik-ke-situs di Linux untuk memasang berbagi file Azure secara langsung di tempat.

Berlaku untuk

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

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 VPN P2S yang akan Anda buat secara otomatis adalah jembatan antara komputer 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 komputer Linux lokal Anda diautentikasi untuk mengakses jaringan virtual Anda, Anda harus membuat dua sertifikat:

  • Sertifikat akar, yang akan diberikan ke gateway komputer virtual
  • 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. Menyebarkan layanan ini memerlukan dua komponen dasar:

  • Alamat IP publik yang akan mengidentifikasi gateway ke klien Anda di mana pun mereka berada di dunia
  • 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 penyebaran agar tidak selesai.

Koneksi P2S IKEv2/OpenVPN tidak didukung dengan SKU Dasar . Skrip ini menggunakan VpnGw1 SKU 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.

Lihat juga