Cloud InterconnectとCloud VPNを理解するための基礎知識

# 閉域網

そもそも閉域網には以下のパターンがある。

- 専用線
- VPN
    - インターネットVPN (IPsec)
    - 拡張イーサネット
    - IP-VPN (MPLS-VPN)

Cloud Interconnectは専用線で、Cloud VPNはIP-VPNで閉域網を構成するサービスとなる。
それぞれの理解の過程で必要だった周辺知識を調べてまとめた。

# Cloud Interconnect

Google Cloudとオンプレミス環境を専用線で接続し、クラウドリソースとオンプレリソースを閉域で通信させるためのサービス。  
自社とGoogle Cloudを直接繋ぐDirect Interconnectと、間にサービスプロバイダが介在するPartner Interconnectの2種類がある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406130/1c6c69df-45fe-871e-cdd8-f3669836e0ea.png)

# 専用線を支える技術

## VLAN

スイッチの任意のポートをグルーピングし、仮想的なLANセグメントを作る技術。
イメージはL2スイッチ内に仮想的にL2スイッチを作り、グルーピングしたスイッチのみを仮想スイッチに繋いだような構成である。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406130/1c3d7e32-eb63-0f7d-d105-be8c78d345ca.png)

LANセグメントが分かれることでブロードキャストドメインを分けることができ、ARPなどのブロードキャストのフレームが飛ぶ範囲を制限できる。

スイッチ1つで見るとこの技術はセグメントを分割する機能に見えるが、複数のスイッチを跨ぐことができるので物理的に離れた(異なるフロアなど)ネットワークを繋ぎ、1つのVLANとする機能としても利用できる。  
ここで、複数のVLANを作り、スイッチ同士を繋ごうとするとVLANの数だけ線が必要になりそうだが、これはトランクポートにより解決する。
トランクポートでは、フレーム送信側のスイッチでVLANタグを埋め込み、フレーム受信側のスイッチがタグを見て送り先のVLANを識別することができる。これにより1つのポート、1つの接続だけでスイッチ同士を繋ぐことができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406130/ebb5a789-bfbe-e8da-9247-3dd5d1b2d961.png)

IEEE802.1Qで定義されたVLANタグをフレームに挿入することで、1本の線を共有してもどのそのフレームがどのVLANのものかが区別できるので1本で済む。

https://shinyainfra.hatenablog.com/entry/2023/08/27/164334

VLANは仮想的なネットワークセグメントなので、異なるネットワーク同士で通信をする場合にはL3の接続が必要となる。一般にL2機器はLAN内の通信を、L3機器はLAN同士の通信を行うものであることから、LAN外との通信が出てくるならルータの話が出てくる。

## ルータ

ルータはそのインターフェースにIPアドレスを設定することでルータに接続されたネットワーク同士をIPで区別することができるようになる。
そのため、あるネットワークからルータで繋がった別のネットワークへの通信を行いたい場合、ルータは受け取ったパケットの宛先IPアドレスをチェックし、転送先を判別する。

https://news.mynavi.jp/techplus/article/vlan-4/

## オンプレミス拠点間の専用線接続

専用線を引くというのは実際に長距離ケーブルを引くのではない。
多くの場合で、各拠点の近くには通信会社の局舎や中継施設があるため、そこまで自身でケーブルを引くことで通信事業者(NTTコミュニケーションズなど)の通信網につながる。これを専用線で繋ぎたい他端側の拠点でも行うことで双方につながった状態となる。

拠点A -> (専用線) -> 最寄りの通信事業者収容局 -> 拠点Bの最寄りの通信事業者収容局 ->(専用線)-> 拠点B

https://oshiete.goo.ne.jp/qa/194720.html

専用線接続は拠点間に1:1の占有する接続を持つ。

## Interconnectの接続方法

上述のように、VLANネットワークを拡張することで拠点間を繋ぐL2レベルの方法と、BGPでL3レベルの接続をする方法の2つがある。

### レイヤ3接続

BGPセッションは、[オンプレミス拠点のルータ - コロケーション施設内の顧客ルータ]、[コロケーション施設内の顧客ルータ - コロケーション施設内でのGoogle Cloud側ルータ]、[コロケーション施設内のGoogle Cloud側ルータ - Cloud Router]の各区間でBGPセッションが確立される。

拠点のルータからロケーション施設のラックにおいた自身のルータへの通信はオンプレ拠点間の専用線接続と同様に専用線で繋がるものと思う。
ルータとGoogle Peering Edgeの間は直接接続、Google Peering Edge以降はGoogleの回線でクラウドとの閉域網が出来上がる。

ちなみになぜBGPが必要なのか？
→ コロケーション施設内の顧客ルータとGoogle側ルータの接続しかり、拠点ルータからCloud RouterのVLANアタッチメント自体も含めあらゆるものは冗長化されている。
その中で、一つの経路で障害が発生した時に経路情報を手動で書き換えるのは現実出来ではない。そのため経路障害を検出し動的にルーティングできるルータが必要になる。

### レイヤ2接続

[オンプレミス拠点のルータ - Cloud Router]間でBGPセッションが確立される。そのため間に位置するコロケーション施設内外の通信はL2レベルの通信になる。

L2接続オプションであればオンプレ拠点とCloud Router間でBGPしているので、コロケーション施設内に置くのは正直ルータである必要はない。最低限の機能で言えばスイッチでもいいはず。
おそらく将来的な拡張性(変更する場合)や用意する機材を統一する意味でもルータを置いているのではなかろうか。

