本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

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

更新時間:2025-02-27 02:17

企業版轉寄路由器提供靈活的路由管理能力,通過企業版轉寄路由器您可以將訪問流量引導至安全管控伺服器上進行流量過濾,只允許過濾後的流量相互連信,提高網路的安全性。本文為您介紹如何通過企業版轉寄路由器實現流量安全互訪。

說明

本教程所含範例程式碼支援一鍵運行,您可以直接運行代碼。一鍵運行

情境樣本

本文以同地區網路互連為例,為您介紹如何使用企業版轉寄路由器實現流量安全互訪。某企業在阿里雲華東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地址

    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兩種配置方式,請按需選擇。

控制台
Terraform

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

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

  1. 登入雲企業網管理主控台
  2. 雲企業網執行個體頁面,單擊建立雲企業網執行個體

  3. 创建云企业网实例對話方塊,根據以下資訊進行配置,然後單擊确认

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

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

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

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

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

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

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

  1. 登入雲企業網管理主控台
  2. 云企业网实例頁面,選擇在步驟一中建立的雲企業網執行個體,單擊雲企業網執行個體ID。

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

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

    配置項

    說明

    配置

    地域

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

    本文選擇華東1(杭州)地區。

    版本

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

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

    開通組播

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

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

    名称

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

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

    描述

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

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

    标签

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

    本文保持為空白值。

    TR地址段

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

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

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

步驟三:串連VPC執行個體

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

  1. 登入雲企業網管理主控台
  2. 云企业网实例頁面,找到目標雲企業網執行個體,單擊目標執行個體ID。
  3. 基本信息 > 转发路由器頁簽,找到目標地區的轉寄路由器執行個體,在操作單擊创建网络实例连接
  4. 连接网络实例頁面,根據以下資訊進行配置,然後單擊确定创建

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

    配置項

    配置項說明

    VPC1

    VPC2

    VPC3

    实例类型

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

    Virtual Private Cloud

    Virtual Private Cloud

    Virtual Private Cloud

    地域

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

    華東1(杭州)

    華東1(杭州)

    華東1(杭州)

    转发路由器

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

    资源归属UID

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

    同帳號

    同帳號

    同帳號

    付费方式

    預設值隨用隨付

    连接名称

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

    VPC1串連

    VPC2串連

    VPC3串連

    标签

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

    本文保持為空白值。

    本文保持為空白值。

    本文保持為空白值。

    网络实例

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

    選擇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. 登入專用網路管理主控台
  2. 在頂部功能表列,選擇路由表所屬的地區。

  3. 為VPC2和VPC3添加自訂路由條目。

    分別在VPC2和VPC3的系統路由表中添加目標網段為0.0.0.0/0,下一跳為轉寄路由器的路由條目,使VPC2和VPC3的訪問流量均被轉寄至企業版轉寄路由器。

    1. 在左側導覽列,單擊路由表

    2. 路由表頁面,找到目標路由表,單擊路由表執行個體ID。

      本樣本找到VPC2的系統路由表。

    3. 路由條目列表頁簽下單擊自訂路由條目頁簽,然後單擊添加路由條目

    4. 添加路由條目面板,配置以下資訊,然後單擊確定

      • 名稱:輸入自訂路由條目的名稱。

      • 目標網段:本樣本輸入0.0.0.0/0

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

      • 轉寄路由器:本樣本選擇VPC2關聯的轉寄路由器執行個體。

    5. 請重複上述步驟,在VPC3的系統路由表中添加相同的路由條目,配置資訊如下。

      • 目標網段:本樣本輸入0.0.0.0/0

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

      • 轉寄路由器:本樣本選擇VPC3關聯的轉寄路由器執行個體。

  4. 為VPC1建立三張自訂路由表,分別命名為routetable1、routetable2和routetable3。具體操作,請參見建立自訂路由表

  5. 綁定交換器和自訂路由表。具體操作,請參見綁定交換器和路由表

    在本樣本中,將VPC1中的交換器1綁定路由表routetable1、交換器2綁定路由表routetable2、交換器3綁定路由表routetable3。

  6. 在VPC1的自訂路由表中添加路由條目。

    1. 路由表頁面,選擇已建立的一張路由表,單擊路由表執行個體ID。

      本樣本選擇與交換器1綁定的自訂路由表routetable1。

    2. 路由條目列表頁簽下單擊自訂路由條目頁簽,然後單擊添加路由條目

    3. 添加路由條目面板,配置以下資訊,然後單擊確定

      • 名稱:輸入自訂路由條目的名稱。

      • 資源群組:本樣本選擇全部資源群組

      • 目標網段:本樣本輸入0.0.0.0/0

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

      • ECS執行個體:本樣本選擇VPC1中交換器3下的安全管控ECS執行個體。

    4. 請重複上述步驟和配置,在交換器2的自訂路由表routetable2中添加相同的路由條目。

    5. 請重複上述步驟,在交換器3的自訂路由表routetable3中添加路由條目,其中交換器3的路由條目資訊如下:

      • 目標網段:本樣本輸入0.0.0.0/0

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

      • 轉寄路由器:本樣本選擇VPC1關聯的轉寄路由器執行個體。

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

    網路執行個體

    路由表名稱

    路由表關聯的交換器

    路由條目

    下一跳

    VPC1

    routetable1

    交換器1

    0.0.0.0/0

    VPC1關聯的轉寄路由器執行個體

    routetable2

    交換器2

    0.0.0.0/0

    交換器1中的ECS執行個體

    routetable3

    交換器3

    0.0.0.0/0

    交換器1中的ECS執行個體

    VPC2

    系統路由表

    • 交換器1

    • 交換器2

    • 交換器3

    0.0.0.0/0

    VPC2關聯的轉寄路由器執行個體

    VPC3

    系統路由表

    • 交換器1

    • 交換器2

    • 交換器3

    0.0.0.0/0

    VPC3關聯的轉寄路由器執行個體

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

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

  1. 登入雲企業網管理主控台
  2. 雲企業網執行個體頁面,單擊目標執行個體ID。

  3. 基本信息 > 转发路由器頁簽,找到目標地區的轉寄路由器執行個體,單擊目標執行個體ID。
  4. 转发路由器路由表頁簽下,為企業版轉寄路由器建立兩張自訂路由表,分別命令為TR_routetable1和TR_routetable2。具體操作,請參見自訂路由表

  5. 將VPC2串連和VPC3串連關聯至企業版轉寄路由器的自訂路由表並為其配置路由條目。

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

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

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

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

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

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

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

      • 下一跳串連:本樣本選擇VPC1串連。

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

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

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

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

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

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

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

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

      本樣本中,請將VPC2串連和VPC3串連關聯至該路由表。關聯後,該路由表將能學習到VPC2和VPC3的路由。VPC1通過查詢該路由表和VPC2及VPC3互連。

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

    路由表名稱

    目標網段

    下一跳

    TR_routetable1

    0.0.0.0/0

    VPC1串連

    TR_routetable2

    10.1.0.0/16

    VPC2串連

    10.2.0.0/16

    VPC3串連

