すべてのプロダクト
Search
ドキュメントセンター

Cloud Enterprise Network:エンタープライズ版トランジットルーターによるセキュアなトラフィック交換

最終更新日:Aug 26, 2026

Enterprise Edition トランジットルーターは、柔軟なルーティング管理機能を提供し、トラフィックをフィルタリングするためにセキュリティサーバーに転送するサービスチェーンを構築できます。これにより、フィルタリングされたトラフィックのみが通信できるようになり、ネットワークセキュリティが強化されます。

ユースケース

このトピックでは、Enterprise Edition トランジットルーターを使用して、リージョン内のトラフィックを保護する方法を説明します。ある企業は China (Hangzhou) リージョンに 3 つの分離された仮想プライベートクラウド (VPC) を持っており、VPC-secure にはセキュリティサービスが含まれています。事業拡大に対応し、ネットワークセキュリティを強化するために、この企業は VPC-workload-a と VPC-workload-b 間の通信を有効にしたいと考えています。ただし、VPC-secure のセキュリティサービスが、両者間のすべてのトラフィックをフィルタリングした後に転送する必要があります。

VPC-workload-a と VPC-workload-b を Enterprise Edition トランジットルーターに接続できます。その後、トランジットルーターでカスタムルーティングルールを作成して、両者間の通信を保護できます。

image

前提条件

  • セキュリティサービスをホストする VPC が、Transit Router Enterprise Edition をサポートするリージョンにあることを確認してください。Transit Router Enterprise Edition がサポートするリージョンとゾーンの詳細については、「Transit Router Enterprise Edition でサポートされているリージョンとゾーン」をご参照ください。

  • China (Hangzhou) リージョンに 3 つの VPC を作成し、それぞれに ECS インスタンスがデプロイされていること。詳細については、「IPv4 のみの VPC の作成」をご参照ください。

    VPC には、Transit Router Enterprise Edition でサポートされているゾーンに十分な vSwitch が必要です。各 vSwitch には、少なくとも 1 つのアイドル IP アドレスが必要です。vSwitch の作成方法の詳細については、「vSwitch の作成」をご参照ください。

    • Transit Router Enterprise Edition が 1 つのゾーンのみをサポートするリージョン (例:China (Nanjing - Local Region)) にデプロイされている場合、VPC には、そのゾーンに少なくとも 1 つの vSwitch が必要です。

    • Transit Router Enterprise Edition が複数のゾーンをサポートするリージョン (例:China (Shanghai)) にデプロイされている場合、VPC には、それらのゾーンに少なくとも 2 つの vSwitch が必要です。vSwitch は、異なるゾーンに存在する必要があります。

    例えば、China (Hangzhou) リージョンに VPC を作成する場合、ゾーン J とゾーン K にそれぞれ少なくとも 1 つの vSwitch が必要です。各 vSwitch には、少なくとも 1 つの利用可能な IP アドレスが必要です。

    説明

    Transit Router Enterprise Edition は、ゾーン内の vSwitch にエラスティックネットワークインターフェイス (ENI) を作成します。ENI は、VPC から Transit Router Enterprise Edition インスタンスへのトラフィックのエントリポイントとして機能します。各 ENI は 1 つの IP アドレスを消費します。

    この例では、VPC-secure には 3 つの vSwitch が含まれています。vSwitch1 はセキュリティサービスのデプロイ用で、vSwitch2 と vSwitch3 は Transit Router Enterprise Edition への接続用です。次の表に、3 つの VPC のネットワーク計画を示します。ネットワークを計画する際は、相互接続するネットワークの CIDR ブロックが重複しないようにしてください。3 つの ECS インスタンスすべてについて、Alibaba Cloud Linux イメージを選択します。

    VPC

    vSwitch

    vSwitch ゾーン

    CIDR ブロック

    ECS アドレス

    VPC-secure

    CIDR ブロック: 10.0.0.0/16

    vSwitch1

    ゾーン I

    10.0.0.0/24

    ECS-secure: 10.0.0.1

    vSwitch2

    ゾーン J

    10.0.1.0/24

    vSwitch3

    ゾーン K

    10.0.2.0/24

    VPC-workload-a

    CIDR ブロック: 10.1.0.0/16

    vSwitch4

    ゾーン I

    10.1.0.0/24

    ECS-workload-a: 10.1.0.1

    vSwitch5

    ゾーン J

    10.1.1.0/24

    vSwitch6

    ゾーン K

    10.1.2.0/24

    VPC-workload-b

    CIDR ブロック: 10.2.0.0/16

    vSwitch7

    ゾーン I

    10.2.0.0/24

    ECS-workload-b: 10.2.0.1

    vSwitch8

    ゾーン J

    10.2.1.0/24

    vSwitch9

    ゾーン K

    10.2.2.0/24

  • VPC-secure、VPC-workload-a、および VPC-workload-b 内の ECS インスタンスのセキュリティグループルールで、インバウンド ICMP トラフィックが許可されていること。詳細については、「セキュリティグループルールの照会」および「セキュリティグループルールの追加」をご参照ください。

