MODULE 13 Virtual Networking · 15–20% ~3 giờ Administrator

Network Routing & Endpoints

System routes mặc định của Azure, User-Defined Routes (UDR) để tùy chỉnh định tuyến, và Service Endpoints để truy cập an toàn các dịch vụ PaaS (Storage, SQL, Key Vault) từ subnet mà không qua Internet.

Lý Thuyết Cốt Lõi

1. System Routes — Định Tuyến Mặc Định của Azure

Khi tạo một VNet, Azure tự động tạo các system routes cho mỗi subnet. Các route này không nhìn thấy được qua Portal nhưng luôn hoạt động ngầm. Chúng định tuyến traffic đến địa chỉ đích thông qua các next hop types được Azure quản lý.

Address Prefix Next Hop Type Mô tả
10.0.0.0/16 (VNet CIDR) Virtual Network Traffic trong cùng VNet đi trực tiếp — không qua router
0.0.0.0/0 Internet Mọi traffic không khớp route nào → ra Internet
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 None (drop) Private RFC1918 ranges không trong VNet → bị drop
100.64.0.0/10 None (drop) Shared address space (RFC 6598) → bị drop
Optional System Routes (tự động thêm)
  • VNet Peering: route đến address space của VNet peer được thêm tự động
  • VPN Gateway: BGP routes từ on-prem được propagate vào subnet
  • Virtual Network Service Endpoint: route đến service prefix
  • VNet Service Endpoint Policy: kiểm soát endpoint truy cập
Next Hop Types
  • Virtual Network: trong cùng VNet
  • Internet: ra Internet qua Azure Internet gateway
  • Virtual appliance: đến IP của NVA (VM)
  • Virtual network gateway: đến VPN/ExpressRoute Gateway
  • None: drop packet

2. User-Defined Routes (UDR) — Tùy Chỉnh Định Tuyến

UDR (còn gọi là custom routes) cho phép override system routes. Bạn tạo một Route Table, thêm các custom routes vào đó, rồi gắn Route Table vào một hoặc nhiều subnet. Route Table không áp dụng cho Gateway subnet.

Tạo Route Table
  1. Tạo Route Table resource (cùng region với VNet)
  2. Thêm routes: Address prefix + Next hop type + Next hop IP
  3. Gắn Route Table vào subnet bằng Subnet Association
  4. Route table có thể gắn vào nhiều subnet
  5. Một subnet chỉ có thể gắn 1 route table
Route Priority (độ ưu tiên)
  1. Longest prefix match: route cụ thể hơn thắng (10.1.1.0/24 > 10.1.0.0/16)
  2. UDR thắng system route khi cùng prefix
  3. BGP routes từ on-prem có độ ưu tiên thấp hơn UDR
  4. Disable BGP route propagation nếu không muốn BGP routes vào subnet
Force Tunneling

UDR: 0.0.0.0/0 → Next hop: Virtual network gateway. Buộc toàn bộ Internet traffic qua on-prem hoặc NVA để inspect trước khi ra ngoài.

Blackhole Route

UDR: specific prefix → Next hop: None. Drop tất cả traffic đến địa chỉ đó — dùng để block truy cập vào IP độc hại hoặc tạo subnet isolation.

Inspect Traffic

UDR → Virtual Appliance (NVA/Firewall). Traffic đi qua NVA để deep packet inspection, logging, IDS/IPS trước khi đến đích.

Disable BGP Route Propagation: Khi bật tùy chọn này trên Route Table, các routes được học qua BGP từ VPN/ExpressRoute Gateway sẽ không được propagate vào subnet đó. Hữu ích khi muốn kiểm soát hoàn toàn routing qua UDR, tránh route tự động từ on-prem ghi đè UDR của bạn.

3. Service Endpoints — Truy Cập An Toàn Dịch Vụ PaaS

Service Endpoint mở rộng identity của VNet subnet đến các dịch vụ Azure PaaS (Storage, SQL Database, Key Vault...). Traffic từ subnet đến service đi qua Microsoft backbone thay vì Internet, nhưng vẫn đến public IP của service.

Trước khi bật Service Endpoint
VM (10.1.1.4)
→ Internet (NAT public IP)
→ storage.core.windows.net
Traffic qua Internet công cộng
Sau khi bật Service Endpoint
VM (10.1.1.4)
→ Microsoft Backbone
→ storage.core.windows.net
Traffic qua backbone, không ra Internet
Cách bật Service Endpoint
  1. Vào VNet → Subnets → chọn subnet
  2. Mục "Service Endpoints" → chọn service (Microsoft.Storage, Microsoft.Sql...)
  3. Azure tự thêm route đến service prefix vào subnet
  4. Cấu hình Firewall/VNet rule trên Storage Account/SQL để chỉ cho phép subnet này
