IBM Cloud: VCFaaS（VCF as a Service） 及び利用ネットワーク設定

# はじめに
IBM Cloudは、VMwareソリューションの充実がひとつの特徴です。マネージドサービスを提供する範囲やサービス提供の基盤の種類により、以下の３種類のサービスが存在しております。
- VCF for Classic
- VCF for VPC
- VCF as a Service

本日は、VMware環境のフルマネージドサービスであるVCF as a Serviceの環境作成のポイントと関連するネットワーク環境の設定についてご紹介します。
# VCF as a Service概要
VCF as a Service(以降、VCFaaS）では、お客様はVCD（VMware Cloud Director）を通してVDC（Virtual Data Center）単位でVMware環境を管理、ご利用頂けるサービスとなります。VCFaaS Multi-tenantタイプは、vCPU/RAMを指定してVDC単位での購入、VCFaaS Single-tenantはご利用されるVDCが稼働するIBMにて管理するマネージド領域のホスト単位で購入できるサービスとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/59e22a50-8562-4d99-a797-f03f0356cb98.png)
# 本稿で利用する環境
+ VCFaaS：IBM Cloud VMwareマネージメントサービス
+ Client VPN for VPC：ご利用者のClient環境からインターネット経由でセキュアに接続するVPNサービス
+ Transit Gateway：IBM Cloud ルーティングサービス
なお、ご利用者の環境からVCFaaSサービスを利用する場合、今回説明するClient for VPN以外にキャリア回線を利用するDirect LinkサービスやIPSec暗号化を利用するVPN for VPCサービスも存在するが、今回の説明では省略します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/a43bd349-7d7a-4752-a4da-eda2dfa8a2ea.png)
# VCFaaSサービス環境作成
以下のページより、VCFaaSサービスのタイプを選択します。
今回は、上述の「VCF as a Service概要」でご紹介したMulti-tenantタイプにて作成します。
以下のページよりご注文ください。
https://cloud.ibm.com/vmware/vmware_as_a_service/provision/vdc_mt
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/045f6356-ba0f-4e2a-800a-3f3c1cc377ec.png)
選択の途中で、ネットワークエッジを選択する項目があります。今回は、ネットワークエッジ付きで作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/cdb7fd88-f74c-4357-8c7e-9f3834629fd3.png)

:::note warn
エッジタイプとしては、共有タイプと占有タイプが存在します。検証等の目的であれば低価格の共有タイプでのご利用をお勧めします。本番利用等の場合は他のお客様のご利用に影響を受けない、ご希望のスループットに準じた占有タイプの選択をお勧めします。
:::
作成すると各VCD（VMware Cloud Director）サイト毎に、VCD（Virtual Data Center）が作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/3c89b0f9-863b-49df-9d80-76a99707b5ca.png)