はじめに

このトピックでは、コンソールでの設定方法と、Terraform を使用した設定方法について説明します。必要に応じて、いずれかの方法を選択してください。

コンソール

ステップ 1:CEN インスタンスの作成

Cloud Enterprise Network (CEN) インスタンスは、統合ネットワークを作成および管理するための基本リソースです。Enterprise Edition トランジットルーターを使用してネットワークインスタンスを接続する前に、CEN インスタンスを作成する必要があります。

  1. CEN コンソールにログインします。
  2. インスタンスページで、CENインスタンスの作成をクリックします。

  3. [CEN インスタンスの作成] ダイアログボックスで、次のパラメータを設定し、[OK] をクリックします。

    • [名前]:CEN インスタンスの名前を入力します。この例では、CEN-intra-region-secure-communication と入力します。

    • [説明]:CEN インスタンスの説明を入力します。

    • [リソースグループ]:CEN インスタンスが属するリソースグループを選択します。この例では、リソースグループを選択しないため、CEN インスタンスは作成後にデフォルトのリソースグループに属します。

    • [タグ]:CEN インスタンスのタグを入力します。この例では、このパラメータは空のままにします。

CEN インスタンスが作成されると、CEN インスタンスリストに CEN-intra-region-secure-communication という名前の CEN インスタンスが 利用可能 状態で表示されます。

ステップ 2:トランジットルーターインスタンスの作成

Enterprise Edition トランジットルーターを使用してネットワークインスタンスを接続するには、まずネットワークインスタンスと同じリージョンにトランジットルーターインスタンスを作成する必要があります。

  1. CEN コンソールにログインします。
  2. [インスタンス] ページで、ステップ 1 で作成した CEN インスタンスを選択し、そのインスタンス ID をクリックします。

  3. 基本設定 > トランジットルーター タブで、[トランジットルーターの作成] をクリックします。

  4. [トランジットルーターの作成] ダイアログボックスで、トランジットルーターのパラメータを設定し、[OK] をクリックします。

    パラメータ

    説明

    設定

    [リージョン]

    トランジットルーターインスタンスをデプロイするリージョンを選択します。

    この例では、[中国 (杭州)] を選択します。

    [エディション]

    トランジットルーターインスタンスのエディション。

    システムが現在のリージョンのトランジットルーターインスタンスのエディションを自動的に判断して表示します。

    [マルチキャストの有効化]

    トランジットルーターのマルチキャスト機能を有効にするかどうかを指定します。

    この例では、マルチキャスト機能は無効のままにします (デフォルト設定)。

    [名前]

    トランジットルーターインスタンスの名前を入力します。

    この例では、TR-intra-region-secure-communication と入力します。

    [説明]

    トランジットルーターインスタンスの説明を入力します。

    トランジットルーターの説明を入力します。

    [タグ]

    Enterprise Edition トランジットルーターにタグを追加します。

    この例では、このパラメータは空のままにします。

    [TR アドレスセグメント]

    トランジットルーターの CIDR ブロックを入力します。

    詳細については、「Transit router CIDR block」をご参照ください。

    この例では、トランジットルーターの CIDR ブロックは指定しません。

トランジットルーターが作成されると、トランジットルーターリストに China (Hangzhou) リージョンの TR-intra-region-secure-communication という名前の Enterprise Edition トランジットルーターが 利用可能 状態で表示されます。

ステップ 3:VPC インスタンスの接続

