AZ-500 LAB 21 ~60 phút Chương 05 Secure Networking

UDR Route Traffic qua Firewall Subnet

Tạo Route Table với User Defined Route (UDR), thêm custom route 0.0.0.0/0 với next hop là IP của NVA/firewall subnet, gán route table vào subnet ứng dụng, kiểm tra Next Hop bằng Network Watcher để xác nhận traffic đi qua firewall.

🎯 Mục Tiêu Lab

Tạo VNet với 3 subnet: snet-app, snet-firewall, snet-mgmt

Deploy NVA (Network Virtual Appliance) đóng vai firewall trong snet-firewall

Tạo Route Table với UDR: 0.0.0.0/0 → next hop = IP firewall

Gán Route Table vào snet-app để ép egress traffic qua firewall

Dùng Next Hop tool trong Network Watcher để xác nhận route

Hiểu khái niệm IP forwarding trên NIC của NVA

📋 Chuẩn Bị

Yêu cầu:
  • Azure subscription với quyền Contributor
  • Hoàn thành Lab 19 và 20 (hiểu NSG cơ bản)
  • Network Watcher được bật tại southeastasia
Kiến trúc mạng lab:
  • VNet: 10.21.0.0/16
  • snet-app: 10.21.1.0/24 (VM ứng dụng)
  • snet-firewall: 10.21.2.0/24 (NVA/firewall)
  • NVA private IP: 10.21.2.4

🏗️ Kịch Bản

HoaTranLab cần đảm bảo mọi outbound traffic từ subnet ứng dụng đều đi qua firewall/NVA để kiểm tra, log, và lọc. Mặc định Azure dùng system route tự động ra internet. UDR (User Defined Route) sẽ ghi đè system route, ép toàn bộ traffic đi qua NVA trước khi ra ngoài.

-- Luồng traffic với UDR --
vm-app (snet-app) → [UDR: 0.0.0.0/0 → 10.21.2.4] → NVA (snet-firewall) → Internet
Không có UDR: vm-app → Internet trực tiếp (bypass firewall)

🧪 Các Bước Thực Hiện

1

Tạo VNet với 2 Subnet và Deploy NVA (Firewall VM)

Cách 1 — Portal
  1. 1.1Tạo RG rg-az500-udr-lab21, region Southeast Asia
  2. 1.2Tạo VNet vnet-az500-lab21 (10.21.0.0/16) với subnet snet-app (10.21.1.0/24)
  3. 1.3Thêm subnet snet-firewall (10.21.2.0/24) vào VNet
  4. 1.4Tạo VM vm-az500-nva trong snet-firewall, Ubuntu 22.04, Standard_B1s — đây là NVA giả lập firewall
  5. 1.5NIC của vm-nva → IP configurations → Bật IP forwarding → Save
Cách 2 — Azure CLI
Azure CLI— Tạo VNet, subnet và NVA với IP forwarding
RG="rg-az500-udr-lab21"

az group create --name $RG --location southeastasia \
  --tags "owner=hoatranlab" "env=lab" "module=az500-ch05"

# VNet + 2 subnets
az network vnet create \
  --resource-group $RG \
  --name vnet-az500-lab21 \
  --address-prefix 10.21.0.0/16 \
  --subnet-name snet-app \
  --subnet-prefix 10.21.1.0/24

az network vnet subnet create \
  --resource-group $RG \
  --vnet-name vnet-az500-lab21 \
  --name snet-firewall \
  --address-prefix 10.21.2.0/24

# Public IP cho NVA (Standard SKU)
az network public-ip create \
  --resource-group $RG --name pip-nva \
  --sku Standard --allocation-method Static

# NIC cho NVA - bật IP forwarding
az network nic create \
  --resource-group $RG --name nic-nva \
  --vnet-name vnet-az500-lab21 \
  --subnet snet-firewall \
  --public-ip-address pip-nva \
  --ip-forwarding true

