LAB 06 ~2 giờ Module 5 Intersite Connectivity

Intersite Connectivity — VNet Peering & Routing

Kết nối 2 Virtual Network bằng VNet Peering (same-region và cross-region), cấu hình forwarded traffic, hiểu routing table, và kiểm tra kết nối thực tế giữa VM thuộc 2 VNet khác nhau.

🎯 Mục Tiêu Lab

Tạo 2 VNet với address space không chồng lấp tại cùng region (Southeast Asia)

Thiết lập VNet Peering hai chiều (bidirectional) giữa 2 VNet

Cấu hình Allow forwarded traffic và Allow gateway transit

Triển khai VM trong mỗi VNet và kiểm tra ping/SSH cross-VNet

Xem effective routes trên NIC để hiểu routing table tự động thêm từ peering

Thực hành tùy chọn: cross-region peering giữa Southeast Asia và East Asia

📋 Chuẩn Bị

Yêu cầu:
  • Hoàn thành Lab 05 (VNet concepts)
  • Azure CLI đã đăng nhập, subscription active
  • Quota 2 VM Standard_B1s tại southeastasia
Tài nguyên sẽ tạo:
  • VNet-A (10.1.0.0/16) và VNet-B (10.2.0.0/16)
  • 2 Peering links (A→B và B→A), 2 VM
  • Chi phí: ~$1-2 nếu xóa ngay sau lab
Lưu ý VNet Peering: Address space 2 VNet không được chồng lấp (overlapping). Peering không bắc cầu (non-transitive) — VNet-A peer với VNet-B, VNet-B peer với VNet-C không có nghĩa A và C kết nối được. Cần Azure Virtual WAN hoặc NVA/hub VNet để transitive routing.

🏗️ Kịch Bản & Tài Nguyên

Công ty có 2 team dev và ops riêng biệt, mỗi team có VNet riêng. Sau khi merge project, cần kết nối 2 VNet để VM trong VNet-A giao tiếp được với VM trong VNet-B mà không phải đi qua internet — VNet Peering là giải pháp tối ưu nhất (low latency, không tốn bandwidth cost trong cùng region).

VNet-A (Team Dev)
Name: vnet-a-lab06
Address: 10.1.0.0/16
Subnet: subnet-a (10.1.1.0/24)
Region: Southeast Asia
VM: vm-a01 (10.1.1.4)
VNet-B (Team Ops)
Name: vnet-b-lab06
Address: 10.2.0.0/16
Subnet: subnet-b (10.2.1.0/24)
Region: Southeast Asia
VM: vm-b01 (10.2.1.4)

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

1

Tạo 2 Resource Group và 2 Virtual Network

Cách 1 — Azure Portal
  1. 1.1Tạo RG rg-lab06-vnet-a tại Southeast Asia
  2. 1.2Tạo VNet vnet-a-lab06 — Address space: 10.1.0.0/16, subnet-a: 10.1.1.0/24, RG: rg-lab06-vnet-a
  3. 1.3Tạo RG rg-lab06-vnet-b tại Southeast Asia
  4. 1.4Tạo VNet vnet-b-lab06 — Address space: 10.2.0.0/16, subnet-b: 10.2.1.0/24, RG: rg-lab06-vnet-b
Cách 2 — Azure CLI
Azure CLI
# Tạo Resource Groups
az group create --name rg-lab06-vnet-a --location southeastasia
az group create --name rg-lab06-vnet-b --location southeastasia

# Tạo VNet-A (Team Dev)
az network vnet create \
  --resource-group rg-lab06-vnet-a \
  --name vnet-a-lab06 \
  --address-prefix 10.1.0.0/16 \
  --subnet-name subnet-a \
  --subnet-prefix 10.1.1.0/24 \
  --location southeastasia

# Tạo VNet-B (Team Ops)
az network vnet create \
  --resource-group rg-lab06-vnet-b \
  --name vnet-b-lab06 \
  --address-prefix 10.2.0.0/16 \
  --subnet-name subnet-b \
  --subnet-prefix 10.2.1.0/24 \
  --location southeastasia

