<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Transit Gateway on 図解 わかりやすいAWS</title><link>https://cloud-aws.net/tags/transit-gateway/</link><description>Recent content in Transit Gateway on 図解 わかりやすいAWS</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Sat, 26 Nov 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://cloud-aws.net/tags/transit-gateway/index.xml" rel="self" type="application/rss+xml"/><item><title>マルチリージョン接続 — DX-GWの限界とTransit Gatewayピアリング</title><link>https://cloud-aws.net/post/aws-transit-gateway-peering/</link><pubDate>Sat, 26 Nov 2022 00:00:00 +0000</pubDate><guid>https://cloud-aws.net/post/aws-transit-gateway-peering/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;連載: VyOSで作るAWSハイブリッド接続（全4回）&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a class="link" href="https://cloud-aws.net/post/site-to-site-vpn-vyos/" &gt;単一Site-to-Site VPN — VyOS×AWSの基礎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://cloud-aws.net/post/aws-vpn-bgp-traffic-engineering/" &gt;トンネル冗長化とBGP経路制御&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://cloud-aws.net/post/aws-transit-gateway-vpn-ecmp/" &gt;Transit Gatewayへの置き換えとECMP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;マルチリージョン接続 — DX-GWの限界とTGWピアリング&lt;/strong&gt;（この記事）&lt;/li&gt;
&lt;/ol&gt;

 &lt;/blockquote&gt;