# Deploy NVA (Ubuntu giả lập firewall)
az vm create \
  --resource-group $RG --name vm-az500-nva \
  --nics nic-nva \
  --image Ubuntu2204 --size Standard_B1s \
  --admin-username azureadmin --generate-ssh-keys \
  --no-wait

# Lấy private IP của NVA (sẽ dùng làm next hop)
NVA_IP=$(az network nic show \
  --resource-group $RG --name nic-nva \
  --query "ipConfigurations[0].privateIPAddress" -o tsv)
echo "NVA Private IP (next hop): $NVA_IP"
2

Tạo Route Table và Thêm UDR Custom Route

Cách 1 — Portal
  1. 2.1Portal → search "Route tables"+ Create → RG: rg-az500-udr-lab21, Name: rt-az500-lab21, Region: Southeast Asia
  2. 2.2Vào Route table → Routes+ Add: Route name: route-to-firewall, Destination: 0.0.0.0/0, Next hop type: Virtual appliance, Next hop address: 10.21.2.4 → Add
  3. 2.3Route table → SubnetsAssociate → chọn VNet vnet-az500-lab21, Subnet: snet-app → OK
Cách 2 — Azure CLI
Azure CLI— Route Table + UDR + Associate subnet
RG="rg-az500-udr-lab21"
NVA_IP="10.21.2.4"   # Private IP của NVA (thay bằng IP thực nếu khác)

# Tạo Route Table
az network route-table create \
  --resource-group $RG \
  --name rt-az500-lab21 \
  --location southeastasia \
  --disable-bgp-route-propagation false

# Thêm UDR: 0.0.0.0/0 → Virtual Appliance (NVA)
az network route-table route create \
  --resource-group $RG \
  --route-table-name rt-az500-lab21 \
  --name route-to-firewall \
  --address-prefix 0.0.0.0/0 \
  --next-hop-type VirtualAppliance \
  --next-hop-ip-address $NVA_IP

# Thêm route giữ traffic nội bộ VNet dùng VnetLocal
az network route-table route create \
  --resource-group $RG \
  --route-table-name rt-az500-lab21 \
  --name route-vnet-local \
  --address-prefix 10.21.0.0/16 \
  --next-hop-type VnetLocal

# Gán Route Table vào snet-app
az network vnet subnet update \
  --resource-group $RG \
  --vnet-name vnet-az500-lab21 \
  --name snet-app \
  --route-table rt-az500-lab21

# Xem routes
az network route-table route list \
  --resource-group $RG \
  --route-table-name rt-az500-lab21 \
  --output table
3

Tạo VM App và Bật IP Forwarding trên OS NVA

Cách 1 — Portal
  1. 3.1Tạo VM vm-az500-app trong snet-app, Ubuntu 22.04, Standard_B1s, Public IP Standard
  2. 3.2SSH vào vm-az500-nva (NVA) → bật IP forwarding trên OS để forward packet
Cách 2 — Azure CLI + SSH vào NVA
Azure CLI + SSH— Tạo VM app và cấu hình NVA forwarding
RG="rg-az500-udr-lab21"

# Tạo VM app trong snet-app
az network public-ip create \
  --resource-group $RG --name pip-vm-app \
  --sku Standard --allocation-method Static

az network nic create \
  --resource-group $RG --name nic-vm-app \
  --vnet-name vnet-az500-lab21 --subnet snet-app \
  --public-ip-address pip-vm-app

az vm create \
  --resource-group $RG --name vm-az500-app \
  --nics nic-vm-app \
  --image Ubuntu2204 --size Standard_B1s \
  --admin-username azureadmin --generate-ssh-keys

# --- SSH vào NVA để bật IP forwarding trên Linux OS ---
NVA_PIP=$(az network public-ip show \
  --resource-group $RG --name pip-nva --query ipAddress -o tsv)
echo "NVA Public IP: $NVA_PIP"

# Chạy lệnh này sau khi SSH vào NVA:
# ssh azureadmin@$NVA_PIP
# sudo sysctl -w net.ipv4.ip_forward=1
# echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
# sudo sysctl -p

