AWS Transit GatewayとAlibaba Cloud CENの接続

記事タイトルとURLをコピーする

はじめに

2018年11月にAWS Transit Gatewayが登場しました。
これは複数のVPCを接続するHUBとなるサービスです。
一方、Alibaba CloudではCEN(Cloud Enterprise Network)という同様のサービスが既にあります。
まず、両サービスの構成図を比較してみましょう。

なお、この記事はAlibaba Cloudアドベントカレンダー2018の12日目となります。

AWS Transit Gateway

AWS Transit Gateway(VPC およびアカウント接続を簡単にスケール)| AWS

Alibaba Cloud CEN

Cloud Enterprise Networkの概要 - プロダクト紹介| Alibaba Cloud ドキュメントセンター

どうでしょう?とても似てますよね。
AWSのVPCはTransit Gatewayを介して、お互いに通信可能です。
Alibaba CloudのVPCもCENを介して、お互いに通信可能です。
それなら、Transit GatewayとCENを接続すれば、全て通信可能だと思いませんか?

こんな構成を作って見ました。

Transit GatewayとCENをVPN接続し、両クラウドの全VPCが通信可能となる構成です。

構築手順

1. VPC作成

普通にVPC、サブネットなどを作ります。
ここの手順説明は省略させていただきますが、図のような感じでVPCを作成しました。

2. CENの作成

2-1.CEN作成

Alibaba CloudのコンソールでExpress Connectを選択します。
Express ConnectとCENは別サービスなのですが、設定画面への入り口は現在のところ共通になっています。

CENの作成をクリックします。

CENの名前と接続するVPCを選択します。
東京側のVPCでも北京側のVPCでもどちらでも問題ありません。(後で他方も接続するので)

作成完成すると、以下のような画面が表示されます。

2-2.CENにVPCをアタッチ

作成したCENインスタンスをクリックします。

ネットワークのアタッチをクリックします。

CEN作成時にアタッチしていなかったVPNをここでアタッチします。

この時点でAlibaba CloudのVPC間の通信は完了です。
なお、リージョン跨ぎの帯域は標準1Kbpsとなります。
帯域購入もできますが、今回は疎通テストをゴールとするため、そのままとします。

CENの状態は下記のようになります。
Japan(Tokyo)とChina(Beijing)のVPCが一つずつCENにアタッチされました。

ルートも自動設定です。
VPCのCIDRではなく、実際に設定されているサブネット向けのルートが自動登録されます。
最終的にAWS向けのルートも入る必要がありますが、それは作業の終盤に行います。

3. Transit Gatewayの作成

3-1. Transit Gateway作成

AWSコンソールのVPC設定画面の左下の方にTransit Gatewayがあるのでクリックします。
(但し、非対応リージョンの場合は表示されません。)

Create Transit Gatewayをクリックします。

いろいろ設定項目ありますが、Nameタグの設定以外はデフォルトで大丈夫です。

3-2.Transit GatewayにVPCをアタッチ

作成したTransit GatewayにVPCをアタッチします。
Transit Gateway Attachmentsをクリックします。

Create Transit Gateway Attachmentをクリックします。

下記のように設定を入力し、作成します。

Transit GatewayにアタッチしたいVPCの数だけ作業を繰り返します。
今回は二つのVPCなので、以下のようになります。
なお、後の工程でVPNを追加することになります。

3-3. Subnet Route Tableにルート追加

Transit GatewayにVPCが接続されたのですが、実際はまだVPC間の通信はできません。
サブネットに紐づいているRouteTableにTransit Gatewayを経由させるエントリを追加する必要があります。

今回はAWSの別VPC(172.17.0.0/16)をTransit Gateway経由にするだけでなく、Alibaba Cloudのアドレス(10.0.0.0/8と192.168.0.0/16)へもTransit Gateway経由にするため、エントリを3つ追加しました。
各サブネットのRouteTableで同様の設定が必要です。

この時点でAWSのVPC間の通信は完了です。

4.VPN Gatewayの作成

両クラウドにVPN Gatewayを作成します。
なお、Alibaba CloudとAWSのVPN接続についてはSBCloud様の下記ページを参考とさせていただきました。

https://techblog.sbcloud.co.jp/2018/07/03/alibaba-aws_vpn/


ちなみに本記事の冒頭の構成図を見てもらうとわかるのですが、微妙に配置に違いがあります。

  • Alibaba CloudのVPN Gatewayは、いずれかのVPCに接続する
  • AWSのVPN Gatewayは、Transit Gatewayに直接接続する

4-1.Alibaba Cloud の VPN Gateway作成

Alibaba CloudのコンソールでVPN Gatewayの作成をします。

作成後、VPN GatewayのIPアドレスが確認できます。
このアドレスは、AWS側でVPN設定をする時に使います。

4-2.AWS の VPN作成

AWSで普通にVPN作成する時は、「VPN接続」という項目で設定しますが、Transit Gatewayの場合は異なります。
Transit Gateway Attachmentsで設定します。
「3-2.Transit GatewayにVPCをアタッチ」で設定したのと同じ箇所です。

上記を行うと、「VPN接続」欄にVPN接続が表示されます。
AWS側のIPアドレスが確認できます。
このアドレスは、Alibaba Cloud側でVPN設定をする時に使います。

4-3.Alibaba Cloud の Customer Gateway作成

Alibaba CloudのコンソールでCustomer Gatewayを作成します。

4-4. Alibaba Cloud の VPN接続作成

IPsec ConnectionsでVPN接続の作成をします。

