はじめに
AZ-104の勉強中にVPNGatewayに関する記述があり、理解が乏しかったので実践して理解を深めようと思った次第です。
今回は自分のPCからAzure VMにプライベート接続できることを確認します。
※以下を参考に実施します
環境
- Windows11
- Azure PowerShell Module
- PowerShell ver7以上
VPNゲートウェイの使用方法
AzureでのVPNゲートウェイの使用方法は3つあります
- S2S接続(他クラウド環境と接続したり、オンプレミスのデータセンターと接続したりする場合はこちらだと思います。)
- VNet間接続(複数のAzure仮想ネットワークを接続します)
- P2S接続(クライアントPCとAzureの仮想ネットワークとを接続します) ★今回はこちら
①Azure にサインインします
Connect-AzAccount
②リソースグループの作成を行います
今回は初めに以下の変数を宣言をします
# 変数の値は任意の値を入れてください
$VNetName = "任意の名称"
$FESubName = "任意の名称"
$GWSubName = "任意の名称"
$VNetPrefix = "xxx.xxx.xxx.xxx/xx"
$FESubPrefix = "xxx.xxx.xxx.xxx/xx"
$GWSubPrefix = "xxx.xxx.xxx.xxx/xx"
$VPNClientAddressPool = "xxx.xxx.xxx.xxx/xx"
$RG = "任意の名称"
$Location = "任意の名称"
$GWName = "任意の名称"
$GWIPName = "任意の名称"
$GWIPconfName = "任意の名称"
$DNS = "xxx.xxx.xxx.xxx"
# リソースグループの作成をします
New-AzResourceGroup -Name $RG -Location $Location
③VNetの作成
try {
$fesub = New-AzVirtualNetworkSubnetConfig -Name $FESubName `
-AddressPrefix $FESubPrefix
$gwsub = New-AzVirtualNetworkSubnetConfig -Name $GWSubName `
-AddressPrefix $GWSubPrefix
# VNetを作成します
New-AzVirtualNetwork -Name $VNetName `
-ResourceGroupName $RG `
-Location $Location `
-AddressPrefix $VNetPrefix `
-Subnet $fesub, $gwsub `
-DnsServer $DNS
# 作成したVNetの変数を取得します
$vnet = Get-AzVirtualNetwork -ResourceGroupName $RG -Name $VNetName
$subnet = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet
# クライアントPCから接続するときに参照するパブリックアドレスを作成します
$pip = New-AzPublicIpAddress -Name $GWIPName `
-ResourceGroupName $RG `
-Location $Location `
-AllocationMethod Dynamic `
-Sku Standard
$ipconf = New-AzVirtualNetworkGatewayIpConfig -Name $GWIPconfName `
-Subnet $subnet `
-PublicIpAddress $pip
# VPNGatewayを作成します(最大45分かかるみたいです)
New-AzVirtualNetworkGateway -Name $GWName `
-ResourceGroupName $RG `
-Location $Location `
-IpConfigurations $ipconf `
-GatewayType Vpn `
-VpnType RouteBased `
-EnableBgp $false `
-GatewaySku VpnGw1AZ `
-VpnClientProtocol "IKEv2" `
-VpnGatewayGeneration "Generation1"
}
catch {
Write-Host $_.Exception.Message -ForegroundColor Red
}
④証明書の生成
クライアントPCに証明書の生成を行います
# 自己署名ルート証明書の作成
$cert = New-SelfSignedCertificate -Type Custom `
-KeySpec Signature `
-Subject "CN=P2SRootCert" `
-KeyExportPolicy Exportable `
-HashAlgorithm sha256 `
-KeyLength 2048 `
-CertStoreLocation "Cert:\CurrentUser\My" `
-KeyUsageProperty Sign `
-KeyUsage CertSign
# クライアント証明書の作成
New-SelfSignedCertificate -Type Custom `
-DnsName P2SRootCert `
-KeySpec Signature `
-Subject "CN=P2SChildCert" `
-KeyExportPolicy Exportable `
-HashAlgorithm sha256 `
-KeyLength 2048 `
-CertStoreLocation "Cert:\CurrentUser\My" `
-Signer $cert `
-TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2")
作成後はAzureにアップロードする証明書のアップロードを行います
- ユーザ証明書の管理を開きます(ファイル名を指定して実行で「certmgr.msc」を入力してEnterで開きます)
- 先ほど作成した自己署名ルート証明書を探し、右クリックしてエクスポートを選択します
- 次へをクリックします
- いいえ、秘密キーをエクスポートしませんをクリックします
- Base 64 encoded X.509をクリックします
- エクスポート先を選択してクリックします
- エクスポートした証明書をメモ帳で開き、②で作成したVNetGatewayに設定します
⑤VPNクライアントの設定を行います
VNetGatewayからVPNクライアントをダウンロードします
インストール後は以下が追加されるので接続をクリックしてVPN接続を行います
以下参考
⑥VM作成
確認用にVMを作成します。
$UserName = "azureuser";
$Password = ConvertTo-SecureString "azureP@assword123" -AsPlainText -Force;
$Cred = New-Object System.Management.Automation.PSCredential ($UserName, $Password);
$SSHKeyName = "mySSHKeyName01";
New-AzVM -ResourceGroupName $RG `
-Name "TestVM" `
-Location $Location `
-Image UbuntuLTS `
-Size "Standard_D2s_v3" `
-Credential $Cred `
-OpenPorts 22 `
-GenerateSshKey `
-SshKeyName $SSHKeyName `
-VirtualNetworkName $VNetName `
-SubnetName $FESubName `
-PublicIpAddressName "TestVMIP"
⑦接続確認
# プライベートアドレスの確認
$VM = Get-AzVM -ResourceGroup $RG
Get-AzNetworkInterface -ResourceId $VM.NetworkProfile.NetworkInterfaces.Id
# VPN接続状態でVMプライベートアドレスに接続できれば成功です
ssh -i <key_path> azureuser@<プライベートアドレス>
最後に
検証後はリソースの削除を行います
Remove-AzResourceGroup -Name $RG -Force
証明書の削除は以下参考
所感
実際に作成してみることで理解が深まった気がします。
機会があれば今度はS2Sの接続にも挑戦してみたいと思います。