تكوين VPN من نقطة إلى موقع (P2S) على Linux للاستخدام مع Azure Files
بمقدورك استخدام اتصال VPN من نقطة إلى موقع (P2S) لتحميل مشاركات ملفات Azure من خارج Azure، دون إرسال البيانات عبر الإنترنت المفتوح. اتصال نقطة إلى موقع VPN هو اتصال VPN بين Azure وعميل فردي. لاستخدام اتصال P2S VPN مع ملفات Azure، يجب تهيئة اتصال P2S VPN لكل عميل يريد الاتصال. إذا كان لديك العديد من العملاء الذين يحتاجون إلى الاتصال بمشاركات ملفات Azure خاصتك من شبكتك المحلية، فيمكنك استخدام اتصال VPN من موقع إلى موقع (S 2 S) بدلًا من اتصال نقطة إلى موقع لكل عميل. لمعرفة المزيد، راجع تكوين Site-to-Site VPN للاستخدام مع ملفات Azure .
نوصي بشدة بقراءة «نظرة عامة على شبكة Azure Files» قبل متابعة هذه المقالة حول كيفية إجراء مناقشة كاملة لخيارات الشبكات المتوفرة لـ Azure Files.
توضح المقالة بالتفصيل خطوات تكوين Point-to-Site VPN على Linux لتحميل مشاركات ملف Azure محليًا مباشرةً.
ينطبق على
نوع مشاركة الملف | SMB | NFS |
---|---|---|
مشاركات الملفات القياسية (GPv2)، حسابات التخزين المكررة محليًا (LRS) وحسابات التخزين المكررة في المنطقة (ZRS) | ||
مشاركات الملفات القياسية (GPv2)، حساب تخزين مكرر جغرافي (GRS) أو حساب تخزين مكرر للمنطقة الجغرافية (GZRS) | ||
مشاركات الملفات المدفوعة (FileStorage)، حسابات التخزين المكررة محليًا (LRS) وحسابات التخزين المكررة في المنطقة (ZRS) |
المتطلبات الأساسية
أحدث إصدار مقدم من Azure CLI. للحصول على معلومات حول كيفية تثبيت Azure CLI، راجع تثبيت Azure PowerShell CLI وحدد نظام التشغيل الخاص بك. إذا كنت تفضل استخدام الوحدة النمطية Azure PowerShell على Linux، يمكنك. ومع ذلك، فإن الإرشادات أدناه مخصصة ل Azure CLI.
مشاركة ملف Azure التي ترغب في تحميلها محليا. يتم نشر مشاركات ملفات Azure داخل حسابات التخزين، وهي بنيات إدارة تمثل مجموعة تخزين مشتركة يمكنك من خلالها نشر مشاركات ملفات متعددة، بالإضافة إلى موارد التخزين الأخرى، مثل حاويات الكائنات الثنائية كبيرة الحجم أو قوائم الانتظار. يمكنك معرفة المزيد حول كيفية نشر مشاركات ملفات Azure وحسابات التخزين في إنشاء مشاركة ملف Azure.
نقطة نهاية خاصة لحساب التخزين تحتوي على مشاركة ملف Azure التي تريد إدخالها محليًّا. لمعرفة كيفية إنشاء نقطة نهاية خاصة، راجع تكوين نقاط نهاية شبكة ملفات Azure.
تثبيت البرنامج المطلوب
يمكن أن توفر بوابة الشبكة الظاهرية لـ Azure اتصالات VPN باستخدام عدة بروتوكولات VPN، بما في ذلك IPsec و OpenVPN. توضح هذه المقالة كيفية استخدام IPsec وتستخدم حزمة strongSwan لتوفير الدعم على Linux.
تم التحقق منه باستعمال Ubuntu 18.10.
sudo apt update
sudo apt install strongswan strongswan-pki libstrongswan-extra-plugins curl libxml2-utils cifs-utils unzip
INSTALL_DIR="/etc/"
إذا فشل التثبيت أو تلقيت خطأ مثل EAP_IDENTITY غير مدعوم، أو إرسال EAP_NAK، فقد تحتاج إلى تثبيت مكونات إضافية:
sudo apt install -y libcharon-extra-plugins
توزيع شبكة ظاهرية
للوصول إلى مشاركة ملف Azure وموارد Azure الأخرى من أماكن العمل عبر VPN من نقطة إلى موقع، يجب عليك إنشاء شبكة افتراضية أو VNet. اتصال P2S VPN الذي ستقوم بإنشائه تلقائيًا هو جسر بين جهاز Linux المحلي وشبكة Azure الظاهرية.
سينشئ البرنامج النصي التالي شبكة Azure الظاهرية بثلاث شبكات فرعية: واحدة لنقطة نهاية خدمة حساب التخزين الخاص بك، وواحدة لنقطة النهاية الخاصة لحساب التخزين الخاص بك، وهي مطلوبة للوصول إلى حساب التخزين المحلي دون إنشاء توجيه مخصص لـ IP العام لـ حساب التخزين الذي قد يتغير، وواحد لبوابة الشبكة الافتراضية التي توفر خدمة VPN.
تذكر استبدال <region>
و <resource-group>
و <desired-vnet-name>
بالقيم المناسبة لبيئتك.
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 '"')
ابتكار شهادات لمصادقة VPN
من أجل مصادقة اتصالات VPN من أجهزة Linux المحلية الخاصة بك للوصول إلى شبكتك الافتراضية، يجب عليك إنشاء شهادتين: شهادة الجذر، والتي سيتم توفيرها لبوابة الجهاز الظاهري، وشهادة العميل، والتي سيتم توقيعها مع شهادة الجذر. يقوم البرنامج النصي المذكور فيما يلي بإنشاء الشهادات المطلوبة.
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"
نشر بوابة الشبكة الظاهرية
تعرف بوابة شبكة Azure الظاهرية على أنها الخدمة التي ستتصل بها أجهزة Linux المحلية. يتطلب توزيع هذه الخدمة مكونين أساسيين: عنوان IP عام يحدد البوابة لعملائك أينما كانوا في العالم وشهادة جذر قمت بإنشائها مسبقًا والتي سيتم استخدامها لمصادقة عملائك.
تذكر استبدال <desired-vpn-name-here>
بالاسم الذي تريده لهذه الموارد.
إشعار
قد يستغرق نشر بوابة شبكة Azure الظاهرية ما يصل إلى 45 دقيقة. أثناء نشر هذا المورد، سيحظر هذا البرنامج النصي bash للنشر الذي سيتم إكماله.
اتصالات P2S IKEv2 / OpenVPN غير مدعومة مع SKU الأساسي . يستخدم هذا البرنامج النصي VpnGw1 SKU لبوابة الشبكة الظاهرية، وفقًا لذلك.
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
تكوين عميل VPN
ستنشئ بوابة شبكة Azure الظاهرية حزمة قابلة للتنزيل مع ملفات التكوين المطلوبة لتهيئة اتصال VPN على جهاز Linux الداخلي. سيضع البرنامج النصي التالي الشهادات التي أنشأتها في المكان الصحيح ويهيئ ملف ipsec.conf
بالقيم الصحيحة من ملف التكوين في الحزمة القابلة للتنزيل.
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
مشاركة ملف Mount Azure
الآن بعد أن قمت بإعداد VPN من نقطة إلى موقع، يمكنك تحميل مشاركة ملف Azure. راجع تحميل مشاركات ملفات SMB إلى Linux أو تحميل مشاركة ملف NFS إلى Linux.