全部產品
Search
文件中心

Cloud Enterprise Network:使用企業版轉寄路由器實現流量安全互訪

更新時間:Aug 08, 2026

企業版轉寄路由器提供靈活的路由管理能力,通過企業版轉寄路由器,您可以構建服務鏈結(Service Chaining),將訪問流量引導至安全管控伺服器上進行流量過濾,只允許過濾後的流量相互連信,提高網路的安全性。

情境樣本

本文以同地區網路互連為例,為您介紹如何使用企業版轉寄路由器實現流量安全互訪。某企業在阿里雲華東1(杭州)地區已經部署了3個VPC,其中 VPC-secure 部署有安全管控服務,3個VPC之間互不相通。出於業務發展和網路環境安全性考慮,企業希望 VPC-workload-a 和 VPC-workload-b 之間可以相互連信,且 VPC-workload-a 和 VPC-workload-b 之間的訪問流量,需先經過 VPC-secure 中的安全管控服務過濾後,再進行通訊。

企業可以將要互相通訊的 VPC-workload-a 和 VPC-workload-b 串連至企業版轉寄路由器中,通過在企業版轉寄路由器中自訂路由規則,實現 VPC-workload-a 和 VPC-workload-b 之間安全互訪的需求。

前提條件

  • 在您應用本情境時,需確保安全管控服務所屬的Virtual Private Cloud(Virtual Private Cloud)執行個體所在的地區支援企業版轉寄路由器,以便實現流量安全互訪。企業版轉寄路由器支援的地區和可用性區域,請參見企業版轉寄路由器支援的地區和可用性區域。

  • 您已經在華東1(杭州)地區建立了3個VPC,且3個VPC中均部署有Elastic Compute Service執行個體。具體操作,請參見搭建IPv4專用網路。

    請確保每個VPC在企業版轉寄路由器支援的可用性區域中擁有足夠的交換器執行個體,且每個交換器執行個體擁有至少一個閒置IP地址。

    • 對於企業版轉寄路由器僅支援一個可用性區域的地區(例如華東5(南京-本地地區)地區),VPC執行個體需在當前可用性區域下擁有至少一個交換器執行個體。

    • 對於企業版轉寄路由器支援多個可用性區域的地區(例如華東2(上海)地區),VPC執行個體需在這些可用性區域中擁有至少2個交換器執行個體,2個交換器執行個體需位於不同的可用性區域。

    例如,您在華東1(杭州)地區建立了1個VPC,則該VPC需在可用性區域B和可用性區域C中各擁有至少一個交換器執行個體,且每個交換器執行個體擁有至少一個閒置IP地址。

    說明

    企業版轉寄路由器會在可用性區域的交換器執行個體上建立彈性網卡ENI(Elastic Network Interface),作為VPC向企業版轉寄路由器執行個體發送流量的入口,每個ENI會佔用一個IP地址。

    本樣本中,VPC-secure 中擁有3個交換器執行個體,交換器1 用於部署安全管控服務,交換器2 和交換器3 用於串連企業版轉寄路由器。本樣本3個VPC網路規劃如下表所示,在您規劃網路時請確保要互連的網段沒有重疊。3台ECS的鏡像都選擇Alibaba Cloud Linux。

    VPC

    交換器

    交換器可用性區域

    網段規劃

    ECS地址

    VPC-secure

    網段:10.0.0.0/16

    交換器1

    可用性區域I

    10.0.0.0/24

    ECS-secure: 10.0.0.1

    交換器2

    可用性區域J

    10.0.1.0/24

    交換器3

    可用性區域K

    10.0.2.0/24

    VPC-workload-a

    網段:10.1.0.0/16

    交換器4

    可用性區域I

    10.1.0.0/24

    ECS-workload-a: 10.1.0.1

    交換器5

    可用性區域J

    10.1.1.0/24

    交換器6

    可用性區域K

    10.1.2.0/24

    VPC-workload-b

    網段:10.2.0.0/16

    交換器7

    可用性區域I

    10.2.0.0/24

    ECS-workload-b: 10.2.0.1

    交換器8

    可用性區域J

    10.2.1.0/24

    交換器9

    可用性區域K

    10.2.2.0/24

  • 您已經瞭解 VPC-secure、VPC-workload-a、VPC-workload-b 中的ECS執行個體所應用的安全性群組規則,並確保安全性群組規則允許入方向的ICMP協議。具體操作,請參見查詢安全性群組規則和添加安全性群組規則。

