Oracle Cloud Infrastructure Architect Associate 勉強メモ（ネットワーキング(Virtual Cloud Network))

# VCNの概要

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491422/39fecea4-ed29-cc13-e728-557842479f2d.png)

- 仮想的なOCIアカウント（テナンシ）毎の**プライベートネットワーク**。この中にOCIの環境を構築していく。

- **単一リージョンに存在する。**（可用性ドメインは跨ぐことができる）
（コンパートメントは概念だからリージョンを跨げるけど、VCNはネットワークの範囲なのでリージョンは跨げないイメージ）

- 重複しない[CIDR](#cidr(classless-inter-domain-routing)表記法)ブロックを１つ以上持つことができる。（最大５個）

- CIDRブロックは後から変更（追加・拡大・縮小・削除）可能。

- 別リージョンではCIDRブロックが重複しても作成することはできるが、DRGを用いた**ピアリングができなくなる**。

:::note info
テナンシごとの**プライベートネットワーク**。
**リージョナルなリソース**。（可用性ドメインを跨ぐことはできるが、リージョンを跨ぐことはできない）
同一リージョン内ではCIDRブロックを重複することはできない。
別リージョンではCIDRブロックを重複させることができるが、**ピアリング接続ができなくなる**。
:::

# CIDR(Classless Inter-Domain Routing)表記法
- A.B.C.D/x の形式で記述される。
A~Dがネットワークアドレス[^ネットワークアドレス]（**0~255**　計266個)、xがサブネットマスク[^サブネットマスク]の大きさを表す。

[^ネットワークアドレス]: https://wa3.i-3-i.info/word11993.html
[^サブネットマスク]: https://wa3.i-3-i.info/word11975.html

<details><summary>ネットワークアドレスとサブネットマスクについて</summary>

ネットワークアドレスは**ネットワーク部**（ネットワーク上の住所）と**ホスト部**（どのコンピューターか）で構成される。
サブネットマスクは**どこまでがネットワーク部でどこからがホスト部か**を示す。

具体的にはネットワークアドレスとサブネットマスクの論理積を取ったとき、"1"になる部分がネットワーク部、"0"になる部分がホスト部になる。

よって**サブネットマスクの値が小さいほど取得できるIPアドレスが多くなる。**

例：192.168.1.0/24 
    →最初の24ビットが（**A~Dは各8bit**なので、192.168.1まで）ネットワークアドレスであることを表す。
    よって最後の8bitがホストアドレスになる。
    ネットワークアドレスの**先頭はネットワークID**、**最後がブロードキャストアドレス**として使用される。よって

~~~
ネットワークID：192.168.1.0
First Host:192.168.1.1
End Host:192.168.1.254
ブロードキャストアドレス：192.168.1.255
~~~

