全部產品
Search
文件中心

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

更新時間:Jun 17, 2026

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

情境樣本

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

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

前提條件

  • 在您應用本情境時,需確保安全管控服務所屬的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地址。

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

    VPC

    交換器

    交換器可用性區域

    網段規劃

    ECS地址

    VPC1

    網段:10.0.0.0/16

    交換器1

    可用性區域I

    10.0.0.0/24

    ECS1: 10.0.0.1

    交換器2

    可用性區域J

    10.0.1.0/24

    交換器3

    可用性區域K

    10.0.2.0/24

    VPC2

    網段:10.1.0.0/16

    交換器4

    可用性區域I

    10.1.0.0/24

    ECS2: 10.1.0.1

    交換器5

    可用性區域J

    10.1.1.0/24

    交換器6

    可用性區域K

    10.1.2.0/24

    VPC3

    網段:10.2.0.0/16

    交換器7

    可用性區域I

    10.2.0.0/24

    ECS3: 10.2.0.1

    交換器8

    可用性區域J

    10.2.1.0/24

    交換器9

    可用性區域K

    10.2.2.0/24

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

開始配置

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

控制台

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

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

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

  2. Cloud Enterprise Network頁面,單擊建立Cloud Enterprise Network執行個體

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

    • 名稱:輸入雲企業網執行個體的名稱。

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

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

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

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

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

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

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

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

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

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

    配置項

    說明

    配置

    地區

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

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

    版本

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

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

    开启组播

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

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

    名稱

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

    請自訂轉寄路由器執行個體的名稱。

    描述

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

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

    標籤

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

    本文保持為空白值。

    TR地址段

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

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

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

步驟三:串連VPC執行個體

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

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

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

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

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

    下表羅列了各個配置項的說明以及VPC1、VPC2、VPC3對應的參數值,請依據下表中的資料,分別將VPC1、VPC2、attach3至企業版轉寄路由器。

    配置項

    配置項說明

    VPC1

    VPC2

    VPC3

    執行個體類型

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

    Virtual Private Cloud

    Virtual Private Cloud

    Virtual Private Cloud

    地區

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

    华东1(杭州)

    华东1(杭州)

    华东1(杭州)

    转发路由器

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

    资源归属UID

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

    同账号

    同账号

    同账号

    付费方式

    預設值按量付费

    连接名称

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

    attach1

    attach2

    attach3

    標籤

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

    本文保持為空白值。

    本文保持為空白值。

    本文保持為空白值。

    網路執行個體

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

    選擇VPC1

    選擇VPC2

    選擇VPC3

    交换机

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

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

    • 華東1(杭州)可用性區域J:選擇交換器2

    • 華東1(杭州)可用性區域K:選擇交換器3

    • 華東1(杭州)可用性區域I:選擇交換器4

    • 華東1(杭州)可用性區域J:選擇交換器5

    • 華東1(杭州)可用性區域I:選擇交換器7

    • 華東1(杭州)可用性區域J:選擇交換器8

    高级配置

    VPC1、VPC2、VPC3均關閉以下三項進階配置。

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

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

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

    說明

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

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

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

  1. 配置VPC1中的路由表:

    1. 在VPC1中,建立2張自訂路由表綁定物件類型交換器,分別命名為routetable1、routetable2。

    2. 將routetable1綁定交換器1,並添加路由條目

      • 目標網段:輸入0.0.0.0/0

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

      • 轉寄路由器:選擇attach1

    3. 將routetable2綁定交換器2和交換器3,並添加路由條目:

      • 目標網段:輸入0.0.0.0/0

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

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

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

    • 目標網段:輸入0.0.0.0/0

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

    • 轉寄路由器:配置VPC2系統路由表時,選擇attach2;配置VPC3系統路由表時,選擇attach3

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

網路執行個體

交換器

交換器綁定的路由表

路由條目

下一跳

VPC1

交換器1

routetable1

0.0.0.0/0

attach1(轉寄路由器)

交換器2

routetable2

0.0.0.0/0

ECS1

交換器3

VPC2

  • 交換器1

  • 交換器2

  • 交換器3

系統路由表

0.0.0.0/0

attach2(轉寄路由器)

VPC3

  • 交換器1

  • 交換器2

  • 交換器3

系統路由表

0.0.0.0/0

attach3(轉寄路由器)

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

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

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

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

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

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

  5. attach2attach3關聯至企業版轉寄路由器的自訂路由表並為其配置路由條目。

    1. 转发路由器路由表頁簽下,選擇自訂路由表TR_routetable1,單擊关联转发頁簽,然後單擊创建关联转发

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

      本樣本中,請將attach2VPC3串連關聯至該自訂路由表。

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

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

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

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

      • 下一跳连接:本樣本選擇attach1

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

    完成上述操作後,VPC2和VPC3的所有訪問流量將被轉寄到VPC1。

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

    1. 转发路由器路由表頁簽下,選擇自訂路由表TR_routetable2,單擊关联转发頁簽,然後單擊创建关联转发

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

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

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

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

      本樣本中,关联连接選擇attach2attach3。關聯後,該路由表將能學習到VPC2和VPC3的路由。VPC1通過查詢該路由表和VPC2及VPC3互連。

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

    路由表名稱

    目標網段

    下一跳

    TR_routetable1

    0.0.0.0/0

    attach1

    TR_routetable2

    10.1.0.0/16

    attach2

    10.2.0.0/16

    attach3

步驟六:測實驗證

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

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

    說明

    在不設定允許轉寄的情況下,VPC2和VPC1之間、VPC3和VPC1之間可以互相訪問,但VPC2和VPC3之間無法互訪。

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

    yum install -y mtr
  3. 在ECS2執行mtr命令,測試ECS2到ECS3的流量路徑:

    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

    命令執行結果顯示,從ECS2發往ECS3的報文,經過了10.0.0.1(ECS1)轉寄,表明VPC2和VPC3之間互訪的流量已經繞行ECS1(安全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