استكشاف أخطاء الاتصالات الصادرة وإصلاحها باستخدام PowerShell

في هذه المقالة، ستتعلم كيفية استخدام ميزة استكشاف أخطاء الاتصال وإصلاحها في Azure Network Watcher لتشخيص مشكلات الاتصال واستكشافها وإصلاحها. لمزيد من المعلومات حول استكشاف أخطاء الاتصال وإصلاحها، راجع نظرة عامة حول استكشاف أخطاء الاتصال وإصلاحها.

المتطلبات الأساسية

  • حساب Azure مع اشتراك نشط. أنشئ حساباً مجاناً.

  • تم تمكين Network Watcher في منطقة الجهاز الظاهري (VM) الذي تريد استكشاف الأخطاء وإصلاحها. بشكل افتراضي، يقوم Azure بتمكين Network Watcher في منطقة عند إنشاء شبكة ظاهرية فيها. لمزيد من المعلومات، راجع تمكين Azure Network Watcher أو تعطيله.

  • جهاز ظاهري مع ملحق الجهاز الظاهري لعامل Network Watcher مثبت عليه ويحتوي على اتصال TCP الصادر التالي:

    • إلى 169.254.169.254 عبر المنفذ 80
    • إلى 168.63.129.16 عبر المنفذ 8037
  • جهاز ظاهري ثان مع اتصال TCP وارد من 168.63.129.16 عبر المنفذ الذي يتم اختباره (لاختبار تشخيص الماسح الضوئي للمنفذ).

  • Azure Cloud Shell أو Azure PowerShell.

    تعمل الخطوات الواردة في هذه المقالة على تشغيل أوامر Cmdlets Azure PowerShell بشكل تفاعلي في Azure Cloud Shell. لتشغيل الأوامر في Cloud Shell، حدد Open Cloud Shell في الزاوية العلوية اليسرى من كتلة التعليمات البرمجية. حدد نسخ لنسخ التعليمات البرمجية ثم لصقها في Cloud Shell لتشغيلها. يمكنك أيضا تشغيل Cloud Shell من داخل مدخل Microsoft Azure.

    يمكنك أيضا تثبيت Azure PowerShell محليا لتشغيل cmdlets. تتطلب هذه المقالة الوحدة النمطية Az PowerShell. لمزيد من المعلومات، راجع كيفية تثبيت Azure PowerShell. للعثور على الإصدار المثبت، قم بتشغيل Get-InstalledModule -Name Az. إذا قمت بتشغيل PowerShell محليا، فقم بتسجيل الدخول إلى Azure باستخدام Connect-AzAccount cmdlet.

إشعار

تحقق من الاتصال بجهاز افتراضي

يتحقق هذا المثال من الاتصال بجهاز افتراضي وجهة عبر المنفذ 80. يتطلب هذا المثال أن يكون لديك Network Watcher ممكّنًا في المنطقة التي تحتوي على المصدر الظاهري.

مثال

$rgName = "ContosoRG"
$sourceVMName = "MultiTierApp0"
$destVMName = "Database0"

$RG = Get-AzResourceGroup -Name $rgName

$VM1 = Get-AzVM -ResourceGroupName $rgName | Where-Object -Property Name -EQ $sourceVMName
$VM2 = Get-AzVM -ResourceGroupName $rgName | Where-Object -Property Name -EQ $destVMName

$networkWatcher = Get-AzNetworkWatcher | Where-Object -Property Location -EQ -Value $VM1.Location 

Test-AzNetworkWatcherConnectivity -NetworkWatcher $networkWatcher -SourceId $VM1.Id -DestinationId $VM2.Id -DestinationPort 80

الاستجابة

الرد التالي من المثال السابق. في هذه الاستجابة، لا يمكن لـConnectionStatus الوصول إليه . يمكنك ملاحظة فشل جميع التحقيقات المرسلة. فشل الاتصالية في الجهاز الظاهري بسبب NetworkSecurityRule تم تكوينه بواسطة المستخدم باسم UserRule_Port80 ، تم تكوينه لحظر نسبة استخدام الشبكة الواردة على المنفذ 80. يمكن استخدام هذه المعلومات للبحث في مشكلات الاتصال.