Lợi ích & Giới hạn
  • Bảo mật tốt hơn — service chỉ nhận traffic từ subnet cụ thể
  • Không cần Public IP trên VM để truy cập PaaS
  • Không tốn phí thêm (miễn phí tính năng)
  • Service vẫn có Public IP — không ẩn hoàn toàn (cần Private Endpoint)
  • On-prem không benefit — chỉ áp dụng từ subnet Azure

4. Service Endpoint Services & So Sánh với Private Endpoint

Azure hỗ trợ Service Endpoint cho nhiều dịch vụ PaaS. Mỗi service có namespace riêng cần bật. Dưới đây là các dịch vụ phổ biến và so sánh với Private Endpoint.

Microsoft.Storage

Azure Blob, File, Queue, Table Storage. Bật trên subnet → cấu hình Storage Account Firewall chỉ cho phép VNet này.

Microsoft.Sql

Azure SQL Database, SQL Managed Instance, Azure Synapse. Cấu hình VNet rules trên SQL Server firewall.

Microsoft.KeyVault

Azure Key Vault. Secrets, certificates, keys chỉ accessible từ subnet được phép. Kết hợp với Managed Identity.

Microsoft.ServiceBus

Azure Service Bus messaging. Queue và Topic chỉ nhận/gửi từ subnet whitelist.

Microsoft.EventHub

Azure Event Hubs ingestion pipeline. Bảo vệ event stream từ IoT devices qua subnet dedicated.

Microsoft.ContainerRegistry

Azure Container Registry. Chỉ cho phép AKS subnet pull images, block Internet access.

Tiêu chí Service Endpoint Private Endpoint
IP của service Public IP (vẫn giữ) Private IP trong VNet của bạn
On-premises access Không hỗ trợ trực tiếp Có — qua VPN/ExpressRoute
Chi phí Miễn phí Tính phí per endpoint + data
DNS resolution FQDN resolve public IP FQDN resolve private IP (Private DNS)
Khi nào dùng Bảo mật traffic từ Azure subnet đến PaaS Yêu cầu hoàn toàn private, on-prem cần truy cập

Bài Tập Thực Hành (Lab)

Lab 13-A: UDR Force Tunneling Lab 13-B: Blackhole Route Lab 13-C: Service Endpoint Storage Lab 13-D: Verify & Test
1

Tạo Resource Group, VNet với hai subnet và Route Table UDR

Azure CLI— Chạy được trên PowerShell, CMD, Bash hoặc Azure Cloud Shell
# Tạo Resource Group
az group create \
  --name rg-az104-m13 \
  --location southeastasia

# Tạo VNet với subnet-app (workload) và subnet-infra (NVA)
az network vnet create \
  --name vnet-m13 \
  --resource-group rg-az104-m13 \
  --location southeastasia \
  --address-prefix 10.13.0.0/16 \
  --subnet-name subnet-app \
  --subnet-prefix 10.13.1.0/24

# Thêm subnet-infra cho NVA/Firewall
az network vnet subnet create \
  --resource-group rg-az104-m13 \
  --vnet-name vnet-m13 \
  --name subnet-infra \
  --address-prefix 10.13.2.0/24

# Tạo NVA VM trong subnet-infra
az vm create \
  --resource-group rg-az104-m13 \
  --name vm-nva \
  --image Ubuntu2204 \
  --size Standard_B1s \
  --vnet-name vnet-m13 \
  --subnet subnet-infra \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-sku Standard \
  --no-wait

echo "Tài nguyên cơ bản đã được tạo."
Verify Portal: Virtual Networks → vnet-m13 → Subnets → xác nhận subnet-app (10.13.1.0/24) và subnet-infra (10.13.2.0/24). Virtual machines → vm-nva đang ở trạng thái Running.
2

Tạo UDR với route Force Tunneling và Blackhole Route, gắn vào subnet-app

Bash— Linux/macOS/Cloud Shell, KHÔNG chạy CMD
# Lấy Private IP của NVA VM
NVA_IP=$(az vm show \
  --resource-group rg-az104-m13 \
  --name vm-nva \
  --show-details \
  --query privateIps \
  --output tsv)

echo "NVA IP: $NVA_IP"

# Bật IP Forwarding trên NIC của NVA
NIC_ID=$(az vm show \
  --resource-group rg-az104-m13 \
  --name vm-nva \
  --query 'networkProfile.networkInterfaces[0].id' \
  --output tsv)
NIC_NAME=$(basename $NIC_ID)

az network nic update \
  --resource-group rg-az104-m13 \
  --name $NIC_NAME \
  --ip-forwarding true

# Tạo Route Table cho subnet-app
az network route-table create \
  --resource-group rg-az104-m13 \
  --name rt-app \
  --location southeastasia \
  --disable-bgp-route-propagation true

