次の方法で共有


Azure Files で使用するポイント対サイト (P2S) VPN on Linux を構成する

ポイント対サイト (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 (標準) ジオゾーン (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 (標準) ジオゾーン (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 仮想ネットワークの間のブリッジと考えることができます。

次のスクリプトは、3 つのサブネットを持つ Azure 仮想ネットワークを作成します。1 つはストレージ アカウントのサービス エンドポイント用、1 つはストレージ アカウントのプライベート エンドポイント用です。これは、変更される可能性があるストレージ アカウントのパブリック IP のカスタム ルーティングを作成せずにオンプレミスのストレージ アカウントにアクセスするために必要であり、もう 1 つは 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 接続を認証して仮想ネットワークにアクセスするには、次の 2 つの証明書を作成する必要があります。

  • 仮想マシン ゲートウェイに提供されるルート証明書
  • ルート証明書で署名されたクライアント証明書

次のスクリプトは、必要な証明書を作成します。

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 クライアントが接続するサービスです。 このサービスをデプロイするには、次の 2 つの基本的なコンポーネントが必要です。

  • 世界中のクライアントへのゲートウェイを識別するパブリック IP アドレス。
  • クライアントの認証に使用する、先ほど作成したルート証明書

<desired-vpn-name-here>は、これらのリソースに使用する名前に置き換えてください。

Azure 仮想ネットワーク ゲートウェイのデプロイには、最大で 45 分かかることがあります。 このリソースのデプロイ中、この bash スクリプトはデプロイの完了をブロックします。

P2S IKEv2/OpenVPN 接続は 、Basic 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 ファイル共有をマウントできます。 「SMB ファイル共有を Linux にマウントする」または「Linux への NFS ファイル共有のマウント」を参照してください。

こちらも参照ください