はじめに
AWS の VPC を VPN で接続する方法自体は、以前から仮想プライベートゲートウェイ(VGW)経由の方法がありました。
2018年に Transit Gateway というものを経由する方法もできてたことを知りました。
Transit Gateway を利用する場合は、VPC ごとに VGW、VPN を作成しなくてよく、効率的なようです。
そこで、雰囲気を掴みたく、Transit Gateway とオンプレの VPN 接続を試してみました。
設定手順
基本的には、以下の記事を参考にさせていただきました。
私の環境の場合は、接続したい VPC 配下のサブネットが利用しているルートテーブルに、作成した Transit Gateway に向けるルートを追加しました。 (うまくやれば自動反映されるのでしょうか・・?)(追記: ルートテーブルの伝搬を有効にすれば反映されたはず)
VPC は2つ(10.0.0.0/16、10.2.0.0/16)アタッチしました。
なお、オンプレ側のルーターは、固定IPを振った RTX 1200 を利用しました。コンフィグは、AWS 側の画面で生成されてダウンロードしたものをベースにしました。
確認
AWS 側
VPN 接続では、2つのトンネルがアップしました。
Transit Gateway 接続では、アタッチした2つの VPC(10.0.0.0/16、10.2.0.0/16)と、オンプレのルーターから広報された2つの経路(192.168.1.0/24、192.168.100.0/24)が掲載されました。
ルーター側
tunnel 1
と tunnle 2
それぞれ Online
。
rtx# show status tunnel 1 TUNNEL[1]: Description: Interface type: IPsec Current status is Online. from 2021/01/02 20:38:10. 15 hours 3 minutes 43 seconds connection. Received: (IPv4) 12378 packets [782025 octets] (IPv6) 0 packet [0 octet] Transmitted: (IPv4) 12091 packets [740159 octets] (IPv6) 0 packet [0 octet] rtx# rtx# show status tunnel 2 TUNNEL[2]: Description: Interface type: IPsec Current status is Online. from 2021/01/02 20:34:25. 15 hours 7 minutes 38 seconds connection. Received: (IPv4) 14017 packets [942791 octets] (IPv6) 0 packet [0 octet] Transmitted: (IPv4) 16045 packets [1147258 octets] (IPv6) 0 packet [0 octet]
2つの BGP ネイバーは Established
。
rtx# show status bgp neighbor BGP neighbor is 169.254.140.1, remote AS 64512, local AS 65000, external link BGP version 4, remote router ID 169.254.140.1 BGP state = Established, up for 00:46:42 Last read 00:00:01, hold time is 30, keepalive interval is 10 seconds Received 283 messages, 0 notifications, 0 in queue Sent 285 messages, 0 notifications, 0 in queue Connection established 3; dropped 2 Last reset 01:31:55 Local host: 169.254.140.2, Local port: 179 Foreign host: 169.254.140.1, Foreign port: 39273 BGP neighbor is 169.254.65.129, remote AS 64512, local AS 65000, external link BGP version 4, remote router ID 169.254.65.129 BGP state = Established, up for 04:36:03 Last read 00:00:03, hold time is 30, keepalive interval is 10 seconds Received 1658 messages, 0 notifications, 0 in queue Sent 1661 messages, 0 notifications, 0 in queue Connection established 2; dropped 1 Last reset 05:21:17 Local host: 169.254.65.130, Local port: 179 Foreign host: 169.254.65.129, Foreign port: 42405
2つの VPC の分を受信し、オンプレから 2つの経路を広報。
rtx# show status bgp neighbor 169.254.140.1 received-routes Total routes: 2 *: valid route Network Next Hop Metric LocPrf Path 10.0.0.0/16 169.254.140.1 100 64512 IGP 10.2.0.0/16 169.254.140.1 100 64512 IGP rtx# rtx# show status bgp neighbor 169.254.140.1 advertised-routes Total routes: 2 *: valid route Network Next Hop Metric LocPrf Path * 192.168.1.0/24 169.254.140.2 65000 IGP * 192.168.100.0/24 169.254.140.2 65000 IGP rtx# show status bgp neighbor 169.254.65.129 received-routes Total routes: 2 *: valid route Network Next Hop Metric LocPrf Path * 10.0.0.0/16 169.254.65.129 100 64512 IGP * 10.2.0.0/16 169.254.65.129 100 64512 IGP rtx# rtx# show status bgp neighbor 169.254.65.129 advertised-routes Total routes: 2 *: valid route Network Next Hop Metric LocPrf Path * 192.168.1.0/24 169.254.65.130 65000 IGP * 192.168.100.0/24 169.254.65.130 65000 IGP
ルーティングテーブルには tunnel 2 に向く経路が載っています。
rtx# show ip route Destination Gateway Interface Kind Additional Info. default - PP[01] static 10.0.0.0/16 169.254.65.129 TUNNEL[2] BGP path=64512 10.2.0.0/16 169.254.65.129 TUNNEL[2] BGP path=64512 169.254.65.128/30 - TUNNEL[2] implicit 169.254.140.0/30 - TUNNEL[1] implicit ...(略)...
エンドツーエンド
オンプレ側のマシン(192.168.100.2)から、各 VPC 内のインスタンスへの ping が無事通過。
[root@awx-try ~]# ping 10.0.1.10 PING 10.0.1.10 (10.0.1.10) 56(84) bytes of data. 64 bytes from 10.0.1.10: icmp_seq=1 ttl=252 time=9.76 ms 64 bytes from 10.0.1.10: icmp_seq=2 ttl=252 time=9.45 ms 64 bytes from 10.0.1.10: icmp_seq=3 ttl=252 time=9.45 ms 64 bytes from 10.0.1.10: icmp_seq=4 ttl=252 time=8.87 ms [root@testsv ~]# [root@testsv ~]# ping 10.2.1.10 PING 10.2.1.10 (10.2.1.10) 56(84) bytes of data. 64 bytes from 10.2.1.10: icmp_seq=1 ttl=252 time=8.44 ms 64 bytes from 10.2.1.10: icmp_seq=2 ttl=252 time=10.1 ms 64 bytes from 10.2.1.10: icmp_seq=3 ttl=252 time=8.29 ms 64 bytes from 10.2.1.10: icmp_seq=4 ttl=252 time=8.16 ms
参考: awscli での設定手順
GUI であちこち設定画面を行き来するのが少しだけ手間だったので、 あとで、awscli でも同様のことができるか試しました。
Transit Gatetway の作成
まずは、Transit Gatetway を作成します。
aws ec2 create-transit-gateway --options="AmazonSideAsn=64512" --tag-specifications "ResourceType=transit-gateway,Tags=[{Key=Name,Value=tgw-test99}]"
戻り値の TransitGatewayId
の値を控えておきます。
Customer Gateway の作成
GUI では、Create Transit Gateway Attachment 画面で、Customer Gateway の作成と Transit Gatetway との接続を同時に設定しました。
一方、awscli まず Customer Gateway を作成します。
aws ec2 create-customer-gateway --bgp-asn 65000 --public-ip ${カスタマーゲートウェイ側のIP} --type ipsec.1 --tag-specifications "ResourceType=customer-gateway,Tags=[{Key=Name,Value=cgw-test99}]"
戻り値の CustomerGatewayId
の値を控えておきます。
VPN 接続の作成
続いて VPN 接続を作成します。このとき、最初に作成した Transit Gateway の ID を --transit-gateway-id
オプションで指定します。
aws ec2 create-vpn-connection --type ipsec.1 --customer-gateway-id ${控えておいたCustomerGatewayId} --transit-gateway-id ${控えておいたTransitGatewayId} --tag-specifications "ResourceType=vpn-connection,Tags=[{Key=Name,Value=vpn-test99}]"
これを実行したあと、VPN の設定画面の「設定のダウンロード」でダウンロードした、コンフィグをルーターに流し込みます。
(設定のダウンロードは自動化できるのでしょうか・・?戻り値の CustomerGatewayConfiguration
内の値と何かしらのテンプレートで生成できそうすが)
Transit Gatetway と VPC のアタッチ
Transit Gatetway と VPC にアタッチします。
aws ec2 create-transit-gateway-vpc-attachment --vpc-id ${対象の VPC ID} --transit-gateway-id ${控えておいたTransitGatewayId} --subnet-ids ${対象のサブネットID} --tag-specifications "ResourceType=transit-gateway-attachment,Tags=[{Key=Name,Value=tgw-attach-vpc-test99}]"
ルートテーブルに Transit Gateway 追加
最後に、対象サブネットが利用するルートテーブルに、Transit Gateway をターゲットとするルートを追加します。ここではデフォゲとして設定します。
aws ec2 create-route --route-table-id ${対象のルートテーブルID} --destination-cidr-block "0.0.0.0/0" --transit-gateway-id ${控えておいたTransitGatewayId}
おわりに
Transit Gateway を経由して、VPC とオンプレの間を VPN 接続で接続できることを試しました。
Transit Gateway をハブとした構成で接続できるのは便利なのだろうなと思いました。