#GCPでSite to Site VPN
GCPで自宅のネットワークとVPNを接続してみたので、その内容を記載します。
AWSとのSite to Site VPNは以前からやってた(記事にはしてません)ので、GCPだとどんな感じかなぁというのがきっかけです。
ちなみにネットワークエンジニアではないので、間違ってる解釈とかあるかもです。
#1. 構成図
結果として環境はこんな感じになりました。
##1.1. GCP VPC
AWSと近い考え方ではありますが、VPCは少し違います。
VPCはただの定義(箱)みたいなもので、サブネットでリージョンとネットワークCIDRを設定します。
新規にVPCを構成し、リージョンは今回大阪を選びました。zoneは3つ存在します。
通信確認用に1台GCEを1台用意しときます。
(私の名前が加藤なので、ネーミングの頭にkato-ってつけてます。)
【サブネット】
名前 | 領域 | IPアドレス範囲 | ゲートウェイ |
---|---|---|---|
kato-subnet-osaka | asia-northeast2 | 172.28.0.0/20 | 172.28.0.0 |
##1.2. 家 ネットワーク
家のネットワークは単純です。
回線1つ契約してて、業者からレンタルしてるルータがフロントにいますが、スルーさせて個人でもってるrtx1200でグローバルIPを持つ構成にしてます。
【rtx1200】
pp | lan | IPアドレス | IPアドレス範囲 |
---|---|---|---|
pp1 | lan3 | グローバルIP : xxx.xxx.xxx.xxx (pppoe) | - |
- | lan1 | プラベートIP : 192.168.123.254 | 192.168.123.0/24 |
ip route default gateway pp 1
ip lan1 address 192.168.123.254/24
ip lan1 proxyarp on
ip lan1 secure filter in 100000 100001 100002 100003 100004 100005 100006 10000
7 100099
pp select 1
description pp PRV/PPPoE/0:eo
pp keepalive interval 30 retry-interval=30 count=12
pp always-on on
pppoe use lan3
pppoe auto disconnect off
pp auth accept pap chap
pp auth myname [プロバイダ接続ID] [プロバイダ接続パスワード]
ppp lcp mru on 1454
ppp ipcp ipaddress on
ppp ipcp msext on
ppp ccp type none
ip pp secure filter in 200003 200020 200021 200022 200023 200024 200025 200030
200032
ip pp secure filter out 200013 200020 200021 200022 200023 200024 200025 20002
6 200027 200099 dynamic 200080 200081 200082 200083 200084 200085 200098 200099
pp enable 1
secure filter
は環境によって違うと思います。
#2. Cloud VPN構成
ネットワークの「ハイブリッド接続」画面より
最初何も作成したことがない場合、こんな感じの画面です。(2019/10現在です。今後ガラッと画面遷移は変わるかもしれません。)
##2.1. クラウドルーター
そのままVPNのウィザードで進めてもいいですが、流れ的にはまず「クラウドルーター」を作成します。
【クラウドルーター】
クラウドルーター側のASNを設定します。BGP使うので必要です。
今回の環境ではアドバタイズさせる必要のあるネットワークが1つのサブネットしか存在しないため、上図ではカスタムですが、デフォルトでもいいです。
名前 | ネットワーク | リージョン | Google ASN | アドバタイズされたルート |
---|---|---|---|---|
kato-cloud-router | kato-vpc | asia-northeast2 (大阪) | 64512 | Cloud Routerに表示されるすべてのサブネットにアドバタイズ(デフォルト) |
##2.2. VPNの作成(IPsecまで)
###2.2.1. VPNオプション
ウィザード最初の画面
今回は「高可用性(HA)VPN」を選択します。
###2.2.2. Cloud HA VPNゲートウェイの作成
VPNゲートウェイの名前 | VPCネットワーク | リージョン |
---|---|---|
kato-vpn-gateway | kato-vpc | asia-northeast2 (大阪) |
###2.2.3. VPNトンネルの追加
①
ここでは選択されたVPNゲートウェイの情報が正しいことを確認します。
VPNゲートウェイにインターフェースが2つ、パブリックIPアドレスが自動で付与されているはずです。
インターフェース番号 | パブリックIPアドレス |
---|---|
0 | 35.242.45.253 |
1 | 35.220.45.2 |
②
「ピアVPNゲートウェイ」を選択しますが、この時点で作成されていないため、
「オンプレミスまたは非Google Cloud」を選択し、「新しいピアVPNゲートウェイを作成する」を選択します。
###2.2.4. ピアVPNゲートウェイのを作成
ピアVPNゲートウェイを以下の形で作成しました。
名前 | ピアVPNゲートウェイ インターフェース | インターフェース0のIPアドレス |
---|---|---|
kato-rtx1200 | 1つのインターフェース | xxx.xxx.xxx.xxx(家のグローバルIPアドレス) |
###2.2.5. トンネル設定
まずはトンネルを1つ作成します。
先に作成したクラウドルーターを選択し、インターフェースを指定します。
ピアVPNゲートウェイはインターフェースが1つですが、VPNゲートウェイは2つあるので、まずは「インターフェーズ 0」を指定します。
IKEバージョンは2とします。
###2.2.6. BGPセッションの構成
BGPはここで設定してしまってもよいですが、本手順ではまずIPsecのトンネルが問題なく接続されることを確認した後で、BGPを構成します。
その方が、後々エラーでうまく接続できない場合に、ルーター側で設定するコンフィグの切り分けがしやすいからです。
###2.2.7. rtx1200 VPN設定(IPsecまで)
① rtx1200 トンネル1
こんな感じ
tunnel select 81
ipsec tunnel 101
ipsec sa policy 101 81 esp aes-cbc sha-hmac
ipsec ike version 81 2
ipsec ike duration ipsec-sa 81 3600
ipsec ike encryption 81 aes-cbc
ipsec ike group 81 modp1024
ipsec ike hash 81 sha
ipsec ike keepalive use 81 on dpd 10 3
ipsec ike local address 81 192.168.123.254(家のルーター プライベートIPアドレス)
ipsec ike local name 81 xxx.xxx.xxx.xxx(家のルーター グローバルIPアドレス) ipv4-addr
ipsec ike pfs 81 on
ipsec ike pre-shared-key 81 text 【IKE 事前共有キー】
ipsec ike remote address 81 35.242.45.253(VPNゲートウェイ インターフェース0)
ipsec ike remote name 81 35.242.45.253(VPNゲートウェイ インターフェース0) ipv4-addr
ipsec tunnel outer df-bit clear
ip tunnel tcp mss limit 1379
tunnel enable 81
tunnel select none
ipsec auto refresh on
IKEバージョンが2なので、明示的に指定してます。
ipsec ike version 81 2
IKEバージョンが2の場合、下記が必要かと思われます。
ipsec ike local name 81 xxx.xxx.xxx.xxx(家のルーター グローバルIPアドレス) ipv4-addr
ipsec ike remote name 81 35.242.45.253(VPNゲートウェイ インターフェース0) ipv4-addr
###2.2.8. IPsecステータス確認
ここで一度状態を確認します。
うまくいってればこんな感じ。
【rtx1200側】
# show ipsec sa
sa sgw isakmp connection dir life[s] remote-id
-----------------------------------------------------------------------------
1 81 - ike - 9547 35.242.45.253
2 81 1 tun[081]esp send 3285 35.242.45.253
3 81 1 tun[081]esp send 580 35.242.45.253
4 81 1 tun[081]esp recv 580 35.242.45.253
5 81 1 tun[081]esp recv 3285 35.242.45.253
うまくいかない場合は、GCP側のログ、rtx1200側のログをみてつぶしていきましょう。
https://network.yamaha.com/setting/router_firewall/cloud/amazon_vpc/setup_rt
AWSのVPNのときも必要となった設定で下記があります。VPN(IPsec)に使うパケットに必要です。
トンネル以外でこの設定が必要になるかと思います。
参考:
ip filter 200080 pass * 192.168.123.254 udp * 500
ip filter 200081 pass * 192.168.123.254 esp * *
nat descriptor type 1000 masquerade
nat descriptor address outer 1000 (ルーターのグローバルIPアドレス)
nat descriptor masquerade static 1000 1 192.168.123.254 udp 500
nat descriptor masquerade static 1000 2 192.168.123.254 esp
私の実際の設定:
ip filter 200101 pass * 192.168.123.254 esp
ip filter 200102 pass * 192.168.123.254 udp * 500
nat descriptor type 1000 masquerade
nat descriptor address outer 1000 ipcp
nat descriptor address inner 1000 auto
nat descriptor masquerade static 1000 1 192.168.123.254 esp
nat descriptor masquerade static 1000 2 192.168.123.254 udp 500
プロバイダ設定 pp1
pp select 1
ip pp secure filter in 200101 200102 #デフォルトからルールを追記した形でここに記載してる(本当はもっと多いし、全部記載する必要がある)
ip pp nat descriptor 1000 #NATのルールをここに適用
##2.3. VPNの作成(BGP構成)
###2.3.1. BGPセッションを構成
作成したトンネルを選択して、「BGPセッションを構成」をクリックします。
図ではカスタムルートになってますが、実際の設定は「Cloud Routerのアドバタイズを使用(デフォルト)」を選択してます。
名前 | ピアASN | Cloud RouterのBGP IP | BGPピアIP | アドバタイズされたルート |
---|---|---|---|---|
kato-tvpn-tunnel1-bgp | 65100(家のルーター側) | 169.254.0.1 | 169.254.0.2 | Cloud Routerのアドバタイズを使用(デフォルト) |
BGP IPについて。
1対1の通信なので、CIDRは/30ならなんでもよいと思われるが、GCP側のマニュアルに合わせる感じで。
###2.3.2. rtx1200 VPN設定(BGP)
② rtx1200 トンネル1 BGP
tunnel select 81
ip tunnel address 169.254.0.2/30
ip tunnel remote address 169.254.0.1
tunnel select none
bgp use on
bgp autonomous-system 65100
bgp neighbor 1 64512 169.254.0.1 hold-time=30 local-address=169.254.0.2
bgp import filter 1 equal 192.168.123.0/24
bgp import 64512 static filter 1
bgp configure refresh
もしかしたら、最初の4行はいらないかもしれない。(AWSのときには入れてたので今回も入れました)
bgp neighbor 1 64512 169.254.0.1 hold-time=30 local-address=169.254.0.2
ここは重要。
bgp import filter 1 equal 192.168.123.0/24
bgp import 64512 static filter 1
これも重要。
GCP側にオンプレ側のネットワークをアドバタイズする必要があるので、広告したいネットワークを記載
この場合、オンプレ側のプライベートネットワークCIDR。
###2.3.3. VPNのステータス確認
ここでBGPまでが完了するはずなので、ステータスを確認します。
####2.3.3.1. GCP クラウドルーター確認
####2.3.3.3. rtx1200側の確認
# show status bgp neighbor
BGP neighbor is 169.254.0.1, remote AS 64512, local AS 65100, external link
BGP version 4, remote router ID 169.254.0.1
BGP state = Established, up for 05:20:47
Last read 00:00:03, hold time is 30, keepalive interval is 10 seconds
Received 1925 messages, 0 notifications, 0 in queue
Sent 1929 messages, 0 notifications, 0 in queue
Connection established 8; dropped 7
Last reset 05:21:11
Local host: 169.254.0.2, Local port: 179
Foreign host: 169.254.0.1, Foreign port: 40805
##2.4. トンネルが1つでVPN構成完了
ここまでで、ひとまず完了です。
トンネル1つでVPNができてます。
ただ、ここはAWSのVPNと同様トンネルを2つ構成したい。(オンプレのルーターは1つやからあんまり意味ないけど。)
ということでトンネルをもう1つ追加します。
さくっと流します。
###2.4.2. rtx1200 トンネル + BGP
tunnel select 82
ipsec tunnel 102
ipsec sa policy 102 82 esp aes-cbc sha-hmac
ipsec ike version 82 2
ipsec ike duration ipsec-sa 82 3600
ipsec ike encryption 82 aes-cbc
ipsec ike group 82 modp1024
ipsec ike hash 82 sha
ipsec ike keepalive use 82 on dpd 10 3
ipsec ike local address 82 192.168.123.254(家のルーター プライベートIPアドレス)
ipsec ike local name 82 xxx.xxx.xxx.xxx(家のルーター グローバルIPアドレス) ipv4-addr
ipsec ike pfs 82 on
ipsec ike pre-shared-key 82 text 【IKE 事前共有キー】
ipsec ike remote address 82 35.220.45.2(VPNゲートウェイ インターフェース1)
ipsec ike remote name 82 35.220.45.2(VPNゲートウェイ インターフェース1) ipv4-addr
ipsec tunnel outer df-bit clear
ip tunnel address 169.254.0.6/30
ip tunnel remote address 169.254.0.5
ip tunnel tcp mss limit 1379
tunnel enable 82
tunnel select none
bgp neighbor 2 64512 169.254.0.5 hold-time=30 local-address=169.254.0.6
bgp configure refresh
###2.4.3. VPNのステータス確認
####2.4.3.1. GCP クラウドルーター確認
####2.4.3.3. rtx1200側の確認
IPsec
# show ipsec sa
sa sgw isakmp connection dir life[s] remote-id
-----------------------------------------------------------------------------
12 81 - ike - 18293 35.242.45.253
26 81 12 tun[081]esp send 1212 35.242.45.253
27 81 12 tun[081]esp recv 1212 35.242.45.253
31 82 - ike - 27131 35.220.45.2
32 82 31 tun[082]esp send 1931 35.220.45.2
33 82 31 tun[082]esp recv 1931 35.220.45.2
BGP
# show status bgp neighbor
BGP neighbor is 169.254.0.1, remote AS 64512, local AS 65100, external link
BGP version 4, remote router ID 169.254.0.1
BGP state = Established, up for 00:26:41
Last read 00:00:09, hold time is 30, keepalive interval is 10 seconds
Received 161 messages, 0 notifications, 0 in queue
Sent 164 messages, 0 notifications, 0 in queue
Connection established 1; dropped 0
Last reset never
Local host: 169.254.0.2, Local port: 179
Foreign host: 169.254.0.1, Foreign port: 37739
BGP neighbor is 169.254.0.5, remote AS 64512, local AS 65100, external link
BGP version 4, remote router ID 169.254.0.5
BGP state = Established, up for 00:19:39
Last read 00:00:08, hold time is 30, keepalive interval is 10 seconds
Received 119 messages, 0 notifications, 0 in queue
Sent 121 messages, 0 notifications, 0 in queue
Connection established 1; dropped 0
Last reset never
Local host: 169.254.0.6, Local port: 179
Foreign host: 169.254.0.5, Foreign port: 36357
#3. VPN BGP完了
ここまででVPN BGPがトンネル2つで完了しています。
ここからは通信確認になります。
##3.1. ルート(経路)確認
###3.1.1. GCPルート確認
GCPの場合、BGPでアドバタイズがちゃんとできていれば、下記画面のように自動で「ルート」の動的情報が追加されます。
AWSのようにルートテーブルを設定する必要はありません。
動的情報が上がってこない場合、アドバタイズがミスってると思います。
###3.1.2. rtx1200ルート確認
# show ip route
宛先ネットワーク ゲートウェイ インタフェース 種別 付加情報
default - PP[01] static
169.254.0.0/30 - TUNNEL[81] implicit
169.254.0.4/30 - TUNNEL[82] implicit
172.28.0.0/20 169.254.0.1 TUNNEL[81] BGP path=64512
192.168.123.0/24 192.168.123.254 LAN1 implicit
3.2. ファイアウォールルール
ということで必要な設定としてはファイアウォールルールとなります。
設定の詳細はここでは割愛しますが、基本的にインバウンド(上り)のルールにオンプレミス側のプライベートIPアドレスCIDRを許可します。
※ 下りは拒否しない限り0.0.0.0/0
で許可されてるはず
オンプレミス側、GCP側より双方で通信確認をし、通れば完了となります。
以上です。