Azure VM での ICMP (ping, traceroute) について


Azure VM で ICMP を扱う際には、 いくつか 気を付けないといけない点があります。
Azure をそこそこ使っている人でもハマることがあると思う (特に Azure VM から外部宛) ので、応答が得られない際のご参考までに。

Azure VM に対して ping, traceroute する場合 (Inbound)

NSG の受信許可設定が必要

Azure VM の NIC と Subnet に紐づいた NSG で、受信セキュリティ規則にて ICMP の許可設定を行っているかを確認しましょう。

OS 内の Firewall で受信許可設定が必要

NSG に加えて、当然ですが OS 内の Firewall でも ICMP を許可しましょう。
(特に Windows はデフォルトで不許可です)

LB 経由の ICMP は不可

Azure の Load Balancer は TCP / UDP の通信しか中継できません。
必ず VM の IP に対して直接 ping, traceroute を実行しましょう。

Azure VM から ping, traceroute する場合 (Outbound)

VM に直接 Public IP の付与が必要

Azure では、VM に Public IP を付与せずとも、外部 LB やデータセンターの任意の IP で SNAT して Internet 接続ができます。
ただ、LB は TCP / UDP の通信しか中継できないため、VM に直接 Public IP を紐付けていない構成では ICMP の応答が返りません。

traceroute には NSG で受信許可設定が必要

traceroute の通信は、宛先に指定した IP アドレス以外から応答が戻るため、NSG で ICMP がブロックされていると応答が戻りません。
(TTL が 0 になった時点で、経路上のルーターの IP アドレスから Time Exceeded の応答が返るためやむを得ません。)

ちなみに、はじめの数ホップ (Azure 内) は応答が返りませんが、途中からはちゃんと応答が返るので焦らずに待ちましょう。

その他のパターンも見つけたら追記します。


1 comment for “Azure VM での ICMP (ping, traceroute) について

  1. don
    2019年12月6日 at 5:56 PM

    Thanks for sharing this tip, it’s very helpful!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください