04. IBM Cloud: VMware as a Service（VMWaaS) - 外部接続のためのネットワークとNAT/Firewallを構成する

# 1. はじめに

前稿までにVDCを注文したので、ここからVDCの初期状態のNWを確認し、サーバーをプロビジョニングするためのNWをまずは構成したいと思います。VDCには色々なタイプのnetworkが存在するため、最初にそれを説明すると大変です。よって、全体を俯瞰する前に、まずはVMWaaSで最低限の接続ができるように構成を紹介し、その感触を掴んでもらいたいと思います。それだけでも大変かもしれないので。。。

- [01. IBM Cloud: VMware as a Service（VMWaaS)の概要](https://qiita.com/testnin2/items/d39ba856f70fc14ea719) 
- [02. IBM Cloud: VMware as a Service（VMWaaS) - VDCの注文](https://qiita.com/testnin2/items/a3630d5a532a6ce48720)
- [03. IBM Cloud: VMware as a Service（VMWaaS) - VDCの追加注文](https://qiita.com/testnin2/items/666a8a03db85f983f56a) 
- [04. IBM Cloud: VMware as a Service（VMWaaS) - 外部接続のためのネットワークとNAT/Firewallを構成する](https://qiita.com/testnin2/items/3575b27c2ec2b6242ee6) 
- [05. IBM Cloud: VMware as a Service（VMWaaS) - RHELをプロビジョニングして疎通確認を行う](https://qiita.com/testnin2/items/56901ef332ee060fcf2f) 
- [06. IBM Cloud: VMware as a Service（VMWaaS) - 検証: IBM Cloud private networkへの通信におけるSNATの必要性](https://qiita.com/testnin2/items/5add312256d1e264e31f)
- [07. IBM Cloud: VMware as a Service（VMWaaS) - 検証: isolated networkとの通信](https://qiita.com/testnin2/items/9bc1b57b9636071b7239)
- [08. IBM Cloud: VMware as a Service（VMWaaS) - 検証: routed network間の通信](https://qiita.com/testnin2/items/fa9426df262368ddc2ef) 
- [09. IBM Cloud: VMware as a Service（VMWaaS) - Data Center Groupの構成](https://qiita.com/testnin2/items/f940550d7564db526531) 
- [10. IBM Cloud: VMware as a Service（VMWaaS) - Distributed Firewallの構成](https://qiita.com/testnin2/items/26dd06d28effbd83ff9e) 
- [11. IBM Cloud: VMware as a Service（VMWaaS) - VDC間のVM/vApp Migration](https://qiita.com/testnin2/items/381c5e6db4fdd7ed64d6)
- [12. IBM Cloud: VMware as a Service（VMWaaS) - VMWaaS APIの実行例](https://qiita.com/testnin2/items/3e0e86a25bfd06a165bf)
- [13. IBM Cloud: VMware as a Service（VMWaaS) - VMware Cloud Director OpenAPIの実行例](https://qiita.com/testnin2/items/420e55a06255d626a471) 
- [14. IBM Cloud: VMware as a Service（VMWaaS) - 検証: VIP切り替えによる高可用性構成の確認（手動切替）](https://qiita.com/testnin2/items/fead2339a999242ecae9) 
- [15. IBM Cloud: VMware as a Service（VMWaaS) - 検証: VIP切り替えによる高可用性構成の確認（keepalived）](https://qiita.com/testnin2/items/2a5c9660ccfab74faa49) 
- [16. IBM Cloud: VMware as a Service（VMWaaS) - Transit Gateway接続](https://qiita.com/testnin2/items/1ec6223b6713eb58e156) 
- [17. IBM Cloud: VMware as a Service（VMWaaS) - Veeam Backup and Replication service連携](https://qiita.com/testnin2/items/69fd29db9f8cc313e353) 

# 2. VDC ネットワーク基本のき

参考となるネットワーク図がチュートリアルにあるため、こちらを参考に説明します。（VDCまたぎのネットワーク構成のような複雑なことも可能ですが、まずはこれぐらいのレベルから始めたいと思います）

- https://cloud.ibm.com/docs/vmware-service?topic=vmware-service-vmware-as-a-service-vdc&interface=ui ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/1407e083-250d-5c66-586c-d56bb063bfd0.png)

- VDCのネットワークで、利用者が操作できるルーターは、Edge Gatewayです（注文時にそのキャパシティーをタイプ一覧から選択しました）。VMware NSXをご存知の方ならピンと来ると思いますが、Edge Gatewayの実体はテナントごとに提供されるT1ルーターです。
- Edge GatewayはVDC外部と通信するための唯一の出口であり、VDC外部と通信するためにはEdge Gatewayで適切なNAT設定およびFirewall設定を実施必要があります。
- VDC内では、大別して`routed`と呼ばれるEdge Gatewayに接続したネットワーク・タイプと、`isolated`と呼ばれるEdge Gatewayにも接続しない孤立したネットワーク・タイプを作成できます。`isolated`タイプのネットワークは、Edge Gatewayにも接続していないので、VDC外部にも接続できませんし、そもそも他のネットワークとも接続できません。
- Edge Gatewayの先には、Provider Gatewayと呼ばれるIBM Cloudが管理するルーターが存在しています。こちらもVMware NSXをご存知の方ならピンと来ると思いますが、Provider Gatewayの実体はT0ルーターです。ただ、Provider Gatewayより先は詳細を知っておく必要はありません。なぜならば、利用者が操作できないからです。Provider Gatewayから先の経路にて、IBM Cloud private networkやインターネットに繋がっています。

上記の内容をもとに、VDCの初期ネットワークを確認してみます。

- Networksは空（何も作っていないのだから当然） ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/d6b7b57c-4e51-eebf-9bc5-e688be3852ae.png)
- Edge Gateway(T1ルーター）はユーザーが操作できるテナント用ルーターであり、VDC注文時に購入してあれば、それぞれのVDCごとに存在する。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/56c1e803-6422-0f4a-947a-cd24054578ac.png)
- Edge Gateway(T1ルーター）の詳細 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/a7d467a7-f3bb-da7d-6356-5726c9ee8a26.png)
- Provider Gateway(T0ルーター）もそれぞれのVDCごとに存在する。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/a04d7d35-1ba3-c69f-f6dd-2bf99e7591e3.png)
- Provider Gateway(T0ルーター）の詳細。何も編集できないし、これ以上の参照もできない。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/4725ceec-5590-0ebc-e7be-18631ba49c9d.png)

