IBM Cloud: Client VPNとSite to Site VPNの統合ユースケース

## はじめに
VPC環境における[Client VPNとSite to Site VPNの統合ユースケース](https://cloud.ibm.com/docs/vpc?topic=vpc-vpn-client-to-site-overview#integrating-with-site-to-site-vpn-gateway)の設定について紹介します。
過去、統合ユースケース環境をIBM Cloud Classic環境のVirtual Router Appliance（VRA）等を用いて構築された事例も多々ありますが、これらVRA上で稼働している[ネットワークOSの設定／ライフサイクル管理](https://cloud.ibm.com/docs/virtual-router-appliance?topic=virtual-router-appliance-product-lifecycle-vyatta&locale=ja)に苦労している利用者も多いと考えます。ClassicによるVPN環境をVPC環境に移行する事で、VPN機能のマネージドサービス化により、ベアメタル（物理）サーバやネットワークOSの管理から解放されます。また、VPN機能自体においても[セキュリティーのベスト・プラクティスを維持し、セキュリティーの脆弱性を最小限に抑える](https://cloud.ibm.com/docs/vpc?topic=vpc-upgrading-weak-ciphers&interface=ui)事が可能となります。
さらに、IBM Cloudの管理サービス（Log Analysys/Cloud Monitoring/Secrets Manager)との連携も容易になります。
## 本稿で利用する環境
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/7e845306-a6ff-42a4-ce0f-e07851c47f1d.png)
- Client VPNサーバ（Client VPN for VPC）：VPN端末からのOpen VPN接続を受けつけるGWサーバ
- IP Sec VPNサーバ（Site to Site VPN for VPC）：拠点間をIPSecで接続するGWサーバ
- Linuxサーバ ：通信確認用として利用
- VPNクライアント端末：OpenVPNクライアントソフトを利用
## Site to Site VPN for VPC環境準備
IBM Cloud コンソールカタログの検索から「VPN for VPC」を入力して、表示されたタイルを選択すると以下の画面となります。
VPN type として、「Site-to-Site VPN gateway」を選択します。（Client-to-site VPN serverは、上述のClient VPN for VPC環境準備で選択します)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/80b343a3-f70a-bdd9-8f1d-af4b48c5f079.png)
各種設定情報は、Qiita記事[IBM Cloud(VPC) x Google Cloud IPsecVPN接続／IBMCloud VPN設定](https://qiita.com/khoshina/items/d75e25d492c7b83ccca4#ibmcloud-vpn%E8%A8%AD%E5%AE%9A)に記載されている内容を参考に設定入力を進めていきます。
設定を進めるにあたって注意が必要な部分についてご説明します。
### Mode（Policy-based VPN とRoute-based VPN）の選定
今回は、シンプルにpolicy-based VPNを選定します。両方式の違いは、Qiita記事「[IBM Cloud VPC: route-based VPNを利用したAZまたぎのActive/Active構成](https://qiita.com/testnin2/items/f603d6e6835e45c948ca)」を参照ください。
- VPNサービスが作成されたZoneと同一Zone内のVSIとしか通信できません。
- Zone内でActive/Standbyで構成されていますが、Zoneまたぎで冗長化はされていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/ef30d236-02ad-4ca8-0153-af256e00118d.png)
### IP Sec VPN間のConnection/ルーティング設定
IP Secピア宛先毎のコネクションを作成します。以下は、VPC：vpn-cloud-vpc側のIP Sec VPNサーバ：cloud-vpngwの設定状態です。VPN Connection：ipsec-to-clientというコネクションを作成し宛先ピアアドレスとして、VPC：vpn-client-vpcのIP Sec VPNサーバ：client-vpngwのグローバルIPアドレスを指定しております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/ac63e74d-935e-f415-d2db-30b555450154.png)
VPN connection毎の設定ページでピア毎の詳細設定を実施します。対応ピアのIP Sec VPNサーバとの間で、以下の各種パラメータ設定を合わせる事が重要です。
- Preshared key
- IKE policies
- IPsec policies
- CIDRs

