Solución de problemas de conexiones con Azure Network Watcher mediante la API de REST de Azure
Obtenga información sobre cómo usar la solución de problemas de conexiones para comprobar si se puede establecer una conexión TCP directa desde una máquina virtual a un punto de conexión determinado.
Antes de empezar
En este artículo se da por hecho que tiene los siguientes recursos:
- Una instancia de Network Watcher en la región en la que desea solucionar los problemas de una conexión.
- Las máquinas virtuales con las cuales solucionar los problemas de las conexiones.
Importante
La solución de problemas de conexión requiere que la VM desde la que soluciona el problema tenga la extensión de VM AzureNetworkWatcherExtension
instalada. Para instalar la extensión en una máquina virtual Windows, consulte Extensión de máquina virtual del agente de Azure Network Watcher para Windows, y en una máquina virtual con Linux, consulte Extensión de máquina virtual del agente de Azure Network Watcher para Linux. La extensión no es necesaria en el punto de conexión de destino.
Inicio de sesión con ARMClient
Inicie sesión en armclient con las credenciales de Azure.
armclient login
Recuperación de una máquina virtual
Ejecute el siguiente script para devolver una máquina virtual. Esta información es necesaria para ejecutar la conectividad.
El código siguiente necesita valores para las siguientes variables:
- subscriptionId: el identificador de suscripción que se usará.
- resourceGroupName: el nombre de un grupo de recursos que contiene máquinas virtuales.
$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
En la salida siguiente, se usa el identificador de la máquina virtual en este ejemplo:
...
,
"type": "Microsoft.Compute/virtualMachines",
"location": "westcentralus",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoExampleRG/providers/Microsoft.Compute
/virtualMachines/ContosoVM",
"name": "ContosoVM"
}
]
}
Comprobación de la conectividad a una máquina virtual
En este ejemplo se comprueba la conectividad a una máquina virtual de destino a través del puerto 80.
Ejemplo
$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
Puesto que esta operación es de larga ejecución, el URI para el resultado se devuelve en el encabezado de respuesta tal y como se muestra en la siguiente respuesta:
Valores importantes
- Ubicación: esta propiedad contiene el URI donde se encuentran los resultados una vez completada la operación
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
La siguiente respuesta procede del ejemplo anterior. En esta respuesta, el ConnectionStatus
es Unreachable (inaccesible). Se puede ver que ninguno de los sondeos enviados se pudo realizar. Error de conectividad en la aplicación virtual debido a una NetworkSecurityRule
configurada por el usuario denominada UserRule_Port80, que se configuró para bloquear el tráfico entrante en el puerto 80. Esta información puede utilizarse para investigar problemas de conexión.
{
"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
}
Problemas de validación de enrutamiento
En el ejemplo se comprueba la conectividad entre una máquina virtual y un punto de conexión remoto.
Ejemplo
$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
Puesto que esta operación es de larga ejecución, el URI para el resultado se devuelve en el encabezado de respuesta tal y como se muestra en la siguiente respuesta:
Valores importantes
- Ubicación: esta propiedad contiene el URI donde se encuentran los resultados una vez completada la operación
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
En el ejemplo siguiente, connectionStatus
se muestra como Unreachable (inaccesible). En los detalles de hops
, puede ver en issues
que el tráfico se ha bloqueado debido a una UserDefinedRoute
.
{
"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
}
Comprobación de la latencia del sitio web
En el siguiente ejemplo se comprueba la conectividad con un sitio web.
Ejemplo
$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
Puesto que esta operación es de larga ejecución, el URI para el resultado se devuelve en el encabezado de respuesta tal y como se muestra en la siguiente respuesta:
Valores importantes
- Ubicación: esta propiedad contiene el URI donde se encuentran los resultados una vez completada la operación
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
En la siguiente respuesta, puede ver que connectionStatus
se muestra como Reachable (accesible). Cuando una conexión se establece correctamente, se proporcionan los valores de latencia.
{
"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
}
Comprobación de la conectividad a un punto de conexión de almacenamiento
En el ejemplo siguiente se comprueba la conectividad de una máquina virtual con una cuenta de almacenamiento de blog.
Ejemplo
$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
Puesto que esta operación es de larga ejecución, el URI para el resultado se devuelve en el encabezado de respuesta tal y como se muestra en la siguiente respuesta:
Valores importantes
- Ubicación: esta propiedad contiene el URI donde se encuentran los resultados una vez completada la operación
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
El siguiente ejemplo es la respuesta que procede de la ejecución de la llamada API anterior. Como la comprobación es correcta, la propiedad connectionStatus
se muestra como Reachable (accesible). Se proporcionan los detalles sobre el número de saltos necesarios para llegar a la latencia y al blob de almacenamiento.
{
"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
}
Pasos siguientes
Para más información sobre cómo automatizar capturas de paquetes con las alertas de máquina virtual, consulte cómo crear una captura de paquetes desencadenada por alertas.
Para comprobar si se permite cierto tráfico hacia o desde la máquina virtual, vea cómo consultar la comprobación del flujo de IP.