# Route 1: Force Tunneling — Internet traffic qua NVA
az network route-table route create \
  --resource-group rg-az104-m13 \
  --route-table-name rt-app \
  --name force-tunnel-internet \
  --address-prefix 0.0.0.0/0 \
  --next-hop-type VirtualAppliance \
  --next-hop-ip-address $NVA_IP

# Route 2: Blackhole — block traffic đến một IP suspicious (ví dụ: 1.2.3.4/32)
az network route-table route create \
  --resource-group rg-az104-m13 \
  --route-table-name rt-app \
  --name blackhole-suspicious-ip \
  --address-prefix 1.2.3.4/32 \
  --next-hop-type None

# Gắn Route Table vào subnet-app
az network vnet subnet update \
  --resource-group rg-az104-m13 \
  --vnet-name vnet-m13 \
  --name subnet-app \
  --route-table rt-app

# Xem tất cả routes trong route table
az network route-table route list \
  --resource-group rg-az104-m13 \
  --route-table-name rt-app \
  --output table
Verify Portal: Route tables → rt-app → Routes → xác nhận 2 routes: (1) 0.0.0.0/0 → Virtual appliance → NVA_IP, (2) 1.2.3.4/32 → None. Subnets → xác nhận subnet-app được gắn rt-app.
3

Bật Service Endpoint Microsoft.Storage trên subnet-app và cấu hình Storage Account firewall

Azure CLI— Chạy được trên PowerShell, CMD, Bash hoặc Azure Cloud Shell
# Bật Service Endpoint Microsoft.Storage trên subnet-app
az network vnet subnet update \
  --resource-group rg-az104-m13 \
  --vnet-name vnet-m13 \
  --name subnet-app \
  --service-endpoints Microsoft.Storage

# Tên Storage Account phải unique toàn cầu, 3-24 ký tự, viết thường, chỉ chữ và số
STORAGE_NAME="staz104m13$(head -c 4 /dev/urandom | xxd -p)"

# Tạo Storage Account với network access mặc định bị khóa
az storage account create \
  --name $STORAGE_NAME \
  --resource-group rg-az104-m13 \
  --location southeastasia \
  --sku Standard_LRS \
  --kind StorageV2 \
  --access-tier Hot \
  --https-only true \
  --min-tls-version TLS1_2 \
  --default-action Deny

echo "Storage Account: $STORAGE_NAME"

# Cho phép subnet-app truy cập Storage Account qua Service Endpoint
az storage account network-rule add \
  --resource-group rg-az104-m13 \
  --account-name $STORAGE_NAME \
  --vnet-name vnet-m13 \
  --subnet subnet-app

# Kiểm tra network rules đã áp dụng
az storage account network-rule list \
  --resource-group rg-az104-m13 \
  --account-name $STORAGE_NAME \
  --output table
Verify Portal: subnet-app → Service Endpoints → xác nhận "Microsoft.Storage" trong danh sách. Storage Account → Networking → Firewalls and virtual networks → Default action = Deny → Virtual networks → xác nhận vnet-m13/subnet-app được thêm vào. Thử truy cập Storage từ máy ngoài → phải bị block 403.
4

Kiểm tra Effective Routes trên VM để xác nhận UDR đang hoạt động

Azure CLI— Chạy được trên PowerShell, CMD, Bash hoặc Azure Cloud Shell
# Tạo VM test trong subnet-app để kiểm tra routing
az vm create \
  --resource-group rg-az104-m13 \
  --name vm-app-test \
  --image Ubuntu2204 \
  --size Standard_B1s \
  --vnet-name vnet-m13 \
  --subnet subnet-app \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-sku Standard \
  --nsg-rule SSH

# Lấy NIC ID của vm-app-test
TEST_NIC_ID=$(az vm show \
  --resource-group rg-az104-m13 \
  --name vm-app-test \
  --query 'networkProfile.networkInterfaces[0].id' \
  --output tsv)
TEST_NIC_NAME=$(basename $TEST_NIC_ID)

# Xem Effective Routes — các route thực tế đang áp dụng cho NIC này
az network nic show-effective-route-table \
  --resource-group rg-az104-m13 \
  --name $TEST_NIC_NAME \
  --output table

# Kết quả kỳ vọng:
# Source    State    AddressPrefix    NextHopType         NextHopIpAddress
# User      Active   0.0.0.0/0        VirtualAppliance    10.13.2.x  (NVA IP)
# User      Active   1.2.3.4/32       None                -
# Default   Active   10.13.0.0/16     VnetLocal           -
Verify Portal: vm-app-test → Networking → Network Interface → Effective routes → xác nhận Route Source = "User" cho các UDR đã tạo. Route 0.0.0.0/0 trỏ đến NVA IP thay vì "Internet" — xác nhận force tunneling hoạt động.
5

