PowerShell を使用して仮想ネットワーク ピアリングで仮想ネットワークを接続する

仮想ネットワーク ピアリングを使用して、仮想ネットワークを相互に接続できます。 仮想ネットワークをピアリングすると、それぞれの仮想ネットワークに存在するリソースが、あたかも同じ仮想ネットワーク内に存在するかのような待ち時間と帯域幅で相互に通信できます。

この記事では、次のことについて説明します。

  • 2 つの仮想ネットワークを作成する

  • 仮想ネットワーク ピアリングを使用して 2 つの仮想ネットワークを接続する

  • 各仮想ネットワークに仮想マシン (VM) を展開する

  • VM 間の通信

Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

Azure Cloud Shell

Azure では、ブラウザーを介して使用できる対話型のシェル環境、Azure Cloud Shell がホストされています。 Cloud Shell で Bash または PowerShell を使用して、Azure サービスを操作できます。 ローカル環境に何もインストールしなくても、Cloud Shell にプレインストールされているコマンドを使用して、この記事のコードを実行できます。

Azure Cloud Shell を開始するには、以下のようにします。

オプション 例とリンク
コードまたはコマンド ブロックの右上隅にある [使ってみる] を選択します。 [使ってみる] を選択しても、コードまたはコマンドは Cloud Shell に自動的にはコピーされません。 Azure Cloud Shell の [使ってみる] の例を示すスクリーンショット。
https://shell.azure.com に移動するか、[Cloud Shell を起動する] ボタンを選択して、ブラウザーで Cloud Shell を開きます。 Azure Cloud Shell を起動するボタン。
Azure portal の右上にあるメニュー バーの [Cloud Shell] ボタンを選択します。 Azure portal の [Cloud Shell] ボタンを示すスクリーンショット

Azure Cloud Shell を使用するには、以下のようにします。

  1. Cloud Shell を開始します。

  2. コード ブロック (またはコマンド ブロック) の [コピー] ボタンを選択し、コードまたはコマンドをコピーします。

  3. Windows と Linux では Ctrl+Shift+V キーを選択し、macOS では Cmd+Shift+V キーを選択して、コードまたはコマンドを Cloud Shell セッションに貼り付けます。

  4. Enter キーを選択して、コードまたはコマンドを実行します。

PowerShell をローカルにインストールして使用する場合、この記事では Azure PowerShell モジュール バージョン 1.0.0 以降が必要になります。 インストールされているバージョンを確認するには、Get-Module -ListAvailable Az を実行します。 アップグレードする必要がある場合は、Azure PowerShell モジュールのインストールに関するページを参照してください。 PowerShell をローカルで実行している場合、Connect-AzAccount を実行して Azure との接続を作成することも必要です。

仮想ネットワークを作成する

仮想ネットワークを作成する前に、仮想ネットワークのリソース グループと、この記事で作成された他のすべてのリソースを作成する必要があります。 New-AzResourceGroup を使用して Azure リソース グループを作成します。 次の例では、test-rg という名前のリソース グループを場所 eastus に作成します。

$resourceGroup = @{
    Name = "test-rg"
    Location = "EastUS"
}
New-AzResourceGroup @resourceGroup

New-AzVirtualNetwork を使用して仮想ネットワークを作成します。 次の例では、アドレス プレフィックスが 10.0.0.0/16vnet-1 という名前の仮想ネットワークを作成します。

$vnet1 = @{
    ResourceGroupName = "test-rg"
    Location = "EastUS"
    Name = "vnet-1"
    AddressPrefix = "10.0.0.0/16"
}
$virtualNetwork1 = New-AzVirtualNetwork @vnet1

Add-AzVirtualNetworkSubnetConfig を使用してサブネット構成を作成します。 次の例では、アドレス プレフィックスが 10.0.0.0/24 のサブネット構成を作成します。

$subConfig = @{
    Name = "subnet-1"
    AddressPrefix = "10.0.0.0/24"
    VirtualNetwork = $virtualNetwork1
}
$subnetConfig = Add-AzVirtualNetworkSubnetConfig @subConfig