# Xác nhận 2 VNet
az network vnet list --output table
2

Triển Khai VM trong mỗi VNet

Tạo VM test trong mỗi VNet để kiểm tra kết nối sau khi peering. vm-a01 có Public IP (để SSH vào), vm-b01 không có Public IP (chỉ truy cập qua peering).

Cách 1 — Azure Portal
  1. 2.1Tạo vm-a01: Ubuntu 22.04, B1s, VNet = vnet-a-lab06, Subnet = subnet-a, Public IP: Standard SKU
  2. 2.2NSG của vm-a01: Allow SSH (22) inbound từ IP của bạn
  3. 2.3Tạo vm-b01: Ubuntu 22.04, B1s, VNet = vnet-b-lab06, Subnet = subnet-b, không có Public IP
  4. 2.4Ghi lại private IP của vm-b01 (sẽ dùng để ping từ vm-a01)
Cách 2 — Azure CLI
Azure CLI
# Public IP Standard cho vm-a01
az network public-ip create \
  --resource-group rg-lab06-vnet-a \
  --name pip-vm-a01 \
  --sku Standard \
  --allocation-method Static

# Tạo vm-a01 (có Public IP, trong VNet-A)
az vm create \
  --resource-group rg-lab06-vnet-a \
  --name vm-a01 \
  --image Ubuntu2204 \
  --size Standard_B1s \
  --vnet-name vnet-a-lab06 \
  --subnet subnet-a \
  --public-ip-address pip-vm-a01 \
  --admin-username azureuser \
  --generate-ssh-keys

# Tạo vm-b01 (không có Public IP, trong VNet-B)
az vm create \
  --resource-group rg-lab06-vnet-b \
  --name vm-b01 \
  --image Ubuntu2204 \
  --size Standard_B1s \
  --vnet-name vnet-b-lab06 \
  --subnet subnet-b \
  --public-ip-address "" \
  --admin-username azureuser \
  --generate-ssh-keys

# Lấy private IP của vm-b01
az vm show -g rg-lab06-vnet-b -n vm-b01 \
  -d --query privateIps -o tsv
3

Thiết Lập VNet Peering — Hai Chiều

Peering phải tạo từ cả 2 phía: một link từ VNet-A sang VNet-B và một link ngược lại. Khi tạo qua Portal có thể tạo cả 2 cùng lúc; CLI cần 2 lệnh riêng.

Cách 1 — Azure Portal
  1. 3.1Portal → vnet-a-lab06 → Peerings → + Add
  2. 3.2This peering link name: peer-a-to-b
  3. 3.3Remote VNet: chọn vnet-b-lab06 (subscription hiện tại)
  4. 3.4Remote peering link name: peer-b-to-a
  5. 3.5Enable: Allow traffic to remote virtual network, Allow forwarded traffic from remote virtual network → Add
  6. 3.6Chờ status chuyển sang Connected ở cả 2 VNet
Cách 2 — Azure CLI
Azure CLI
# Lấy Resource ID của VNet-B (cần cho cross-RG peering)
VNET_B_ID=$(az network vnet show \
  --resource-group rg-lab06-vnet-b \
  --name vnet-b-lab06 \
  --query id -o tsv)

# Tạo peering: VNet-A → VNet-B
az network vnet peering create \
  --resource-group rg-lab06-vnet-a \
  --name peer-a-to-b \
  --vnet-name vnet-a-lab06 \
  --remote-vnet $VNET_B_ID \
  --allow-vnet-access \
  --allow-forwarded-traffic

# Lấy Resource ID của VNet-A
VNET_A_ID=$(az network vnet show \
  --resource-group rg-lab06-vnet-a \
  --name vnet-a-lab06 \
  --query id -o tsv)

