演習 - NVA 経由でトラフィックをルーティングする

完了

これでネットワーク仮想アプライアンス (NVA) と仮想マシン (VM) を作成したので、NVA 経由でトラフィックをルーティングします。

Visualization of virtual machines and IP addresses.

パブリックおよびプライベートの仮想マシンを作成する

次の手順では、パブリックおよびプライベート サブネットに VM をデプロイします。

  1. Cloud Shell エディターを開き、cloud-init.txt という名前のファイルを作成します。

    code cloud-init.txt
    
  2. 次の構成情報をファイルに追加します。 この構成では、新しい VM を作成するときに inetutils-traceroute パッケージがインストールされます。 このパッケージには、この演習で後ほど使用する traceroute ユーティリティが含まれています。

    #cloud-config
    package_upgrade: true
    packages:
       - inetutils-traceroute
    
  3. Ctrl + S キーを押してファイルを保存してから、Ctrl + Q キーを押してエディターを閉じます。

  4. 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>
    
  5. 次のコマンドを実行してプライベート 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>
    
  6. 次の 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 キーを押してコマンドを停止し、演習を続行します。

  7. 次のコマンドを実行して、パブリック 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
    
  8. 次のコマンドを実行して、プライベート 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 パケットによって使用されたルートが表示されます。

  1. 次のコマンドを実行して、パブリックからプライベートへのルートをトレースします。 メッセージが表示されたら、前に指定した 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 経由でルーティングされます。

    Diagram of route from public to private.

  2. プライベートからパブリックへのルートをトレースするには、次のコマンドを実行します。 メッセージが表示されたら、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 では既定のルートが使われており、トラフィックはサブネット間で直接ルーティングされます。

    Diagram of route from private to public.

これで、プライベート サブネットに到達する前に、dmzsubnet サブネット経由でパブリック インターネットからトラフィックを送信するように、サブネット間のルーティングを構成しました。 dmzsubnet サブネットには、NVA として機能する VM を追加しました。 悪意のある可能性がある要求を検出し、意図されたターゲットに到着する前にブロックするように、この NVA を構成することができます。