演習 - NVA 経由でトラフィックをルーティングする
これでネットワーク仮想アプライアンス (NVA) と仮想マシン (VM) を作成したので、NVA 経由でトラフィックをルーティングします。
パブリックおよびプライベートの仮想マシンを作成する
次の手順では、パブリックおよびプライベート サブネットに VM をデプロイします。
Cloud Shell エディターを開き、cloud-init.txt という名前のファイルを作成します。
code cloud-init.txt
次の構成情報をファイルに追加します。 この構成では、新しい VM を作成するときに
inetutils-traceroute
パッケージがインストールされます。 このパッケージには、この演習で後ほど使用するtraceroute
ユーティリティが含まれています。#cloud-config package_upgrade: true packages: - inetutils-traceroute
Ctrl + S キーを押してファイルを保存してから、Ctrl + Q キーを押してエディターを閉じます。
Cloud Shell で、次のコマンドを実行してパブリック VM を作成します。
<password>
は、azureuser アカウントに適したパスワードに置き換えます。az vm create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name public \ --vnet-name vnet \ --subnet publicsubnet \ --image Ubuntu2204 \ --admin-username azureuser \ --no-wait \ --custom-data cloud-init.txt \ --admin-password <password>
次のコマンドを実行してプライベート VM を作成します。
<password>
は、適切なパスワードに置き換えます。az vm create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name private \ --vnet-name vnet \ --subnet privatesubnet \ --image Ubuntu2204 \ --admin-username azureuser \ --no-wait \ --custom-data cloud-init.txt \ --admin-password <password>
次の Linux の
watch
コマンドを実行して、VM が実行されていることを確認します。watch
コマンドでは、VM の進行状況を監視できるように、az vm list
コマンドを定期的に実行します。watch -d -n 5 "az vm list \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --show-details \ --query '[*].{Name:name, ProvisioningState:provisioningState, PowerState:powerState}' \ --output table"
ProvisioningState 値が "Succeeded" で、PowerState 値が "VM running" の場合は、デプロイが成功したことを示しています。 3 つの VM がすべて稼働中であれば、次に進むことができます。 Ctrl + C キーを押してコマンドを停止し、演習を続行します。
次のコマンドを実行して、パブリック VM のパブリック IP アドレスを、
PUBLICIP
という名前の変数に保存します。PUBLICIP="$(az vm list-ip-addresses \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name public \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)" echo $PUBLICIP
次のコマンドを実行して、プライベート VM のパブリック IP アドレスを、
PRIVATEIP
という名前の変数に保存します。PRIVATEIP="$(az vm list-ip-addresses \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name private \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)" echo $PRIVATEIP
ネットワーク仮想アプライアンス経由のトラフィック ルーティングをテストする
最後の手順では、Linux の traceroute
ユーティリティを使って、トラフィックがどのようにルーティングされるかを示します。 各 VM で traceroute
を実行するには、ssh
コマンドを使用します。 最初のテストでは、パブリック VM からプライベート VM に送信された ICMP パケットが辿ったルートが表示されます。 2 番目のテストでは、プライベート VM からパブリック VM に送信された ICMP パケットが辿ったルートが表示されます。
次のコマンドを実行して、パブリックからプライベートへのルートをトレースします。 メッセージが表示されたら、前に指定した azureuser アカウントのパスワードを入力します。
ssh -t -o StrictHostKeyChecking=no azureuser@$PUBLICIP 'traceroute private --type=icmp; exit'
bash: traceroute: command not found
というエラー メッセージが表示される場合は、1 分待ってから、コマンドを再試行します。traceroute
の自動インストールには、VM のデプロイ後、1、2 分かかることがあります。 コマンドが成功した後、出力は次の例のようになるはずです。traceroute to private.kzffavtrkpeulburui2lgywxwg.gx.internal.cloudapp.net (10.0.1.4), 64 hops max 1 10.0.2.4 0.710ms 0.410ms 0.536ms 2 10.0.1.4 0.966ms 0.981ms 1.268ms Connection to 52.165.151.216 closed.
最初のホップは 10.0.2.4 に対するものであることに注目してください。 このアドレスは、nva のプライベート IP アドレスです。 2 番目のホップは、プライベートのアドレスである、10.0.1.4 に対するものです。 最初の演習で、このルートをルート テーブルに追加し、テーブルを publicsubnet サブネットにリンクしました。 したがって、ここではパブリックからプライベートへのすべてのトラフィックが、NVA 経由でルーティングされます。
プライベートからパブリックへのルートをトレースするには、次のコマンドを実行します。 メッセージが表示されたら、azureuser アカウントのパスワードを入力します。
ssh -t -o StrictHostKeyChecking=no azureuser@$PRIVATEIP 'traceroute public --type=icmp; exit'
次のコマンド出力に示すように、トラフィックは NVA を経由せずに、パブリック (10.0.0.4) に直接移動されていることがわかるはずです。
traceroute to public.kzffavtrkpeulburui2lgywxwg.gx.internal.cloudapp.net (10.0.0.4), 64 hops max 1 10.0.0.4 1.095ms 1.610ms 0.812ms Connection to 52.173.21.188 closed.
プライベート VM では既定のルートが使われており、トラフィックはサブネット間で直接ルーティングされます。
これで、プライベート サブネットに到達する前に、dmzsubnet サブネット経由でパブリック インターネットからトラフィックを送信するように、サブネット間のルーティングを構成しました。 dmzsubnet サブネットには、NVA として機能する VM を追加しました。 悪意のある可能性がある要求を検出し、意図されたターゲットに到着する前にブロックするように、この NVA を構成することができます。