開始配置

本文提供控制台和Terraform兩種配置方式,請按需選擇。

控制台

步驟一:建立雲企業網執行個體

雲企業網執行個體是建立和管理一體化網路的基礎資源,在企業版轉寄路由器串連網路執行個體前,需要先建立一個雲企業網執行個體。

  1. 登入雲企業網管理控制。

  2. 在雲企業網執行個體頁面,單擊建立雲企業網執行個體。

  3. 在建立Cloud Enterprise Network執行個體對話方塊,根據以下資訊進行配置,然後單擊确认。

    • 名稱:輸入雲企業網執行個體的名稱。本文輸入CEN-intra-region-secure-communication。

    • 描述:輸入雲企業網執行個體的描述資訊。

    • 资源组:選擇雲企業網執行個體所屬的資源群組。

      本文不選擇,雲企業網執行個體建立完成後將歸屬於預設資源群組。

    • 標籤:輸入雲企業網執行個體的標籤。本文保持為空白值。

建立完成後,雲企業網執行個體列表包含一個名稱為CEN-intra-region-secure-communication、狀態可用的雲企業網執行個體。

步驟二:建立轉寄路由器執行個體

在企業版轉寄路由器串連網路執行個體前,您需要在雲企業網執行個體中在網路執行個體所屬地區建立轉寄路由器執行個體。

  1. 登入雲企業網管理控制。

  2. 在Cloud Enterprise Network執行個體頁面,選擇在步驟一中建立的雲企業網執行個體,單擊雲企業網執行個體ID。

  3. 在基本資料 > 转发路由器頁簽,單擊创建转发路由器。

  4. 在创建转发路由器對話方塊,配置轉寄路由器執行個體資訊,然後單擊确认。

    配置項

    說明

    配置

    地區

    選擇轉寄路由器執行個體所屬的地區。

    本文選擇华东1(杭州)地區。

    版本

    轉寄路由器執行個體的版本。

    系統自動判斷並顯示當前地區下轉寄路由器執行個體的版本。

    开启组播

    選擇是否開啟轉寄路由器執行個體的組播功能。

    本文保持預設值,即不開啟組播功能。

    名稱

    輸入轉寄路由器執行個體的名稱。

    本文輸入TR-intra-region-secure-communication。

    描述

    輸入轉寄路由器執行個體的描述資訊。

    請自訂轉寄路由器執行個體的描述資訊。

    標籤

    為企業版轉寄路由器執行個體添加標籤。

    本文保持為空白值。

    TR地址段

    輸入轉寄路由器位址區段。

    更多資訊,請參見轉寄路由器位址區段。

    本文不輸入轉寄路由器位址區段。

建立完成後,轉寄路由器列表包含一個名稱為TR-intra-region-secure-communication、地區為華東1(杭州)、狀態可用的企業版轉寄路由器執行個體。

步驟三:串連VPC執行個體

將要互連的網路執行個體,串連至企業版轉寄路由器。

  1. 登入雲企業網管理控制。

  2. 在Cloud Enterprise Network執行個體頁面,找到目標雲企業網執行個體,單擊目標執行個體ID。

  3. 在基本資料 > 转发路由器頁簽,找到目標地區的轉寄路由器執行個體,在操作列單擊创建网络实例连接 > 创建地域内连接。

  4. 在创建地域内连接頁面,根據以下資訊進行配置,然後單擊确定创建。

    下表羅列了各個配置項的說明以及 VPC-secure、VPC-workload-a、VPC-workload-b 對應的參數值,請依據下表中的資料,分別將3個 VPC 串連至企業版轉寄路由器。

    配置項

    配置項說明

    VPC-secure

    VPC-workload-a

    VPC-workload-b

    執行個體類型

    選擇待串連的網路執行個體類型。

    Virtual Private Cloud

    Virtual Private Cloud

    Virtual Private Cloud

    地區

    選擇待串連的網路執行個體所在的地區。

    华东1(杭州)

    华东1(杭州)

    华东1(杭州)

    转发路由器

    系統自動顯示在該地區已建立的轉寄路由器執行個體。

    资源归属UID

    選擇待串連的網路執行個體所屬的帳號類型。

    同账号

    同账号

    同账号

    付费方式

    預設值按量付费。

    连接名称

    輸入網路執行個體串連的名稱。

    attachment-secure

    attachment-workload-a

    attachment-workload-b

    標籤

    為網路執行個體串連添加標籤。

    本文保持為空白值。

    本文保持為空白值。

    本文保持為空白值。

    網路執行個體

    選擇待串連的網路執行個體。

    選擇VPC-secure

    選擇VPC-workload-a

    選擇VPC-workload-b

    交换机

    在轉寄路由器支援的可用性區域選擇一個交換器執行個體。

    如果您在轉寄路由器支援的多個可用性區域均擁有交換器執行個體,您可以同時選擇多個可用性區域並在每個可用性區域下選擇一個交換器執行個體以實現可用性區域層級的容災。

    • 杭州 可用性區域J:選擇交換器2

    • 杭州 可用性區域K:選擇交換器3

    • 杭州 可用性區域I:選擇交換器4

    • 杭州 可用性區域J:選擇交換器5

    • 杭州 可用性區域I:選擇交換器7

    • 杭州 可用性區域J:選擇交換器8

    高级配置

    VPC-secure、VPC-workload-a、VPC-workload-b 均關閉以下三項進階配置。

    • 自动关联至转发路由器的默认路由表

    • 自动传播系统路由至转发路由器的默认路由表

    • 自动为VPC的所有路由表配置指向转发路由器的路由

    說明

    開啟進階配置後,VPC-secure、VPC-workload-a 和 VPC-workload-b 將會自動學習到對方的路由,實現相互連信,但無法達到流量安全互訪的目的。因此,本樣本不啟用VPC的進階配置,後續步驟通過手動建立路由表、添加路由條目等方式,自訂網路執行個體的連通性,以實現流量的安全互訪。

建立完成後,地區內串連管理頁簽包含 3 條 VPC 串連,資訊如下:

名稱

包含網路執行個體

串連詳情-交換器

attachment-secure

VPC-secure

交換器2

交換器3

attachment-workload-a

VPC-workload-a

交換器4

交換器5

attachment-workload-b

VPC-workload-a

交換器7

交換器8

步驟四:為VPC執行個體添加路由條目

在 VPC-secure、VPC-workload-a 和 VPC-workload-b 中添加路由條目,引導VPC的流量進入企業版轉寄路由器,在企業版轉寄路由器中引導和管理流量實現流量的安全互訪。

  1. 配置VPC-secure中的路由表:

    1. 在 VPC-secure 中,建立2張自訂路由表,綁定物件類型為交換器,分別命名為routetable_secure-to-workload、routetable_workload-to-secure。

    2. 將routetable_secure-to-workload綁定交換器1,並添加路由條目:

      • 目標網段:輸入0.0.0.0/0。

      • 下一跳類型:選擇轉寄路由器。

      • 轉寄路由器:選擇attachment-secure。

    3. 將routetable_workload-to-secure綁定交換器2和交換器3,並添加路由條目:

      • 目標網段:輸入0.0.0.0/0。

      • 下一跳類型:選擇ECS執行個體。

      • ECS執行個體:選擇ECS-secure(安全管控執行個體)。

  2. 在 VPC-workload-a 和 VPC-workload-b 的系統路由表中,均添加如下路由條目,使VPC-workload-a 和 VPC-workload-b 的互訪流量引導至轉寄路由器:

    • 目標網段:輸入0.0.0.0/0。

    • 下一跳類型:選擇轉寄路由器。

    • 轉寄路由器:配置 VPC-workload-a 系統路由表時,選擇attachment-workload-a;配置 VPC-workload-b 系統路由表時,選擇attachment-workload-b。

建立完成後,各個VPC中新添加的路由條目的資訊如下表所示:

網路執行個體

交換器

交換器綁定的路由表

路由條目

下一跳

VPC-secure

交換器1

routetable_secure-to-workload

0.0.0.0/0

attachment-secure(轉寄路由器)

交換器2

routetable_workload-to-secure

0.0.0.0/0

ECS-secure

交換器3

VPC-workload-a

  • 交換器4

  • 交換器5

  • 交換器6

系統路由表

0.0.0.0/0

attachment-workload-a(轉寄路由器)

VPC-workload-b

  • 交換器7

  • 交換器8

  • 交換器9

系統路由表

0.0.0.0/0

attachment-workload-b(轉寄路由器)

步驟五:在轉寄路由器中配置路由

VPC的流量進入企業版轉寄路由器後,在企業版轉寄路由器通過建立路由表、添加路由條目等方式自訂連通性,引導 VPC-workload-a 和 VPC-workload-b 的流量進入VPC-secure,並將經過 VPC-secure 過濾後的流量引導至目的地。

  1. 登入雲企業網管理控制。

  2. 在Cloud Enterprise Network執行個體頁面,單擊目標執行個體ID。

  3. 在基本資料 > 转发路由器頁簽,找到目標地區的轉寄路由器執行個體,單擊目標執行個體ID。

  4. 在转发路由器路由表頁簽下,為企業版轉寄路由器建立兩張自訂路由表,分別命令為 TR_routetable_workload-to-secure 和 TR_routetable_secure-to-workload。具體操作,請參見自訂路由表。

  5. 將attachment-workload-a和attachment-workload-b關聯至企業版轉寄路由器的自訂路由表並為其配置路由條目。

    1. 在转发路由器路由表頁簽下,選擇自訂路由表 TR_routetable_workload-to-secure,單擊关联转发頁簽,然後單擊创建关联转发。

    2. 在添加关联转发對話方塊,選擇要關聯至該自訂路由表的網路執行個體串連,然後單擊確定。

      本樣本中,請將attachment-workload-a和attachment-workload-b串連關聯至該自訂路由表。

    3. 保持在該路由表詳情頁面,單擊路由条目頁簽,然後單擊创建路由条目。

    4. 在添加路由条目對話方塊,根據以下資訊進行配置,然後單擊確定。

      • 目的地址CIDR:本樣本輸入0.0.0.0/0。

      • 是否为黑洞路由:如果選擇路由為黑洞路由後,所有去往該路由的流量均會被丟棄。本樣本選擇否。

      • 下一跳连接:本樣本選擇attachment-secure。

      更多資訊,請參見自訂路由條目。

    完成上述操作後,VPC-workload-a 和 VPC-workload-b 的所有訪問流量將被轉寄到 VPC-secure。

  6. 為 VPC-secure 關聯自訂路由表並配置路由條目。

    1. 在转发路由器路由表頁簽下,選擇自訂路由表 TR_routetable_secure-to-workload,單擊关联转发頁簽,然後單擊创建关联转发。

    2. 在添加关联转发對話方塊,選擇要關聯至該自訂路由表的網路執行個體串連,然後單擊確定。

      本樣本中,請將attachment-secure關聯至該自訂路由表。

    3. 保持在該路由表詳情頁面,單擊路由学习頁簽,然後單擊创建路由学习。

    4. 在添加路由学习對話方塊,選擇該路由表要學習其路由的網路執行個體串連,然後單擊確定。

      本樣本中,关联连接選擇attachment-workload-a和attachment-workload-b。關聯後,該路由表將能學習到 VPC-workload-a 和 VPC-workload-b 的路由。VPC-secure 通過查詢該路由表和 VPC-workload-a 及 VPC-workload-b 互連。

    建立完成後,企業版轉寄路由器的路由條目資訊如下表所示:

    路由表名稱

    目標網段

    下一跳

    TR_routetable_workload-to-secure

    0.0.0.0/0

    attachment-secure

    TR_routetable_secure-to-workload

    10.1.0.0/24

    attachment-workload-a

    10.1.1.0/24

    attachment-workload-a

    10.1.2.0/24

    attachment-workload-a

    10.2.0.0/24

    attachment-workload-b

    10.2.1.0/24

    attachment-workload-b

    10.2.2.0/24

    attachment-workload-b