# Tạo peering ngược: VNet-B → VNet-A
az network vnet peering create \
  --resource-group rg-lab06-vnet-b \
  --name peer-b-to-a \
  --vnet-name vnet-b-lab06 \
  --remote-vnet $VNET_A_ID \
  --allow-vnet-access \
  --allow-forwarded-traffic

# Kiểm tra trạng thái peering
az network vnet peering list \
  --resource-group rg-lab06-vnet-a \
  --vnet-name vnet-a-lab06 \
  --output table
Kết quả (Output) — az network vnet peering list
Name          PeeringState    ProvisioningState    ResourceGroup
------------  --------------  -------------------  -----------------
peer-a-to-b   Connected       Succeeded            rg-lab06-vnet-a
4

Kiểm Tra Kết Nối & Xem Effective Routes

Cách 1 — Azure Portal
  1. 4.1Vào NIC của vm-a01 → Effective routes → kiểm tra có route 10.2.0.0/16 với Next hop: VNet peering
  2. 4.2Network Watcher → Connection Troubleshoot → Source: vm-a01, Dest: private IP của vm-b01, Port 22 → Check
  3. 4.3SSH vào vm-a01 qua Public IP → từ đó ping private IP của vm-b01
  4. 4.4Kết quả mong đợi: ping thành công sau khi peering, thất bại trước khi peering
Cách 2 — Azure CLI
Azure CLI
# Lấy Public IP của vm-a01
PIP_A=$(az network public-ip show \
  -g rg-lab06-vnet-a -n pip-vm-a01 \
  --query ipAddress -o tsv)
echo "Public IP vm-a01: $PIP_A"

# Lấy Private IP của vm-b01
PRIV_B=$(az vm show \
  -g rg-lab06-vnet-b -n vm-b01 \
  -d --query privateIps -o tsv)
echo "Private IP vm-b01: $PRIV_B"

# Xem effective routes trên NIC của vm-a01
NIC_A=$(az vm show -g rg-lab06-vnet-a -n vm-a01 \
  --query 'networkProfile.networkInterfaces[0].id' -o tsv | \
  awk -F'/' '{print $NF}')

az network nic show-effective-route-table \
  --resource-group rg-lab06-vnet-a \
  --name $NIC_A \
  --output table

# Test connectivity từ vm-a01 tới vm-b01 port 22
az network watcher test-connectivity \
  --resource-group rg-lab06-vnet-a \
  --source-resource vm-a01 \
  --dest-address $PRIV_B \
  --dest-port 22
Kết quả (Output) — effective routes sau peering
Source    State    AddressPrefix    NextHopType       NextHopIpAddress
--------  -------  ---------------  ----------------  ----------------
Default   Active   10.1.0.0/16      VnetLocal
VNet      Active   10.2.0.0/16      VNetPeering
Default   Active   0.0.0.0/0        Internet
Bash — SSH vào vm-a01 rồi ping vm-b01
# SSH vào vm-a01 (thay PUBLIC_IP_VM_A01)
ssh azureuser@PUBLIC_IP_VM_A01

# Từ vm-a01, ping private IP của vm-b01 (thay 10.2.1.4 nếu khác)
ping -c 4 10.2.1.4

# Kết quả mong đợi (sau peering):
# PING 10.2.1.4 (10.2.1.4) 56(84) bytes of data.
# 64 bytes from 10.2.1.4: icmp_seq=1 ttl=64 time=1.23 ms
# 64 bytes from 10.2.1.4: icmp_seq=2 ttl=64 time=0.98 ms

Tùy Chọn: Cross-Region Peering (Southeast Asia ↔ East Asia)

Global VNet Peering: Azure hỗ trợ peering giữa VNet ở các region khác nhau (cross-region peering hay global peering). Cú pháp giống hệt same-region, chỉ cần 2 VNet ở khác location. Lưu ý: cross-region peering có chi phí egress bandwidth thấp nhưng có tính phí.
Azure CLI — Cross-region peering (tùy chọn)
# Tạo VNet-C tại East Asia (region khác)
az group create --name rg-lab06-vnet-c --location eastasia