# 3. routedタイプのnetworkの作成

先述の通り、外部接続をする際には、`routed`タイプのネットワークを作成する必要があります。
以下では、以下のネットワークを作成してみます。

| Name |Scope| Routed or Isolated |Distributed Routing| Gateway CIDR | 
|:-|:-|:-|:-|:-|
| nw1-routed-vdc01 |mt-vdc01 |Routed|Enabled| 192.168.100.1/24  | 


1. トップメニューで、Networkingを選択し、Newを押下。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/62752a6f-8b16-f106-1c26-355cac529a28.png)
2. 対象のVDCを選択。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/aae35ad8-a483-b4d0-5ebe-3dad7e1ef35d.png)
3. Routed/Isolatedを選択。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/fbd97f6a-be21-1a32-57db-4c39c48882b2.png)
    - `Routed`はEdge経由でVDC外部と接続できるネットワーク
    - `Isolated`は他のNWと接続できない孤立したネットワーク
    - ここでは`Routed`を選択する。
4. Edge Connection![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/7e333574-dbcd-6dc2-6362-bf2432b58d5d.png)
    - VMWaaSでは１つのVDCには1つのEdgeしか存在しないため、デフォルトのまま。
    - `Distributed Routing`
        - デフォルトで有効になっている。
        - UI上のヒントの説明は
            - `Non distributed routing needs to be enabled on the Edge Gateway. This would allow the disabling of distributed routing so that all VM traffic goes through the service router.`
        -  この[Distributed Routingを無効にする機能はVMware Cloud Director 10.4から利用可能](https://docs.vmware.com/en/VMware-Cloud-Director/10.4/VMware-Cloud-Director-Service-Provider-Admin-Portal-Guide/GUID-16EA3560-7927-4990-AB19-068672410986.html)のようだ。
            -  `You can configure an NSX edge gateway to allow non-distributed routing and you can connect routed organization VDC networks directly to a tier-1 service router, forcing all VM traffic for a specific network through the service router. You can use the non-distributed routing feature to create firewall rules and isolate east-west traffic between organization VDC networks that are connected to the same NSX edge gateway.`
        - NSXを知っている人ならご存知かと思うが、実際はT1ルーターはDR(Distributed Router)とSR(Service Router)から構成されている。あるVDC内に複数のrouted networkが存在した場合、そのrouted network間の通信はDRを通る。そのため、後述するEdge Firewall(SRのFirewall)ではこの通信を制御することはできない。その場合は、[Distributed Firewall](https://qiita.com/testnin2/items/26dd06d28effbd83ff9e)を有効して通信制御するのも１つの方法だが、別の方法としてこの`Distributed Routing`を無効にすれば、DRを通らないのでEdge Firewallでrouted network間の通信を制御することができる。

    - `Route Advertisement`: 
        - デフォルトで無効になっており、本稿執筆時点ではUI上は無効にすることはできない。
        - UI上のヒントの説明は
            - `Whether this network is advertised so that it can be routed out to the external networks.`
- General　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/40b4c49f-3787-68c2-b186-6a3ac2dae519.png)
    - Name: ネットワークの名前を入力
    - `Dual-Stack Mode`:
        - デフォルトでは無効
        - UI上のヒントの説明は
            -  Enables the network to have both an IPv4 subnet and an IPv6 subnet
    - `Gateway CIDR`: 
        - IPアドレス情報の設定。
        - CIDR方式でGatewayのアドレスを指定する。
        - UI上のヒントの説明は
            - `The CIDR includes the IP address of the gateway, e.g. 192.168.100.14/24 represents the gateway address 192.168.100.14 and its associated routing prefix 192.168.100.0, or equivalently, its subnet mask 255.255.255.0. The CIDR value cannot be changed once it is provided.`
    - `Shared`: 
        - 選択できない。
        - UI上のヒントの説明は
            - `You can share this network by adding it to a VDC Group.`
    - `Guest VLAN Allowed`: 
        - デフォルトでは無効
        - Guest VMではVLANを利用しないのでそのまま無効にしておく。

- Static IP Pools ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/176e4b85-d01d-6a60-c9fc-9ebe4a9c220d.png)
    - Static IP Poolを利用すると、プロビジョニング時に自動的にこのpoolの中からIPアドレスを割り振ることができる。この例では、192.168.100.2-192.168.100.99までを自動で割り振る構成にしている。
    - 今回は設定しているが、プロビジョニング時にIPアドレスを明示的に割り当てるのであれば、この構成をする必要はない。
