Azure REST API を使用した Azure Network Watcher との接続のトラブルシューティング
仮想マシンから指定されたエンドポイントへの直接の TCP 接続が確立されたかどうかを確認するために、接続のトラブルシューティングを使用する方法について説明します。
開始する前に
この記事では、次のリソースがあることを前提としています。
- 接続のトラブルシューティングを行うリージョンの Network Watcher のインスタンス。
- 接続のトラブルシューティングを行う仮想マシン。
重要
接続のトラブルシューティングを行うには、トラブルシューティングの実行に使用する VM に AzureNetworkWatcherExtension
VM 拡張機能がインストールされている必要があります。 Windows VM への拡張機能のインストールについては、Windows 用 Azure Network Watcher Agent 仮想マシン拡張機能に関する記事をご覧ください。Linux VM の場合は、Linux 用 Azure Network Watcher Agent 仮想マシン拡張機能に関する記事をご覧ください。 接続先のエンドポイントでは、拡張機能は必要ありません。
ARMClient でログインする
Azure の資格情報を使用して ARMClient にログインします。
armclient login
仮想マシンの取得
次のスクリプトを実行して、仮想マシンを取得します。 この情報は、接続を実行するために必要となります。
次のコードには、次の変数の値が必要です。
- subscriptionId - 使用するサブスクリプション ID。
- resourceGroupName - 仮想マシンを含むリソース グループの名前。
$subscriptionId = '<subscription id>'
$resourceGroupName = '<resource group name>'
armclient get https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Compute/virtualMachines?api-version=2015-05-01-preview
次の例では、次の出力から仮想マシンの ID が使用されます。
...
,
"type": "Microsoft.Compute/virtualMachines",
"location": "westcentralus",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoExampleRG/providers/Microsoft.Compute
/virtualMachines/ContosoVM",
"name": "ContosoVM"
}
]
}
仮想マシンへの接続を確認する
この例では、ポート 80 で接続先の仮想マシンへの接続を確認します。
例
$subscriptionId = "00000000-0000-0000-0000-000000000000"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
$sourceResourceId = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoRG/providers/Microsoft.Compute/virtualMachines/MultiTierApp0"
$destinationResourceId = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoRG/providers/Microsoft.Compute/virtualMachines/Database0"
$destinationPort = "0"
$requestBody = @"
{
'source': {
'resourceId': '${sourceResourceId}',
'port': 0
},
'destination': {
'resourceId': '${destinationResourceId}',
'port': ${destinationPort}
}
}
"@
$response = armclient post "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/connectivityCheck?api-version=2017-03-01" $requestBody
この操作の実行時間は長いため、次の応答に示すように、結果の URI は応答ヘッダーで返されます。
重要な値
- Location - このプロパティには、操作が完了したときに結果が返される URI が含まれています。
HTTP/1.1 202 Accepted
Pragma: no-cache
Retry-After: 10
x-ms-request-id: f09b55fe-1d3a-4df7-817f-bceb8d2a94c8
Strict-Transport-Security: max-age=31536000; includeSubDomains
Cache-Control: no-cache
Location: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/westcentralus/operationResults/f09b55fe-1d3a-4df7-817f-bceb8d2a94c8?api-version=2017-03-01
Server: Microsoft-HTTPAPI/2.0; Microsoft-HTTPAPI/2.0
x-ms-ratelimit-remaining-subscription-writes: 1199
x-ms-correlation-request-id: 367a91aa-7142-436a-867d-d3a36f80bc54
x-ms-routing-request-id: WESTUS2:20170602T202117Z:367a91aa-7142-436a-867d-d3a36f80bc54
Date: Fri, 02 Jun 2017 20:21:16 GMT
null
Response
次の応答は、以前の例からのものです。 この応答で、ConnectionStatus
は Unreachable (到達不能) です。 送信されたすべてのプローブが失敗したことがわかります。 接続は、ポート 80 の受信トラフィックをブロックするように構成された、UserRule_Port80 というユーザーが構成した NetworkSecurityRule
のために、仮想アプライアンスで失敗しています。 この情報は、接続の問題を調査するために使用できます。
{
"hops": [
{
"type": "Source",
"id": "0cb75c91-7ebf-4df8-8424-15594d6fb51c",
"address": "10.1.1.4",
"resourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoRG/providers/Microsoft.Network/networkInterfaces/appNic0/ipConfigurations/ipconfig1",
"nextHopIds": [
"06dee00a-9c4a-4fb1-b2ea-fa0a539ca684"
],
"issues": []
},
{
"type": "VirtualAppliance",
"id": "06dee00a-9c4a-4fb1-b2ea-fa0a539ca684",
"address": "10.1.2.4",
"resourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoRG/providers/Microsoft.Network/networkInterfaces/fwNic/ipConfigurations/ipconfig1",
"nextHopIds": [
"75e0cfa5-f9d2-48d8-b705-2c7016f81570"
],
"issues": []
},
{
"type": "VirtualAppliance",
"id": "75e0cfa5-f9d2-48d8-b705-2c7016f81570",
"address": "10.1.3.4",
"resourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoRG/providers/Microsoft.Network/networkInterfaces/auNic/ipConfigurations/ipconfig1",
"nextHopIds": [
"86caf6aa-33b0-48a1-b4da-f3c9ce785072"
],
"issues": [
{
"origin": "Outbound",
"severity": "Error",
"type": "NetworkSecurityRule",
"context": [
{
"key": "RuleName",
"value": "UserRule_Port80"
}
]
}
]
},
{
"type": "VnetLocal",
"id": "86caf6aa-33b0-48a1-b4da-f3c9ce785072",
"address": "10.1.4.4",
"resourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoRG/providers/Microsoft.Network/networkInterfaces/dbNic0/ipConfigurations/ipconfig1",
"nextHopIds": [],
"issues": []
}
],
"connectionStatus": "Unreachable",
"probesSent": 100,
"probesFailed": 100
}
ルーティングの問題を確認する
この例では、仮想マシンとリモート エンドポイント間の接続を確認します。
例
$subscriptionId = "00000000-0000-0000-0000-000000000000"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
$sourceResourceId = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoRG/providers/Microsoft.Compute/virtualMachines/MultiTierApp0"
$destinationResourceId = "13.107.21.200"
$destinationPort = "80"
$requestBody = @"
{
'source': {
'resourceId': '${sourceResourceId}',
'port': 0
},
'destination': {
'address': '${destinationResourceId}',
'port': ${destinationPort}
}
}
"@
$response = armclient post "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/connectivityCheck?api-version=2017-03-01" $requestBody
この操作の実行時間は長いため、次の応答に示すように、結果の URI は応答ヘッダーで返されます。
重要な値
- Location - このプロパティには、操作が完了したときに結果が返される URI が含まれています。
HTTP/1.1 202 Accepted
Pragma: no-cache
Retry-After: 10
x-ms-request-id: 15eeeb69-fcef-41db-bc4a-e2adcf2658e0
Strict-Transport-Security: max-age=31536000; includeSubDomains
Cache-Control: no-cache
Location: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/westcentralus/operationResults/15eeeb69-fcef-41db-bc4a-e2adcf2658e0?api-version=2017-03-01
Server: Microsoft-HTTPAPI/2.0; Microsoft-HTTPAPI/2.0
x-ms-ratelimit-remaining-subscription-writes: 1199
x-ms-correlation-request-id: 4370b798-cd8b-4d3e-ba28-22232bc81dc5
x-ms-routing-request-id: WESTUS:20170602T202606Z:4370b798-cd8b-4d3e-ba28-22232bc81dc5
Date: Fri, 02 Jun 2017 20:26:05 GMT
null
Response
次の例では、connectionStatus
は Unreachable (到達不能) として示されます。 hops
の詳細では、トラフィックが UserDefinedRoute
のためにブロックされた、issues
で確認できます。
{
"hops": [
{
"type": "Source",
"id": "5528055a-b393-4751-97bc-353d8c0aaeff",
"address": "10.1.1.4",
"resourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoRG/providers/Microsoft.Network/networkInterfaces/appNic0/ipConfigurations/ipconfig1",
"nextHopIds": [
"66eefa79-5bfe-48b2-b6ca-eec8247457a3"
],
"issues": [
{
"origin": "Outbound",
"severity": "Error",
"type": "UserDefinedRoute",
"context": [
{
"key": "RouteType",
"value": "User"
}
]
}
]
},
{
"type": "Destination",
"id": "66eefa79-5bfe-48b2-b6ca-eec8247457a3",
"address": "13.107.21.200",
"resourceId": "Unknown",
"nextHopIds": [],
"issues": []
}
],
"connectionStatus": "Unreachable",
"probesSent": 100,
"probesFailed": 100
}
Web サイトの待ち時間を確認する
次の例では、Web サイトへの接続を確認します。
例
$subscriptionId = "00000000-0000-0000-0000-000000000000"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
$sourceResourceId = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoRG/providers/Microsoft.Compute/virtualMachines/MultiTierApp0"
$destinationResourceId = "https://bing.com"
$destinationPort = "0"
$requestBody = @"
{
'source': {
'resourceId': '${sourceResourceId}',
'port': 0
},
'destination': {
'address': '${destinationResourceId}',
'port': ${destinationPort}
}
}
"@
$response = armclient post "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/connectivityCheck?api-version=2017-03-01" $requestBody
この操作の実行時間は長いため、次の応答に示すように、結果の URI は応答ヘッダーで返されます。
重要な値
- Location - このプロパティには、操作が完了したときに結果が返される URI が含まれています。
HTTP/1.1 202 Accepted
Pragma: no-cache
Retry-After: 10
x-ms-request-id: e49b12c7-c232-472c-b6d2-6c257ce80fa5
Strict-Transport-Security: max-age=31536000; includeSubDomains
Cache-Control: no-cache
Location: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/westcentralus/operationResults/e49b12c7-c232-472c-b6d2-6c257ce80fa5?api-version=2017-03-01
Server: Microsoft-HTTPAPI/2.0; Microsoft-HTTPAPI/2.0
x-ms-ratelimit-remaining-subscription-writes: 1199
x-ms-correlation-request-id: c3d9744f-5683-427d-bdd1-636b68ab01b6
x-ms-routing-request-id: WESTUS:20170602T203101Z:c3d9744f-5683-427d-bdd1-636b68ab01b6
Date: Fri, 02 Jun 2017 20:31:00 GMT
null
Response
次の応答では、connectionStatus
は Reachable (到達不能) として示されます。 接続に成功すると、待ち時間の値が提供されます。
{
"hops": [
{
"type": "Source",
"id": "6adc0fe1-e384-4220-b1b1-f0d181220072",
"address": "10.1.1.4",
"resourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoRG/providers/Microsoft.Network/networkInterfaces/appNic0/ipConfigurations/ipconfig1",
"nextHopIds": [
"b50b7076-9ff2-4782-b40e-0b89cf758f74"
],
"issues": []
},
{
"type": "Internet",
"id": "b50b7076-9ff2-4782-b40e-0b89cf758f74",
"address": "204.79.197.200",
"resourceId": "Internet",
"nextHopIds": [],
"issues": []
}
],
"connectionStatus": "Reachable",
"avgLatencyInMs": 1,
"minLatencyInMs": 0,
"maxLatencyInMs": 7,
"probesSent": 100,
"probesFailed": 0
}
ストレージ エンドポイントへの接続を確認する
次の例では、仮想マシンからのブログのストレージ アカウントへの接続を確認します。
例
$subscriptionId = "00000000-0000-0000-0000-000000000000"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
$sourceResourceId = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoRG/providers/Microsoft.Compute/virtualMachines/MultiTierApp0"
$destinationResourceId = "https://build2017nwdiag360.blob.core.windows.net/"
$destinationPort = "0"
$requestBody = @"
{
'source': {
'resourceId': '${sourceResourceId}',
'port': 0
},
'destination': {
'address': '${destinationResourceId}',
'port': ${destinationPort}
}
}
"@
$response = armclient post "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/connectivityCheck?api-version=2017-03-01" $requestBody
この操作の実行時間は長いため、次の応答に示すように、結果の URI は応答ヘッダーで返されます。
重要な値
- Location - このプロパティには、操作が完了したときに結果が返される URI が含まれています。
HTTP/1.1 202 Accepted
Pragma: no-cache
Retry-After: 10
x-ms-request-id: c4ed3806-61ea-4a6b-abc1-9d6f2afc79c2
Strict-Transport-Security: max-age=31536000; includeSubDomains
Cache-Control: no-cache
Location: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/westcentralus/operationResults/c4ed3806-61ea-4a6b-abc1-9d6f2afc79c2?api-version=2017-03-01
Server: Microsoft-HTTPAPI/2.0; Microsoft-HTTPAPI/2.0
x-ms-ratelimit-remaining-subscription-writes: 1199
x-ms-correlation-request-id: 93bf5af0-fef5-4b7a-bb9e-9976ba5cdb95
x-ms-routing-request-id: WESTUS2:20170602T200504Z:93bf5af0-fef5-4b7a-bb9e-9976ba5cdb95
Date: Fri, 02 Jun 2017 20:05:03 GMT
null
Response
前の API 呼び出しを実行した応答の例を以下に示します。 チェックが成功すると、connectionStatus
プロパティに Reachable (到達不能) と示されます。 ストレージ BLOB と待ち時間に到達するために必要なホップ数に関する詳細情報が提供されます。
{
"hops": [
{
"type": "Source",
"id": "6adc0fe1-e384-4220-b1b1-f0d181220072",
"address": "10.1.1.4",
"resourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoRG/providers/Microsoft.Network/networkInterfaces/appNic0/ipConfigurations/ipconfig1",
"nextHopIds": [
"b50b7076-9ff2-4782-b40e-0b89cf758f74"
],
"issues": []
},
{
"type": "Internet",
"id": "b50b7076-9ff2-4782-b40e-0b89cf758f74",
"address": "13.71.200.248",
"resourceId": "Internet",
"nextHopIds": [],
"issues": []
}
],
"connectionStatus": "Reachable",
"avgLatencyInMs": 1,
"minLatencyInMs": 0,
"maxLatencyInMs": 7,
"probesSent": 100,
"probesFailed": 0
}
次のステップ
アラートがトリガーするパケット キャプチャの作成に関するページを参照して、仮想マシンのアラートを使用してパケット キャプチャを自動化する方法を確認します。
IP フロー検証の確認に関する記事を参照して、VM で送受信される特定のトラフィックが許可されているかどうかを調べます。