はじめに
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
全て上手くつながりましたね。
渡辺 信秀(記事一覧)
2017年入社 / 地味な内容を丁寧に書きたい