- DNS![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/eefa44fa-076a-0a34-9e81-013287cd7faf.png)
    - DNSとして、IBM Cloud Private Network上に存在する`161.26.0.10`と`161.26.0.11`を指定する。
- Segment Profile Template ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/be8f11a6-8030-29a8-3ca3-eca5093c1863.png)
    - ここでは設定していない。
    - ヒント部の説明は以下の通り。
        - `Custom segments profiles are needed in a number of specific situations. These include, but are not limited to:`
            - `MAC or IP learning needs to be enabled for nested environments`
            - `Custom security profiles to allow for DHCP traffic originating from a network`
            - `Custom security profiles for HCX`
            - `Enabling spoof guards`
            - `Defining QoS on specific networks`
- Ready to Complete ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/a3fdf1ec-1659-727d-7e82-e45185a38a3e.png)


# 4. IP Set の定義

Firewall設定において、SourceやDestinationのIPアドレスレンジとして、直接ルール内でアドレスを指定することはできず、`事前に定義されたIP Set`(複数のIPアドレス・IPアドレスレンジを指定可能）を利用して設定する必要があります。。ここでは、以下のIP Setを定義します。

| IP Set name | Address range |
|:-|:-|
| IBM Cloud Private Network  |  161.26.0.0/16, 166.8.0.0/14 |
| syasuda-homeaddress  |  111.xx.xx.xx/24 |

- 該当のEdge Gatewayに移動し、IP Setsを選択し、Newを押下![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/44d9da66-78be-e691-d17b-d718cb6773e7.png)
- IBM Cloud Private Networkを作成 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/251c68d1-8ebf-9ac8-a4ac-1517073b62a8.png)
- syasuda-homeaddressを作成 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/08d96613-b845-6cc7-280e-9582d6420302.png)


:::note info

- 161.26.0.0/16はIaaS Endpointsと呼ばれているアドレス範囲です。
- 166.8.0.0/14 はService endpointsと呼ばれているアドレス範囲です。