&lt;h2 id="0-この回のテーマ"&gt;0. この回のテーマ
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://cloud-aws.net/post/aws-transit-gateway-vpn-ecmp/" &gt;第3回&lt;/a&gt;で、VPNの終端をリージョンのハブ＝&lt;strong&gt;Transit Gateway&lt;/strong&gt;にしました。ハブができたので、次の自然な欲求は &lt;strong&gt;「別のリージョンともつなぎたい」&lt;/strong&gt; です。&lt;/p&gt;
&lt;p&gt;東京（ap-northeast-1）のVPCと、バージニア（us-east-1）のVPCを相互接続し、さらに&lt;strong&gt;オンプレ（VyOS）から両リージョンに届く&lt;/strong&gt;状態をゴールにします。&lt;/p&gt;
&lt;p&gt;ここで多くの人が最初に考えるのが &lt;strong&gt;Direct Connect Gateway（DX-GW）&lt;/strong&gt; です。「DX回線を複数リージョンで共用できる」と聞くと、リージョン間もつながりそうに見える。ところが、&lt;strong&gt;ここに落とし穴があります&lt;/strong&gt;。この回は「DX-GWでは越えられない壁」を確認してから、正しい道具＝&lt;strong&gt;TGWピアリング&lt;/strong&gt;で超えます。&lt;/p&gt;
&lt;h2 id="1-なぜdx-gwではリージョン間がつながらないのか"&gt;1. なぜDX-GWではリージョン間がつながらないのか
&lt;/h2&gt;&lt;p&gt;DX-GWは、&lt;strong&gt;1本のDirect Connect回線を、複数リージョン・複数アカウントのVPC/TGWから共用する&lt;/strong&gt;ための仕組みです。「オンプレ↔各リージョン」の通信を提供します。&lt;/p&gt;
&lt;p&gt;ですが、&lt;strong&gt;DX-GWはリージョン間（TGW↔TGW）のルートを交換しません&lt;/strong&gt;。各リージョンのTGWルートテーブルは、DX-GW経由で別リージョンの経路を学習しないからです。&lt;/p&gt;
&lt;p&gt;&lt;img alt="dx-gw limitation" class="gallery-image" data-flex-basis="548px" data-flex-grow="228" height="788" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://cloud-aws.net/post/aws-transit-gateway-peering/dxgw-limitation.png" srcset="https://cloud-aws.net/post/aws-transit-gateway-peering/dxgw-limitation_hu_e2faa5d976c16bb1.png 800w, https://cloud-aws.net/post/aws-transit-gateway-peering/dxgw-limitation_hu_8468bea2d5ce55a8.png 1600w, https://cloud-aws.net/post/aws-transit-gateway-peering/dxgw-limitation.png 1800w" width="1800"&gt;&lt;/p&gt;
&lt;p&gt;図の &lt;code&gt;×&lt;/code&gt; がそれです。オンプレからは各リージョンに届くのに、&lt;strong&gt;東京VPC ↔ バージニアVPC が直接つながらない&lt;/strong&gt;。DX-GWはあくまで「オンプレとAWSをつなぐDX回線の共用ポイント」であって、「リージョン間ルータ」ではないからです。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;補足:&lt;/strong&gt; 今回DXは用意できないので、DX-GWは「あるものと想定」して実際には構築していません。Terraform定義だけ置いておきます。要点は &lt;strong&gt;「DX-GWの守備範囲はオンプレ↔AWSであって、リージョン間ではない」&lt;/strong&gt; という役割の理解です。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;details&gt;
&lt;summary&gt;DX-GWのTerraform（参考・未構築）&lt;/summary&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-hcl" data-lang="hcl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_dx_gateway&amp;#34; &amp;#34;test&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;satoshi-dxgw&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; amazon_side_asn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;64600&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;東京TGWをDX&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="k"&gt;GWに関連付け&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_dx_gateway_association&amp;#34; &amp;#34;jp_tgw&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; dx_gateway_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_dx_gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; associated_gateway_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_ec2_transit_gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;tgw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; allowed_prefixes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;10.99.0.0/16&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="c1"&gt; # 東京VPC
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;10.0.2.0/24&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="c1"&gt; # オンプレ(VPN経由)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;バージニアTGWをDX&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="k"&gt;GWに関連付け&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_dx_gateway_association&amp;#34; &amp;#34;us_tgw&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;us&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; dx_gateway_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_dx_gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; associated_gateway_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_ec2_transit_gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;tgw_us&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; allowed_prefixes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;10.201.0.0/16&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="c1"&gt; # バージニアVPC
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;allowed_prefixes&lt;/code&gt; で各リージョンの経路を許可しても、それは「オンプレ↔そのリージョン」の話。&lt;strong&gt;リージョン同士の経路はここには現れません。&lt;/strong&gt;&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="2-リージョン間をつなぐ正解--transit-gatewayピアリング"&gt;2. リージョン間をつなぐ正解 — Transit Gatewayピアリング
&lt;/h2&gt;&lt;p&gt;リージョン間を直接つなぐ道具が &lt;strong&gt;TGWピアリング&lt;/strong&gt;です。東京TGWとバージニアTGWを&lt;strong&gt;1対1でピアリング&lt;/strong&gt;し、AWSのバックボーン上でリージョン間トラフィックを運びます。&lt;/p&gt;
&lt;p&gt;&lt;img alt="tgw peering" class="gallery-image" data-flex-basis="547px" data-flex-grow="228" height="1966" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://cloud-aws.net/post/aws-transit-gateway-peering/tgw-peering.png" srcset="https://cloud-aws.net/post/aws-transit-gateway-peering/tgw-peering_hu_66a6458ecb295c94.png 800w, https://cloud-aws.net/post/aws-transit-gateway-peering/tgw-peering_hu_b210e52bfb05c033.png 1600w, https://cloud-aws.net/post/aws-transit-gateway-peering/tgw-peering_hu_da9727974b41eef5.png 2400w, https://cloud-aws.net/post/aws-transit-gateway-peering/tgw-peering.png 4483w" width="4483"&gt;&lt;/p&gt;
&lt;p&gt;構成のポイントは2つあります。&lt;/p&gt;
&lt;h3 id="-tgwのasnをリージョンごとに分ける"&gt;① TGWのASNをリージョンごとに分ける
&lt;/h3&gt;&lt;p&gt;ピアリングする2つのTGWは、&lt;strong&gt;別々のASN&lt;/strong&gt;を持たせます（今回は東京 &lt;code&gt;65100&lt;/code&gt; / バージニア &lt;code&gt;65200&lt;/code&gt;）。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-hcl" data-lang="hcl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;東京TGW&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_ec2_transit_gateway&amp;#34; &amp;#34;tgw&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; amazon_side_asn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;65100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; auto_accept_shared_attachments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;enable&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt; { Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;satoshi-tgw-jp&amp;#34;&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;バージニアTGW&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_ec2_transit_gateway&amp;#34; &amp;#34;tgw_us&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;us&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; amazon_side_asn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;65200&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; auto_accept_shared_attachments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;enable&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt; { Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;satoshi-tgw-us&amp;#34;&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="-ピアリングは張るとルートを書くが別作業"&gt;② ピアリングは「張る」と「ルートを書く」が別作業
&lt;/h3&gt;&lt;p&gt;ここが一番の落とし穴です。&lt;strong&gt;TGWピアリングはBGPでルートを自動伝播しません&lt;/strong&gt;。ピアリング接続を張っただけでは1パケットも流れない。&lt;strong&gt;各TGWのルートテーブルに、相手リージョンのCIDR宛のルートを手で登録&lt;/strong&gt;して初めて通ります。&lt;/p&gt;
&lt;p&gt;VPNやVPC内のダイナミックなルート学習に慣れていると、ここで確実にハマります。ピアリングは「線をつなぐ」だけ、「どの宛先をその線に流すか」は別途スタティックに教える、と覚えてください。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-hcl" data-lang="hcl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;ピアリング接続を張る&lt;/span&gt;&lt;span class="err"&gt;（&lt;/span&gt;&lt;span class="k"&gt;東京&lt;/span&gt;&lt;span class="err"&gt;→&lt;/span&gt;&lt;span class="k"&gt;バージニア&lt;/span&gt;&lt;span class="err"&gt;）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_ec2_transit_gateway_peering_attachment&amp;#34; &amp;#34;jp_us&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; peer_region&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;us-east-1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; peer_transit_gateway_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_ec2_transit_gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;tgw_us&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; transit_gateway_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_ec2_transit_gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;tgw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;バージニア側で受諾&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_ec2_transit_gateway_peering_attachment_accepter&amp;#34; &amp;#34;tgw_us&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;us&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; transit_gateway_attachment_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_ec2_transit_gateway_peering_attachment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;jp_us&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;東京TGWルートテーブル&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="k"&gt;バージニアVPC宛&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="k"&gt;ピアリングへ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_ec2_transit_gateway_route&amp;#34; &amp;#34;jp_to_us&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; destination_cidr_block&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;10.201.0.0/16&amp;#34;&lt;/span&gt; &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;バージニアVPC&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; transit_gateway_attachment_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_ec2_transit_gateway_peering_attachment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;jp_us&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; transit_gateway_route_table_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_ec2_transit_gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;tgw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;association_default_route_table_id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;バージニアTGWルートテーブル&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="k"&gt;東京VPC宛&lt;/span&gt;&lt;span class="err"&gt;・&lt;/span&gt;&lt;span class="k"&gt;オンプレ宛&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="k"&gt;ピアリングへ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_ec2_transit_gateway_route&amp;#34; &amp;#34;us_to_jp&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;us&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; destination_cidr_block&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;10.99.0.0/16&amp;#34;&lt;/span&gt; &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;東京VPC&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; transit_gateway_attachment_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_ec2_transit_gateway_peering_attachment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;jp_us&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; transit_gateway_route_table_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_ec2_transit_gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;tgw_us&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;association_default_route_table_id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_ec2_transit_gateway_route&amp;#34; &amp;#34;us_to_onprem&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;us&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; destination_cidr_block&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;10.0.2.0/24&amp;#34;&lt;/span&gt; &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;オンプレ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;VyOS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; transit_gateway_attachment_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_ec2_transit_gateway_peering_attachment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;jp_us&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; transit_gateway_route_table_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_ec2_transit_gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;tgw_us&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;association_default_route_table_id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;バージニア側からオンプレ（&lt;code&gt;10.0.2.0/24&lt;/code&gt;）に戻すルートも忘れずに。&lt;strong&gt;東京TGWを経由してVPNに落ちる&lt;/strong&gt;ので、&lt;code&gt;10.0.2.0/24&lt;/code&gt;宛もピアリングアタッチメントに向けます。&lt;/p&gt;
&lt;h2 id="3-オンプレvyosから見えるもの"&gt;3. オンプレ（VyOS）から見えるもの
&lt;/h2&gt;&lt;p&gt;面白いのは、&lt;strong&gt;VyOSは何も追加設定していない&lt;/strong&gt;のに、バージニアVPC（&lt;code&gt;10.201.0.0/16&lt;/code&gt;）への経路を学習している点です。東京AWSが、VPN越しに「US向けはこっち」とBGPで広告してくれるからです。しかも第3回のECMPが効いていて、2本のトンネル両方から等コストで届いています。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vyos@vyos:~$ show ip route
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;B&amp;gt;* 10.99.0.0/16 [20/100] via 169.254.61.113, vti1, weight 1 ## 東京VPC
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; * via 169.254.234.49, vti0, weight 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;B&amp;gt;* 10.201.0.0/16 [20/100] via 169.254.61.113, vti1, weight 1 ## バージニアVPC(新規)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; * via 169.254.234.49, vti0, weight 1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;BGPテーブルでも、東京・バージニア両方のVPCが、AS-PATH &lt;code&gt;65100&lt;/code&gt;（東京TGWのASN）越しに2本で見えています。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vyos@vyos:~$ show ip bgp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Network Next Hop Metric LocPrf Weight Path
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*&amp;gt; 10.0.2.0/24 0.0.0.0 0 32768 i
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*= 10.99.0.0/16 169.254.61.113 100 0 65100 i
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*&amp;gt; 169.254.234.49 100 0 65100 i
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*= 10.201.0.0/16 169.254.61.113 100 0 65100 i
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*&amp;gt; 169.254.234.49 100 0 65100 i
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="4-エンドツーエンドの疎通確認"&gt;4. エンドツーエンドの疎通確認
&lt;/h2&gt;&lt;p&gt;3つの経路をすべて確認します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;東京VPC → バージニアVPC&lt;/strong&gt;（リージョン間。これがDX-GWでは通らなかった経路）:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ping 10.201.33.240
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;64 bytes from 10.201.33.240: icmp_seq=1 ttl=252 time=147 ms
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;64 bytes from 10.201.33.240: icmp_seq=2 ttl=252 time=145 ms
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;オンプレVyOS → バージニアVPC&lt;/strong&gt;（VPN→東京TGW→ピアリング→バージニア、と3ホップ跨ぐ）:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vyos@vyos:~$ ping 10.201.33.240 source-address 10.0.2.15
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;64 bytes from 10.201.33.240: icmp_seq=1 ttl=251 time=169 ms
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;64 bytes from 10.201.33.240: icmp_seq=2 ttl=251 time=170 ms
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;バージニアVPC → オンプレVyOS&lt;/strong&gt;（戻り。バージニアTGWの&lt;code&gt;10.0.2.0/24&lt;/code&gt;ルートが効いている証明）:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ping 10.0.2.15
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;64 bytes from 10.0.2.15: icmp_seq=1 ttl=61 time=166 ms
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;64 bytes from 10.0.2.15: icmp_seq=2 ttl=61 time=176 ms
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;東京経由（約25ms）に対し、バージニアは約145〜170ms。太平洋を渡る分のレイテンシがそのまま乗っていて、AWSバックボーン経由でリージョン間を通っていることが数字でも分かります。&lt;/p&gt;
&lt;h2 id="5-連載のまとめとここから先"&gt;5. 連載のまとめと、ここから先
&lt;/h2&gt;&lt;p&gt;4回かけて、VyOSを偽オンプレCGWに見立てたまま、AWSハイブリッド接続の能力を1段ずつ積み上げました。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;回&lt;/th&gt;
 &lt;th&gt;到達点&lt;/th&gt;
 &lt;th&gt;核心&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;単一VPN&lt;/td&gt;
 &lt;td&gt;IPsec+BGPの基礎と「謎の値の出どころ」&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;冗長化&lt;/td&gt;
 &lt;td&gt;BGP経路制御は&lt;strong&gt;方向で道具が変わる&lt;/strong&gt;（Weight / AS-Path Prepend）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;TGW + ECMP&lt;/td&gt;
 &lt;td&gt;終端をハブルータTGWに。&lt;strong&gt;MED 100/100で両系アクティブ&lt;/strong&gt;、非対称ルーティングの副作用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;マルチリージョン&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;DX-GWはリージョン間を繋がない&lt;/strong&gt;。TGWピアリングは「張る」と「ルートを書く」が別作業&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;道具の守備範囲を取り違えない、というのが通底するテーマでした。VGWとTGW、DX-GWとTGWピアリング——名前が似ていても役割の格が違います。&lt;/p&gt;
