normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Network Watcher の IP flow verify と Next hop を試してみる

Network Watcher は豊富な機能が提供されており、ひと月ほど前に投稿した Troubleshoot connections もその一つです。今回も以下の記事で利用したアーキテクチャで検証するので、事前に一読頂ければ幸いです。
normalian.hatenablog.com

掲題通り今回は以下の IP flow verify と Next hop を試してみます(本当は一つだけ試そうと思ったら、思ったよりもシンプルだったので、二つまとめようかなと)。
learn.microsoft.com
learn.microsoft.com

IP flow verify を試す

IP flow verify は Azure Network Watcher の一機能ですが、Azure VM からのネットワークトラフィックが許可されているか否かを確認することができる機能です。まずは実際に試してみましょう。疎通を取るために利用するアーキテクチャに関しては以下を踏襲するので、IP アドレス等の指定で不明瞭なところがあれば参照頂ければ幸いです。
normalian.hatenablog.com

詳細は上記の記事を参照して頂きたいですが、Application Gateway - 10.0.0.20 -> Azure Firewall - 10.0.200.4 -> Azure VM - 10.0.1.4 の構成となっています。まずは Azure VM からの Outbound を試してみましょう。以下の様に元となる VM を選択し、特定のグローバル IP に対して HTTP リクエストを送れるかのチェックをします。

結果は以下の様に「Network Security Group のルール上は OK」と返してきます。

なぜ上記の様な言い方をしているかというと、今回の環境では Azure Firewall で Outbound の接続を許可しておらず、実際に当該 VM 上で試したグローバル IP に対して traceroute を実行すると以下の様に実際には接続できないからです。これからも分かるとおり、あくまで「Azure 上での Network Security Group のルールのチェック用」という位置づけだろうということが分かります。

もうちょっと詳細な情報が欲しいなと思うので、試しに以下を参考に Azure Cli でも試してみます。実行例と合わせて以下になりますが、ポータル以上の情報は取れないことが分かります。
learn.microsoft.com

$ az network watcher test-ip-flow --direction 'outbound' --protocol 'TCP' --local '10.0.1.4:60000' --remote '172.56.105.37:80' --vm 'CentVM01' --nic 'centvm01261_z1' --resource-group 'RG-Network-Test01-WestUS3'
{
  "access": "Allow",
  "ruleName": "defaultSecurityRules/AllowVnetOutBound"
}

PS C:\Users\daisami> 

動作原理さえ分かればあまり難しいものではないと思うので、本記事で述べた Tips を元に活用頂ければと思います。

Next hop を試す

次は Next hop の紹介です。こちらは Azure VM を起点としたネットワークアクセスを行う際、次の network hop がどこになるかを教えてくれる機能です。かなり単純な機能なので、試しに CentVM01 からのインターネットアクセスを試してみましょう。
前述の通り、こちらは Azure Firewall でアクセスがブロックされるため、UDR が正しく動いていれば CentVM01 の Next hop は Azure Firewall になるはずです。試した結果は以下となります。御覧の通り、Next hop type は VirutalAppliance かつ IP アドレスは Azure Firewall のプライベート IP が表示されています。

もっと詳細な情報が取れるかなと思い、同じく Azure Cli を試しましたが、こちらもポータルと取れる情報は大差ないようです。
learn.microsoft.com

PS C:\Users\daisami> az network watcher show-next-hop --dest-ip 172.56.105.37 --resource-group RG-Network-Test01-WestUS3 --source-ip 10.0.1.4 --vm CentVM01 --nic centvm01261_z1 
{
  "nextHopIpAddress": "10.0.200.4",
  "nextHopType": "VirtualAppliance",
  "routeTableId": "/subscriptions/YOUR-SUBSCRIPTION-ID/resourceGroups/RG-Network-Test01-WestUS3/providers/Microsoft.Network/routeTables/RT02-Network-
Test01-WestUS3"
}

参照記事にもありますが、特定の NIC リソースに対するルーティング一覧を表示する場合は以下の様に az network nic show-effective-route-table を利用する方が詳細な情報が取得可能です。

$ az network nic show-effective-route-table --resource-group RG-Network-Test01-WestUS3 --name centvm01261_z1 
{
  "value": [
    {
      "addressPrefix": [
        "10.0.0.0/16"
      ],
      "disableBgpRoutePropagation": false,
      "nextHopIpAddress": [],
      "nextHopType": "VnetLocal",
      "source": "Default",
      "state": "Active"
    },
    {
      "addressPrefix": [
        "0.0.0.0/0"
      ],
      "disableBgpRoutePropagation": false,
      "nextHopIpAddress": [],
      "nextHopType": "Internet",
      "source": "Default",
      "state": "Invalid"
    },
    {
      "addressPrefix": [
        "0.0.0.0/0"
      ],
      "disableBgpRoutePropagation": false,
      "name": "VMs-to-Any",
      "nextHopIpAddress": [
        "10.0.200.4"
      ],
      "nextHopType": "VirtualAppliance",
      "source": "User",
      "state": "Active"
    },
    {
      "addressPrefix": [
        "10.0.0.0/24"
      ],
      "disableBgpRoutePropagation": false,
      "name": "VMs-to-AppGW",
      "nextHopIpAddress": [
        "10.0.200.4"
      ],
      "nextHopType": "VirtualAppliance",
      "source": "User",
      "state": "Active"
    }
  ]
}