https://cloud.ibm.com/docs/vpc?topic=vpc-service-endpoints-for-vpc&locale=en

:::

:::note warn
VMware Solutions Sharedでは52.117.132.4(`Microsoft Key Management Server`), 52.117.132.5(`Microsoft Windows Update Server`), 52.117.132.7(`Red Hat Capsule Server`)のようなIPアドレスが使われていたようですが、VMWaaSでは利用されていません。こうした用途のIPアドレスは、すべて166.8.0.0/14から割り当てられているようです。
https://cloud.ibm.com/docs/vmwaresolutions?topic=vmwaresolutions-shared_vcd-ops-guide&locale=en#shared_vcd-ops-guide-enable-access 
:::
 

# 5. Edge Firewallの構成

デフォルトではVDC外部との通信はdropされています。外部と通信するために、Edge Firewallを以下のように構成します。Stateful Firewallのため、戻りのルールは追加する必要はありません。


| rule  | firewall rule name | protocol | source<br>(IP Set等で指定） | destination<br>(IP Set等で指定）|action|
|:-:|:-:|:-:|:-:|:-:|:-:|
| 1  | IBM Cloud Private Network  |  - | ANY  | IBM Cloud Private Network| Allow  |
| 2  | allow-from-syasuda  |  SSH | syasuda-homeaddress| ANY| Allow  |
| default  | default_rule  | -  | ANY  | ANY  | Drop  |


- デフォルトでは全ての通信はdropされている。`EDIT RULES`を押下。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/6e5e8230-b66e-2242-c314-6bcba6cce56c.png)
- `NEW ON TOP`を押下 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/b09a947d-478e-b509-ad70-a9851cad741f.png)
- 上記テーブルに従ってルールを追加。追加した結果がこちら。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/6efbf938-dc83-de02-759d-9b4d4ccc2315.png)

# 6. NATの構成

VDC外部と通信するために、以下のNATを構成します。

| NAT name | NAT Type | External IP<br>(VDC外部との通信に利用するPublic IP) | Internal IP<br>(NATルールが適用されるVDC内のネットワーク） |
|:-|:-|:-|:-|
| snat-to-external  | SNAT  |  150.xx.xx.xx  |  0.0.0.0/0 |
| dnat-to-jumpserver01  | DNAT  |  150.xx.xx.yy | 192.168.100.2<br>（この後、プロビジョニングするサーバーに割り当てる予定のIPアドレス）  |


::: note info
External IPは、IBM CloudポータルのVDC詳細画面で確認可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/746219cf-b114-da63-c399-1cdec2a84c3d.png)
:::
::: note warn
IBM Cloud private networkはVDC外部であるため、たとえIBM Cloud private networkへの通信であってもExternal IPを使ってSNATが必要になります。VDCにとって、外部接続用のIPアドレスとして認識されているIPアドレスは、IBM CloudポータルのVDC詳細画面に記載されていたIPアドレス範囲に限ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/30f0db6c-46d2-bde7-063f-8649a02126e4.png)
:::

- 該当のEdge Gatewayに移動し、NATを選択し、Newを押下 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/2584a442-d827-373e-e786-3e796cb28e4d.png)
- VDC内(=`0.0.0.0/0`で定義される任意のIPアドレス範囲）からVDC外部へのSNAT通信設定　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/e0933b9d-9750-1e48-77c4-c6e792ec3e2f.png)
    - Priorityの説明: 
        - `If an address has multiple NAT rules, the rule with the highest priority is applied. A lower value means a higher precedence for this rule.`
    - Firewall Matchの説明: 
        - `Determines how the firewall matches the address during NATing if firewall stage is not skipped. Below are valid values:`
            - `Match Internal Address: Indicates the firewall will be applied to internal address of a NAT rule. For SNAT, the internal address is the original source address before NAT is done. For DNAT, the internal address is the translated destination address after NAT is done.`
            - `Match External Address: Indicates the firewall will be applied to external address of a NAT rule. For SNAT, the external address is the translated source address after NAT is done. For DNAT, the external address is the original destination address before NAT is done.`
            - `Bypass: Firewall stage will be skipped.`
- VDC外部からjump serverへのDNAT通信設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/d6074f93-4f77-79e9-4d0c-49515fe259f5.png)
- 設定が完了した結果がこちら。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/8338549e-669a-edc3-6d00-0afdf26463e9.png)