Amazon LinuxでTransit Gateway Connectと接続してみた
はじめに
皆さん、Transit Gateway Connectを試したことはありますか?
仮想アプライアンスなどが必要と思って敷居を高く感じてませんか?
Amazon Linux 2023を利用してTransit Gateway Connect経由で経路広報などができます。
なんでAmazon Linuxで繋ぐの?
事前の検証や軽い動作するためにお金がかかる仮想アプライアンスを使うのは躊躇いますよね
ただでさえTGWやTGWアタッチメントにお金がかかるのに
インスタンス代にプラスPay-As-You-Go (PAYG)では気軽にテストできませんよね。
そんな気軽に試したい人向けの記事になります。
まずは構成を見てみましょう!
構成図

実際に検証するにはこの程度でいいです。 実際はTGW接続用のセグメントがありますが簡略化して書いてます。 特に難しいことはありません。
TGW Connectの準備
- 既存のすべてのVPCとTGWアタッチメントで接続してること
- 次にTGW Connect用のアタッチメントを作成してください。
- TGW IDと既存のTGWアタッチメントを選択して作成してください。

TGW Connect Peerの作成
- 次はpeerを作成しましょう!TGW Connectの画面から「Connectピアの作成」ボタンを押しましょう。

- 今回は以下のパラメーターを入れてます
- TGWアドレス(TGWのIPv4アドレスから指定してます)
- ピアGREアドレス(対向となるEC2インスタンスのIPを指定してください)
- BGP内部CIDRブロック(利用できるアドレスが決まってますので情報の部分をクリックして確認してください)
- ピアASN(EC2側で利用するASNです)

- 設定を入れるとConnectピアに設定が入ってるのが確認できます。BGPはまだ上がりません。

- その後TGWのルートテーブルでTGW Connectアタッチメントの伝播設定をしてください。
Amazon Linux 2023の準備
Amazon Linux 2023とfrrで接続できます。 まずはAmazon Linux 2023をインストールしてください。今回私はt4g.smallで行いましたが小さいインスタンスでもメモリさえ足りれば大丈夫だと思います。 今回の構成図にはありませんが検証を考えるとNAT Gateway等設置しておくとエンドポイント等も準備しなくて楽かもしれません。
インストールが完了したら念の為「送信元/送信先チェック中」を「停止」しましょう。 トンネリングされてるため影響はないと思いますが「停止」することをお勧めします。
セキュリティグループはGRE(プロトコル番号 47)を許可する必要があります。
その後インスタンスに入りましょう。
- Amazon Linux 2023ではfrrパッケージはSPALにあるのでSPALを有効化しましょう。
sudo dnf install spal-release
- frrのインストール
sudo dnf install frr -y
- frrの有効化
sudo systemctl enable --now frr
- GREモジュールのロード
sudo modprobe ip_gre
*モジュールがロードされているかの確認
sudo lsmod | grep ip_gre
- 下記でトンネルデバイスとBGP用のアドレスを設定しましょう。
1. GREトンネルデバイスの作成
# 本体のIP(local)が 10.100.100.229、対向(remote)が 10.10.0.1環境に合わせてください。 sudo ip tunnel add gre1 mode gre local 10.100.100.229 remote 10.10.0.1 ttl 255
2. MTUの設定
# 出力結果の mtu 1300 に基づく設定 sudo ip link set gre1 mtu 1300
3. BGP用のIPの設定
IP等は環境に合わせてください。 sudo ip addr add 169.254.100.1/29 dev gre1
4 .オフロードの無効化(トンネルインターフェースに対して)
sudo ethtool -K gre1 gso off gro off tso off
5. greインターフェイスのアップ
sudo ip link set gre1 up
frrの設定
- 今回は詳細なfrrの使い方は触れませんが興味ある方は色々調べてみてください。公式サイトはこちら。
- /etc/frr/frr.confを以下のようにしてください。IP等は環境に合わせてください。
frr version 10.4.1 frr defaults traditional hostname ip-10-100-100-229.ap-northeast-1.compute.internal ! route-map ALLOW-ALL permit 10 exit ! ip route 10.231.128.0/19 Null0 ! router bgp 65001 bgp router-id 10.100.100.229 no bgp enforce-first-as neighbor 169.254.100.2 remote-as 65000 neighbor 169.254.100.2 ebgp-multihop 2 neighbor 169.254.100.2 disable-connected-check neighbor 169.254.100.2 timers 10 30 neighbor 169.254.100.3 remote-as 65000 neighbor 169.254.100.3 ebgp-multihop 2 neighbor 169.254.100.3 disable-connected-check neighbor 169.254.100.3 timers 10 30 ! address-family ipv4 unicast network 10.231.128.0/19 neighbor 169.254.100.2 soft-reconfiguration inbound neighbor 169.254.100.2 route-map ALLOW-ALL in neighbor 169.254.100.2 route-map ALLOW-ALL out neighbor 169.254.100.3 soft-reconfiguration inbound neighbor 169.254.100.3 route-map ALLOW-ALL in neighbor 169.254.100.3 route-map ALLOW-ALL out exit-address-family exit !
- 上記デフォルトだとTTLが1のためGREで動かす場合はebgp-multihop 2が必要です。
- 設定を反映させるためにfrrを再起動してください。
sudo systemctl restart frr
BGPの確認
- 下記コマンドで接続できてるか確認しましょう!
sudo vtysh -c "show ip bgp summary"
- 下記の様になってれば接続できてます。

- AWSから広報されてるか確認しましょう。10.100.0.0/16、10.110.0.0/16、10.120.0.0/16が見えてますね。

- EC2から経路が広報されてるかも確認しましょう!一番下に広報用の10.231.128.0/19がありますね。
sudo vtysh -c "show ip bgp neighbors 169.254.100.2 advertised-routes"

AWSの確認
- AWSでTGW ConnectピアのBGPがアップしてると思います。

- AWS側のTGWルートテーブルも経路を受信してると思います。

ハマったところ
- EC2絡みがハマりやすいです。
- GREトンネル向けのオフロードは切ってください
- EC2のGREトンネルのMTUサイズは小さくしてください(記事ではMTU1300にしてます)
- GREトンネル下でeBGP張るときはebgp-multihopの値を大きくする必要がある
- TGWのBGPアドレスはピアがEC2、TGW BGPアドレスがAWS側
みたいな感じでした。AWS側は殆ど問題ないのですがEC2が問題起こすので気をつけてください。
これから何をする?
- この環境が出来ればAWSのルートテーブルから特定VPCの伝播設定を削除することにより伝播されなくなります。
- またEC2側で経路注入して特定のルートを伝播させることもできます。
最後に
- 敷居が高く見えるTransit Gateway Connectですが簡単に試すことができます。
- 今後仮想アプライアンスなどとも繋いで動作することもあるでしょうがこれで事前にテストできますよね。
- AWSの仕組みはマネージドサービスなのでお任せですがどう動作するか実際に確認できると違います。
- 皆様もぜひお試しください。面倒くさかったらアプライアンス使ってもいいですよ。