步驟六:測實驗證

完成上述操作後,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請求。

    image

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

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

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

說明

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

第一步:建立資源

  1. 為本文的實踐情境建立一個目錄,並進入該目錄。

    mkdir tf-CenSec && cd tf-CenSec
  2. 建立一個main.tf檔案,用於定義資源資訊。

    touch main.tf
  3. 開啟main.tf檔案,複製如下代碼,粘貼到檔案中並儲存。此檔案包含了本文實踐情境中需要用到的資源和對應配置。

    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
      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"
    }
    
    # 3 rt for vpc1
    resource "alicloud_route_table" "rt" {
      count            = 3
      vpc_id           = alicloud_vpc.main[0].id
      route_table_name = "${var.pname}-rt${count.index}"
      associate_type   = "VSwitch"
    }
    
    # 3 rt attach to vsw1 2 3  
    resource "alicloud_route_table_attachment" "rt_attach" {
      count          = 3
      vswitch_id     = alicloud_vswitch.main[count.index].id
      route_table_id = alicloud_route_table.rt[count.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
    }
    resource "alicloud_route_entry" "rt-entry3" { # nexthop ecs1
      route_table_id        = alicloud_route_table.rt[2].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}"
    }
  4. 初始化目錄,完成Terraform的初始化配置。

    terraform init
  5. 建立資源。執行後Terraform會先預覽將要建立的資源,確認無誤後,輸入yes正式開始建立。

    terraform apply

第二步:驗證測試

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

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

    image

  2. 在ECS2執行mtr命令,測試ECS2到ECS3的流量路徑:

    mtr 10.2.0.1 -i 5

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

    image

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

第三步:釋放資源

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

terraform destroy --auto-approve

  • 本頁導讀 (1, M)
  • 情境樣本
  • 前提條件
  • 開始配置
文檔反饋
phone 聯絡我們

立即和Alibaba Cloud在線服務人員進行交談,獲取您想了解的產品信息以及最新折扣。

alicare alicarealicarealicare