&lt;h3 id="今後の拡張未検証構想"&gt;今後の拡張（未検証・構想）
&lt;/h3&gt;&lt;p&gt;この検証環境はさらに伸ばせます。以下は今後の課題として:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AWS Network Firewall&lt;/strong&gt;: SG/ACLでは難しい、ステートフル＋ブラックリスト＋ドメインベースのフィルタを中央集約。TGWの経路上に挟む構成&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accelerated Site-to-Site VPN&lt;/strong&gt;: AWS Global Accelerator経由でVPNを高速化（TGW終端が必須、VGW不可）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PrivateLink / Route 53 Resolver&lt;/strong&gt;: サービス公開・DNSのハイブリッド解決&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ベースができていれば、これらは「経路の途中に何を挟むか」の話に落ちます。土台としてのVyOS×TGW構成は、そのまま実験台に使えます。&lt;/p&gt;</description></item><item><title>VGWからTransit Gatewayへ — VPNのECMP冗長化</title><link>https://cloud-aws.net/post/aws-transit-gateway-vpn-ecmp/</link><pubDate>Thu, 24 Nov 2022 00:00:00 +0000</pubDate><guid>https://cloud-aws.net/post/aws-transit-gateway-vpn-ecmp/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;連載: VyOSで作るAWSハイブリッド接続（全4回）&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a class="link" href="https://cloud-aws.net/post/site-to-site-vpn-vyos/" &gt;単一Site-to-Site VPN — VyOS×AWSの基礎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://cloud-aws.net/post/aws-vpn-bgp-traffic-engineering/" &gt;トンネル冗長化とBGP経路制御&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transit Gatewayへの置き換えとECMP&lt;/strong&gt;（この記事）&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://cloud-aws.net/post/aws-transit-gateway-peering/" &gt;マルチリージョン接続 — DX-GWの限界とTGWピアリング&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

 &lt;/blockquote&gt;
