練習 - 透過 NVA 路由傳送流量

已完成

您已建立網路虛擬設備 (NVA) 和虛擬機器 (VM),現在您將透過 NVA 路由傳送流量。

虛擬機器和 IP 位址的視覺效果。

建立公用和私人虛擬機器

後續步驟會將 VM 部署到公用和私人子網路。

  1. 開啟 Cloud Shell 編輯器,並建立名為 cloud-init.txt 的檔案。

    code cloud-init.txt
    
  2. 將下列設定資訊新增至該檔案。 透過此設定,系統會在您建立新 VM 時安裝 inetutils-traceroute 套件。 此套件包含您稍後將在本練習中使用的 traceroute 公用程式。

    #cloud-config
    package_upgrade: true
    packages:
       - inetutils-traceroute
    
  3. Ctrl+S 以儲存檔案,然後按 Ctrl+Q 以關閉編輯器。

  4. 在 Cloud Shell 中執行下列命令,以建立公用 VM。 以 azureuser 帳戶的密碼取代 <password>

    az vm create \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name public \
        --vnet-name vnet \
        --subnet publicsubnet \
        --image Ubuntu2204 \
        --admin-username azureuser \
        --no-wait \
        --custom-data cloud-init.txt \
        --admin-password <password>
    
  5. 執行下列命令以建立私人 VM。 以適當的密碼取代 <password>

    az vm create \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name private \
        --vnet-name vnet \
        --subnet privatesubnet \
        --image Ubuntu2204 \
        --admin-username azureuser \
        --no-wait \
        --custom-data cloud-init.txt \
        --admin-password <password>
    
  6. 執行下列 Linux watch 命令以檢查 VM 是否正在執行。 watch 命令會定期執行 az vm list 命令,讓您能夠監視 VM 的進度。

    watch -d -n 5 "az vm list \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --show-details \
        --query '[*].{Name:name, ProvisioningState:provisioningState, PowerState:powerState}' \
        --output table"
    

    ProvisioningState 值為 "Succeeded" 且 PowerState 值為 "VM running" 表示部署成功。 當三個 VM 都順利執行時,您便可以繼續下一步。 按 Ctrl-C 以停止命令,然後繼續進行練習。

  7. 執行下列命令,將公用 VM 的公用 IP 位址儲存至名為 PUBLICIP 的變數:

    PUBLICIP="$(az vm list-ip-addresses \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name public \
        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
        --output tsv)"
    
    echo $PUBLICIP
    
  8. 執行下列命令,將私人 VM 的公用 IP 位址儲存至名為 PRIVATEIP 的變數:

    PRIVATEIP="$(az vm list-ip-addresses \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name private \
        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
        --output tsv)"
    
    echo $PRIVATEIP
    

透過網路虛擬設備來測試流量路由

最後一個步驟是使用 Linux traceroute 公用程式來顯示流量的路由方式。 您將使用 ssh 命令,在每部 VM 上執行 traceroute。 第一個測試顯示從公用 VM 傳送到私人 VM 之 ICMP 封包所採用的路由。 第二個測試顯示從私人 VM 傳送到公用 VM 之 ICMP 封包所採用的路由。

  1. 執行下列命令以追蹤從「公用」到「私人」的路由。 出現提示時,請輸入您稍早所指定的 azureuser 帳戶密碼。

    ssh -t -o StrictHostKeyChecking=no azureuser@$PUBLICIP 'traceroute private --type=icmp; exit'
    

    如果您收到錯誤訊息 bash: traceroute: command not found,請稍候一分鐘,然後重試命令。 在部署 VM 之後,traceroute 的自動安裝可能需要一到兩分鐘時間。 命令成功之後,輸出看起來應該會類似下列範例:

    traceroute to private.kzffavtrkpeulburui2lgywxwg.gx.internal.cloudapp.net (10.0.1.4), 64 hops max
    1   10.0.2.4  0.710ms  0.410ms  0.536ms
    2   10.0.1.4  0.966ms  0.981ms  1.268ms
    Connection to 52.165.151.216 closed.
    

    請注意,第一個躍點是 10.0.2.4。 此位址是 nva 的私人 IP 位址。 第二個躍點是私人的位址,10.0.1.4。 在第一個練習中,您將此路由新增到路由表,並將路由表連結到 publicsubnet 子網路。 因此,所有從公用私人的流量,現在會透過 NVA 進行路由傳送。

    從公用至私人的路由的圖表。

  2. 執行下列命令以追蹤從私人公用的路由。 出現提示時,請輸入 azureuser 帳戶的密碼。

    ssh -t -o StrictHostKeyChecking=no azureuser@$PRIVATEIP 'traceroute public --type=icmp; exit'
    

    您應該會看到流量會直接傳送至公用 (10.0.0.4),而非透過 NVA,如下列命令輸出所示。

    traceroute to public.kzffavtrkpeulburui2lgywxwg.gx.internal.cloudapp.net (10.0.0.4), 64 hops max
    1   10.0.0.4  1.095ms  1.610ms  0.812ms
    Connection to 52.173.21.188 closed.
    

    私人 VM 使用的是預設路由,而流量會直接在子網路之間進行路由傳送。

    從私人至公用的路由的圖表。

您現在已設定子網路之間的路由,以引導流量從公用網際網路透過 dmzsubnet 子網路抵達私人子網路。 在 dmzsubnet 子網路中,您已新增作為 NVA 的 VM。 您可以設定此 NVA 來偵測潛在的惡意要求,並在其抵達其預期目標之前予以封鎖。