IBM CloudのVPC Gen2とClassic InfrastructureをTransit Gatewayで繋ぐ

# 目的

IBM CloudのIaaSは旧SoftLayerをベースにしていましたが、新たなアーキテクチャに刷新した新サービスVPC Gen2が東京でも利用できるようになりました。

VPC Gen2がどういうものかは他の方の記事におまかせするとして、旧SoftLayer、いわゆるClassic Infrastructureをすでに利用している場合は、当面はVPC Gen2と共存していくことになると思います。このとき1つ注意点があります。Classic InfrastructureとVPC Gen2は、デフォルトではプライベートアドレス同士で直接通信することができません。もちろんパブリック同士では可能ですが、通信量の増大や遅延を避けるため、あるいは通信の保護のため、プライベートネットワークで通信したいケースが多いはずです。今回はそれを可能にするTransit Gatewayを検証してみます。

# 現在とりうる方法

そもそも両者をプライベートで通信可能にする方法ですが、現在は2つの方法があるようです。

## クラシック・アクセス

VPC作成時に、``クラシック・リソースへのアクセスを有効にします``をチェックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/3a4181d1-e027-4146-6a56-d93f58a31f74.png)

簡単ですが制約があり、1つのリージョンに1つのVPCだけがこの機能を使うことができます。つまりリージョン内に複数のVPCがある場合は他のVPCはこの機能を使うことができないことに注意が要ります。

> https://cloud.ibm.com/docs/vpc?topic=vpc-setting-up-access-to-classic-infrastructure

## Transit Gateway

Transit Gatewayは異なるリージョン間またはリージョン内の異なるのVPCを接続するためのサービスです。さらに、Classic Infrastructureとも接続することができます。ただしこちらも制約があり、Classic Infrastructureと接続できるTransit Gatewayはアカウントで1つしか設定できないようです。その点は注意です。

> https://cloud.ibm.com/docs/transit-gateway

# 検証

次のような構成とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/7576c158-5932-4fd1-ef9f-323e4ab6fb30.png)

## 設定前の確認

当然ですが、お互いのIPでは通信できません。

```
# Classic to VPC tok1
$ ping 10.244.0.4
PING 10.244.0.4 (10.244.0.4) 56(84) bytes of data.

```

```
# Classic to VPC tok2
$ ping 10.244.64.4
PING 10.244.64.4 (10.244.64.4) 56(84) bytes of data.

```

```
# VPC tok1 to Classic
$ ping 10.193.17.194
PING 10.193.17.194 (10.193.17.194) 56(84) bytes of data.

```

```
# VPC tok2 to Classic
$ ping 10.193.17.194
PING 10.193.17.194 (10.193.17.194) 56(84) bytes of data.

```

## Transit Gatewayのオーダー

カタログからTransit Gatewayを選択します。

ローカル・ルーティングまたはグローバル・ルーティングを選びます。今回は東京内での通信ですので``ローカル・ルーティング``とし、ロケーションは``東京``とします。ちなみにグローバル・ルーティングにすると、異なるリージョン間のVPCを接続することができますが、通信量が月1TBを超えると有料になるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/d80d1356-a507-50d8-73f2-eff453ab6d68.png)

次に接続で``クラシック・インフラストラクチャー``をプルダウンから選択します。さらに追加で``VPC``を選択し、地域やVPC名を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/9bd536ff-2037-e85c-8f3f-6820481d337a.png)

これでオーダーします。

## 設定後の確認

オーダー後しばらく待つと（1～2分程度）、お互いに通信が可能になります。

```
# Classic to tok1
$ ping 10.244.0.4
PING 10.244.0.4 (10.244.0.4) 56(84) bytes of data.
64 bytes from 10.244.0.4: icmp_seq=1538 ttl=51 time=1.99 ms
64 bytes from 10.244.0.4: icmp_seq=1539 ttl=51 time=2.00 ms
64 bytes from 10.244.0.4: icmp_seq=1540 ttl=55 time=1.38 ms
```

```
# Classic to tok2
$ ping 10.244.64.4
PING 10.244.64.4 (10.244.64.4) 56(84) bytes of data.
64 bytes from 10.244.64.4: icmp_seq=1517 ttl=55 time=1.75 ms
64 bytes from 10.244.64.4: icmp_seq=1518 ttl=55 time=1.77 ms
64 bytes from 10.244.64.4: icmp_seq=1519 ttl=55 time=1.70 ms
```

```
# VPC tok1 to Classic
$ ping 10.193.17.194
PING 10.193.17.194 (10.193.17.194) 56(84) bytes of data.
64 bytes from 10.193.17.194: icmp_seq=1586 ttl=55 time=2.12 ms
64 bytes from 10.193.17.194: icmp_seq=1587 ttl=55 time=2.07 ms
64 bytes from 10.193.17.194: icmp_seq=1588 ttl=55 time=1.50 ms
```

```
# VPC tok1 to Classic
$ ping 10.193.17.194
PING 10.193.17.194 (10.193.17.194) 56(84) bytes of data.
64 bytes from 10.193.17.194: icmp_seq=1104 ttl=55 time=1.72 ms
64 bytes from 10.193.17.194: icmp_seq=1105 ttl=55 time=1.72 ms
64 bytes from 10.193.17.194: icmp_seq=1106 ttl=55 time=1.75 ms
```

はい、とても簡単でした。

# 注意点

Classic Infrastructureと接続できるTransit Gatewayがアカウント内で1つしか作れないため、Classic Infrastructureの仮想サーバをグローバルにデプロイしているケースでは、通信経路が最適にはならない場合があります。例えばVPCが東京とダラスにあり、Classic Infrastructureの仮想サーバがダラスにある場合、東京にTransit Gatewayを置くと、ダラスのVPCとClassic Infrastructure間の通信はわざわざ東京を経由することになってしまいます。

また、Transit Gatewayを通る通信のアクセス制御はTransit Gatewayではできません。ACLやSecurity Groupで個別設定をする必要があります。