ここから、VMware Cloud Director Consoleに接続し、VDCの中の各ネットワーク作成、VMの作成、ネットワークエッジのNAT及びFW設定を実施していきます。以下にチュートリアルがありますので、適宜作成される構成の読み替えて作成をお願いします。（本チュートリアルは、Single-tenant前提で記載されてますが、VDC作成以降はMulti-tenantと同様な操作となりますのでご参考ください）
[VMware Cloud Foundation as a ServiceでVMware Cloud Director コンソールを使用して仮想データ センターを構成](https://cloud.ibm.com/docs/vmware-service?topic=vmware-service-vmware-as-a-service-vdc)

「本稿で利用する環境」に添付した構成図の如く、今回インターネットとの接続は想定しておりません。代わりにClient VPN for VPCで接続されたVPCやVPN Client Poolのアドレスを利用したクライアントとVDCの通信を実現します。これらはプライベートネットワークとなりますので、NATによるアドレス変換を実施しません。
[ステップ 4: NATルールを作成し、VMがインターネットにアクセスできるようにする](https://cloud.ibm.com/docs/vmware-service?topic=vmware-service-vmware-as-a-service-vdc#vmware-as-a-service-vdc-configure-nat)
上記リンク部分に記載のNATルール作成において、ドキュメント記述通りで無く、以下のVMware Cloud Directorのネットワークエッジ設定画面の如く、No-SNAT/No-DNATのNATアクションを選択します。（192.168.100.0/24は、VDC内のネットワークアドレスです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/e327cf00-008f-4445-8e73-048dcc8d0038.png)

最終的に[ステップ 6: ウェブ・コンソールを使ってVMに接続する](https://cloud.ibm.com/docs/vmware-service?topic=vmware-service-vmware-as-a-service-vdc#vmware-as-a-service-vdc-connect-to-vmconsole)にて、VMにログインしネットワークエッジのプライベート側インタフェースに対してPing等で通信できることが確認できればこのチュートリアル参照は終了です。

# Client for VPC環境作成
[こちらの記事](https://qiita.com/takason/items/3d04e4e31daae4def1d7)を参考にClient VPN for VPC環境を構築し、お手元の端末にインストールしたOpenVPNクライアントソフトからVPN接続を実施します。
事前に作成したサーバ証明書や鍵ファイルは、Secrets Managerにて登録管理し、VPN Serverと連携します。
同じく作成したクライアント証明書と鍵ファイルは、VPNクライアント端末に保存して証明書ログイン認証に利用します。
# ２つのサービス間のTransit Gateway接続
## VCFaaS〜Transit Gateway間接続
まず、VCFaaSとTransit Gatewayを接続します。以下のステップで接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/ea6c2e45-8099-4368-ac93-854881ed0f01.png)
こちらから接続する対向の[Transit Gatewayを作成](https://cloud.ibm.com/interconnectivity/transit/provision)します。
#### 1. 仮想データセンター側から接続グループを作成
作成したTransit Gateway（以降、TGW）向けの接続グループを作成します。
こちらのDocページの手順を参考に「相互接続」タブの「新規グループの追加」を行い、TGWの指定を行い追加します。[サービスとしての VCF に接続する手順](https://cloud.ibm.com/docs/vmware-service?topic=vmware-service-tgw-adding-connections#tgw-adding-connections-proc)
完了すると以下の画面のような状態が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/8d547d67-38c7-4962-ba99-2730a035616a.png)
#### 2. アンバインドされたGREトンネルをTransit Gatewayに接続
6つの保留中の各GREトンネルをTGWに接続します。

:::note warn
CLI または Cloudコンソールを使用して、トンネルを TGWに接続を行うことができます。しかし、コンソール上からの操作は、煩雑になりますので、IBM Cloud Shell を使用して、 TGWへの接続を作成することをお勧めします。
:::
TGWのIBM Cloud CLIプラグインをインストールされていない場合、以下を参考にインストールを実施します。
[Transit Gateway CLI](https://cloud.ibm.com/docs/transit-gateway?topic=transit-gateway-transit-gateway-cli#cli-ref-prereqs)
```:TGW用CLIプラグインインストール
ibmcloud plugin install tg
```
TGW接続に利用するIBM Cloud Shellコマンドは、非常にわかりづらいですが、以下のアイコン押下で表示されますので、コピー＆ペーストして実行してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/c403518e-c4b1-4570-8039-68ff205f3a69.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/89428963-a972-4e6a-8608-3e787f97482c.png)
```:コマンド実行結果
Creating GRE tunnel connection for gateway 3ec2abb0-b5ec-4576-be7a-5316d5f2b5ac under account cs-japan-001 as user Masaharu.Esaki@ibm.com...
OK
                       
Name                   mmc-3ec-vdc-9f-jp-tok-3-3b
Connection ID          219ec75d-0e7a-4f76-9196-6083dfd97fb5
Status                 pending
Request Status         pending
Network Account ID     f7ae49cc04f348edb34ac01af90ee00e
Network Type           unbound_gre_tunnel
Zone                   jp-tok-3
MTU                    9000
Local Gateway IP       198.19.92.14
Local Tunnel IP        198.18.120.117
Local Bgp Asn          4201065556
Remote Gateway IP      10.192.6.25
Remote Tunnel IP       198.18.120.118
Remote Bgp Asn         4261086201
Base Connection Type   classicibmcloud plugin install tg
```
暫く時間がかかりますが、「状況」として、「アタッチ済み」になれば完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/b1a74c4d-3a0c-4ff0-bfdc-df58e2a38405.png)
#### 3. 接続が完了(経路作成完了）
[TGW経路ページ](https://cloud.ibm.com/interconnectivity/transit/details/3ec2abb0-b5ec-4576-be7a-5316d5f2b5ac)で、各GREトンネル向けのルートがテーブルに載っていれば完了です。
## VPN Client for VPC〜Transit Gateway間接続
VPN Client for VPC上のVPNサーバの「VPNサーバ経路」で、VPN Clientと通信させる対象のネットワークルート情報をクライアント側へ提供します。なお、この際、「アクション」として、「配信」「変換」が選択可能です。今回はアドレスプールから割り当てられてクライアントアドレスでそのまま通信させたいので、「配信」を選択します。（「変換」を選択すると、VPNサーバのアドレスにSNATされた通信となります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/3b81fc45-b1a2-48a5-b620-5d1fbc6891d7.png)
次に、こちらからVPN Client for VPCで利用されているVPCをTGWに接続追加します。
[UIで接続を追加する](https://cloud.ibm.com/docs/transit-gateway?topic=transit-gateway-adding-connections&interface=ui#tg-ui-adding-connection-transit-gateway)
[VPCのルーティングテーブル](https://cloud.ibm.com/infrastructure/network/routingTables)情報を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/53eedc7d-ffd9-494a-8d30-48f310be724a.png)
VPNサーバから学習したVPN Client Poolのアドレスを学習しております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/3dfaf565-ebef-442f-ae08-9aae6db436c3.png)
現状のままでは、TGW及びVCFaaSにVPN Client Poolのネットワークアドレスが広告されていないので、Ingress ルートを作成してルート情報を伝搬させます。
作成に際しては、「トラフィック・ソース」として「Transit Gateway」を選択し、「アドバタイズ」を「オン』でルート情報を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/4139d746-9739-40df-8d40-8077404d3924.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/c15d84b9-8112-4634-9358-b995ef3ad431.png)
最終的に[TGWのルート情報](https://cloud.ibm.com/interconnectivity/transit)として、GREトンネル経由のVCFaaSのネットワーク、VPCネットワーク、VPN Clientのプールアドレスがルーティングテーブル上に載っていればIPのリーチャビリティが可能となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/ba273d5c-14d3-4a9c-8e79-0c307109ebea.png)

なお、本状態でも、VPN ClientとVCFaaS間の通信が不可能な場合は、VCFaaSのネットワークエッジのFW設定等のルールが適切に設定できているかご確認をお願いします。
# まとめ
マネージドサービスであるVCFaaSサービスは、簡単にVMware環境を構築する事が可能です。また、VCFaaS環境を利用する際は、開発者／運用者がインターネット経由でVPN接続する機会も多いと思います。VCFaaSとネットワークを含めたモデル構成を作成する手順をご紹介させて頂きました。
この環境において、VCFaaSのネットワークエンジにおけるNAT（No-SNAT／No-DNAT）設定やVCFaaS環境とTGW間の接続方法は少し癖がありますので、ご注意頂ければと思います。

# 参考サイト
+ [IBM Cloud：Client to Site型VPNでVPC環境に接続する (Secrets Manager)](https://qiita.com/takason/items/3d04e4e31daae4def1d7)