1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AzureでP2S接続してみる

Posted at

はじめに

AZ-104の勉強中にVPNGatewayに関する記述があり、理解が乏しかったので実践して理解を深めようと思った次第です。
今回は自分のPCからAzure VMにプライベート接続できることを確認します。
※以下を参考に実施します

環境

  • Windows11
  • Azure PowerShell Module
  • PowerShell ver7以上

VPNゲートウェイの使用方法

AzureでのVPNゲートウェイの使用方法は3つあります

  1. S2S接続(他クラウド環境と接続したり、オンプレミスのデータセンターと接続したりする場合はこちらだと思います。)
  2. VNet間接続(複数のAzure仮想ネットワークを接続します)
  3. 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にアップロードする証明書のアップロードを行います

  1. ユーザ証明書の管理を開きます(ファイル名を指定して実行で「certmgr.msc」を入力してEnterで開きます)
  2. 先ほど作成した自己署名ルート証明書を探し、右クリックしてエクスポートを選択します
  3. 次へをクリックします
  4. いいえ、秘密キーをエクスポートしませんをクリックします
  5. Base 64 encoded X.509をクリックします
  6. エクスポート先を選択してクリックします
  7. エクスポートした証明書をメモ帳で開き、②で作成したVNetGatewayに設定します

スクリーンショット 2022-12-24 152127.png

スクリーンショット 2022-12-24 152157.png

スクリーンショット 2022-12-24 152231.png

スクリーンショット 2022-12-24 161824.png

⑤VPNクライアントの設定を行います

VNetGatewayからVPNクライアントをダウンロードします
スクリーンショット 2022-12-31 233800.png

ダウンロードしたファイルからインストールを行います
image.png

インストール後は以下が追加されるので接続をクリックしてVPN接続を行います
image.png

以下参考

⑥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の接続にも挑戦してみたいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?