步驟六:測實驗證

完成上述操作後,VPC-secure、VPC-workload-a 和 VPC-workload-b 之間已可以按照期望的路徑進行安全互訪,以下內容為您介紹如何測試 VPC 執行個體之間的流量路徑。

  1. 登入ECS-secure,執行以下命令啟用允許轉寄。關於如何登入ECS執行個體,請參見選擇ECS遠端連線方式。

    說明

    在不設定允許轉寄的情況下,VPC-workload-a 和 VPC-secure 之間、VPC-workload-b 和 VPC-secure 之間可以互相訪問,但 VPC-workload-a和 VPC-workload-b 之間無法互訪。

    echo 1 > /proc/sys/net/ipv4/ip_forward   #啟用允許轉寄。當前命令臨時生效,重啟後會丟失。
  2. 登入 ECS-workload-a,在 ECS-workload-a 上安裝mtr軟體。mtr是一種結合了 Ping 和 Traceroute 功能的網路診斷工具,用於即時分析網路路徑的延遲和資料包丟失,在本文中可以協助我們識別流量路徑。

    yum install -y mtr
  3. 在 ECS-workload-a 執行mtr命令,測試 ECS-workload-a 到 ECS-workload-b 的流量路徑:

    mtr 10.2.0.1 -i 5

    參數說明:-i 5指的是每5秒發送一次ping請求。

    My traceroute  [v0.92]
    iZxxxvZ (10.1.0.1)                              2024-12-04T20:40:46+0800
    Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                           Packets               Pings
     Host                                Loss%   Snt   Last   Avg  Best  Wrst StDev
     1. 10.0.0.1                          0.0%     9    3.8   3.8   3.8   4.1   0.1
     2. 10.0.0.1                          0.0%     9    5.0   4.0   3.8   5.0   0.4
     3. 10.2.0.1                          0.0%     9    8.2   8.3   8.2   8.6   0.1

    命令執行結果顯示,從 ECS-workload-a 發往 ECS-workload-b 的報文,經過了10.0.0.1(ECS-secure)轉寄,表明 VPC-workload-a 和 VPC-workload-b 之間互訪的流量已經繞行 ECS-secure(安全ECS)。

Terraform

您可以使用Terraform搭建本文樣本環境,關於Terraform的安裝和配置,請參考Install Terraform。

下面步驟以Linux主機運行Terraform v1.9.8為例進行介紹,操作前請確保您已經完成Authentication。

說明

本教程樣本包含的部分資源會產生一定費用,請在不需要時及時進行釋放或退訂。

第一步:建立資源

本文情境對應的Terraform代碼如下:

variable "pname" {
  description = "The prefix name for the resources"
  type        = string
  default     = "tf-CenSec"
}
variable "default_region" {
  description = "Default region"
  type        = string
  default     = "cn-hangzhou"
}
variable "az" {
  description = "List of availability zones to use"
  type        = list(string)
  default     = ["cn-hangzhou-i", "cn-hangzhou-j", "cn-hangzhou-k"]
}
variable "vpc_count" {
  description = "Number of VPCs to create"
  type        = number
  default     = 3
}
provider "alicloud" {
  region = var.default_region
}
# vpc
resource "alicloud_vpc" "main" {
  count      = var.vpc_count
  vpc_name   = "${var.pname}-vpc${count.index + 1}"
  cidr_block = "10.${count.index}.0.0/16"
}
# vsw
resource "alicloud_vswitch" "main" {
  count        = var.vpc_count * length(var.az)
  vpc_id       = alicloud_vpc.main[floor(count.index / length(var.az))].id
  cidr_block   = "10.${floor(count.index / length(var.az))}.${count.index % length(var.az)}.0/24"
  zone_id      = var.az[count.index % length(var.az)]
  vswitch_name = "${var.pname}-vsw${count.index + 1}"
}
# ecs
resource "alicloud_instance" "main" {
  count                = var.vpc_count
  instance_name        = "${var.pname}-ecs${count.index + 1}"
  instance_type        = "ecs.e-c1m1.large"
  security_groups      = [alicloud_security_group.main[count.index].id]
  vswitch_id           = alicloud_vswitch.main[count.index * length(var.az)].id
  image_id             = "aliyun_3_x64_20G_qboot_alibase_20230727.vhd"
  system_disk_category = "cloud_essd"
  private_ip           = "10.${count.index}.0.1"
  instance_charge_type = "PostPaid"
  user_data = base64encode(<<-EOT
    #!/bin/bash
    ${count.index == 0 ? "echo 1 > /proc/sys/net/ipv4/ip_forward" : ""} 
    yum install -y traceroute
    yum install -y mtr
  EOT
  ) # ecs1 enable ip_forward
}
# sg
resource "alicloud_security_group" "main" {
  count               = var.vpc_count
  security_group_name = "${var.pname}-${count.index + 1}"
  vpc_id              = alicloud_vpc.main[count.index].id
}
resource "alicloud_security_group_rule" "allow_inbound_ssh" {
  count             = var.vpc_count
  type              = "ingress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "22/22"
  priority          = 1
  security_group_id = alicloud_security_group.main[count.index].id
  cidr_ip           = "0.0.0.0/0"
}
resource "alicloud_security_group_rule" "allow_inbound_icmp" {
  count             = var.vpc_count
  type              = "ingress"
  ip_protocol       = "icmp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "-1/-1"
  priority          = 1
  security_group_id = alicloud_security_group.main[count.index].id
  cidr_ip           = "0.0.0.0/0"
}
resource "alicloud_security_group_rule" "allow_all_outbound" {
  count             = var.vpc_count
  type              = "egress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "1/65535"
  priority          = 1
  security_group_id = alicloud_security_group.main[count.index].id
  cidr_ip           = "0.0.0.0/0"
}
# cen
resource "alicloud_cen_instance" "cen1" {
  cen_instance_name = var.pname
}
# tr
resource "alicloud_cen_transit_router" "tr1" {
  transit_router_name = var.pname
  cen_id              = alicloud_cen_instance.cen1.id
}
# attach1  to vsw2 vsw3 in vpc1
resource "alicloud_cen_transit_router_vpc_attachment" "attach1" {
  cen_id            = alicloud_cen_instance.cen1.id
  transit_router_id = alicloud_cen_transit_router.tr1.transit_router_id
  vpc_id            = alicloud_vpc.main[0].id
  zone_mappings {
    zone_id    = var.az[1]
    vswitch_id = alicloud_vswitch.main[1].id # vsw2, vpc1-2
  }
  zone_mappings {
    zone_id    = var.az[2]
    vswitch_id = alicloud_vswitch.main[2].id # vsw3, vpc1-3
  }
  transit_router_vpc_attachment_name = "attach1"
}
# attach2 to vsw1 vsw2 in vpc2
resource "alicloud_cen_transit_router_vpc_attachment" "attach2" {
  cen_id            = alicloud_cen_instance.cen1.id
  transit_router_id = alicloud_cen_transit_router.tr1.transit_router_id
  vpc_id            = alicloud_vpc.main[1].id
  zone_mappings {
    zone_id    = var.az[0]
    vswitch_id = alicloud_vswitch.main[3].id # vsw4, vpc2-1
  }
  zone_mappings {
    zone_id    = var.az[1]
    vswitch_id = alicloud_vswitch.main[4].id # vsw5, vpc2-2
  }
  transit_router_vpc_attachment_name = "attach2"
}
# attach3 to vsw1 vsw2 in vpc3
resource "alicloud_cen_transit_router_vpc_attachment" "attach3" {
  cen_id            = alicloud_cen_instance.cen1.id
  transit_router_id = alicloud_cen_transit_router.tr1.transit_router_id
  vpc_id            = alicloud_vpc.main[2].id
  zone_mappings {
    zone_id    = var.az[0]
    vswitch_id = alicloud_vswitch.main[6].id # vsw6, vpc3-1
  }
  zone_mappings {
    zone_id    = var.az[1]
    vswitch_id = alicloud_vswitch.main[7].id # vsw7, vpc3-2
  }
  transit_router_vpc_attachment_name = "attach3"
}
# 2 rt for vpc1
resource "alicloud_route_table" "rt" {
  count            = 2
  vpc_id           = alicloud_vpc.main[0].id
  route_table_name = "${var.pname}-rt${count.index}"
  associate_type   = "VSwitch"
}
# 2 rt attach, rt1 to vsw1, rt2 to vsw2、vsw3
locals {
  # rt and vsw map
  rt_attachments = {
    "rt1_vsw1" = {
      route_table_index = 0
      vswitch_index     = 0
    }
    "rt2_vsw2" = {
      route_table_index = 1
      vswitch_index     = 1
    }
    "rt2_vsw3" = {
      route_table_index = 1
      vswitch_index     = 2
    }
  }
}
resource "alicloud_route_table_attachment" "rt_attach" {
  for_each = local.rt_attachments
  vswitch_id     = alicloud_vswitch.main[each.value.vswitch_index].id
  route_table_id = alicloud_route_table.rt[each.value.route_table_index].id
}
# rt entry, vpc1
resource "alicloud_route_entry" "rt-entry1" { # nexthop tr
  route_table_id        = alicloud_route_table.rt[0].id
  destination_cidrblock = "0.0.0.0/0"
  nexthop_type          = "Attachment"
  nexthop_id            = alicloud_cen_transit_router_vpc_attachment.attach1.transit_router_attachment_id
}
resource "alicloud_route_entry" "rt-entry2" { # nexthop ecs1
  route_table_id        = alicloud_route_table.rt[1].id
  destination_cidrblock = "0.0.0.0/0"
  nexthop_type          = "Instance"
  nexthop_id            = alicloud_instance.main[0].id # ecs1
}
# rt entry, vpc2 vpc3
resource "alicloud_route_entry" "rt-entry4" {
  route_table_id        = alicloud_vpc.main[1].route_table_id
  destination_cidrblock = "0.0.0.0/0"
  nexthop_type          = "Attachment"
  nexthop_id            = alicloud_cen_transit_router_vpc_attachment.attach2.transit_router_attachment_id
}
resource "alicloud_route_entry" "rt-entry5" {
  route_table_id        = alicloud_vpc.main[2].route_table_id
  destination_cidrblock = "0.0.0.0/0"
  nexthop_type          = "Attachment"
  nexthop_id            = alicloud_cen_transit_router_vpc_attachment.attach3.transit_router_attachment_id
}
# new 2 tr_rt
resource "alicloud_cen_transit_router_route_table" "tr_rt1" {
  transit_router_id               = alicloud_cen_transit_router.tr1.transit_router_id
  transit_router_route_table_name = "tr_rt1"
}
resource "alicloud_cen_transit_router_route_table" "tr_rt2" {
  transit_router_id               = alicloud_cen_transit_router.tr1.transit_router_id
  transit_router_route_table_name = "tr_rt2"
}
# ass rt1 attach2 3
resource "alicloud_cen_transit_router_route_table_association" "ass1" {
  transit_router_route_table_id = alicloud_cen_transit_router_route_table.tr_rt1.transit_router_route_table_id
  transit_router_attachment_id  = alicloud_cen_transit_router_vpc_attachment.attach2.transit_router_attachment_id
}
resource "alicloud_cen_transit_router_route_table_association" "ass2" {
  transit_router_route_table_id = alicloud_cen_transit_router_route_table.tr_rt1.transit_router_route_table_id
  transit_router_attachment_id  = alicloud_cen_transit_router_vpc_attachment.attach3.transit_router_attachment_id
}
# ass rt2 attach1
resource "alicloud_cen_transit_router_route_table_association" "ass3" {
  transit_router_route_table_id = alicloud_cen_transit_router_route_table.tr_rt2.transit_router_route_table_id
  transit_router_attachment_id  = alicloud_cen_transit_router_vpc_attachment.attach1.transit_router_attachment_id
}
# tr_rt_entry
resource "alicloud_cen_transit_router_route_entry" "tr_rt1_entry1" {
  transit_router_route_table_id                     = alicloud_cen_transit_router_route_table.tr_rt1.transit_router_route_table_id
  transit_router_route_entry_destination_cidr_block = "0.0.0.0/0"
  transit_router_route_entry_next_hop_type          = "Attachment"
  transit_router_route_entry_next_hop_id            = alicloud_cen_transit_router_vpc_attachment.attach1.transit_router_attachment_id
}
resource "alicloud_cen_transit_router_route_entry" "tr_rt2_entry1" {
  transit_router_route_table_id                     = alicloud_cen_transit_router_route_table.tr_rt2.transit_router_route_table_id
  transit_router_route_entry_destination_cidr_block = "10.1.0.0/16"
  transit_router_route_entry_next_hop_type          = "Attachment"
  transit_router_route_entry_next_hop_id            = alicloud_cen_transit_router_vpc_attachment.attach2.transit_router_attachment_id
}
resource "alicloud_cen_transit_router_route_entry" "tr_rt2_entry2" {
  transit_router_route_table_id                     = alicloud_cen_transit_router_route_table.tr_rt2.transit_router_route_table_id
  transit_router_route_entry_destination_cidr_block = "10.2.0.0/16"
  transit_router_route_entry_next_hop_type          = "Attachment"
  transit_router_route_entry_next_hop_id            = alicloud_cen_transit_router_vpc_attachment.attach3.transit_router_attachment_id
}
output "ecs1_login_address" {
  value = "https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs&regionId=${var.default_region}&instanceId=${alicloud_instance.main[0].id}"
}
output "ecs2_login_address" {
  value = "https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs&regionId=${var.default_region}&instanceId=${alicloud_instance.main[1].id}"
}
output "ecs3_login_address" {
  value = "https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs&regionId=${var.default_region}&instanceId=${alicloud_instance.main[2].id}"
}