&lt;h2 id="0-この回のテーマ"&gt;0. この回のテーマ
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://cloud-aws.net/post/aws-vpn-bgp-traffic-engineering/" &gt;第2回&lt;/a&gt;では、VPNの終端に &lt;strong&gt;VGW（仮想プライベートゲートウェイ）&lt;/strong&gt; を使い、2本のトンネルをBGPで&lt;strong&gt;アクティブ/スタンバイ&lt;/strong&gt;に制御しました。&lt;/p&gt;
&lt;p&gt;今回はこの終端を &lt;strong&gt;Transit Gateway（TGW）&lt;/strong&gt; に置き換えます。狙いは2つです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;2本のトンネルを同時に使う（ECMP / ロードバランス）&lt;/strong&gt; 構成にする&lt;/li&gt;
&lt;li&gt;将来の拡張（複数VPC・マルチリージョン）の土台を作る&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="vgwとtgwは役割の格が違う"&gt;VGWとTGWは役割の格が違う
&lt;/h3&gt;&lt;p&gt;ネットワーク機器の感覚で対比すると分かりやすいです。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;VGW&lt;/th&gt;
 &lt;th&gt;Transit Gateway&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;立ち位置&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;1つのVPC専用&lt;/strong&gt;のVPN終端装置&lt;/td&gt;
 &lt;td&gt;リージョン規模の&lt;strong&gt;ハブルータ&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;束ねられるもの&lt;/td&gt;
 &lt;td&gt;そのVPCとのVPN/DXだけ&lt;/td&gt;
 &lt;td&gt;複数VPC・複数VPN・DX・別リージョンのTGWまで&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;例えるなら&lt;/td&gt;
 &lt;td&gt;拠点ルータのVPNモジュール&lt;/td&gt;
 &lt;td&gt;データセンターのコアスイッチ／ルータ&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;VGWが「VPCに後付けするVPN口」なら、TGWは「VPCもVPNもDXも全部ぶら下げる中央ルータ」です。今はVPN1本をつなぐだけですが、第4回でこのハブ性がマルチリージョン接続の鍵になります。&lt;/p&gt;
