Transit Gateway で伝播ルートと同じ宛先にブラックホールの静的ルートを作り、通信を確認してみた

Transit Gateway で伝播ルートと同じ宛先にブラックホールの静的ルートを作り、通信を確認してみた

Transit Gateway のルートテーブルで、ブラックホールの静的ルートを作成すると伝播ルートがどう見えるのか、通信はいつ止まるのか。実際に 2 つの VPC を接続して、その挙動を確かめてみました。
2026.10.29

はじめに

テクニカルサポートの 片方 です。
Transit Gateway のルートテーブルには、VPC アタッチメントの CIDR が伝播ルートとして入ります。同じ宛先に静的ルートを作ると、静的ルートが優先され、伝播ルートはルートテーブルに含まれなくなります。今回は、この静的ルートを「ブラックホールルート」にしたときの動きを確かめます。

ブラックホールルートとは

ブラックホールルートは、宛先に一致した通信を、どこにも送らずに捨てるルートです。Transit Gateway のルートテーブルでは、静的ルートを作るときに「ブラックホール」を選ぶと作れます。

https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/how-transit-gateways-work.html

ルートに一致するトラフィックを破棄する Transit Gateway ルートテーブルでは、ブラックホールルートを作成できます。

捨てられた通信は、送った側に「届かなかった」とは返りません。送った側から見ると、相手が応答しないまま時間切れになります。アタッチメントやセキュリティグループに手を入れずに、ルートを 1 つ足すだけで特定の宛先への通信を止められるので、一時的に通信を止めたいときや、通ってはいけない経路を塞ぎたいときに使えます。

確かめたこと

伝播ルートと同じ宛先にブラックホールの静的ルートを作ると、伝播ルートは AWS CLI でどう見えるのか。通信は何秒で止まり、静的ルートを削除すると何秒で戻るのか。Reachability Analyzer の結果には何が出るのか。これを確かめるため、2 つの VPC を Transit Gateway でつなぎ、片方の VPC から相手の VPC へ 2 秒ごとに HTTP でアクセスし続けながら、相手の CIDR へのブラックホールの静的ルートを作って削除しました。

構成

東京リージョンに、次のリソースを AWS CLI で作りました。送信元と宛先は、Amazon ECS のタスク(AWS Fargate)です。アクセスの結果は Amazon CloudWatch Logs に出します。

リソース 内容
VPC app-vpc(10.10.0.0/16)、data-vpc(10.20.0.0/16) 各 1 サブネット(ap-northeast-1a)、インターネットゲートウェイ(コンテナイメージの取得用)
Transit Gateway shared-hub-tgw デフォルトルートテーブルへの関連付けと伝播を有効。VPC アタッチメントは app-vpc-attachment と data-vpc-attachment
VPC のルートテーブル app-vpc に 10.20.0.0/16 → Transit Gateway、data-vpc に 10.10.0.0/16 → Transit Gateway
タスク data-http(data-vpc) python -m http.server 8080 で HTTP サーバーを起動。セキュリティグループで 10.10.0.0/16 からの TCP 8080 を許可
タスク app-probe(app-vpc) data-http のプライベート IP に 2 秒ごとに HTTP でアクセスし、結果(ok か fail)を CloudWatch Logs に出す(タイムアウト 2 秒)
Reachability Analyzer のパス app-to-data-path 送信元は app-probe のネットワークインターフェイス(ENI)、送信先は data-http の ENI、TCP 8080

app-probe のコンテナで実行したコードは次のとおりです。再試行はせず、1 回ずつの結果を記録します。

import time, urllib.request, datetime
url = 'http://10.20.1.174:8080/'
while True:
    t = datetime.datetime.now(datetime.timezone.utc).strftime('%H:%M:%S')
    try:
        urllib.request.urlopen(url, timeout=2)
        print(t, 'ok')
    except Exception as e:
        print(t, 'fail', type(e).__name__)
    time.sleep(2)

先に結論から

  • ブラックホールの静的ルート 10.20.0.0/16 を作ると、search-transit-gateway-routes の結果から伝播ルートの 10.20.0.0/16 が消え、静的ルート(blackhole)だけになりました。静的ルートを削除すると、伝播ルートが再び表示されました。
  • 2 秒ごとの HTTP アクセスは、ブラックホールルートの作成から 15〜17 秒後に止まり、削除から 12〜16 秒後に戻りました。
  • Reachability Analyzer の結果は到達不可で、説明コードは TGW_RTB_NO_ROUTE_TO_TGW_ATTACHMENT でした。ブラックホールであることは、結果には出ません。
  • メトリクス PacketDropCountBlackhole は合計 68 で、失敗したアクセス 34 回のちょうど 2 倍でした。

やってみた

今回は、次の流れで進めました。

  1. 伝播ルートだけの状態で、ルートテーブルと通信を確かめる
  2. 相手の VPC の CIDR に、ブラックホールの静的ルートを作る
  3. 通信が止まるまでの時間を測る
  4. Reachability Analyzer で分析する
  5. 静的ルートを削除して、通信が戻るまでの時間を測る

1. 伝播ルートだけの状態を確かめる

Transit Gateway のデフォルトルートテーブルには、2 つの VPC の CIDR が伝播ルートとして入っています。

宛先 種類 状態 アタッチメントのリソース
10.10.0.0/16 propagated active app-vpc
10.20.0.0/16 propagated active data-vpc

