P2S(지점 및 사이트간) VPN(가상 사설망) 연결을 사용하여 열려 있는 인터넷을 통해 데이터를 보내지 않고 Azure 외부에서 Azure 파일 공유를 탑재할 수 있습니다. 지점 및 사이트 간 VPN 연결은 Azure와 개별 클라이언트 간의 VPN 연결입니다. Azure Files와 P2S VPN 연결을 사용하려면 연결하려는 각 클라이언트에 대해 P2S VPN 연결을 구성해야 합니다. 온-프레미스 네트워크에서 Azure 파일 공유에 연결해야 하는 클라이언트가 많은 경우에는 각 클라이언트에 지점 및 사이트 간 연결 대신 S2S(사이트 간) VPN 연결을 사용하면 됩니다. 자세한 내용은 Azure Files에서 사용할 사이트 간 VPN 구성을 참조하세요.
Azure Files에 사용할 수 있는 네트워킹 옵션에 대해 자세히 알아보려면 이 문서를 계속하기 전에 먼저 Azure Files 네트워킹 개요를 참조하는 것이 좋습니다.
이 문서에서는 Azure 파일 공유를 온-프레미스에 직접 탑재하도록 Linux의 지점 및 사이트간 VPN을 구성하는 단계를 자세히 설명합니다.
적용 대상
관리 모델 | 청구 모델 | 미디어 계층 | 중복성 | 중소기업 | 네트워크 파일 시스템 (NFS) |
---|---|---|---|---|---|
Microsoft.Storage (마이크로소프트 저장소) | 프로비전된 v2 | HDD(표준) | 로컬(LRS) | ![]() |
![]() |
Microsoft.Storage (마이크로소프트 저장소) | 프로비전된 v2 | HDD(표준) | 영역(ZRS) | ![]() |
![]() |
Microsoft.Storage (마이크로소프트 저장소) | 프로비전된 v2 | HDD(표준) | 지역(GRS) | ![]() |
![]() |
Microsoft.Storage (마이크로소프트 저장소) | 프로비전된 v2 | HDD(표준) | GeoZone(GZRS) | ![]() |
![]() |
Microsoft.Storage (마이크로소프트 저장소) | 프로비전된 v1 | SSD(프리미엄) | 로컬(LRS) | ![]() |
![]() |
Microsoft.Storage (마이크로소프트 저장소) | 프로비전된 v1 | SSD(프리미엄) | 영역(ZRS) | ![]() |
![]() |
Microsoft.Storage (마이크로소프트 저장소) | 종량제 | HDD(표준) | 로컬(LRS) | ![]() |
![]() |
Microsoft.Storage (마이크로소프트 저장소) | 종량제 | HDD(표준) | 영역(ZRS) | ![]() |
![]() |
Microsoft.Storage (마이크로소프트 저장소) | 종량제 | HDD(표준) | 지역(GRS) | ![]() |
![]() |
Microsoft.Storage (마이크로소프트 저장소) | 종량제 | HDD(표준) | GeoZone(GZRS) | ![]() |
![]() |
필수 조건
Azure CLI의 최신 버전입니다. Azure CLI를 설치하는 방법에 대한 자세한 내용은 Azure PowerShell CLI 설치 및 운영 체제 선택을 참조하세요. Linux에서 Azure PowerShell 모듈을 사용하려는 경우 그러나 아래 지침은 Azure CLI에 대한 것입니다.
온-프레미스에 탑재하려는 Azure 파일 공유입니다. Azure 파일 공유는 여러 파일 공유를 배포할 수 있는 스토리지의 공유 풀을 나타내는 관리 구문인 스토리지 계정 내에 배포됩니다. Azure 파일 공유 만들기에서 Azure 파일 공유 및 스토리지 계정을 배포하는 방법에 대해 자세히 알아봅니다.
온-프레미스에 탑재하려는 Azure 파일 공유를 포함하는 스토리지 계정에 대한 프라이빗 엔드포인트입니다. 프라이빗 엔드포인트를 만드는 방법을 알아보려면 Azure Files 네트워크 엔드포인트 구성을 참조하세요.
필수 소프트웨어 설치
Azure 가상 네트워크 게이트웨이는 IPsec 및 OpenVPN을 비롯한 여러 VPN 프로토콜을 사용하여 VPN 연결을 제공할 수 있습니다. 이 문서에서는 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
가상 네트워크 배포
지점 및 사이트 간의 VPN을 통해 온-프레미스에서 Azure 파일 공유 및 기타 Azure 리소스에 액세스하려면 가상 네트워크 또는 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 인증을 위한 인증서 만들기
가상 네트워크에 액세스하기 위해 온-프레미스 Linux 컴퓨터의 VPN 연결을 인증하려면 다음 두 개의 인증서를 만들어야 합니다.
- 가상 머신 게이트웨이에 제공되는 루트 인증서
- 루트 인증서로 서명된 클라이언트 인증서
다음 스크립트는 필요한 인증서를 만듭니다.
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 가상 네트워크 게이트웨이는 온-프레미스 Linux 머신에서 VPN 연결을 초기화하는 데 필요한 구성 파일을 사용하여 다운로드 가능한 패키지를 만듭니다. 다음 스크립트는 만든 인증서를 올바른 위치에 배치하고 다운로드 가능한 패키지의 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
Azure 파일 공유 탑재
지점 및 사이트 간의 VPN을 설정한 후 Azure 파일 공유를 탑재할 수 있습니다. Linux에 SMB 파일 공유 탑재 또는 Linux에NFS 파일 공유 탑재를 참조하세요.