az network vnet create \
  --resource-group rg-lab06-vnet-c \
  --name vnet-c-lab06 \
  --address-prefix 10.3.0.0/16 \
  --subnet-name subnet-c \
  --subnet-prefix 10.3.1.0/24 \
  --location eastasia

# Lấy ID của VNet-C
VNET_C_ID=$(az network vnet show \
  -g rg-lab06-vnet-c -n vnet-c-lab06 \
  --query id -o tsv)

# Peer VNet-A (SEA) → VNet-C (EA) — cross-region
az network vnet peering create \
  --resource-group rg-lab06-vnet-a \
  --name peer-a-to-c \
  --vnet-name vnet-a-lab06 \
  --remote-vnet $VNET_C_ID \
  --allow-vnet-access

# Peer VNet-C (EA) → VNet-A (SEA)
VNET_A_ID=$(az network vnet show \
  -g rg-lab06-vnet-a -n vnet-a-lab06 \
  --query id -o tsv)

az network vnet peering create \
  --resource-group rg-lab06-vnet-c \
  --name peer-c-to-a \
  --vnet-name vnet-c-lab06 \
  --remote-vnet $VNET_A_ID \
  --allow-vnet-access

📊 Kết Quả Đầu Ra Lab 06

Peering status: Connected

Cả 2 peering links (peer-a-to-b và peer-b-to-a) đều ở trạng thái Connected

Ping cross-VNet thành công

vm-a01 ping được 10.2.1.4 (vm-b01) với latency <5ms (same region)

Effective routes cập nhật

NIC của vm-a01 có route 10.2.0.0/16 → VNetPeering tự động

Non-transitive confirmed

VNet-A ↔ B và A ↔ C đã peer, nhưng B không kết nối được C (non-transitive)

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

Azure CLI
# Xóa tất cả resource groups của lab này
az group delete --name rg-lab06-vnet-a --yes --no-wait
az group delete --name rg-lab06-vnet-b --yes --no-wait
# Nếu đã tạo VNet-C (cross-region):
az group delete --name rg-lab06-vnet-c --yes --no-wait

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

1. VNet Peering có phải tạo hai chiều không? Điều gì xảy ra nếu chỉ tạo một chiều?

Gợi ý: Phải tạo 2 links. Nếu chỉ tạo A→B, traffic từ A sang B đi được nhưng B không biết đường về A — không thể giao tiếp 2 chiều.

2. VNet Peering có thể dùng được khi 2 VNet có address space chồng lấp không? Ví dụ VNet-A: 10.0.0.0/16 và VNet-B: 10.0.0.0/24?

Gợi ý: Không thể. Azure từ chối tạo peering khi address space overlapping. Cần plan IP trước.

3. Giải thích "non-transitive routing" trong VNet Peering. Giải pháp nào giúp routing transitive?

Gợi ý: A peer B, B peer C → A không đến C. Giải pháp: Azure Virtual WAN, Hub-Spoke với NVA, hoặc User Defined Routes (UDR) qua NVA.

4. Sự khác nhau giữa "Allow forwarded traffic" và "Allow gateway transit" trong peering settings?

Gợi ý: Forwarded traffic = cho phép traffic từ bên ngoài VNet được forward qua. Gateway transit = cho phép dùng VPN Gateway của VNet kia (dùng trong Hub-Spoke để VNet Spoke không cần Gateway riêng).

5. So sánh VNet Peering với VPN Gateway VNet-to-VNet về latency, cost, và use case?

Gợi ý: Peering — low latency, low cost (same region), nhanh thiết lập, nhưng không mã hóa traffic. VPN GW — encrypted, hỗ trợ on-prem, nhưng latency cao hơn và chi phí Gateway SKU cao.

Lab 05: Virtual Networking Thư viện Labs Lab 07: VPN Point-to-Site
Zalo