MODULE 09 Virtual Networking · 15–20% ~4 giờ

Cấu hình Virtual Networks

Lập kế hoạch và triển khai Azure Virtual Network — nền tảng kết nối mạng của mọi workload trên cloud. Bao gồm thiết kế subnet, quản lý IP addressing, Public IP và Private IP.

Lý Thuyết Cốt Lõi

1. Lập Kế Hoạch & Tạo Virtual Network

Azure Virtual Network (VNet) là thành phần mạng cơ bản, cung cấp môi trường mạng riêng biệt, bảo mật cho các Azure resources. Trước khi tạo VNet, cần lập kế hoạch kỹ về địa chỉ IP và phân chia subnet.

Đặc điểm VNet
  • • Giới hạn trong 1 region (không trải qua nhiều region)
  • • Có thể kết nối nhiều VNet qua VNet Peering hoặc VPN Gateway
  • • Mỗi subscription hỗ trợ tối đa 1.000 VNet
  • • Address space không được trùng lặp giữa các VNet khi peering
  • • Hỗ trợ IPv4 và IPv6 (dual-stack)
Lập kế hoạch Address Space
  • • Dùng dải RFC 1918: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
  • • Tránh trùng với dải IP on-premises nếu dùng hybrid connectivity
  • • Dự trữ không gian địa chỉ cho tăng trưởng trong tương lai
  • • Kích thước tối thiểu /29, tối đa /2 cho address space
Tip thiết kế: Quy ước đặt tên: vnet-<project>-<env>-<region>, ví dụ vnet-erp-prod-sea. Mỗi VNet nên có ít nhất 1 subnet riêng cho từng tier (web, app, db) để áp NSG độc lập.

2. Tạo và Quản Lý Subnets

Subnet là phân đoạn nhỏ hơn của VNet, cho phép phân chia workload và áp dụng policy bảo mật (NSG, Route Table) khác nhau cho từng nhóm tài nguyên.

Loại Subnet Mục đích Lưu ý
GatewaySubnet VPN Gateway / ExpressRoute Gateway Tên bắt buộc, không gán NSG
AzureBastionSubnet Azure Bastion host Tên bắt buộc, tối thiểu /26
AzureFirewallSubnet Azure Firewall Tên bắt buộc, tối thiểu /26
Subnet tùy chỉnh VM, AKS, App Service, v.v. Azure giữ lại 5 IP đầu tiên
5 IP reserved trong mỗi subnet: .0 (network address), .1 (default gateway), .2 & .3 (Azure DNS), .255 (broadcast). Subnet /28 = 16 IP tổng − 5 reserved = 11 IP dùng được.

3. IP Addressing — Public IP & Private IP

Public IP Address
  • Static: IP cố định, không thay đổi khi deallocate VM. Dùng cho DNS, firewall rules.
  • Dynamic: IP thay đổi mỗi khi resource start. Rẻ hơn, dùng cho dev/test.
  • SKU Basic: legacy, không có Availability Zone support
  • SKU Standard: bắt buộc cho Load Balancer Standard, hỗ trợ Zone-redundant
  • • Có thể gán DNS label: <label>.southeastasia.cloudapp.azure.com
Private IP Address
  • • Lấy từ address space của subnet, dùng cho giao tiếp nội bộ VNet
  • Dynamic: Azure cấp phát tự động qua DHCP (mặc định)
  • Static: Chỉ định IP cố định trong subnet — dùng cho domain controllers, DNS servers
  • • Gán cho: Network Interface, Internal Load Balancer, Application Gateway
  • • Không thể dùng IP đã reserved (.0, .1, .2, .3, .255)
Gán Public IP vào resource

Public IP là resource độc lập — tạo trước, sau đó gán vào: VM Network Interface, Load Balancer Frontend, Application Gateway, VPN Gateway, Bastion Host. Có thể tách khỏi resource và gán lại.

Prefix Public IP

Public IP Prefix: đặt trước một dải Public IP liền kề (/28–/31). Hữu ích khi cần whitelist IP cố định cho nhiều resource, giảm quản lý firewall rules.

4. DNS và Service Tags trong VNet

Azure-provided DNS

Mặc định, Azure cung cấp DNS giải quyết tên VM trong VNet bằng hostname. DNS server: 168.63.129.16. Không hỗ trợ custom domain hay reverse lookup.

Custom DNS Server

Cấu hình trong VNet Settings → DNS Servers. Dùng khi: cần resolve on-premises domain, muốn dùng Azure Private DNS zones, hoặc cần conditional forwarder.

Service Tags

Nhóm IP prefix của Azure services (VD: AzureCloud, Storage.SoutheastAsia). Dùng trong NSG rules thay vì IP range cụ thể — Azure tự cập nhật khi IP service thay đổi.

VNet Delegation

Gán subnet cho một Azure service cụ thể (VD: Microsoft.Web/serverFarms cho App Service, Microsoft.ContainerInstance/containerGroups). Service quản lý subnet theo nhu cầu riêng.

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

Lab 09-A: Tạo VNet & Subnets Lab 09-B: Public IP Static Lab 09-C: VM với Private IP tĩnh Lab 09-D: Cleanup
1

