Azure Files에서 사용할 수 있도록 Linux에서 P2S(지점 및 사이트 간) VPN 구성
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을 구성하는 단계를 자세히 설명합니다.
적용 대상
파일 공유 유형 | SMB | NFS |
---|---|---|
표준 파일 공유(GPv2), LRS/ZRS | ||
표준 파일 공유(GPv2), GRS/GZRS | ||
프리미엄 파일 공유(FileStorage), LRS/ZRS |
필수 조건
최신 버전의 Azure CLI. Azure CLI를 설치하는 방법에 대한 자세한 내용은 Azure PowerShell CLI 설치를 참조하고 해당 운영 체제를 선택합니다. Linux에서 Azure PowerShell 모듈을 사용하려는 경우 이를 사용할 수 있습니다. 그러나 아래 지침은 Azure CLI에 대한 것입니다.
온-프레미스에 탑재하려는 Azure 파일 공유입니다. Azure 파일 공유는 스토리지 계정 내에 배포됩니다. 스토리지 계정은 여러 파일 공유뿐만 아니라 다른 스토리지 리소스(예: Blob 컨테이너 또는 큐)도 배포할 수 있는 공유 스토리지 풀을 나타내는 관리 구조입니다. 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 파일 공유 탑재를 참조하세요.