通信が必要なネットワークインスタンスを Enterprise Edition トランジットルーターに接続します。

  1. CEN コンソールにログインします。
  2. [インスタンス] ページで、管理するCENインスタンスを見つけ、インスタンスIDをクリックします。
  3. 基本設定 > トランジットルーター タブで、対象リージョンのトランジットルーターを見つけます。[アクション] 列で、[接続の作成] > [リージョン内接続の作成] をクリックします。

  4. [リージョン内接続の作成] ページで、次のパラメータを設定し、[OK] をクリックします。

    次の表に示すパラメータを使用して、VPC-secure、VPC-workload-a、VPC-workload-b を Enterprise Edition トランジットルーターに接続します。

    パラメータ

    説明

    VPC-secure

    VPC-workload-a

    VPC-workload-b

    [ネットワークタイプ]

    接続するネットワークインスタンスのタイプを選択します。

    [仮想プライベートクラウド (VPC)]

    [仮想プライベートクラウド (VPC)]

    [仮想プライベートクラウド (VPC)]

    [リージョン]

    ネットワークインスタンスのリージョンを選択します。

    [中国 (杭州)]

    [中国 (杭州)]

    [中国 (杭州)]

    [トランジットルーター]

    選択したリージョンのトランジットルーターインスタンスがシステムによって自動的に表示されます。

    [リソース所有者 ID]

    ネットワークインスタンスを所有するアカウントタイプを選択します。

    [現在のアカウント]

    [現在のアカウント]

    [現在のアカウント]

    [課金方法]

    デフォルト値は [従量課金] です。

    [接続名]

    ネットワークインスタンス接続の名前を入力します。

    attachment-secure

    attachment-workload-a

    attachment-workload-b

    [タグ]

    ネットワークインスタンス接続にタグを追加します。

    この例では、このパラメータは空のままにします。

    この例では、このパラメータは空のままにします。

    この例では、このパラメータは空のままにします。

    [ネットワーク]

    接続するネットワークインスタンスを選択します。

    VPC-secure を選択します。

    VPC-workload-a を選択します。

    VPC-workload-b を選択します。

    [VSwitch]

    トランジットルーターでサポートされているゾーン内の vSwitch を選択します。

    ゾーンレベルの災害復旧を実装するには、サポートされている複数のゾーンに vSwitch がある場合、各ゾーンから 1 つずつ vSwitch を選択してください。

    • China (Hangzhou) ゾーン J:vSwitch2 を選択します。

    • China (Hangzhou) ゾーン K:vSwitch3 を選択します。

    • China (Hangzhou) ゾーン I:vSwitch4 を選択します。

    • China (Hangzhou) ゾーン J:vSwitch5 を選択します。

    • China (Hangzhou) ゾーン I:vSwitch7 を選択します。

    • China (Hangzhou) ゾーン J:vSwitch8 を選択します。

    [詳細設定]

    VPC-secure、VPC-workload-a、VPC-workload-b については、次の 3 つの詳細設定を 無効 にします。

    • [トランジットルーターのシステムルートテーブルに自動的に関連付ける]

    • [システムルートをトランジットルーターのシステムルートテーブルに自動伝播する]

    • [トランジットルーターへのルートを自動的に作成し、現在の VPC のすべてのルートテーブルに追加する]

    説明

    これらの設定を有効にすると、VPC-secure、VPC-workload-a、VPC-workload-b は互いのルートを自動的に学習して通信できるようになります。これにより、必要なセキュリティ検査がバイパスされます。そのため、これらの設定は無効にする必要があります。代わりにルートテーブルを手動で設定し、ルートエントリを追加することで、接続をカスタマイズして安全なトラフィック検査を有効にします。

リージョン内接続 タブに 3 つの VPC アタッチメントが表示されます:

[名前]

ネットワークインスタンス

アタッチメント詳細 - vSwitch

attachment-secure

VPC-secure

vSwitch2、vSwitch3

attachment-workload-a

VPC-workload-a

vSwitch4、vSwitch5

attachment-workload-b

VPC-workload-a

vSwitch7、vSwitch8

ステップ 4:VPC へのルートの追加

