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) について”