# Hoặc dùng run-command:
az vm run-command invoke \
  --resource-group $RG \
  --name vm-az500-nva \
  --command-id RunShellScript \
  --scripts "sysctl -w net.ipv4.ip_forward=1; echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf"
4

Kiểm Tra Next Hop bằng Network Watcher

Cách 1 — Portal
  1. 4.1Portal → Network WatcherNext hop
  2. 4.2VM: vm-az500-app, NIC: chọn NIC, Source IP: 10.21.1.4, Destination IP: 8.8.8.8
  3. 4.3Kết quả mong đợi: Next hop type = VirtualAppliance, Next hop IP = 10.21.2.4
  4. 4.4Test thêm: Destination = 10.21.1.5 (cùng VNet) → Next hop: VnetLocal
Cách 2 — Azure CLI
Azure CLI— Network Watcher Next Hop
RG="rg-az500-udr-lab21"

# Test 1: next hop cho traffic đến Internet (expect: VirtualAppliance → 10.21.2.4)
az network watcher show-next-hop \
  --resource-group $RG \
  --vm vm-az500-app \
  --source-ip 10.21.1.4 \
  --dest-ip 8.8.8.8

# Test 2: next hop cho traffic nội bộ VNet (expect: VnetLocal)
az network watcher show-next-hop \
  --resource-group $RG \
  --vm vm-az500-app \
  --source-ip 10.21.1.4 \
  --dest-ip 10.21.2.4
Kết quả mong đợi
# Test 1 (Internet traffic):
{
  "nextHopIpAddress": "10.21.2.4",
  "nextHopType": "VirtualAppliance",
  "routeTableId": "/subscriptions/.../rt-az500-lab21"
}

# Test 2 (VNet local traffic):
{
  "nextHopIpAddress": "",
  "nextHopType": "VnetLocal",
  "routeTableId": "System Route"
}

📊 Kết Quả Đầu Ra

Route Table với UDR

rt-az500-lab21 có route 0.0.0.0/0 → VirtualAppliance 10.21.2.4

Route Table gán vào snet-app

Subnet snet-app có route table liên kết, override system route

Next Hop = VirtualAppliance

Network Watcher xác nhận traffic đến 8.8.8.8 đi qua 10.21.2.4

IP Forwarding bật

NIC NVA: ip-forwarding = true; OS: net.ipv4.ip_forward = 1

🧹 Dọn Dẹp Tài Nguyên

Azure CLI
az group delete --name rg-az500-udr-lab21 --yes --no-wait

❓ Câu Hỏi Ôn Tập

1. UDR (User Defined Route) ghi đè loại route nào? Có thể ghi đè route BGP từ VPN Gateway không?

Gợi ý: UDR ghi đè system routes và BGP routes. Có thể tắt BGP propagation trên route table để UDR ưu tiên.

2. Tại sao phải bật IP forwarding ở cả 2 nơi: Azure NIC và OS của NVA?

Gợi ý: Azure NIC: cho phép NIC nhận packet không phải địa chỉ của nó. OS: Linux mặc định drop packet không phải của mình, cần bật ip_forward để forward.

3. Next hop type "VirtualAppliance" khác gì với "Internet", "VnetLocal", "None"?

Gợi ý: VirtualAppliance = forward đến IP cụ thể (NVA); Internet = ra public internet; VnetLocal = trong VNet; None = drop traffic (black hole).

4. Trong sản xuất thực tế, Azure Firewall thay thế vai trò NVA ở lab này như thế nào? Ưu điểm là gì?

Gợi ý: Azure Firewall là managed PaaS, không cần quản lý VM, tích hợp Firewall Policy, threat intelligence, TLS inspection. UDR vẫn dùng nhưng next hop = Azure Firewall private IP.

Lab 20: Application Security Group Thư viện Labs Lab 22: NSG Flow Logs
Zalo