VPC-secure、VPC-workload-a、VPC-workload-b にルートエントリを追加して、トラフィックを Enterprise Edition トランジットルーターに転送します。これにより、トランジットルーター内でトラフィックを管理し、安全なトラフィック検査を実行できます。

  1. VPC-secure のルートテーブルを設定します:

    1. VPC-secure で、2つのカスタムルートテーブルを作成します。[リソータイプ]を [vSwitch] に設定し、ルートテーブルに routetable_secure-to-workload と routetable_workload-to-secure という名前を付けます。

    2. routetable_secure-to-workload を vSwitch1 に関連付け、ルートエントリを追加します:

      • [CIDR]:0.0.0.0/0 と入力します。

      • [ネクストホップの種類]:[転送ルーター] を選択します。

      • [転送ルーター]:attachment-secure を選択します。

    3. routetable_workload-to-secure を vSwitch2 と vSwitch3 に関連付け、ルートエントリを追加します:

      • [CIDR]:0.0.0.0/0 と入力します。

      • [ネクストホップの種類]:[ECS インスタンス] を選択します。

      • [ECS インスタンス]:ECS-secure (セキュリティ ECS インスタンス) を選択します。

  2. VPC-workload-a と VPC-workload-b のシステムルートテーブルに、次のルートエントリを追加して、VPC-workload-a と VPC-workload-b 間のトラフィックをトランジットルーターに転送します:

    • [CIDR]:0.0.0.0/0 と入力します。

    • [ネクストホップの種類]:[転送ルーター] を選択します。

    • [転送ルーター]:VPC-workload-a のシステムルートテーブルを設定する場合は attachment-workload-a を選択します。VPC-workload-b のシステムルートテーブルを設定する場合は attachment-workload-b を選択します。

ルートエントリが追加されると、各 VPC の新しいルーティング設定は次のようになります:

ネットワークインスタンス

vSwitch

関連付けられたルートテーブル

ルートエントリ

ネクストホップ

VPC-secure

vSwitch1

routetable_secure-to-workload

0.0.0.0/0

attachment-secure (トランジットルーター)

vSwitch2

routetable_workload-to-secure

0.0.0.0/0

ECS-secure

vSwitch3

VPC-workload-a

  • vSwitch4

  • vSwitch5

  • vSwitch6

システムルートテーブル

0.0.0.0/0

attachment-workload-a (トランジットルーター)

VPC-workload-b

  • vSwitch7

  • vSwitch8

  • vSwitch9

システムルートテーブル

0.0.0.0/0

attachment-workload-b (トランジットルーター)

ステップ 5:トランジットルータールートの設定

