共用方式為


診斷虛擬機器網路路由問題 - Azure PowerShell

在本文章中,您將部署虛擬機器 (VM),然後檢查送至 IP 位址和 URL 的通訊。 您可判斷通訊失敗的原因及其解決方式。

如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

Azure Cloud Shell

Azure Cloud Shell 是裝載於 Azure 中的互動式殼層環境,可在瀏覽器中使用。 您可以使用 Bash 或 PowerShell 搭配 Cloud Shell,與 Azure 服務共同使用。 您可以使用 Cloud Shell 預先安裝的命令,執行本文提到的程式碼,而不必在本機環境上安裝任何工具。

要啟動 Azure Cloud Shell:

選項 範例/連結
選取程式碼或命令區塊右上角的 [試試看]。 選取 [試試看] 並不會自動將程式碼或命令複製到 Cloud Shell 中。 Azure Cloud Shell 的「試試看」範例螢幕擷取畫面。
請前往 https://shell.azure.com,或選取 [啟動 Cloud Shell] 按鈕,在瀏覽器中開啟 Cloud Shell。 啟動 Azure Cloud Shell 的按鈕。
選取 Azure 入口網站右上方功能表列上的 [Cloud Shell] 按鈕。 顯示 Azure 入口網站中 Cloud Shell 按鈕的螢幕擷取畫面

若要使用 Azure Cloud Shell:

  1. 啟動 Cloud Shell。

  2. 選取程式碼區塊 (或命令區塊) 上的 [複製] 按鈕以複製程式碼或命令。

  3. 透過在 Windows 和 Linux 上選取 Ctrl+Shift+V;或在 macOS 上選取 Cmd+Shift+V,將程式碼或命令貼到 Cloud Shell 工作階段中。

  4. 選取 Enter 鍵執行程式碼或命令。

如果您選擇在本機安裝並使用 PowerShell,此文章要求使用 Az PowerShell 模組。 如需詳細資訊,請參閱安裝 Azure PowerShell (部分機器翻譯)。 若要尋找已安裝的版本,請執行 Get-InstalledModule -Name Az。 如果您在本機執行 PowerShell,請使用 Connect-AzAccount Cmdlet 登入 Azure。

建立 VM

您必須先建立資源群組來包含 VM,才能建立 VM。 使用 New-AzResourceGroup 來建立資源群組。 下列範例會在 eastus 位置建立名為 myResourceGroup 的資源群組。

New-AzResourceGroup -Name myResourceGroup -Location EastUS

使用 New-AzVM 建立 VM。 執行此步驟時,系統會提示您輸入認證。 您輸入的值會設定為 VM 的使用者名稱和密碼。

$vM = New-AzVm `
    -ResourceGroupName "myResourceGroup" `
    -Name "myVm" `
    -Location "East US"

建立 VM 需要幾分鐘的時間。 在建立 VM 且 PowerShell 傳回輸出之前,請勿繼續進行其餘步驟。

測試網路通訊

若要測試網路監看員的網路通訊,您必須先在欲測試的 VM 所在區域啟用網路監看員,然後使用網路監看員的下一個躍點功能來測試通訊。

啟用網路監看員

如果您已經在美國東部區域啟用網路監看員,請使用 New-AzNetworkWatcher 來擷取網路監看員。 下列範例會擷取名為 NetworkWatcher_eastus 的現有網路監看員,其位於 NetworkWatcherRG 資源群組中:

$networkWatcher = Get-AzNetworkWatcher `
  -Name NetworkWatcher_eastus `
  -ResourceGroupName NetworkWatcherRG

如果您尚未在美國東部區域啟用網路監看員,請使用 New-AzNetworkWatcher 在美國東部區域建立網路監看員:

$networkWatcher = New-AzNetworkWatcher `
  -Name "NetworkWatcher_eastus" `
  -ResourceGroupName "NetworkWatcherRG" `
  -Location "East US"

使用下一個躍點

Azure 會自動建立通往預設目的地的路由。 您可以建立覆寫預設路由的自訂路由。 有時候,自訂路由可能會導致通訊失敗。 當流量的目的地為特定位址時,若要測試來自 VM 的路由,請使用 Get-AzNetworkWatcherNextHop 命令判斷下一個路由躍點。

測試從 VM 輸出至 www.bing.com 其中一個 IP 位址的通訊:

Get-AzNetworkWatcherNextHop `
  -NetworkWatcher $networkWatcher `
  -TargetVirtualMachineId $VM.Id `
  -SourceIPAddress 192.168.1.4 `
  -DestinationIPAddress 13.107.21.200

幾秒之後,輸出會通知您 NextHopTypeInternet,而 RouteTableIdSystem Route。 此結果可讓您知道通往目的地的路由是有效的。

測試從 VM 輸出至 172.31.0.100 的通訊:

Get-AzNetworkWatcherNextHop `
  -NetworkWatcher $networkWatcher `
  -TargetVirtualMachineId $VM.Id `
  -SourceIPAddress 192.168.1.4 `
  -DestinationIPAddress 172.31.0.100

傳回的輸出會通知您 NextHopTypeNone,而 RouteTableId 也是 System Route。 此結果可讓您知道,雖然通往目的地的系統路由是有效的,但沒有下一個躍點可將流量路由至目的地。

檢視路由的詳細資料

若要分析進一步路由,請使用 Get-AzEffectiveRouteTable 命令,以檢閱網路介面的有效路由:

Get-AzEffectiveRouteTable `
  -NetworkInterfaceName myVm `
  -ResourceGroupName myResourceGroup |
  Format-table

會傳回包含下列文字的輸出:

Name State  Source  AddressPrefix           NextHopType NextHopIpAddress
---- -----  ------  -------------           ----------- ----------------
     Active Default {192.168.0.0/16}        VnetLocal   {}              
     Active Default {0.0.0.0/0}             Internet    {}              
     Active Default {10.0.0.0/8}            None        {}              
     Active Default {100.64.0.0/10}         None        {}              
     Active Default {172.16.0.0/12}         None        {}              

如先前輸出所示,AddressPrefix0.0.0.0/0 的路由會路由傳送下列所有流量:目的地位址不在其他路由位址前置詞內且下一個躍點為 Internet。 亦如輸出所示,雖然有通往 172.16.0.0/12 前置詞的預設路由,且其中包含 172.31.0.100 位址,但 nextHopTypeNone。 Azure 會建立通往 172.16.0.0/12 的預設路由,但不會指定下一個躍點類型,除非有理由這麼做。 例如,如果您將 172.16.0.0/12 位址範圍新增至虛擬網路的位址空間,則 Azure 會將此路由的 nextHopType 變更為 Virtual network。 執行檢查就會看到 Virtual network 顯示為 nextHopType

清除資源

您可以使用 Remove-AzResourceGroup 來移除不再需要的資源群組,以及其所包含的所有資源:

Remove-AzResourceGroup -Name myResourceGroup -Force

下一步

在本文章中,您已建立 VM 並診斷來自 VM 的網路路由。 您已了解 Azure 會建立數個預設路由,並測試通往兩個不同目的地的路由。 深入了解 Azure 中的路由以及如何建立自訂路由

針對輸出 VM 連線,您也可以使用網路監看員的連線疑難排解功能,以判斷 VM 與端點之間的延遲,以及所允許和拒絕的網路流量。 您可以使用網路監看員的連線監視功能,以監視某段時間內 VM 與端點 (例如 IP 位址或 URL) 之間的通訊情形。 如需詳細資訊,請參閱監視網路連線