ConnectionStatus : Unreachable
AvgLatencyInMs   : 
MinLatencyInMs   : 
MaxLatencyInMs   : 
ProbesSent       : 100
ProbesFailed     : 100
Hops             : [
                     {
                       "Type": "Source",
                       "Id": "c5222ea0-3213-4f85-a642-cee63217c2f3",
                       "Address": "10.1.1.4",
                       "ResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGrou
                   ps/ContosoRG/providers/Microsoft.Network/networkInterfaces/appNic0/ipConfigurat
                   ions/ipconfig1",
                       "NextHopIds": [
                         "9283a9f0-cc5e-4239-8f5e-ae0f3c19fbaa"
                       ],
                       "Issues": []
                     },
                     {
                       "Type": "VirtualAppliance",
                       "Id": "9283a9f0-cc5e-4239-8f5e-ae0f3c19fbaa",
                       "Address": "10.1.2.4",
                       "ResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGrou
                   ps/ContosoRG/providers/Microsoft.Network/networkInterfaces/fwNic/ipConfiguratio
                   ns/ipconfig1",
                       "NextHopIds": [
                         "0f1500cd-c512-4d43-b431-7267e4e67017"
                       ],
                       "Issues": []
                     },
                     {
                       "Type": "VirtualAppliance",
                       "Id": "0f1500cd-c512-4d43-b431-7267e4e67017",
                       "Address": "10.1.3.4",
                       "ResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGrou
                   ps/ContosoRG/providers/Microsoft.Network/networkInterfaces/auNic/ipConfiguratio
                   ns/ipconfig1",
                       "NextHopIds": [
                         "a88940f8-5fbe-40da-8d99-1dee89240f64"
                       ],
                       "Issues": [
                         {
                           "Origin": "Outbound",
                           "Severity": "Error",
                           "Type": "NetworkSecurityRule",
                           "Context": [
                             {
                               "key": "RuleName",
                               "value": "UserRule_Port80"
                             }
                           ]
                         }
                       ]
                     },
                     {
                       "Type": "VnetLocal",
                       "Id": "a88940f8-5fbe-40da-8d99-1dee89240f64",
                       "Address": "10.1.4.4",
                       "ResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGrou
                   ps/ContosoRG/providers/Microsoft.Network/networkInterfaces/dbNic0/ipConfigurati
                   ons/ipconfig1",
                       "NextHopIds": [],
                       "Issues": []
                     }
                   ]

التحقق من صحة مشاكل التوجيه

يتحقق هذا المثال من الاتصال بين جهاز ظاهري ونقطة نهاية بعيدة. يتطلب هذا المثال أن يكون لديك Network Watcher ممكّنًا في المنطقة التي تحتوي على المصدر الظاهري.

مثال

$rgName = "ContosoRG"
$sourceVMName = "MultiTierApp0"

$RG = Get-AzResourceGroup -Name $rgName
$VM1 = Get-AzVM -ResourceGroupName $rgName | Where-Object -Property Name -EQ $sourceVMName

$networkWatcher = Get-AzNetworkWatcher | Where-Object -Property Location -EQ -Value $VM1.Location 

Test-AzNetworkWatcherConnectivity -NetworkWatcher $networkWatcher -SourceId $VM1.Id -DestinationAddress 13.107.21.200 -DestinationPort 80

الاستجابة

في المثال التالي، يظهر ConnectionStatus على أنه لا يمكن الوصول إليه . في تفاصيل Hops، يمكنك أن ترى ضمن Issues أنه تم حظر نسبة استخدام الشبكة بسبب UserDefinedRoute.

ConnectionStatus : Unreachable
AvgLatencyInMs   : 
MinLatencyInMs   : 
MaxLatencyInMs   : 
ProbesSent       : 100
ProbesFailed     : 100
Hops             : [
                     {
                       "Type": "Source",
                       "Id": "b4f7bceb-07a3-44ca-8bae-adec6628225f",
                       "Address": "10.1.1.4",
                       "ResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoRG/providers/Microsoft.Network/networkInterfaces/appNic0/ipConfigurations/ipconfig1",
                       "NextHopIds": [
                         "3fee8adf-692f-4523-b742-f6fdf6da6584"
                       ],
                       "Issues": [
                         {
                           "Origin": "Outbound",
                           "Severity": "Error",
                           "Type": "UserDefinedRoute",
                           "Context": [
                             {
                               "key": "RouteType",
                               "value": "User"
                             }
                           ]
                         }
                       ]
                     },
                     {
                       "Type": "Destination",
                       "Id": "3fee8adf-692f-4523-b742-f6fdf6da6584",
                       "Address": "13.107.21.200",
                       "ResourceId": "Unknown",
                       "NextHopIds": [],
                       "Issues": []
                     }
                   ]