VPC からのトラフィックが Enterprise Edition トランジットルーターに入った後、ルートテーブルを作成してルートエントリを追加することで、接続をカスタマイズできます。この設定により、まず VPC-workload-a と VPC-workload-b からのトラフィックを VPC-secure に誘導して検査し、その後フィルタリングされたトラフィックを VPC-secure から最終的な宛先に転送します。

  1. CEN コンソールにログインします。
  2. インスタンスページで、作成した CEN インスタンスの ID をクリックします。

  3. [基本設定] > [トランジットルーター] を選択し、管理するトランジットルーターを見つけて、トランジットルーターのIDをクリックします。
  4. [ルートテーブル] タブで、Enterprise Edition トランジットルーター用に 2 つのカスタムルートテーブルを作成します。ルートテーブルには TR_routetable_workload-to-secure と TR_routetable_secure-to-workload という名前を付けます。詳細については、「Custom route tables」をご参照ください。

  5. アタッチメント attachment-workload-a と attachment-workload-b を Enterprise Edition トランジットルーターのカスタムルートテーブルに関連付け、ルートテーブルのルートエントリを設定します。

    1. [ルートテーブル] タブで、カスタムルートテーブル TR_routetable_workload-to-secure を選択し、[ルートテーブル関連付け] タブをクリックして、[関連付けの作成] をクリックします。

    2. [関連付けの追加] ダイアログボックスで、このカスタムルートテーブルに関連付けるネットワークインスタンス接続を選択し、[OK] をクリックします。

      この例では、アタッチメント attachment-workload-a と attachment-workload-b をこのカスタムルートテーブルに関連付けます。

    3. ルートテーブルの詳細ページで、[ルートエントリ] タブをクリックし、[ルートエントリの追加] をクリックします。

    4. [ルートエントリの追加] ダイアログボックスで、次のパラメータを設定し、[OK] をクリックします。

      • [宛先 CIDR]:この例では、0.0.0.0/0 と入力します。

      • ブラックホールルート:このオプションを有効化すると、このルート宛てのすべてのトラフィックが破棄されます。この例では、いいえ を選択します。

      • [ネクストホップ]:この例では、attachment-secure を選択します。

      詳細については、「Add a custom route entry」をご参照ください。

    これらの手順を完了すると、トランジットルーターは VPC-workload-a と VPC-workload-b からのすべてのトラフィックを VPC-secure に転送します。

  6. カスタムルートテーブルを VPC-secure に関連付け、ルートエントリを設定します。

    1. [ルートテーブル] タブで、カスタムルートテーブル TR_routetable_secure-to-workload を選択し、[ルートテーブル関連付け] タブをクリックして、[関連付けの作成] をクリックします。

    2. [関連付けの追加] ダイアログボックスで、カスタムルートテーブルに関連付けるネットワークインスタンス接続を選択し、[OK] をクリックします。

      この例では、attachment-secure をこのカスタムルートテーブルに関連付けます。

    3. ルートテーブルの詳細ページで、[ルート伝播] タブをクリックし、[ルート伝播を有効にする] をクリックします。

    4. [ルート伝播を有効にする] ダイアログボックスで、このルートテーブルにルートを伝播するネットワークインスタンス接続を選択し、[OK] をクリックします。

      この例では、[接続]を attachment-workload-a と attachment-workload-b に設定します。関連付けられると、ルートテーブルは VPC-workload-a と VPC-workload-b へのルートを学習します。VPC-secure は、このルートテーブルを参照することで VPC-workload-a と VPC-workload-b と通信できるようになります。

    ルートエントリが作成されると、Enterprise Edition トランジットルーターのルートエントリは次のようになります:

    ルートテーブル名

    送信先CIDRブロック

    ネクストホップ

    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

ステップ 6:テストと検証

前述の手順を完了すると、VPC-secure、VPC-workload-a、VPC-workload-b は、想定されたパスに沿って安全に相互通信できるようになります。次の手順では、VPC 間のトラフィックパスをテストする方法について説明します。

  1. ECS-secure にログインし、次のコマンドを実行して IP フォワーディングを有効にします。ECS インスタンスへのログイン方法については、「接続方法」をご参照ください。

    説明

    IP フォワーディングが有効になっていない場合、VPC-workload-a は VPC-secure と通信でき、VPC-workload-b は VPC-secure と通信できます。ただし、VPC-workload-a と VPC-workload-b は相互に通信できません。

    echo 1 > /proc/sys/net/ipv4/ip_forward   # IP フォワーディングを有効にします。このコマンドは一時的に有効で、再起動後は設定が失われます。
  2. ECS-workload-a にログインし、mtr をインストールします。mtr は、ping と traceroute の機能を組み合わせたネットワーク診断ツールで、ネットワークパスの遅延とパケット損失をリアルタイムで分析します。このトピックでは、mtr を使用してトラフィックパスを特定します。

    yum install -y mtr
  3. ECS-workload-a で、mtr コマンドを実行して、ECS-workload-a から ECS-workload-b へのトラフィックパスをテストします:

    mtr を使用

    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 インスタンス (ECS-secure) を経由してルーティングされていることが確認されます。

Terraform

Terraform を使用して、このトピックのシナリオで利用する環境を構築できます。Terraform のインストールおよび設定方法については、「Terraform のインストール」をご参照ください。

次の手順では、Terraform v1.9.8 を実行する Linux ホストを例に説明します。開始する前に、認証を完了していることを確認してください。

説明

このチュートリアルでは課金対象リソースが作成されます。不要な課金を避けるため、これらのリソースが不要になったら速やかに解放してください。

手順 1:リソースの作成

このシナリオでは、次の Terraform コードを使用します。