AWS側とAlibaba Cloudの双方にVPC CIDRが複数あるため、「追加ローカルネットワーク」「追加リモートネットワーク」をしたくなります。
それをするためにはVPNをIKEv2とする必要があります。
ところが、AWSのVPNはIKEv1しか使えません。
やや苦し紛れに以下のように設定したところ、問題なく通信できました。

  • ローカルネットワーク:0.0.0.0/0
  • リモートネットワーク:172.16.0.0/12

VPN接続が成功となりました。

5. 再びルート設定

5-1. Transit Gateway Route Tableにルートを追加

Transit Gateway Route TableにAlibaba Cloud向けのルートエントリを追加します。
「3-3. Subnet Route Tableにルート追加」では、サブネットからTransit Gatewayまでのルートを追加しました。
ここではTransit GatewayからAlibaba CloudへのルートをVPNに向ける設定を追加します。

5-2. Alibaba Cloud のへルート追加

VPN GatewayのあるVPC(東京VPC)でAWS向けのルートをVPNに向ける設定を追加します。
これで東京VPCとAWSのVPCは通信可能になります。
ところが、これだけだと北京VPCはAWSと通信できません。

CENのルートステータスを 公開 にすると、CENのルートテーブルにこのルートが伝播し、北京VPCもAWSと接続できるようになります。

これで完成です。

疎通テスト

各VPCからpingで疎通テストをしてみます。

Alibaba (北京) 〜 AWS(バージニア) 

[root@iZ2ze1wjgvrqaur6iskr5lZ ~]# ping -c 5 172.17.0.111
PING 172.17.0.111 (172.17.0.111) 56(84) bytes of data.
64 bytes from 172.17.0.111: icmp_seq=1 ttl=252 time=229 ms
64 bytes from 172.17.0.111: icmp_seq=2 ttl=252 time=229 ms
64 bytes from 172.17.0.111: icmp_seq=3 ttl=252 time=229 ms
64 bytes from 172.17.0.111: icmp_seq=4 ttl=252 time=229 ms
64 bytes from 172.17.0.111: icmp_seq=5 ttl=252 time=229 ms

--- 172.17.0.111 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 229.109/229.220/229.375/0.088 ms

Alibaba (北京) 〜 Alibaba (東京)

[root@iZ2ze1wjgvrqaur6iskr5lZ ~]# ping -c 5 10.0.0.17
PING 10.0.0.17 (10.0.0.17) 56(84) bytes of data.
64 bytes from 10.0.0.17: icmp_seq=1 ttl=64 time=55.2 ms
64 bytes from 10.0.0.17: icmp_seq=2 ttl=64 time=55.0 ms
64 bytes from 10.0.0.17: icmp_seq=3 ttl=64 time=55.1 ms
64 bytes from 10.0.0.17: icmp_seq=4 ttl=64 time=55.1 ms
64 bytes from 10.0.0.17: icmp_seq=5 ttl=64 time=55.0 ms

--- 10.0.0.17 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 55.063/55.122/55.211/0.216 ms

AWS(バージニア) 〜 AWS(バージニア) 

[ec2-user@ip-172-16-0-132 ~]$ ping -c 5 172.17.0.111
PING 172.17.0.111 (172.17.0.111) 56(84) bytes of data.
64 bytes from 172.17.0.111: icmp_seq=1 ttl=254 time=1.07 ms
64 bytes from 172.17.0.111: icmp_seq=2 ttl=254 time=0.776 ms
64 bytes from 172.17.0.111: icmp_seq=3 ttl=254 time=0.785 ms
64 bytes from 172.17.0.111: icmp_seq=4 ttl=254 time=0.923 ms
64 bytes from 172.17.0.111: icmp_seq=5 ttl=254 time=0.772 ms

--- 172.17.0.111 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4030ms
rtt min/avg/max/mdev = 0.772/0.865/1.071/0.120 ms

AWS(バージニア) 〜 Alibaba(東京) 

[ec2-user@ip-172-16-0-132 ~]$ ping -c 5 10.0.0.17
PING 10.0.0.17 (10.0.0.17) 56(84) bytes of data.
64 bytes from 10.0.0.17: icmp_seq=1 ttl=62 time=181 ms
64 bytes from 10.0.0.17: icmp_seq=2 ttl=62 time=180 ms
64 bytes from 10.0.0.17: icmp_seq=3 ttl=62 time=180 ms
64 bytes from 10.0.0.17: icmp_seq=4 ttl=62 time=180 ms
64 bytes from 10.0.0.17: icmp_seq=5 ttl=62 time=180 ms

--- 10.0.0.17 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 180.011/180.382/181.831/0.817 ms

AWS(バージニア) 〜 Alibaba(北京) 

[ec2-user@ip-172-16-0-132 ~]$ ping -c 5 192.168.0.92
PING 192.168.0.92 (192.168.0.92) 56(84) bytes of data.
64 bytes from 192.168.0.92: icmp_seq=1 ttl=62 time=230 ms
64 bytes from 192.168.0.92: icmp_seq=2 ttl=62 time=229 ms
64 bytes from 192.168.0.92: icmp_seq=3 ttl=62 time=229 ms
64 bytes from 192.168.0.92: icmp_seq=4 ttl=62 time=229 ms
64 bytes from 192.168.0.92: icmp_seq=5 ttl=62 time=228 ms

--- 192.168.0.92 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 228.938/229.342/230.317/0.585 ms

全て上手くつながりましたね。

渡辺 信秀 (記事一覧)