Linux üzerinde bir noktadan siteye (P2S) VPN'i Azure Dosyalar ile kullanmak üzere yapılandırma

Açık İnternet üzerinden veri göndermeden Azure dosya paylaşımlarınızı Azure dışından bağlamak için noktadan siteye (P2S) sanal özel ağ (VPN) bağlantısı kullanabilirsiniz. Noktadan siteye VPN bağlantısı, Azure ile tek bir istemci arasındaki VPN bağlantısıdır. Azure Dosyalar ile P2S VPN bağlantısı kullanmak için bağlanmak isteyen her istemci için bir P2S VPN bağlantısı yapılandırmanız gerekir. Şirket içi ağınızdan Azure dosya paylaşımlarınıza bağlanması gereken çok sayıda istemciniz varsa, her istemci için noktadan siteye bağlantı yerine siteden siteye (S2S) VPN bağlantısı kullanabilirsiniz. Daha fazla bilgi edinmek için bkz. Azure Dosyalar ile kullanmak üzere siteden siteye VPN yapılandırma.

Azure Dosyalar için kullanılabilen ağ seçeneklerinin tam olarak tartışılması için bu makaleye devam etmeden önce ağa genel bakış Azure Dosyalar okumanızı kesinlikle öneririz.

Makalede, Azure dosya paylaşımlarını doğrudan şirket içinde bağlamak için Linux'ta noktadan siteye VPN yapılandırma adımları ayrıntılı olarak açıklanmaktadır.

Şunlara uygulanır

Dosya paylaşımı türü SMB NFS
Standart dosya paylaşımları (GPv2), LRS/ZRS Yes Hayır
Standart dosya paylaşımları (GPv2), GRS/GZRS Yes Hayır
Premium dosya paylaşımları (filestorage), LRS/ZRS Yes Yes

Önkoşullar

  • Azure CLI'nın en son sürümü. Azure CLI'yı yükleme hakkında bilgi için bkz . Azure PowerShell CLI'yı yükleme ve işletim sisteminizi seçme. Linux'ta Azure PowerShell modülünü kullanmayı tercih ederseniz, kullanabilirsiniz. Ancak aşağıdaki yönergeler Azure CLI için geçerlidir.

  • Şirket içinde bağlamak istediğiniz bir Azure dosya paylaşımı. Azure dosya paylaşımları, birden çok dosya paylaşımının yanı sıra blob kapsayıcıları veya kuyruklar gibi diğer depolama kaynaklarını dağıtabileceğiniz paylaşılan bir depolama havuzunu temsil eden yönetim yapıları olan depolama hesapları içinde dağıtılır. Azure dosya paylaşımlarını ve depolama hesaplarını dağıtma hakkında daha fazla bilgi için Bkz. Azure dosya paylaşımı oluşturma.

  • Şirket içinde bağlamak istediğiniz Azure dosya paylaşımını içeren depolama hesabı için özel uç nokta. Özel uç nokta oluşturmayı öğrenmek için bkz. Azure Dosyalar ağ uç noktalarını yapılandırma.

Gerekli yazılımları yükleme

Azure sanal ağ geçidi, IPsec ve OpenVPN gibi çeşitli VPN protokollerini kullanarak VPN bağlantıları sağlayabilir. Bu makalede IPsec'in nasıl kullanılacağı ve Linux'ta destek sağlamak için strongSwan paketinin nasıl kullanılacağı gösterilmektedir.

Ubuntu 18.10 ile doğrulandı.

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

INSTALL_DIR="/etc/"

Yükleme başarısız olursa veya EAP_IDENTITY desteklenmiyor, EAP_NAK gönderme gibi bir hata alırsanız ek eklentiler yüklemeniz gerekebilir:

sudo apt install -y libcharon-extra-plugins

Sanal ağ dağıtma

Noktadan Siteye VPN aracılığıyla şirket içinden Azure dosya paylaşımınıza ve diğer Azure kaynaklarına erişmek için bir sanal ağ veya sanal ağ oluşturmanız gerekir. Otomatik olarak oluşturacağınız P2S VPN bağlantısı, şirket içi Linux makinenizle bu Azure sanal ağı arasında bir köprüdür.

Aşağıdaki betik, üç alt ağ içeren bir Azure sanal ağı oluşturur: biri depolama hesabınızın hizmet uç noktası için, biri depolama hesabınızın özel uç noktası için, diğeri de değişebilecek depolama hesabının genel IP'sine yönelik özel yönlendirme oluşturmadan şirket içi depolama hesabına erişmek için gereklidir ve bir tane de VPN hizmetini sağlayan sanal ağ geçidiniz için.

, <resource-group>ve <desired-vnet-name> değerlerini ortamınız için uygun değerlerle değiştirmeyi <region>unutmayın.

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 kimlik doğrulaması için sertifika oluşturma

Şirket içi Linux makinelerinizden gelen VPN bağlantılarının sanal ağınıza erişmek için kimliğinin doğrulanması için iki sertifika oluşturmanız gerekir:

  • Sanal makine ağ geçidine sağlanacak bir kök sertifika
  • Kök sertifikayla imzalanacak bir istemci sertifikası

Aşağıdaki betik gerekli sertifikaları oluşturur.

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"

Sanal ağ geçidi dağıtma

Azure sanal ağ geçidi, şirket içi Linux makinelerinizin bağlanacağı hizmettir. Bu hizmetin dağıtılması için iki temel bileşen gerekir:

  • İstemcilerinizin dünyanın neresinde olurlarsa olsunlar ağ geçidini tanımlayan bir genel IP adresi
  • İstemcilerinizin kimliğini doğrulamak için kullanılacak daha önce oluşturduğunuz kök sertifika

değerini bu kaynaklar için istediğiniz adla değiştirmeyi <desired-vpn-name-here> unutmayın.

Not

Azure sanal ağ geçidinin dağıtılması 45 dakika kadar sürebilir. Bu kaynak dağıtılırken, bu bash betiği dağıtımın tamamlanmasını engeller.

P2S IKEv2/OpenVPN bağlantıları Temel SKU ile desteklenmez. Bu betik, sanal ağ geçidi için VpnGw1 SKU'su kullanır.

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 istemcisini yapılandırma

Azure sanal ağ geçidi, şirket içi Linux makinenizde VPN bağlantısını başlatmak için gereken yapılandırma dosyalarını içeren indirilebilir bir paket oluşturur. Aşağıdaki betik, oluşturduğunuz sertifikaları doğru konuma yerleştirir ve dosyayı indirilebilir paketteki ipsec.conf yapılandırma dosyasından doğru değerlerle yapılandıracaktır.

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 

Azure dosya paylaşımını bağlama

Noktadan Siteye VPN'nizi ayarladığınıza göre Azure dosya paylaşımınızı bağlayabilirsiniz. Bkz . SMB dosya paylaşımlarını Linux'a bağlama veya NFS dosya paylaşımını Linux'a bağlama.

Ayrıca bkz.