variable "pname" {
  description = "リソースのプレフィックス名"
  type        = string
  default     = "tf-CenSec"
}
variable "default_region" {
  description = "デフォルトのリージョン"
  type        = string
  default     = "cn-hangzhou"
}
variable "az" {
  description = "使用するアベイラビリティーゾーンのリスト"
  type        = list(string)
  default     = ["cn-hangzhou-i", "cn-hangzhou-j", "cn-hangzhou-k"]
}
variable "vpc_count" {
  description = "作成する Virtual Private Cloud (VPC) の数"
  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"
}
# vSwitch
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}"
}
# Elastic Compute Service (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 の IP フォワーディングを有効にします。
}
# セキュリティグループ
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"
}
# Cloud Enterprise Network (CEN)
resource "alicloud_cen_instance" "cen1" {
  cen_instance_name = var.pname
}
# トランジットルーター
resource "alicloud_cen_transit_router" "tr1" {
  transit_router_name = var.pname
  cen_id              = alicloud_cen_instance.cen1.id
}
# attach1: 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 # vSwitch2、vpc1-2
  }
  zone_mappings {
    zone_id    = var.az[2]
    vswitch_id = alicloud_vswitch.main[2].id # vSwitch3、vpc1-3
  }
  transit_router_vpc_attachment_name = "attach1"
}
# attach2: 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 # vSwitch4、vpc2-1
  }
  zone_mappings {
    zone_id    = var.az[1]
    vswitch_id = alicloud_vswitch.main[4].id # vSwitch5、vpc2-2
  }
  transit_router_vpc_attachment_name = "attach2"
}
# attach3: 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 # vSwitch7、vpc3-1
  }
  zone_mappings {
    zone_id    = var.az[1]
    vswitch_id = alicloud_vswitch.main[7].id # vSwitch8、vpc3-2
  }
  transit_router_vpc_attachment_name = "attach3"
}
# VPC1 用のルートテーブルを 2 つ作成
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"
}
# ルートテーブルの関連付け: rt1 を vSwitch1 に、rt2 を vSwitch2 と vSwitch3 に関連付け
locals {
  # ルートテーブルと vSwitch のマッピング
  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
}
# VPC1 のルートエントリ
resource "alicloud_route_entry" "rt-entry1" { # ネクストホップはアタッチメント
  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" { # ネクストホップは 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
}
# 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
}
# トランジットルーター用に新しいルートテーブルを 2 つ作成
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"
}
# tr_rt1 を attach2 と attach3 に関連付け
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
}
# tr_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
}
# トランジットルーターのルートエントリ
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.alibabacloud.com/?from=EcsConsole&instanceType=ecs&regionId=${var.default_region}&instanceId=${alicloud_instance.main[0].id}"
}
output "ecs2_login_address" {
  value = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs&regionId=${var.default_region}&instanceId=${alicloud_instance.main[1].id}"
}
output "ecs3_login_address" {
  value = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs&regionId=${var.default_region}&instanceId=${alicloud_instance.main[2].id}"
}

手順 2:テストと検証

  1. ECS 2 インスタンス (tf-CenSec-ecs2 という名前) にログインします。

    Terraform の出力で、ECS 2 のログインアドレスを見つけます。そのアドレスをブラウザにコピーします。ログイン時は、認証方法として [Temporary SSH Key] を選択します。

    Terraform の実行後、次のような出力が表示されます。この例では、ecs2_login_address が ECS 2 のログインアドレスです。

    Outputs:
    ecs1_login_address = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs&regionId=cn-hangzhou&instanceId=i-bp1xxx"
    ecs2_login_address = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs&regionId=cn-hangzhou&instanceId=i-bp1xxx"
    ecs3_login_address = "https://ecs-workbench.alibabacloud.com/?from=EcsConsole&instanceType=ecs&regionId=cn-hangzhou&instanceId=i-bp1xxx"
  2. ECS 2 で mtr コマンドを実行して、ECS 2 から ECS 3 へのトラフィックパスをテストします。

    次のコマンドを実行します。

    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

    結果から、ネットワークが 10.0.0.1 (ECS1) を経由して ECS 2 から ECS 3 にパケットを転送していることが分かります。これにより、VPC 2 と VPC 3 間のトラフィックがセキュリティ ECS インスタンス (ECS1) を経由してルーティングされていることを確認できます。

手順 3:リソースの解放

検証が完了したら、リソースが不要な場合は、次のコマンドを実行してリソースを破棄し、追加料金の発生を防いでください。

terraform destroy --auto-approve