Tạo Resource Group và Virtual Network với 3 Subnets

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-m09 \
  --location southeastasia \
  --tags Course=AZ-104 Module=09

# Tạo VNet với address space 10.9.0.0/16
az network vnet create \
  --resource-group rg-az104-m09 \
  --name vnet-az104-m09 \
  --address-prefix 10.9.0.0/16 \
  --location southeastasia

# Tạo subnet web-tier
az network vnet subnet create \
  --resource-group rg-az104-m09 \
  --vnet-name vnet-az104-m09 \
  --name snet-web \
  --address-prefix 10.9.1.0/24

# Tạo subnet app-tier
az network vnet subnet create \
  --resource-group rg-az104-m09 \
  --vnet-name vnet-az104-m09 \
  --name snet-app \
  --address-prefix 10.9.2.0/24

# Tạo subnet db-tier
az network vnet subnet create \
  --resource-group rg-az104-m09 \
  --vnet-name vnet-az104-m09 \
  --name snet-db \
  --address-prefix 10.9.3.0/24

# Kiểm tra VNet và subnets
az network vnet show \
  --resource-group rg-az104-m09 \
  --name vnet-az104-m09 \
  --query "{addressSpace:addressSpace.addressPrefixes, subnets:subnets[].{name:name,prefix:addressPrefix}}" \
  -o table
Verify Portal: Azure Portal → Virtual Networks → vnet-az104-m09 → Subnets → xác nhận 3 subnet: snet-web (10.9.1.0/24), snet-app (10.9.2.0/24), snet-db (10.9.3.0/24).
2

Tạo Public IP Static (SKU Standard) và gán DNS label

Azure CLI— Chạy được trên PowerShell, CMD, Bash hoặc Azure Cloud Shell
# Tạo Public IP Standard Static
az network public-ip create \
  --resource-group rg-az104-m09 \
  --name pip-webvm-m09 \
  --sku Standard \
  --allocation-method Static \
  --zone 1 2 3 \
  --dns-name "az104m09web$(date +%s | tail -c 6)" \
  --location southeastasia

# Xem IP được gán và FQDN
az network public-ip show \
  --resource-group rg-az104-m09 \
  --name pip-webvm-m09 \
  --query "{ip:ipAddress, fqdn:dnsSettings.fqdn, sku:sku.name, allocation:publicIPAllocationMethod}" \
  -o table
Verify Portal: Portal → Public IP addresses → pip-webvm-m09 → Overview → xác nhận IP Address hiện thị (không phải "Not assigned"), SKU = Standard, Assignment = Static, DNS name = az104m09web...southeastasia.cloudapp.azure.com.
3

Tạo VM với NIC gán Public IP và Private IP tĩnh

Azure CLI— Chạy được trên PowerShell, CMD, Bash hoặc Azure Cloud Shell
# Tạo NSG cơ bản cho web tier
az network nsg create \
  --resource-group rg-az104-m09 \
  --name nsg-web-m09

az network nsg rule create \
  --resource-group rg-az104-m09 \
  --nsg-name nsg-web-m09 \
  --name AllowHTTP \
  --priority 100 \
  --protocol Tcp \
  --destination-port-range 80 \
  --access Allow \
  --direction Inbound

az network nsg rule create \
  --resource-group rg-az104-m09 \
  --nsg-name nsg-web-m09 \
  --name AllowSSH \
  --priority 110 \
  --protocol Tcp \
  --destination-port-range 22 \
  --access Allow \
  --direction Inbound

# Tạo NIC với private IP tĩnh 10.9.1.10 và gán Public IP
az network nic create \
  --resource-group rg-az104-m09 \
  --name nic-webvm-m09 \
  --vnet-name vnet-az104-m09 \
  --subnet snet-web \
  --private-ip-address 10.9.1.10 \
  --public-ip-address pip-webvm-m09 \
  --network-security-group nsg-web-m09

# Tạo VM gắn NIC đã cấu hình
az vm create \
  --resource-group rg-az104-m09 \
  --name vm-web-m09 \
  --nics nic-webvm-m09 \
  --image Ubuntu2204 \
  --size Standard_B1s \
  --admin-username azureadmin \
  --generate-ssh-keys \
  --no-wait

echo "VM đang tạo... Kiểm tra sau 3-5 phút."

# Kiểm tra NIC sau khi VM tạo xong
az network nic show \
  --resource-group rg-az104-m09 \
  --name nic-webvm-m09 \
  --query "ipConfigurations[0].{privateIP:privateIPAddress,privateAllocation:privateIPAllocationMethod,publicIP:publicIPAddress.id}" \
  -o table
Verify Portal: Portal → vm-web-m09 → Networking → xác nhận Private IP = 10.9.1.10 (Static) và Public IP = pip-webvm-m09. Vào NIC → IP Configurations → xác nhận privateIPAllocationMethod = Static.
4

Xác minh kết nối mạng và kiểm tra IP configuration