Set-AzVirtualNetwork を使用して、仮想ネットワークにサブネット構成を書き込みます。これにより、サブネットが作成されます。

$virtualNetwork1 | Set-AzVirtualNetwork

アドレス プレフィックスが 10.1.0.0/16 で 1 つのサブネットを持つ仮想ネットワークを作成します。

# Create the virtual network.
$vnet2 = @{
    ResourceGroupName = "test-rg"
    Location = "EastUS"
    Name = "vnet-2"
    AddressPrefix = "10.1.0.0/16"
}
$virtualNetwork2 = New-AzVirtualNetwork @vnet2

# Create the subnet configuration.
$subConfig = @{
    Name = "subnet-1"
    AddressPrefix = "10.1.0.0/24"
    VirtualNetwork = $virtualNetwork2
}
$subnetConfig = Add-AzVirtualNetworkSubnetConfig @subConfig

# Write the subnet configuration to the virtual network.
$virtualNetwork2 | Set-AzVirtualNetwork

仮想ネットワークをピアリングする

Add-AzVirtualNetworkPeering を使用してピアリングを作成します。 次の例では、vnet-1vnet-2 にピアリングします。

$peerConfig1 = @{
    Name = "vnet-1-to-vnet-2"
    VirtualNetwork = $virtualNetwork1
    RemoteVirtualNetworkId = $virtualNetwork2.Id
}
Add-AzVirtualNetworkPeering @peerConfig1

前のコマンドの実行後に返された出力では、PeeringStateInitiated です。 このピアリングは、vnet-2 から vnet-1 へのピアリングを作成するまで Initiated 状態のままです。 vnet-2 から vnet-1 へのピアリングを作成します。

$peerConfig2 = @{
    Name = "vnet-2-to-vnet-1"
    VirtualNetwork = $virtualNetwork2
    RemoteVirtualNetworkId = $virtualNetwork1.Id
}
Add-AzVirtualNetworkPeering @peerConfig2

前のコマンドの実行後に返された出力では、PeeringStateConnected です。 Azure によって、vnet-1-to-vnet-2 ピアリングのピアリング状態も Connected に変更されました。 Get-AzVirtualNetworkPeering を使用して、vnet-1-to-vnet-2 ピアリングのピアリング状態が Connected に変更されたことを確認します。

$peeringState = @{
    ResourceGroupName = "test-rg"
    VirtualNetworkName = "vnet-1"
}
Get-AzVirtualNetworkPeering @peeringState | Select PeeringState

両方の仮想ネットワークのピアリングの PeeringStateConnected になるまで、一方の仮想ネットワークのリソースともう一方の仮想ネットワークのリソースは通信できません。

仮想マシンを作成する

後で仮想ネットワーク間で通信できるように、各仮想ネットワーク内に VM を作成します。

最初の VM を作成する

New-AzVM を使用して VM を作成します。 次の例では、vnet-1 仮想ネットワークに vm-1 という名前の VM を作成します。 -AsJob オプションを使用すると、VM はバックグラウンドで作成されるため、次の手順に進むことができます。 プロンプトが表示されたら、仮想マシンのユーザー名とパスワードを入力します。

$vm1 = @{
    ResourceGroupName = "test-rg"
    Location = "EastUS"
    VirtualNetworkName = "vnet-1"
    SubnetName = "subnet-1"
    ImageName = "Win2019Datacenter"
    Name = "vm-1"
}
New-AzVm @vm1 -AsJob

2 つ目の VM を作成する

$vm2 = @{
    ResourceGroupName = "test-rg"
    Location = "EastUS"
    VirtualNetworkName = "vnet-2"
    SubnetName = "subnet-1"
    ImageName = "Win2019Datacenter"
    Name = "vm-2"
}
New-AzVm @vm2

VM の作成には数分かかります。 Azure で vm-2 が作成され、PowerShell に出力が返されるまで、以降の手順に進まないでください。

Note

