練習 - 透過 NVA 路由傳送流量
您已建立網路虛擬設備 (NVA) 和虛擬機器 (VM),現在您將透過 NVA 路由傳送流量。
建立公用和私人虛擬機器
後續步驟會將 VM 部署到公用和私人子網路。
開啟 Cloud Shell 編輯器,並建立名為 cloud-init.txt 的檔案。
code cloud-init.txt
將下列設定資訊新增至該檔案。 透過此設定,系統會在您建立新 VM 時安裝
inetutils-traceroute
套件。 此套件包含您稍後將在本練習中使用的traceroute
公用程式。#cloud-config package_upgrade: true packages: - inetutils-traceroute
按 Ctrl+S 以儲存檔案,然後按 Ctrl+Q 以關閉編輯器。
在 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>
執行下列命令以建立私人 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>
執行下列 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 以停止命令,然後繼續進行練習。
執行下列命令,將公用 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
執行下列命令,將私人 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 封包所採用的路由。
執行下列命令以追蹤從「公用」到「私人」的路由。 出現提示時,請輸入您稍早所指定的 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 進行路由傳送。
執行下列命令以追蹤從私人到公用的路由。 出現提示時,請輸入 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 來偵測潛在的惡意要求,並在其抵達其預期目標之前予以封鎖。