Cleanup — Dọn dẹp tài nguyên để tránh phát sinh chi phí

Azure CLI— Chạy được trên PowerShell, CMD, Bash hoặc Azure Cloud Shell
# Xóa toàn bộ Resource Group — kéo theo VNet, VMs, Route Table, Storage Account
az group delete --name rg-az104-m13 --yes --no-wait

echo "Cleanup đã được gửi. RG sẽ bị xóa trong vài phút."

Kết Quả Đầu Ra

Hiểu System Routes mặc định

Giải thích được Azure tự động tạo route nào khi tạo VNet và logic longest prefix match

Tạo UDR và gắn vào subnet

Tạo Route Table với multiple routes, gắn vào subnet, xác minh Effective Routes trên NIC

Cấu hình Force Tunneling

Buộc Internet traffic qua NVA bằng UDR 0.0.0.0/0 → Virtual Appliance để inspect traffic

Bật Service Endpoint cho Storage

Cấu hình Microsoft.Storage endpoint trên subnet và whitelist subnet trong Storage Firewall

So sánh Service vs Private Endpoint

Phân tích trade-off về chi phí, bảo mật, on-prem access để chọn đúng giải pháp theo yêu cầu

Tạo Blackhole Route

Drop traffic đến IP/CIDR cụ thể bằng Next hop = None để tạo security block hoặc subnet isolation

Ứng Dụng Thực Tế

Tình huống 1: Công ty chứng khoán — Bảo vệ dữ liệu giao dịch trên Azure Storage

Dữ liệu giao dịch nhạy cảm lưu trên Azure Blob Storage. Yêu cầu chỉ các server trading trong subnet cụ thể mới được đọc/ghi, tuyệt đối không cho phép access từ Internet.

Giải pháp

Bật Service Endpoint Microsoft.Storage trên subnet-trading. Storage Account Firewall: Default action = Deny, chỉ whitelist subnet-trading. VM trading dùng Managed Identity để authenticate vào Storage — không cần storage key.

Triển khai

UDR trên subnet-trading: 0.0.0.0/0 → Azure Firewall (force tunnel). Service Endpoint policy (Microsoft.Storage) giới hạn chỉ storage accounts trong subscription nội bộ — chặn data exfiltration sang storage ngoài.

Lợi ích

Dữ liệu giao dịch không thể bị lộ qua Internet. Không cần Private Endpoint (tiết kiệm chi phí). Traffic đến Storage đi qua backbone, độ trễ thấp — quan trọng cho high-frequency trading.

Tình huống 2: ISP lớn tại Việt Nam — Force Tunneling kiểm soát Internet outbound

ISP vận hành hệ thống billing và OSS/BSS trên Azure. Theo quy định, toàn bộ traffic Internet từ server phải đi qua Proxy/Firewall nội bộ để logging và compliance.

Giải pháp

UDR: 0.0.0.0/0 → Virtual Appliance (Azure Firewall Premium với URL filtering). Tất cả Internet egress từ subnet-oss, subnet-billing bị buộc qua Firewall. Firewall log đến Log Analytics workspace.

Triển khai

Route table rt-oss và rt-billing đều có force tunnel route. Blackhole routes cho các IP CDN tải về malware đã biết. Disable BGP propagation để tránh BGP routes từ on-prem bypass UDR.

Lợi ích

100% Internet traffic được log — đáp ứng yêu cầu BSTT Bộ TT&TT. Blackhole tự động block IP độc hại từ threat intelligence feed. Phát hiện data exfiltration qua anomaly detection trên log.

Tình huống 3: Startup thương mại điện tử — Service Endpoint cho SQL và Key Vault

Startup xây dựng backend trên Azure App Service + Azure SQL + Key Vault. Ngân sách hạn chế, không muốn trả phí Private Endpoint nhưng vẫn cần bảo mật tốt cho database và secrets.

Giải pháp

Bật cả 3 Service Endpoints trên subnet-backend: Microsoft.Sql, Microsoft.KeyVault, Microsoft.Storage. SQL Server firewall: Default deny + VNet rule cho subnet-backend. Key Vault network ACL tương tự.

Triển khai

App Service Integrated VNet vào subnet-backend. UDR: route đến SQL public prefix → Virtual Network Service Endpoint (không qua NVA — đã có service endpoint xử lý). Key Vault access policy kết hợp Managed Identity.

Lợi ích

Chi phí: $0 cho Service Endpoints so với ~$150/tháng cho 3 Private Endpoints. SQL, Key Vault không accessible từ Internet. Startup đạt được bảo mật mức doanh nghiệp với chi phí startup.

Zalo