app-probe のログは 2 秒ごとに ok で、Reachability Analyzer の分析は到達可能(NetworkPathFound が true)でした。

2. ブラックホールの静的ルートを作る

10.20.0.0/16 に、ブラックホールの静的ルートを作りました。コンソールでは、「静的ルートの作成」で「ブラックホール」を選ぶ操作にあたります。

aws ec2 create-transit-gateway-route --transit-gateway-route-table-id tgw-rtb-0a92c98f910b0eadc --destination-cidr-block 10.20.0.0/16 --blackhole --query 'Route.[DestinationCidrBlock,Type,State]' --output text

通信が止まったことを確かめてから、search-transit-gateway-routes で、種類が static と propagated のルートを検索しました。伝播ルートの 10.20.0.0/16 は返らず、静的ルートだけになりました。

宛先 種類 状態 アタッチメントのリソース
10.10.0.0/16 propagated active app-vpc
10.20.0.0/16 static blackhole なし

静的ルートと伝播ルートの宛先が同じ場合は、静的ルートが優先され、伝播ルートはルートテーブルに含まれません(ドキュメントでは「伝達ルート」と表記されています)。

https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/how-transit-gateways-work.html

静的ルートと伝達ルートが同じ送信先を持つ場合、静的ルートの優先度が高くなるため、伝達されたルートはルートテーブルに含まれません。静的ルートを削除すると、重複する伝達ルートがルートテーブルに含まれます。

コンソールの Transit Gateway ルートテーブルでの表示は、今回は確かめていません。

3. 通信が止まるまでの時間を測る

次の画像は app-probe のログの要約です。各行の時刻を、ブラックホールルートの作成・削除からの経過秒数に置き換えています。作成から 15 秒後の ok を最後に、17 秒後から fail(URLError、2 秒のタイムアウト)になりました。通信が止まったのは、作成から 15〜17 秒後です。

01

4. Reachability Analyzer で分析する

ブラックホールルートがある状態で分析すると、到達不可でした。説明コードは TGW_RTB_NO_ROUTE_TO_TGW_ATTACHMENT で、対象は Transit Gateway ルートテーブルです。

02

03

この説明コードは、ルートテーブルにアタッチメントへのルートが無いことを示します。

https://docs.aws.amazon.com/ja_jp/vpc/latest/reachability/explanation-codes.html

This transit gateway route table has no route to this transit gateway attachment.

同じページには、宛先へのルートの状態が悪いことを示す TGW_RTB_BAD_STATE_ROUTE という説明コードもあります。ただ、今回の分析で出たのは TGW_RTB_NO_ROUTE_TO_TGW_ATTACHMENT の 1 つだけでした。

5. 静的ルートを削除して、戻るまでの時間を測る

静的ルートを削除すると、削除から 12 秒後に始めたアクセスの fail(2 秒後にタイムアウト)を最後に、16 秒後から ok に戻りました。止まるまでの時間と同じく、アクセスを始めた時刻で区切ると、通信が戻ったのは削除から 12〜16 秒後です。search-transit-gateway-routes の結果も、2 つの伝播ルートに戻りました。

宛先 種類 状態 アタッチメントのリソース
10.10.0.0/16 propagated active app-vpc
10.20.0.0/16 propagated active data-vpc

確認してみた

PacketDropCountBlackhole のメトリクス

Transit Gateway のメトリクス PacketDropCountBlackhole(1 分ごとの合計)は、ブラックホールルートの作成から通信が戻るまでの 4 分だけ増え、合計 68 でした。

04

失敗したアクセスは、タイムアウトの 2 秒と待ちの 2 秒で 4 秒ごとなので、1 分に 15 回です。これに対して、カウントは 1 分に 30 でした。失敗したアクセスは全部で 34 回で、合計の 68 はその 2 倍です。失敗 1 回あたり 2 になる理由は確かめていません(パケットは取っていません)。

止まるまで・戻るまでの時間について

15〜17 秒と 12〜16 秒は、2 秒ごとのアクセスを始めた時刻で区切った値で、試験は 1 回だけです。起点にした作成と削除の時刻は、API の応答の時刻ではなく、コマンドを実行した時刻です。ルートの変更が通信に反映されるまでの時間は、ドキュメントでは見つけられませんでした。

まとめ

伝播ルートと同じ宛先にブラックホールの静的ルートを入れると、CLI の検索結果から伝播ルートが消えました。とはいえ、伝播が外れたわけではなく、静的ルートが優先されているだけです。静的ルートを消せば、伝播ルートは何もしなくても戻ってきました。通信も、ルートを入れてから 15〜17 秒ほどで止まり、消してから 12〜16 秒ほどで戻っています。

少し注意したいのが、Reachability Analyzer の結果です。ブラックホールで止めているのに、説明コードは「ルートテーブルにアタッチメントへのルートが無い」という意味の TGW_RTB_NO_ROUTE_TO_TGW_ATTACHMENT でした。この説明コードだけを見ると、ルートの書き忘れや伝播の設定漏れを疑いたくなります。通信が届かない原因を切り分けるときは、伝播の設定と一緒に、ルートテーブルに同じ宛先のブラックホールの静的ルートが残っていないかも見ておくと、遠回りせずに済みます。

なお、ブラックホールではない静的ルート(別のアタッチメント向け)と、プレフィックスリスト参照ルートの場合は、今回は試していません。

本ブログが誰かの参考になれば幸いです。

参考資料

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事