&lt;p&gt;そしてもう一つ、&lt;strong&gt;TGWはECMP（Equal-Cost Multi-Path）に対応&lt;/strong&gt;しています。これが今回の挙動差の本体です。&lt;/p&gt;
&lt;h2 id="1-vyos側-経路制御を外す"&gt;1. VyOS側: 経路制御を「外す」
&lt;/h2&gt;&lt;p&gt;第2回では、2本を意図的に偏らせるためにWeightとAS-Path Prependを入れました。ECMPは&lt;strong&gt;両トンネルを等コストにして同時利用する&lt;/strong&gt;のが目的なので、この偏りを&lt;strong&gt;削除&lt;/strong&gt;します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;VyOS&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;AWS&lt;/span&gt; &lt;span class="err"&gt;の偏り（&lt;/span&gt;&lt;span class="n"&gt;Weight&lt;/span&gt;&lt;span class="err"&gt;）を削除&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;delete&lt;/span&gt; &lt;span class="n"&gt;protocols&lt;/span&gt; &lt;span class="n"&gt;bgp&lt;/span&gt; &lt;span class="n"&gt;neighbor&lt;/span&gt; &lt;span class="mf"&gt;169.254&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;234.49&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;family&lt;/span&gt; &lt;span class="n"&gt;ipv4&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;unicast&lt;/span&gt; &lt;span class="n"&gt;weight&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;300&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;AWS&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;VyOS&lt;/span&gt; &lt;span class="err"&gt;の偏り（&lt;/span&gt;&lt;span class="n"&gt;AS&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ne"&gt;Path&lt;/span&gt; &lt;span class="n"&gt;Prepend&lt;/span&gt;&lt;span class="err"&gt;）を削除&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;delete&lt;/span&gt; &lt;span class="n"&gt;protocols&lt;/span&gt; &lt;span class="n"&gt;bgp&lt;/span&gt; &lt;span class="n"&gt;neighbor&lt;/span&gt; &lt;span class="mf"&gt;169.254&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;61.113&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;family&lt;/span&gt; &lt;span class="n"&gt;ipv4&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;unicast&lt;/span&gt; &lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;VPC-Tunnel-2-OUT&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;削除後のBGPテーブルを見ると、2本が等コストになり、&lt;code&gt;*=&lt;/code&gt;（multipath = ECMP対象）のマークが付きます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vyos@vyos:~$ show ip bgp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Network Next Hop Metric LocPrf Weight Path
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*&amp;gt; 10.0.2.0/24 0.0.0.0 0 32768 i
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*&amp;gt; 10.99.0.0/16 169.254.234.49 100 0 64512 i
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*= 169.254.61.113 100 0 64512 i ## = はmultipath
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;*&amp;gt;&lt;/code&gt; と &lt;code&gt;*=&lt;/code&gt; の両方が有効経路として使われる状態、これがECMPです。&lt;/p&gt;
&lt;h2 id="2-aws側-vgwを外しtgwを作るterraform"&gt;2. AWS側: VGWを外しTGWを作る（Terraform）
&lt;/h2&gt;&lt;p&gt;ここから初めてTerraformで組みます。やることは「TGWを作る」「ネットワーク用サブネットにアタッチする」「VPN接続をTGWに紐づける」の3点です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-hcl" data-lang="hcl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;Transit&lt;/span&gt; &lt;span class="k"&gt;Gateway本体&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_ec2_transit_gateway&amp;#34; &amp;#34;tgw&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; auto_accept_shared_attachments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;enable&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt; { Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;satoshi-tgw&amp;#34;&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;TGWをネットワーク用サブネットにアタッチ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_ec2_transit_gateway_vpc_attachment&amp;#34; &amp;#34;tgw&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; subnet_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;aws_subnet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;network&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; transit_gateway_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_ec2_transit_gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;tgw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; vpc_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt; { Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tgw-attach-shared-vpc&amp;#34;&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;Publicサブネットから&lt;/span&gt;&lt;span class="err"&gt;、&lt;/span&gt;&lt;span class="k"&gt;オンプレ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="m"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="k"&gt;宛をTGWへ向けるルート&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_route&amp;#34; &amp;#34;public_tgw&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; route_table_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_route_table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;pub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; destination_cidr_block&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;10.0.2.0/24&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; transit_gateway_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_ec2_transit_gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;tgw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;Site&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="k"&gt;Site&lt;/span&gt; &lt;span class="k"&gt;VPNの接続先を&lt;/span&gt; &lt;span class="k"&gt;VGW&lt;/span&gt; &lt;span class="k"&gt;ではなく&lt;/span&gt; &lt;span class="k"&gt;TGW&lt;/span&gt; &lt;span class="k"&gt;にする&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_vpn_connection&amp;#34; &amp;#34;vpn&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; transit_gateway_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_ec2_transit_gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;tgw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt; &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="err"&gt;←&lt;/span&gt; &lt;span class="k"&gt;ここがVGWからの変更点&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; customer_gateway_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_customer_gateway&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;cgw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ipsec.1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; static_routes_only&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;false&lt;/span&gt; &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="k"&gt;動的&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;BGP&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;tunnel1_log_options&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;cloudwatch_log_options&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; log_enabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; log_group_arn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_cloudwatch_log_group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;vpn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;arn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; log_output_format&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;json&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt; { Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;${var.name}-vpn-01&amp;#34;&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="tgwアタッチで踏みやすい3つの注意点"&gt;TGWアタッチで踏みやすい3つの注意点
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AZの一致&lt;/strong&gt;: あるサブネットからTGW経由で通信したいなら、&lt;strong&gt;そのサブネットと同じAZにTGWのアタッチメント（ENI）が存在&lt;/strong&gt;している必要があります。AZをまたぐと無言で届きません。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;専用サブネット推奨&lt;/strong&gt;: TGWアタッチ用に&lt;strong&gt;小さな専用サブネット&lt;/strong&gt;を切るのがベストプラクティス。EC2を置くサブネットと混ぜない。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ルートテーブルへの明示&lt;/strong&gt;: VPCのルートテーブルに、オンプレ宛（&lt;code&gt;10.0.2.0/24&lt;/code&gt;）を&lt;strong&gt;TGW向き&lt;/strong&gt;で登録する必要があります。VGWの「ルート伝搬」のようには自動で入りません。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="3-検証-vgwとの挙動差medとecmp"&gt;3. 検証: VGWとの挙動差（MEDとECMP）
&lt;/h2&gt;&lt;p&gt;ここが第2回との一番面白い対比です。VPNテーブルを見ると、&lt;strong&gt;両トンネルともMEDが100&lt;/strong&gt;で通知されています。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vyos@vyos:~$ show ip bgp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Network Next Hop Metric LocPrf Weight Path
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*&amp;gt; 10.0.2.0/24 0.0.0.0 0 32768 i
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*&amp;gt; 10.99.0.0/16 169.254.234.49 100 0 64512 i
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;* 169.254.61.113 100 0 64512 i
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;第2回のVGWは &lt;strong&gt;100 / 200&lt;/strong&gt; を付けてアクティブ/スタンバイに誘導してきました。&lt;strong&gt;TGWは 100 / 100&lt;/strong&gt; の等コスト。これがTGWのデフォルトが**ECMP（両系アクティブ）**である証拠です。終端を替えただけで、AWS側のBGP広告の性格が変わる、というのは押さえどころです。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;VGW（第2回）&lt;/th&gt;
 &lt;th&gt;TGW（今回）&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;AWSが付けるMED&lt;/td&gt;
 &lt;td&gt;100 / 200&lt;/td&gt;
 &lt;td&gt;100 / 100&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;デフォルト挙動&lt;/td&gt;
 &lt;td&gt;アクティブ/スタンバイ&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;ECMP（両系同時利用）&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="非対称ルーティングに注意"&gt;非対称ルーティングに注意