となる。
(厳密にはFirst Hostはゲートウェイに使用されるので、実際にネットワークアドレスとして使われるのは192.168.1.2から）
</details>

:::note info
A.B.C.D/x の形式で記述
A~Dが各**8bit**でネットワークアドレス(**0~255**)、xはサブネットマスクの大きさを表す。
サブネットマスクは**どこまでがネットワークアドレスか**を示す。
:::

## VCNのIPアドレス範囲
- OCIでは **/16から/30まで**が指定できる。OCIの推奨は/16。
- 推奨範囲はRFC1918で指定された範囲。
※RFC1918：RFC（Request for Comments）とはインターネット技術に関する仕様を公開している文書。プライベートIPアドレスについて記載があるのがRFC1918。
- **VCNは最初の２つ（ネットワークIDとゲートウェイ）と最後のIPアドレス（ブロードキャストアドレス）は予約される。**（ホストとして使えない）
- 概要でも記した通り、他のオンプレミスネットワークやクラウドネットワークとのIPアドレス範囲を重複しないようにする。(ピアリングなどで通信できなくなる）

:::note info
 OCIではIPアドレスを **/16から/30まで**が指定できる。
最初の２つの IPアドレスと最後のIPアドレスは使用できない。
:::


# サブネット
VCNをさらに分割したネットワーク群。
VCN内に開発環境を作ったり本番環境を作ったりなど…。それぞれVCN内にサブネットを作り環境を作成する。
- サブネットごとにCIDR表記で設定されたIPアドレス範囲があり、**重複不可**。
- インスタンスはサブネット内に論理的に配置され、内部IPアドレスとネットワーク構成は配置されたサブネットから取得する。
<details><summary>論理的にとは？</summary>

厳密にはインスタンスを作成したときについている **[VNIC](#仮想nicvnic)（仮想ネットワークインターフェースカード）が配置**され、インスタンスはサブネット外に配置される。
</details>

:::note info
サブネットはVCNを分割したもの。
サブネット同士でIPアドレスの重複はできない。
サブネット内にVNICが配置され、インスタンスが論理的にサブネットに配置される。
:::
## ２種類の有効範囲
- 可用性ドメイン単体のものとリージョナルサブネット（**可用性ドメインを跨いだもの**）を作成できる。（推奨はリージョナルサブネット）

##  プライベートサブネットとパブリックサブネット
サブネットもプライベートのものとパブリックのものを作成することができる。
- Private:**インターネット側から**直接IPアドレスに通信することができない。プライベートIPアドレスのみ。
例：外部からアクセスされたくないセキュアなリソースなど。
- Public:パブリックIPアドレスをオプションで付けることができる（一般的にPublicに置くならパブリックIPアドレスを付ける）ため、外部からアクセス可能。
例：Webサーバーなど

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491422/5a98dc73-378d-811d-2c12-0da989dc0ba2.png)


:::note info
プライベートサブネットはインターネット側から通信ができない。
パブリックサブネットはインターネット側からアクセス可能。
:::

# 仮想NIC（VNIC）
- 各インスタンスは、必ず**１つのプライマリ仮想NIC**と**１つのプライマリIPアドレス**（その仮想NICにアタッチされる）を持つ。
- 各インスタンスには**最低１つ以上のセカンダリ仮想NICを付けることができる。** （インスタンスに付けられるVNICの最大数はコンピュートシェイプに依存）セカンダリVNICは別のサブネットに配置可能。（というかそれでなければ意味ない？）

- VNICは追加のセカンダリIPアドレスとして**プライベート**IPアドレスを31個まで持つことができる。（IPエイリアス）
- **サブネットに常駐（配置）** されたVNICを用いて通信を行う。VNICは物理NIC(ネットワークインターフェースカード)に関連付けられる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3491422/0d99de7c-a8ed-86ed-9911-f353eea7ba31.png)



:::note info
インスタンスごとに必ず**１つのプライマリ仮想NIC**と**１つのプライマリIPアドレス**を持つ。
各インスタンスには**最低１つ以上のセカンダリ仮想NICを付けることができる。** 
VNICには最大31個のIPアドレス（**プライベート**IPアドレスのセカンダリIPアドレス）を追加できる。
サブネットに配置され、物理NICに関連付けられる。
:::

# IPアドレス
### プライベートIPアドレス
- インスタンスを作成した際に構成されるVNICはデフォルトで１つプライベートIPアドレスを持っている。（プライマリプライベートIPアドレス）また、31個のセカンダリプライベートIPアドレスを取得できる。
### パブリックIPアドレス
- インターネットから到達可能なIPv4アドレス
#### パブリックIPアドレスの種類
- Ephemeral(エフェメラル)IPアドレス
インスタンス存在期間中に存在する一時的なIPアドレス
- Reserved(予約済み)IPアドレス
永続的なIPアドレス（インスタンスが消えてもなくならない）他のインスタンスに割り当てることも可能。

:::note info
インスタンスを作成した際、VNICはデフォルトで１つプライベートIPアドレスを持つ。これをプライマリプライベートIPアドレスと呼ぶ。
また、31個のセカンダリプライベートIPアドレスを追加できる。
パブリックIPアドレスにはEphemeral(エフェメラル)IPアドレスとReserved(予約済み)IPアドレスがある。
 EphemeralIPアドレスはインスタンスが存在する間のみの一時的なアドレス。ReservedIPアドレスは永続的なIPアドレス。（他のインスタンスに割り当てることができる）
:::


# IPアドレス持ち込み（BYOIP)
- Bring Your Oun IP Address
自社内のIPアドレスをクラウドで割り当てることができる機能。

# VCNセキュリティ
#### 出てくる用語
- INglessとEgress
Ingressは外からサブネットに入ってくる通信。Egressはサブネットから外に出ていく通信
- ステートフルとステートレス
情報を保持するかしないか。（帰りの経路を許可するかしないか）Egressルールがなくても自動的に許可される。デフォルトはステートフル。
**大量の接続がある場合（ロードバランサやビッグデータなど）には負荷が大きくなるのでステートレスが良い。**

SLもNSGも「ステートフルかステートレスか」、「IngressかEgressか」、「通信先のCIDR」、「プロトコル」、「送信元と目的のポートを指定する。
セキュリティは何を許可するかを書く。

:::note info
INgless：（サブネットの）外から中への通信
Egress：（サブネットの）中から外への通信
ステートフル：情報を保持する（どこから来たか記憶）
ステートレス：情報を保持しない（どこから来たか記憶しない）
:::

### セキュリティリスト（SL）
- **サブネットに紐づけ** られる、サブネットに対して出入りする（→つまりサブネット内のVNIC**すべて**に対して適用される）トラフィックに対するファイアウォールルール。
- **pingリクエストを許可するルールは含まれていない。** これはNSGで指定する。

:::note info
サブネットに紐づける。（サブネット単位で適用する。）
:::

### ネットワークセキュリティグループ（NSG）

- SLと違い**VNICごとに紐づけ** られる。マシンごとに細かく分けたい場合はNSGがよい。
:::note info
VNICごとに紐づける。（VNIC単位で適用する。）
pingリクエストを許可するルールを設定できる。
:::

### SLとNSGの併用
- どちらも単独で使うことも、併用することもできる。
- 併用した場合は、**どちらかで許可されていれば許可になる（OR条件）**

:::note info
SLとNSGは併用することができ、OR条件となる。
:::

# 要塞(Bastion)ホスト
- いわゆる踏み台。外部からプライベートサブネットにアクセスしたい場合、直接はつなげないのでパブリックのサブネットを経由してプライベートなサブネットなどにアクセス（SLなどで穴をあける）する。このホストをOCIであれば簡単に作ることができる。

- 要塞ホストを配置するサブネットをSSHクライアント（SSH接続をする際に使用するソフトウェア）がアクセス可能にする。このサブネットにセキュリティリスト（またはNSG)が適用されるので安全に接続できる。

- OCIには踏み台を立てないでプライベートサブネットにアクセスすることもできる。（時間制限付き）
https://oracle-japan.github.io/ocitutorials/intermediates/bastion/

:::note info
要塞ホストを利用することでプライベートサブネットに外部からアクセスできる。
OCIでは要塞ホストを簡単に作成できる。また、時間制限はあるが踏み台サーバーを立てずに接続することもできる。
:::

# 参考資料
https://speakerdeck.com/ocise/ociji-shu-zi-liao-jia-xiang-kuraudonetutowaku-vcn-gai-yao