パブリック IP が割り当てられていない VM、または内部の Basic Azure Load Balancer のバックエンド プール内にある VM に対しては、Azure によって既定のアウトバウンド アクセス IP が提供されます。 デフォルト送信アクセス IP メカニズムは、構成できないアウトバウンド IP アドレスを提供します。

次のいずれかのイベントが発生すると、既定のアウトバウンド アクセス IP は無効になります。

  • パブリック IP アドレスが VM に割り当てられます。
  • アウトバウンド規則の有無にかかわらず、VM は標準ロード バランサーのバックエンド プール内に配置されます。
  • Azure NAT Gateway リソースが VM のサブネットに割り当てられている。

フレキシブル オーケストレーション モードの仮想マシン スケール セットによって作成された VM には、既定のアウトバウンド アクセスがありません。

Azure のアウトバウンド接続の詳細については、「Azure での既定の送信アクセス」および「送信接続での送信元ネットワーク アドレス変換 (SNAT)を使用する」を参照してください。

VM 間の通信

インターネットから VM のパブリック IP アドレスに接続できます。 Get-AzPublicIpAddress を使用して、VM のパブリック IP アドレスを返します。 次の例では、vm-1 VM のパブリック IP アドレスを返しています。

$ipAddress = @{
    ResourceGroupName = "test-rg"
    Name = "vm-1"
}
Get-AzPublicIpAddress @ipAddress | Select IpAddress

次のコマンドを使用して、ローカル コンピューターから、vm-1 VM とのリモート デスクトップ セッションを作成します。 <publicIpAddress> を前のコマンドで返された IP アドレスに置き換えます。

mstsc /v:<publicIpAddress>

リモート デスクトップ プロトコル (.rdp) ファイルが作成され、開かれます。 ユーザー名とパスワードを入力し (VM の作成時に入力した資格情報を指定するために、必要に応じて [その他][別のアカウントを使う] を選択することもあります)、 [OK] をクリックします。 サインイン処理中に証明書の警告が表示される場合があります。 [はい] または [続行] をクリックして接続処理を続行します。

vm-1 では、Windows ファイアウォールを介してインターネット制御メッセージ プロトコル (ICMP) を有効にして、後の手順で PowerShell を使用してvm-2 からこの VM に ping を実行できるようにします。

New-NetFirewallRule –DisplayName "Allow ICMPv4-In" –Protocol ICMPv4

この記事では、VM 間の通信に ping を使用していますが、運用環境のデプロイでは Windows ファイアウォールで ICMP を許可することは推奨されません。

vm-2 に接続するには、vm-1 でコマンド プロンプトから次のコマンドを入力します。

mstsc /v:10.1.0.4

vm-1 で ping を有効にしました。 vm-2 でコマンド プロンプトから IP アドレスで、vm-1 を ping を実行できるようになりました。

ping 10.0.0.4

4 つの応答を受信します。 vm-1vm-2 の両方への RDP セッションを切断します。

リソースをクリーンアップする

必要なくなったら、Remove-AzResourcegroup を使用して、リソース グループとその中のすべてのリソースを削除します。

Remove-AzResourceGroup -Name test-rg -Force

次のステップ

この記事では、仮想ネットワーク ピアリングで同じ Azure リージョン内の 2 つのネットワークを接続する方法を説明しました。 異なるサポートされるリージョン内および異なる Azure サブスクリプション内の仮想ネットワークをピアリングすることも、ピアリングを使ってハブとスポーク ネットワーク設計を作成することもできます。 仮想ネットワーク ピアリングについて詳しくは、仮想ネットワーク ピアリングの概要および仮想ネットワーク ピアリングの管理に関するページをご覧ください。

ユーザーのコンピューターを VPN 経由で仮想ネットワークに接続し、仮想ネットワーク、またはピアリングされた仮想ネットワークのリソースを操作できます。 仮想ネットワークの記事で説明する多くのタスクを完了するための再利用可能なスクリプトについては、スクリプト サンプルをご覧ください。