&lt;/h3&gt;&lt;p&gt;ECMPの実機検証で、実際にこういう現象が出ます。AWS側からpingを打つと、&lt;strong&gt;行きと戻りで別々のトンネルを通る&lt;/strong&gt;ことがあります。&lt;/p&gt;
&lt;p&gt;&lt;img alt="aws ping: asymmetric" class="gallery-image" data-flex-basis="565px" data-flex-grow="235" height="415" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://cloud-aws.net/post/aws-transit-gateway-vpn-ecmp/aws-ping.png" srcset="https://cloud-aws.net/post/aws-transit-gateway-vpn-ecmp/aws-ping_hu_3ba4fcbf340f93eb.png 800w, https://cloud-aws.net/post/aws-transit-gateway-vpn-ecmp/aws-ping.png 978w" width="978"&gt;&lt;/p&gt;
&lt;p&gt;VyOS側から打つと、両方向とも同じ経路（&lt;code&gt;.6&lt;/code&gt;系）に乗りました。&lt;/p&gt;
&lt;p&gt;&lt;img alt="vyos ping" class="gallery-image" data-flex-basis="576px" data-flex-grow="240" height="401" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://cloud-aws.net/post/aws-transit-gateway-vpn-ecmp/vyos-ping.png" srcset="https://cloud-aws.net/post/aws-transit-gateway-vpn-ecmp/vyos-ping_hu_227f1c7b312ba43d.png 800w, https://cloud-aws.net/post/aws-transit-gateway-vpn-ecmp/vyos-ping.png 964w" width="964"&gt;&lt;/p&gt;
&lt;p&gt;これがECMPの本質的な副作用、&lt;strong&gt;非対称ルーティング&lt;/strong&gt;です。経路が等コストで複数あると、ハッシュ次第で行きと戻りが別トンネルになる。&lt;/p&gt;
&lt;p&gt;ICMPなら問題なく返りますが、&lt;strong&gt;経路上にステートフルな機器（FW・NAT・IDS等）があると致命的&lt;/strong&gt;になり得ます。行きのパケットしか見ていない機器が戻りを不正と判断して落とすからです。実運用でECMPを使うなら、経路上のステートフル機器の有無を必ず確認してください。スループットを稼ぎたいだけなら第2回のアクティブ/スタンバイの方が安全、という判断もあります。&lt;/p&gt;
&lt;h2 id="4-完成形"&gt;4. 完成形
&lt;/h2&gt;&lt;p&gt;VPNの終端がVGWからTransit Gatewayに替わり、2本のトンネルがECMPで同時に使われる構成です。&lt;/p&gt;
&lt;p&gt;&lt;img alt="tgw ecmp final" class="gallery-image" data-flex-basis="803px" data-flex-grow="334" height="541" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://cloud-aws.net/post/aws-transit-gateway-vpn-ecmp/final.png" srcset="https://cloud-aws.net/post/aws-transit-gateway-vpn-ecmp/final_hu_c8193531c5e03957.png 800w, https://cloud-aws.net/post/aws-transit-gateway-vpn-ecmp/final_hu_2b33fc6dd5974ee6.png 1600w, https://cloud-aws.net/post/aws-transit-gateway-vpn-ecmp/final.png 1812w" width="1812"&gt;&lt;/p&gt;
&lt;h2 id="まとめ"&gt;まとめ
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VGWは1VPC専用のVPN口、TGWはリージョンのハブルータ&lt;/strong&gt;。格が違う&lt;/li&gt;
&lt;li&gt;終端をTGWにすると、AWSのMEDが &lt;strong&gt;100/100の等コスト&lt;/strong&gt;になり、デフォルトで**ECMP（両系アクティブ）**になる（VGWは100/200のアクティブ/スタンバイ）&lt;/li&gt;
&lt;li&gt;ECMPには&lt;strong&gt;非対称ルーティング&lt;/strong&gt;の副作用がある。経路上にステートフル機器があると危険&lt;/li&gt;
&lt;li&gt;TGWアタッチは &lt;strong&gt;AZ一致・専用サブネット・ルートの明示登録&lt;/strong&gt; が踏みどころ&lt;/li&gt;
&lt;li&gt;TGWというハブを手に入れたことで、&lt;a class="link" href="https://cloud-aws.net/post/aws-transit-gateway-peering/" &gt;次回&lt;/a&gt;は&lt;strong&gt;別リージョンとの接続&lt;/strong&gt;に進めます。ここで「DX-GWではリージョン間がつながらない」という壁にぶつかり、TGWピアリングで超えます。&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>