この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
中山(順)です
仮想プライベートゲートウェイとのVPN接続をTransit Gatewayに移行できるようになりました。
やってみた
VGWとVPN接続している状態を作成しておきます。 今回は、以下の記事で構築した環境を移行してみます。 というか、以下の記事はこの記事のために書きました。
移行前の構成は以下の通りです。
これを以下のようにします。
以下の手順で移行をすすめます。
- Transit Gatewayを作成およびVPCにアタッチ
- VPN Connectionを変更
- ルートテーブルを修正
Modifying a Site-to-Site VPN Connection's Target Gateway
今回はAWS CLIでやっていきます。
Transit Gatewayを作成およびVPCにアタッチ
Transit Gatewayを作成します。
aws ec2 create-transit-gateway
{
"TransitGateway": {
"TransitGatewayArn": "arn:aws:ec2:ap-northeast-1:XXXXXXXXXXXX:transit-gateway/tgw-05b0a9c4c2fec5f4b",
"CreationTime": "2019-05-01T16:25:32.000Z",
"State": "pending",
"TransitGatewayId": "tgw-05b0a9c4c2fec5f4b",
"OwnerId": "521539043457",
"Options": {
"DefaultRouteTableAssociation": "enable",
"DnsSupport": "enable",
"AutoAcceptSharedAttachments": "disable",
"AssociationDefaultRouteTableId": "tgw-rtb-00df1442d804fb846",
"PropagationDefaultRouteTableId": "tgw-rtb-00df1442d804fb846",
"AmazonSideAsn": 64512,
"DefaultRouteTablePropagation": "enable",
"VpnEcmpSupport": "enable"
}
}
}
このTransit GatewayをVPCにアタッチします。
aws ec2 create-transit-gateway-vpc-attachment \
--transit-gateway-id tgw-05b0a9c4c2fec5f4b \
--vpc-id vpc-0540e877c50287092 \
--subnet-ids subnet-0b38aff0967a8bd79 subnet-0bd6948809a875968 subnet-06b10a86356d582b8
{
"TransitGatewayVpcAttachment": {
"VpcId": "vpc-0540e877c50287092",
"VpcOwnerId": "521539043457",
"SubnetIds": [
"subnet-0bd6948809a875968",
"subnet-0b38aff0967a8bd79",
"subnet-06b10a86356d582b8"
],
"TransitGatewayAttachmentId": "tgw-attach-08bc765835a81efc5",
"CreationTime": "2019-05-01T16:28:31.000Z",
"State": "pending",
"TransitGatewayId": "tgw-05b0a9c4c2fec5f4b",
"Options": {
"DnsSupport": "enable",
"Ipv6Support": "disable"
}
}
}
現時点でのTransit Gatewayのルートテーブルの状態を確認しておきます。
aws ec2 describe-transit-gateway-route-tables
{
"TransitGatewayRouteTables": [
{
"DefaultPropagationRouteTable": true,
"Tags": [],
"CreationTime": "2019-05-01T16:26:02.000Z",
"TransitGatewayRouteTableId": "tgw-rtb-00df1442d804fb846",
"State": "available",
"TransitGatewayId": "tgw-05b0a9c4c2fec5f4b",
"DefaultAssociationRouteTable": true
}
]
}
aws ec2 search-transit-gateway-routes \
--transit-gateway-route-table-id tgw-rtb-00df1442d804fb846 \
--filters Name=attachment.resource-id,Values=vpc-0540e877c50287092
{
"Routes": [
{
"TransitGatewayAttachments": [
{
"ResourceType": "vpc",
"ResourceId": "vpc-0540e877c50287092",
"TransitGatewayAttachmentId": "tgw-attach-08bc765835a81efc5"
}
],
"DestinationCidrBlock": "10.0.0.0/16",
"State": "active",
"Type": "propagated"
}
],
"AdditionalRoutesAvailable": false
}
以上のように、VPCのCIDRがTransit Gatewayに広告されていることが分かります。
VPN Connectionを変更
ここもAWS CLIで設定しようと思いましたが、どうやらブログの執筆時点でAWS CLIにコマンドが提供されていないようでした。 しょうがないので、マネージメントコンソールで設定します。
変更先であるTransit Gatewayを指定します。
変更処理が開始されてしばらくすると、通信ができなくなります。
しばらくすると、VPNトンネルのステータスが復活します。 この際、VPNルーターの設定は変更しておりません。
以下はルーターのsyslogです。
2019/05/02 02:11:02: same message repeated 3 times
2019/05/02 02:11:02: [IKE] SA[1] DPD: detected dead peer
2019/05/02 02:11:03: [IKE] initiate ISAKMP phase to xxx.xxx.xxx.xxx (local address zzz.zzz.zzz.zzz)
2019/05/02 02:11:03: [IKE] initiate informational exchange (delete)
2019/05/02 02:11:03: same message repeated 1 times
2019/05/02 02:11:03: IP Tunnel[1] Down
2019/05/02 02:11:07: [IKE] initiate informational exchange (delete)
2019/05/02 02:11:08: [IKE] initiate ISAKMP phase to xxx.xxx.xxx.xxx (local address zzz.zzz.zzz.zzz)
2019/05/02 02:11:10: [IKE] SA[2] DPD: detected dead peer
2019/05/02 02:11:11: [IKE] initiate ISAKMP phase to yyy.yyy.yyy.yyy (local address zzz.zzz.zzz.zzz)
2019/05/02 02:11:11: [IKE] initiate informational exchange (delete)
2019/05/02 02:11:11: same message repeated 1 times
2019/05/02 02:11:11: IP Tunnel[2] Down
2019/05/02 02:11:15: [IKE] initiate informational exchange (delete)
2019/05/02 02:11:16: [IKE] initiate ISAKMP phase to yyy.yyy.yyy.yyy (local address zzz.zzz.zzz.zzz)
2019/05/02 02:13:25: [IKE] initiate IPsec phase to xxx.xxx.xxx.xxx
2019/05/02 02:13:26: IP Tunnel[1] Up
2019/05/02 02:13:33: [IKE] initiate IPsec phase to yyy.yyy.yyy.yyy
2019/05/02 02:13:34: IP Tunnel[2] Up
ルートテーブルを修正
ここまでで、VPN接続自体の移行は完了しますが、エンドツーエンドの通信は復活していません。 なぜなら、これまではVGWに広告されていた経路を自動でルートテーブルに広告していたのですが、Transit GatewayをVPCにアタッチしただけでは経路を広告してくれないためです。
そのため、手動でルートを追加します。
ここまでの作業でエンドツーエンドの通信が復活しました。
ルートの確認
以上のように、VPCから広告された経路だけでなく、VPNから広告された経路も確認できます。
aws ec2 search-transit-gateway-routes \
--transit-gateway-route-table-id tgw-rtb-00df1442d804fb846 \
--filters Name=attachment.resource-type,Values=vpn
{
"Routes": [
{
"TransitGatewayAttachments": [
{
"ResourceType": "vpn",
"ResourceId": "vpn-0b491a1a6c8c6ba29(xxx.xxx.xxx.xxx)",
"TransitGatewayAttachmentId": "tgw-attach-0f39950ff4639057c"
},
{
"ResourceType": "vpn",
"ResourceId": "vpn-0b491a1a6c8c6ba29(yyy.yyy.yyy.yyy)",
"TransitGatewayAttachmentId": "tgw-attach-0f39950ff4639057c"
}
],
"DestinationCidrBlock": "0.0.0.0/0",
"State": "active",
"Type": "propagated"
}
],
"AdditionalRoutesAvailable": false
}
aws ec2 search-transit-gateway-routes \
--transit-gateway-route-table-id tgw-rtb-00df1442d804fb846 \
--filters Name=attachment.resource-type,Values=vpc
{
"Routes": [
{
"TransitGatewayAttachments": [
{
"ResourceType": "vpc",
"ResourceId": "vpc-0540e877c50287092",
"TransitGatewayAttachmentId": "tgw-attach-08bc765835a81efc5"
}
],
"DestinationCidrBlock": "10.0.0.0/16",
"State": "active",
"Type": "propagated"
}
],
"AdditionalRoutesAvailable": false
}
まとめ
この通り、Transit Gatewayへの移行にはダウンタイムを伴います。
とはいっても、Transit Gatewayに移行することでトポロジーが圧倒的にシンプルになりますので、ネットワークが複雑で管理に難儀している方にはおすすめです。
現場からは以上です。