【ACE】Virtual Private Networks (VPN)

# こんにちは
このガイドはGoogle VPCと外部ネットワークの間のCloud VPNを構成する方法を提供します。

# 準備しておくもの
:information_desk_person_tone1: [VPC ネットワーク](https://console.cloud.google.com/networking/networks/)、別々のリージョンのサブネットで2つ作成します。

| Property|Value 1 |Value 2 |
|:--|:--|:--|
|Name|vpn-network-1|vpn-network-2|
|Region|us-central1|europe-west1|
|subnet name|subnet-a|subnet-b|
|IP address range|10.5.4.0/24|10.1.3.0/24|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/23b45a2e-af15-fc5a-7db7-3c037f0d43e7.png)

:information_desk_person_tone1: [ファイアウォールルール](https://console.cloud.google.com/networking/firewalls/)、2つ作成します。
これらのファイアウォールルールは、どこからでもSSHおよびICMPトラフィックを許可します。

| Property|Value 1 |Value 2 |Value 3 |Value 4 |
|:--|:--|:--|:--|:--|
|Name|network-1-allow-ssh|network-2-allow-ssh|network-1-allow-icmp|network-2-allow-icmp|
|Network|vpn-network-1|vpn-network-2|vpn-network-1|vpn-network-2|
|Targets|All instances in the network|All instances in the network|All instances in the network|All instances in the network|
|Source filter|IP Ranges|IP Ranges|IP Ranges|IP Ranges|
|Source IP ranges|0.0.0.0/0|0.0.0.0/0|0.0.0.0/0|0.0.0.0/0|
|Protocols and ports|Specified protocols and ports|Specified protocols and ports|Specified protocols and ports|Specified protocols and ports|
|tcp|22|22|||
|Other protocols|||icmp|icmp|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/af0cdcbe-c757-f9b7-b279-28a485483018.png)

:writing_hand: us-central1のvpn-network-1ネットワークとそのサブネットaに注意し てください。
:writing_hand: europe-west1のvpn-network-2ネットワークとそのサブネットbに 注意してください。

:information_desk_person_tone1: [VM](https://console.cloud.google.com/compute/instances)、2つ作成します。

| Property|Value 1 |Value 2 |
|:--|:--|:--|
|Name|server-1|server-2|
|Region|us-central1|europe-west1|
|Zone|us-central1-b||
|Machine type|f1-micro (1 vCPU, 614 MB memory)|f1-micro (1 vCPU, 614 MB memory)|

*Management, security, disks, networking, sole tenancy*をクリックします
*Click networking*をクリックします
*For Network interfaces*をクリックします

| Property|Value 1 |Value 2 |
|:--|:--|:--|
|Network|vpn-network-1|vpn-network-2|
|Subnetwork|subnet-a|subnet-b|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/7a53f699-4f4b-4bb2-fbb3-6f1d1129ad74.png)

# ネットワーク間のVPN接続は確立されてないことを確認します
現在、2つのネットワーク間のVPN接続は確立されていません。ネットワーク内のインスタンス間の接続オプションを調べます。
VM1のSSHターミナルを起動して接続すること

server-2の外部IPアドレスへの接続をテストするには、次のコマンドを実行します。
`ping -c 3 <Enter server-2's external IP address here>`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/287bb378-9073-80cd-2f50-63ca94b16b55.png)

server-2の内部IPアドレスへの接続をテストするには、次のコマンドを実行します。
`ping -c 3 <Enter server-2's internal IP address here>`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/f593620b-bf79-b300-0c71-67bf14de781e.png)

VPN接続がまだないため、内部IPアドレスにpingを実行すると、100％のパケット損失が表示されます。

# **VPN**ゲートウェイとトンネルを構成します
2つのネットワーク間にVPNゲートウェイとトンネルを作成することにより、2つのVMインスタンス間の**プライベート通信**を確立します。
VPNゲートウェイごとに1つの静的IPアドレスを予約します。

## 静的IPアドレスを予備します
[**VPC network > External IP addresses > Reserve a static address**](https://console.cloud.google.com/networking/addresses/add)
以下を指定し、残りの設定はデフォルトのままにします。

| Property|Value 1 |Value 2 |
|:--|:--|:--|
|Name|vpn-1-static-ip|vpn-2-static-ip|
|IP version|IPv4|IPv4|
|Region|us-central1|europe-west1|

*vpn-1-static-ip*
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/094c4a9b-cc3d-af80-8a89-c48bc71be416.png)

*vpn-2-static-ip*
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/0bd3a47b-6e06-6a31-c7e5-6bfa621f7c0d.png)

次のステップのために両方のIPアドレスをメモします。彼らは私たちと呼ぶことにする[VPN-1-STATIC-IP]と[VPN-2-STATIC-IP]。
[VPN-1-STATIC-IP]: 34.70.15.244
[VPN-2-STATIC-IP]: 34.76.7.116
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/67b8448b-1a78-09a3-070b-503a5a72ec46.png)

## ゲートウェイとトンネルを作成します
[**Navigation menu > Hybrid Connectivity > VPN > Create VPN Connection**](https://console.cloud.google.com/hybrid/vpn/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/a11951cf-4eda-f24b-7c39-bb587a9a1ec3.png)

VPNゲートウェイセクションで以下を指定し、残りの設定はデフォルトのままにします。

| Property|Value 1 |Value 2 |
|:--|:--|:--|
|Name|vpn-1|vpn-2|
|Network|vpn-network-1|vpn-network-2|
|Region|us-central1|europe-west1|
|IP address|vpn-1-static-ip|vpn-2-static-ip|

*vpn-1ゲートウェイ*
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/f7c4e064-d066-937f-2b51-6cabd0035d4b.png)

*vpn-2ゲートウェイ*
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/3a515411-a167-5f11-1aff-0596a52f887c.png)

トンネルセクションで以下を指定し、残りの設定はデフォルトのままにします。

| Property|Value 1 |Value 2 |
|:--|:--|:--|
|Name|tunnel-1-to-2|tunnel-2-to-1|
|Remote peer IP address|[VPN-2-STATIC-IP]|[VPN-1-STATIC-IP]|
|IKE pre-shared key|gcprocks|gcprocks|
|Routing options |Route-based|Route-based|
|Remote network IP ranges|10.1.3.0/24|10.5.4.0/24|

*tunnel-1-to-2トンネル*
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/6e3588bc-3844-63ac-bffe-468976356d08.png)

*tunnel-2-to-1トンネル*
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/d39cd12b-0b98-f9c3-2390-471cd0b57bc0.png)

## ネットワーク間のVPN接続は確立されていることを確認します
VM1のSSHターミナルを起動して接続することを確認します
*external IP*
`ping -c 3 <Enter server-2's external IP address here>`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/81267cfa-6680-3168-e0bd-e9a2c9954472.png)

*internal IP*
`ping -c 3 <Enter server-2's internal IP address here>`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581348/6f87ae14-7e73-0e2d-ac18-de004110528a.png)
接続ができました～

# お疲れ様です
異なるリージョンにサブネットがある2つのネットワーク間にVPN接続を構成してみました！
ここでお終わりします。
ﾟ･:*｡(ꈍᴗꈍ)ε｀*)~｡*:･ﾟ