第二步:驗證測試

  1. 登入ECS2執行個體(名稱為tf-CenSec-ecs2):

    您可以在Terraform的Outputs輸出中,找到ECS2的登入地址並複製到瀏覽器開啟,登入時注意認證方式選擇臨時SSH密鑰認證。

    Terraform 執行完成後,輸出樣本如下,其中 ecs2_login_address 即為 ECS2 的登入地址。

    Outputs:
    ecs1_login_address = "https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs&regionId=cn-hangzhou&instanceId=i-bp1xxx"
    ecs2_login_address = "https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs&regionId=cn-hangzhou&instanceId=i-bp1xxx"
    ecs3_login_address = "https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs&regionId=cn-hangzhou&instanceId=i-bp1xxx"
  2. 在ECS2執行mtr命令,測試ECS2到ECS3的流量路徑:

    mtr 10.2.0.1 -i 5

    參數說明:-i 5指的是每5秒發送一次ping請求。

    My traceroute  [v0.92]
    iZbp1xxx (10.1.0.1)                          2024-12-04T20:40:46+0800
    Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                             Packets               Pings
     Host                                  Loss%   Snt   Last   Avg  Best  Wrst StDev
     1. 10.0.0.1                            0.0%     9    3.8   3.8   3.8   4.1   0.1
     2. 10.0.0.1                            0.0%     9    5.0   4.0   3.8   5.0   0.4
     3. 10.2.0.1                            0.0%     9    8.2   8.3   8.2   8.6   0.1

    結果顯示,從ECS2發往ECS3的報文,經過了10.0.0.1(ECS1)轉寄,表明VPC2和VPC3之間互訪的流量已經繞行ECS1(安全ECS)。

第三步:釋放資源

驗證完畢後,如果您不再使用資源,請執行以下命令釋放資源,防止繼續計費。

terraform destroy --auto-approve