تحقق من زمن انتقال الموقع

يتحقق المثال التالي من الاتصال بموقع ويب. يتطلب هذا المثال أن يكون لديك Network Watcher ممكّنًا في المنطقة التي تحتوي على المصدر الظاهري.

مثال

$rgName = "ContosoRG"
$sourceVMName = "MultiTierApp0"

$RG = Get-AzResourceGroup -Name $rgName
$VM1 = Get-AzVM -ResourceGroupName $rgName | Where-Object -Property Name -EQ $sourceVMName

$networkWatcher = Get-AzNetworkWatcher | Where-Object -Property Location -EQ -Value $VM1.Location 


Test-AzNetworkWatcherConnectivity -NetworkWatcher $networkWatcher -SourceId $VM1.Id -DestinationAddress https://bing.com/

الاستجابة

في الاستجابة التالية، يمكنك مشاهدة ConnectionStatus التي تظهر على أنها قابلة للوصول . عندما يكون الاتصال ناجحًا، يتم توفير قيم زمن الانتقال.

ConnectionStatus : Reachable
AvgLatencyInMs   : 1
MinLatencyInMs   : 0
MaxLatencyInMs   : 7
ProbesSent       : 100
ProbesFailed     : 0
Hops             : [
                     {
                       "Type": "Source",
                       "Id": "1f0e3415-27b0-4bf7-a59d-3e19fb854e3e",
                       "Address": "10.1.1.4",
                       "ResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoRG/providers/Microsoft.Network/networkInterfaces/appNic0/ipConfigurations/ipconfig1",
                       "NextHopIds": [
                         "f99f2bd1-42e8-4bbf-85b6-5d21d00c84e0"
                       ],
                       "Issues": []
                     },
                     {
                       "Type": "Internet",
                       "Id": "f99f2bd1-42e8-4bbf-85b6-5d21d00c84e0",
                       "Address": "204.79.197.200",
                       "ResourceId": "Internet",
                       "NextHopIds": [],
                       "Issues": []
                     }
                   ]

تحقق من الاتصال بنقطة نهاية التخزين

يتحقق المثال التالي من الاتصال من جهاز افتراضي إلى حساب تخزين مدونة. يتطلب هذا المثال أن يكون لديك Network Watcher ممكّنًا في المنطقة التي تحتوي على المصدر الظاهري.

مثال

$rgName = "ContosoRG"
$sourceVMName = "MultiTierApp0"

$RG = Get-AzResourceGroup -Name $rgName

$VM1 = Get-AzVM -ResourceGroupName $rgName | Where-Object -Property Name -EQ $sourceVMName

$networkWatcher = Get-AzNetworkWatcher | Where-Object -Property Location -EQ -Value $VM1.Location

Test-AzNetworkWatcherConnectivity -NetworkWatcher $networkWatcher -SourceId $VM1.Id -DestinationAddress https://contosostorageexample.blob.core.windows.net/ 

الاستجابة

json التالي هو مثال على الاستجابة من تشغيل الأمر cmdlet السابق. نظرًا لإمكانية الوصول إلى الوجهة، تظهر الخاصية ConnectionStatus على أنها قابلة للوصول . يتم تزويدك بالتفاصيل المتعلقة بعدد القفزات المطلوبة للوصول إلى كائن ثنائي كبير الحجم للتخزين وزمن الانتقال.

ConnectionStatus : Reachable
AvgLatencyInMs   : 1
MinLatencyInMs   : 0
MaxLatencyInMs   : 8
ProbesSent       : 100
ProbesFailed     : 0
Hops             : [
                     {
                       "Type": "Source",
                       "Id": "9e7f61d9-fb45-41db-83e2-c815a919b8ed",
                       "Address": "10.1.1.4",
                       "ResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ContosoRG/providers/Microsoft.Network/networkInterfaces/appNic0/ipConfigurations/ipconfig1",
                       "NextHopIds": [
                         "1e6d4b3c-7964-4afd-b959-aaa746ee0f15"
                       ],
                       "Issues": []
                     },
                     {
                       "Type": "Internet",
                       "Id": "1e6d4b3c-7964-4afd-b959-aaa746ee0f15",
                       "Address": "13.71.200.248",
                       "ResourceId": "Internet",
                       "NextHopIds": [],
                       "Issues": []
                     }
                   ]

الخطوة التالية