Bash— Linux/macOS/Cloud Shell, KHÔNG chạy CMD
# Lấy Public IP của VM
PUBLIC_IP=$(az network public-ip show \
  --resource-group rg-az104-m09 \
  --name pip-webvm-m09 \
  --query ipAddress -o tsv)

echo "Public IP: $PUBLIC_IP"

# Kiểm tra VM đang chạy
az vm show \
  --resource-group rg-az104-m09 \
  --name vm-web-m09 \
  --show-details \
  --query "{name:name,powerState:powerState,publicIps:publicIps,privateIps:privateIps}" \
  -o table

# SSH vào VM để xác minh IP nội bộ
ssh azureadmin@$PUBLIC_IP "ip addr show eth0 | grep inet"

# Kiểm tra effective IP routes
az network nic show-effective-route-table \
  --resource-group rg-az104-m09 \
  --name nic-webvm-m09 \
  -o table
Verify Portal: Portal → vm-web-m09 → Networking → Effective routes → xác nhận default route 0.0.0.0/0 qua Internet và subnet route 10.9.1.0/24 qua Connected. Kết quả ip addr trong VM phải trả về 10.9.1.10/24.
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 VM, NIC, Public IP, VNet, NSG)
az group delete --name rg-az104-m09 --yes --no-wait

echo "Đang xóa rg-az104-m09... Quá trình mất 3-5 phút."

Kết Quả Đầu Ra

Thiết kế VNet đúng chuẩn

Lập kế hoạch address space RFC 1918, tránh trùng IP với on-premises, tạo VNet thành công trên Azure

Phân chia Subnet theo tier

Tạo subnet web/app/db riêng biệt, hiểu 5 IP reserved, biết các subnet đặc biệt (GatewaySubnet, AzureBastionSubnet)

Public IP Static SKU Standard

Tạo Public IP Standard với Zone-redundancy, gán DNS label, phân biệt Static vs Dynamic, Basic vs Standard

Private IP tĩnh cho VM

Gán Private IP cố định vào NIC của VM, xác minh qua ip addr trong OS và Azure Portal → IP Configurations

Hiểu DNS và Service Tags

Phân biệt Azure-provided DNS vs Custom DNS, cách dùng Service Tags trong NSG rules thay IP range

Effective Routes kiểm tra

Xem effective routes và effective NSG rules từ NIC để troubleshoot kết nối mạng trong VNet

Ứng Dụng Thực Tế

Tình huống 1: Công ty thương mại điện tử — Kiến trúc 3-tier

Cần triển khai hệ thống bán hàng online với frontend, backend API và database cách ly nhau.

Giải pháp

VNet 10.10.0.0/16 chia 3 subnet: snet-web (10.10.1.0/24) Public IP Static cho Load Balancer; snet-app (10.10.2.0/24) private only; snet-db (10.10.3.0/24) private, Private IP static cho SQL Server.

Triển khai

NSG web-tier chỉ cho phép 80/443 từ Internet. App-tier chỉ nhận traffic từ snet-web. DB-tier chỉ nhận 1433 từ snet-app. DNS label shop.southeastasia.cloudapp.azure.com trỏ về Public IP của LB.

Lợi ích

Database không expose Internet. Compromise ở web tier không thể trực tiếp tấn công DB. Private IP tĩnh cho DB server giúp connection string không thay đổi.

Tình huống 2: Tập đoàn sản xuất — Hybrid Connectivity

Nhà máy tại Hà Nội có hệ thống ERP on-premises, cần mở rộng lên Azure mà không thay đổi IP scheme.

Giải pháp

On-premises dùng 192.168.0.0/16 → Azure VNet dùng 10.20.0.0/16 (không trùng). GatewaySubnet 10.20.255.0/27 cho VPN Gateway. Custom DNS trỏ về on-prem DNS server 192.168.1.10.

Triển khai

VPN Gateway Site-to-Site kết nối factory LAN với Azure VNet. VM Azure ERP extension dùng Private IP tĩnh 10.20.1.20. DNS conditional forwarder: corp.local → 192.168.1.10.

Lợi ích

VM Azure resolve được hostname on-premises. Database connection string giữ nguyên khi di chuyển workload. Mở rộng dần dần không downtime hệ thống hiện tại.

Tình huống 3: Bệnh viện — Cách ly mạng dữ liệu bệnh nhân

Hệ thống HIS (Hospital Information System) yêu cầu dữ liệu bệnh nhân không bao giờ đi qua Internet.

Giải pháp

VNet riêng cho HIS, subnet dữ liệu bệnh nhân không có Public IP nào. Chỉ AzureBastionSubnet có Public IP để admin truy cập. Service Endpoint cho Storage Account từ subnet DB.

Triển khai

Azure Bastion trong AzureBastionSubnet (/26) cho phép admin RDP/SSH vào VM qua HTTPS — không cần Public IP trên VM. NSG chặn hoàn toàn outbound Internet từ snet-db.

Lợi ích

Dữ liệu PHI (Protected Health Information) không bao giờ traverse Internet. Tuân thủ Thông tư 32/2023/TT-BYT về bảo mật thông tin y tế. Audit log đầy đủ qua Bastion.

Zalo