特に、CIDRsに関しては、双方で通信を行うCIDRsの情報が、Local IBM CIDRsと対抗側のPeer CIDRsで双方に同じ情報が設定されていないとIP Secのセッション確立が行われません。
今回、Client VPN及びSite to Site VPNの統合ユースケースという事でClient VPNサーバ側の設定内容に準じて必要により、Local IBMCIDRs側のクライアントIPネットワークアドレスプールの情報追加が必要な場合があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/6a9886b8-6331-3c65-f7c5-927703190ee8.png)
## Client VPN for VPC環境準備
[こちらの記事](https://qiita.com/takason/items/3d04e4e31daae4def1d7)を参考にClient VPN for VPC環境を構築し、お手元の端末にインストールしたOpenVPNクライアントソフトからVPN接続を実施します。
サーバ証明書や鍵ファイルは、Secrets Managerにて登録管理し、VPN Serverと連携します。詳細はこちらの記事「[IBM Cloud: Client VPN for VPCにおけるAPI証明書管理 （Secrets Manager)](https://qiita.com/esakima/items/8bc43fe5b149a3d72e1c)」を参照ください。
その他、今回、Client VPN及びSite to Site VPNの統合ユースケースにおいて、注意が必要な事項について説明します。
### Client VPNのルート設定
Open VPNで接続するクライアントにスプリットトンネルを利用しない場合、クライアントは全ての通信をClient VPN サーバ経由で通信しようとします。逆に、スプリットトンネリングの設定を実施するとClient VPNサーバのVPNサーバが有している全てのルーティングテーブル情報をクライアント端末のルーティングテーブルに追加します。クライアント端末はこの追加されたルーティング設定に基づき、通信を行います。
Client VPNサーバのルーティング設定は、VPN Server内の「VPN server routes」にて実施します。
ルーティングテーブルは、経路毎に許可設定が必要となりますので、クライアント端末からの通信先を全てルート上に反映が必要です。以下の例では、２つのVPC（vpn-cloud-vpc/vpn-client-vpc)の宛先を記載しております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/d6496d88-bb73-f116-765c-faaedc3cdf5f.png)
### クライアント端末接続後のアドレス変換設定
上述のClient VPNサーバのルーティング設定では、宛先毎のアクションとして、クライアント端末が接続された後にアドレスを変換を実施するか方式を決定する必要があります。詳細は、こちら記事「[deliver Route アクションを使用した VPN トラフィックのルール](https://cloud.ibm.com/docs/vpc?topic=vpc-vpn-client-to-site-security-groups#rules-vpn-traffic-with-deliver-route)」を参照ください。
- アクションが `deliver` の場合は、パケットがトンネルから復号された後に直接転送されるので、パケットの送信元 IP が VPN クライアントの IP (つまり、クライアント IP プールからの IP) になります。
- アクションが `translate` の場合は、パケットがトンネルから復号された後に、パケットの送信元 IP が VPN サーバーのプライベート IP に変換されてからパケットが送信されます。

この変換実施の可否は、今回の統合ユースケースにおいて、全体のルーティング設計として整合を考慮する必要がありますので、十分ご注意ください。
今回の場合、クライアント端末からIPSec VPN経由で接続するVPC(vpn-client-vpc 10.230.128.0/20)に対しては、Client VPNサーバが収容されているVPC(vpn-cloud-vpc 10.212.48.0/26)のIPアドレスがソースIPアドレスとなる為、上述したIP Sec VPNのルーティング設定でVPN Client のプールのネットワークアドレスがルーティング情報上に設定されていなくても通信する事が可能となります。
なお、VPC(vpn-cloud-vpc 10.212.48.0/26)に対しては、クライアントIPアドレスプールのアドレスでそのまま通信しますが、IP Sec間の通信を通りませんので、IP Secのルーティング設定の影響を受けません。
### VPN サーバーの経路伝搬の構成
上述した「クライアント端末接続後のアドレス変換設定」で、deliver モードでクライアントIPプールのアドレスを利用して通信を行う場合、このネットワークアドレス情報をVPCのルーティングテーブルに注入する為、[VPNサーバの経路伝搬](https://cloud.ibm.com/docs/vpc?topic=vpc-vpn-client-to-site-route-propagation&interface=ui)の構成の考慮が必要となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354579/7014077a-0c01-97ed-57aa-c18dbe9d369e.png)
## まとめ
VPC環境におけるClient VPN及びSite to Site VPNの統合ユースケースの設定方法をご紹介しました。統合ユースケースでは、エンドツーエンド通信におけるルーティング設定とアドレス変換について配慮が必要です。
以下に記載するポイント欄において全体的に整合が取れるような設定が必要となります。
- [IP Sec VPN間のConnection/ルーティング設定](https://qiita.com/esakima/items/318b5e6d955655d55d36#ip-sec-vpn%E9%96%93%E3%81%AEconnection%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E8%A8%AD%E5%AE%9A)
- [Client VPNのルート設定](https://qiita.com/esakima/items/318b5e6d955655d55d36#client-vpn%E3%81%AE%E3%83%AB%E3%83%BC%E3%83%88%E8%A8%AD%E5%AE%9A)
- [クライアント端末接続後のアドレス変換設定](https://qiita.com/esakima/items/318b5e6d955655d55d36#%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E7%AB%AF%E6%9C%AB%E6%8E%A5%E7%B6%9A%E5%BE%8C%E3%81%AE%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E5%A4%89%E6%8F%9B%E8%A8%AD%E5%AE%9A)
- [VPN サーバーの経路伝搬の構成](https://qiita.com/esakima/items/318b5e6d955655d55d36#vpn-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E7%B5%8C%E8%B7%AF%E4%BC%9D%E6%90%AC%E3%81%AE%E6%A7%8B%E6%88%90)
## 参考サイト
- [IBM Cloud(VPC) x Google Cloud IPsecVPN接続／IBMCloud VPN設定](https://qiita.com/khoshina/items/d75e25d492c7b83ccca4#ibmcloud-vpn%E8%A8%AD%E5%AE%9A)
- [Client VPCとSite to Site VPCの統合ユースケース](https://cloud.ibm.com/docs/vpc?topic=vpc-vpn-client-to-site-overview#integrating-with-site-to-site-vpn-gateway)
- [IBM Cloud VPC: route-based VPNを利用したAZまたぎのActive/Active構成](https://qiita.com/testnin2/items/f603d6e6835e45c948ca)
- [IBM Cloud: Client VPN for VPCにおけるAPI証明書管理 （Secrets Manager)](https://qiita.com/esakima/items/8bc43fe5b149a3d72e1c)
- [deliver Route アクションを使用した VPN トラフィックのルール](https://cloud.ibm.com/docs/vpc?topic=vpc-vpn-client-to-site-security-groups#rules-vpn-traffic-with-deliver-route)
- [VPNサーバの経路伝搬](https://cloud.ibm.com/docs/vpc?topic=vpc-vpn-client-to-site-route-propagation&interface=ui)