## BGP

そもそもBGPについて。
以前ネットワークの知識が全くなかった頃、家庭のルータは皆BGPで動的ルーティングをしていて以下のようになっていると思っていた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406130/687b9b10-95b4-aee0-f2d6-abaa56c3aa7b.png)

実際にはそんなことはなくて、そもそも家庭のルータにはBGPで経路交換するような力を持ったものではない。
単にLANのプライベートIを処理してそれ以外をNATしてデフォルトゲートウェイに指定された契約するISPのブロードバンドルータに投げるようなもの。

さらに、ここでつながったISPも1つではなくていくつものISPのネットワークがあり、我が家のルータから飛んだパケットが遠く離れたISPのネットワーク下のルータを通ってサーバに届くまでには(場合によるが)いくつものネットワークを経由する必要ある。この時に初めてBGPが出てくる。一般家庭のルータもISPから見てみればLAN内の機器に過ぎなくて、ISPのネットワーク(AS)を跨いで通信する時にBGPがでてくる。

このいくつものISPというのにも種類というか階層がある。最上位のNTTやソフトバンクなどからtier2、tier3と3階層になっており、家庭のルーターのデフォゲはtier3(地域のISP)のルータに対し向いている。
そして中間にあたるtier2,3のルーターもほぼ一緒で、扱うのがグローバルIPというだけで自身が直接回線を持つISPのネットワーク(AS)のルーターに対してトラフィックを送るか、知らない宛先ならデフォゲに書かれた上位のISPのルータに送るというテーブルを持ち、これはBGPで動的に更新している。

最上位であるtier1のルータはデフォゲを持たず、80万行近いレコードで最上位のルーター群と繋がっている。

上位のルータはトラフィックを流すとコストがかかるため下位のルーター同士はある程度ピアリングしデフォゲに投げずとも解決できるようにしている。

https://www.softbank.jp/sbnews/entry/20240220_01

# Cloud VPN

IP-VPNを利用してネットワーク間をセキュアに接続する。

通常、IP-VPNは暗号化されないがCloud VPNではIKEによる暗号化をサポートしている。

https://cloud.google.com/network-connectivity/docs/vpn/concepts/supported-ike-ciphers?hl=ja

IKEは、

> インターネット鍵交換（IKE）は、2 つのデバイス間のセキュアで認証された通信チャネルを設定するのに使われるセキュアな鍵管理プロトコル

であり、通常はIPsecによるインターネットVPNで利用される。

https://www.juniper.net/documentation/jp/ja/software/junos/vpn-ipsec/topics/topic-map/security-ike-basics.html

# VPNを支える技術

## VLAN

前述の通り、物理的に近かったり専用線によりスイッチ間を直接接続できるのであれば任意に番号を振って管理すればいいが、そうではなく、離れた区間にVLANネットワークの拡張を実現したい場合はどうするか？
→ 事前にISPと調整しトンネルを張る必要がある。ISPでは複数の顧客のVLAN接続を違いに区別できるようにVLAN IDを持っているのでそのIDを使う。

https://www.infraexpert.com/study/vlanz17.html

例えば拠点A-B間をISPのネットワークを通してVLANで繋ぐ場合、AのルータではフレームにVLANタグをつけてISPのルータに送る。ISPではVLAN IDでどのVLANのフレームかが区別でき、ISPのネットワークではMPLS(後述)などの技術によりVLANタグをもとにスイッチ(実際にはルータ)間を転送する。最終的に拠点Bのルータに到達したフレームはVLANタグが外れ、宛先MACアドレスにフレームが届く。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406130/be39a5dd-232d-b28d-45f0-780c77007c0e.png)

## MPLS

MPLSとはパケットに固定長のラベルをつけて、アドレスの代わりにラベルであて先を識別する転送技術のこと。MPLSは以下の構成を取る。
通信会社のネットワークの入り口にはエッジルータがあり、外部から到達するパケットにラベルをつけたり、逆に外に転送する際にラベルを外したりする。
内部のネットワークはコアルータがあり、ラベルに沿って次のコアルータに転送する。
なお、MPLSは暗号化する技術ではないので、ラベルをつけただけでパケットの中身はそのまま。

https://www.slideshare.net/slideshow/ss-60985808/60985808#26

https://mypage.otsuka-shokai.co.jp/contents/business-oyakudachi/words/ip-vpn.html

この技術は拡張イーサネット(Ethernet over MPLS (EoMPLS))にもIP-VPNにも応用され、L2レベル、L3レベルいずれの閉域網実現においても重要な技術となる。

IPSのネットワークス内での閉域の通信を実現するにあたり、MPLSでは以下の2つのラベルを付与する。
- MPLS網内の転送用ラベル : 次の送り先のルータを記すラベル。入り口のエッジルータで付与し出口の一つ前のエッジルータで外す(出口のエッジルータの負荷軽減のため)
- VRFによるVPN識別用ラベル : 顧客識別用。閉域網はプライベートIPでやりとりしているので重複するIPレンジのネットワークがある場合に、最終的にどのクライアントエッジルータに転送するかがわからなくなってしまう

https://www.slideshare.net/slideshow/ss-60985808/60985808#26

なお、MPLSでは暗号化をしないのでIP-VPNも暗号化をしているわけではない。MPLSは通信経路を示したラベルを用いて論理的にネットワークを区切り、外のネットワークと隔離することでセキュリティを確保してる。

https://mypage.otsuka-shokai.co.jp/contents/business-oyakudachi/words/ip-vpn.html