3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

IPsec-VPNを使ってGCPとFortigateを繋いだあと、インスタンスにローカルIPでアクセスできるようにした手順。

Posted at

こんにちわ!
関西でいそいそとネットワーク組んだりしているうぃっちゃんといいます。
本職は光の戦士、副業でエンジニアをやっています。

突然ですが、無性にどこかとIPsec-VPN張りたくなるときってありますよね。
今回はGCP上にインスタンスを立ててIPsec-VPNを張り、自宅のPCからローカルIPでインスタンスにアクセスしたいと思います。

今回のゴール

GCPインスタンスに乗っているnginxをIPsec-VPNを経由してブラウザで見ることができる。
nginxの初期ページが見れたらOK!

作成したネットワーク全体像

ネットワーク全体図.jpg

事前準備

これから始めるにおいて、以下のことをできている前提とします。

  • GCPに適当なプロジェクトを1つ作成している。(中身は空っぽでOK)
  • Fortigate配下のLANからWANにアクセスすることができる。

このページ見れてるってことは大丈夫ですね。

機器情報

機器名称 外部IPアドレス
Fortigate 50E v6.2.0 動的IP
GCP VPN 静的IP

注意

画像内に入力されている値と、その後で記載している表にかかれている値が異なる場合が多々あります。
表を正として読んでいってください。

作業開始!

時系列順で記載します。

GCP設定編

VPCネットワーク作成

ここで、GCP側のネットワークを作成していきます。
左側ハンバーガーメニューから「VPCネットワーク」→「VPCネットワーク」を選択します。
上部の「+VPCネットワークの作成」をクリックします。
screencapture-console-cloud-google-networking-networks-add-2020-08-17-21_20_36.png
設定内容は以下の通りです。(デフォルト設定含む。)

設定項目 入力値
名前 test-vpn-instance (任意の値)
Subnet creation mode カスタム
Subnetの方の名前 test-vpn-network (任意の値)
リージョン asia-northeast1 (任意のリージョン)
IP address range 192.168.200.0/24
Private Google access オフ
Flow logs オフ
Dynamic routing mode リージョン

VPN作成

左側ハンバーガーメニューから「ハイブリッド接続」→「VPN」を選択します。
以下の画面で「Classic VPN」を選択します。
screencapture-console-cloud-google-hybrid-vpn-select-2020-08-17-22_08_07.png

設定画面が長いので、VPNゲートウェイとトンネル部分に分けて解説します。
screencapture-console-cloud-google-hybrid-vpn-add-2020-08-17-22_37_46.jpg
設定内容は以下の通りです。

設定項目 設定内容
名前 vpn-gcp-fortigate ( 任意の値 )
ネットワーク test-vpn-instance ( VPCネットワークで作成したやつ )
リージョン asia-northeast1
IPアドレス IPアドレスを作成( GCPのVPNゲートウェイの外側IPアドレスになる )

続いて、VPNトンネルの設定を行います。
IKEの事前共有キーは設定後に参照することができないのでしっかり控えておきましょう!

vpn-tunnel.jpg

IKEの事前共有キーは設定後に参照することができないのでしっかり控えておきましょう!
(大事なことなので2回言った。)

設定項目 設定内容
名前 tunnel-gcp-fortigate ( 任意の値 )
リモートピアIPアドレス ( Fortigateの外部IPアドレス )
IKEバージョン IKEv2
IKE事前共有キー 生成してコピー(Fortigateでも使うので控えておく)
ルーティング オプション ポリシーベース
リモートネットワークIPの範囲 192.168.11.0/24 ( Fortigateの内部ネットワーク )
ローカルサブネットワーク test-vpn-network( VPCネットワークで作成したやつ )
ローカルIP範囲 192.168.200.0/24

作成を押して、一旦終わり。
このままだとICMPを許可していないのでpingでの導通確認ができません。
ファイアウォールルールをいじりに行きます。

ファイアウォールルール追加

左側ハンバーガーメニューから「VPCネットワーク」→「ファイアウォール」を選択します。
上部の「+ファイアウォールルールを作成」をクリックします。

screencapture-console-cloud-google-networking-firewalls-add-2020-08-18-00_02_34.png

設定項目 設定内容
名前 allow-icmp ( 任意の値 )
ログ オフ
ネットワーク test-vpn-instance
優先度 1000
トラフィックの方向 上り
一致したときのアクション 許可
ターゲット ネットワーク上のすべてのインスタンス
ソースフィルタ IP範囲
ソースIPの範囲 192.168.11.0/24
2番めのソースフィルタ なし
プロトコルとポート 指定したプロトコルとポート
その他のプロトコル icmp

これでつながったあとにpingが通るようになるはずです。

続いてインスタンスを作成します。

GCPインスタンス作成

ネットワークの試験用インスタンスなのでぱぱっと組んでしまいます。重要なのはネットワークの部分だけ!
screencapture-console-cloud-google-compute-instancesAdd-2020-08-17-23_13_01.jpg
設定は以下のとおりです。

設定項目 設定内容
名前 instance-1 ( 任意の値 )
リージョン asia-northeast1
ゾーン asia-northeast1-a ( b,cでも可 )
マシン構成 汎用 N1
ブートディスク CentOS8 SSD-20GB(サクサク動くのが好き)

ここから本番。ネットワークの設定を行っていきます。画像では第4オクテットが書かれていませんが「.2」です。

instance-network-settings.jpg

設定項目 設定内容
ファイアウォール HTTPトラフィックを許可する
ネットワーク test-vpn-instance
サブネットワーク test-vpn-network
プライマリ内部IP エフェメラル(カスタム)
カスタムのエフェメラルIPアドレス 192.168.200.2( GCPインスタンスのローカルIP )
外部IP エフェメラル
ネットワークサービス階層 プレミアム( 標準でもできるかは未検証 )
IP転送 オフ
作成したインスタンスにSSHで入って、sudo yum -y install nginxとかでインストールしてください。
外部IPをブラウザに入力してnginx初期ページを見れたら、SSHを抜けてインスタンスをいじるのは終わりです。

Fortigate設定編

新規IPsec-VPN設定

Fortigateの管理画面にログインします。
メニューから「VPN」→「IPsecトンネル」を選択します。
「+新規作成」から新しく作っていきます。
fortigate.jpg

設定項目 設定内容
名前 ipsec-gcp( 任意の値 )
テンプレートタイプ カスタム
次へを押して詳細な設定に入ります。
screencapture-192-168-11-254-ng-vpn-ipsec-edit-2020-08-18-00_34_38.jpg
設定項目 設定内容
IPバージョン IPv4
リモートゲートウェイ 固定IPアドレス
IPアドレス GCPのVPN接続で設定したIPアドレス
インターフェース wan1
NATトラバーサル 有効
認証方式 事前共有鍵
事前共有鍵 ( GCPで作成してコピーした値 )
IKEバージョン 2
続いてフェーズ1とフェーズ2の暗号化とか認証とかなんやらかんやらの設定を行っていきます。

screencapture-192-168-11-254-ng-vpn-ipsec-edit-2020-08-18-00_34_38-2.jpg

設定グループ 設定項目 設定内容
フェーズ1プロポーザル 暗号化 AES128GCM
PRF PRFSHA384
暗号化 AES256GCM
PRF PRFSHA256
Diffie-Hellmanグループ 15, 14, 5
鍵の有効時間(秒) 36000
ローカルID (空欄)
フェーズ2セレクタ 名前 connect-gcp ( 任意の値 )
ローカルアドレス サブネット 192.168.11.0/24
リモートアドレス サブネット 192.168.200.0/24
フェーズ2プロポーザル 暗号化 AES128GCM
暗号化 AES256GCM
Replay Detectionを有効化 Check
PFSを有効化 Check
Diffie-Hellmanグループ 15, 14, 5
鍵の有効時間
10800

Fortigate側のVPN接続用設定はあと少しだけ続きます。

スタティックルート登録

左側メニュー「ネットワーク」→「スタティックルート」を選択します。
「+新規作成」を選択します。
fortigate-static-loot.jpg

設定項目 設定内容
宛先 サブネット
192.168.200.0/255.255.255.0
インターフェース ipsec-gcp
これでスタティックルートの設定は終わり。あとはルーティングだけ!!!

IPv4ルーティング追加登録

追加するポリシーは全部で3つです。

  • GCP側からFortigateの外部IPへのUDP 500,4500番ポートへの通信の許可。
  • Fortigate側のローカルIPからGCP側のローカルIPへの通信の許可。
  • GCP側のローカルIPからFortigate側のローカルIPへの通信の許可。

1つ目はこれ。これを登録した時点でIPsecが張れるようになります。
v4_routing_1.jpg

設定項目 設定内容
名前 (任意の値)
着信インターフェース ipsec-gcp
発信インターフェース wan1
送信元 all
宛先 all
サービス IKE
NAT Uncheck

2つ目はこれ。
v4_routing_2.jpg

設定項目 設定内容
名前 (任意の値)
着信インターフェース lan1
発信インターフェース ipsec-gcp
送信元 all
宛先 all
サービス ALL
NAT Uncheck

最後の3つ目がこれ。
v4_routing_3.jpg

設定項目 設定内容
名前 (任意の値)
着信インターフェース ipsec-gcp
発信インターフェース lan1
送信元 all
宛先 all
サービス ALL
NAT Uncheck

これで、GCP、Fortigate両方の設定が終わりました。
あとは導通確認とnginxの初期ページを見に行くだけです!!!!

導通確認

Fortigate側に存在するPCもしくはFortigateのCLIで、GCP上のインスタンスに永遠にpingを飛ばしながら作業を行います。
ping -t 192.168.200.2とかexecute ping 192.168.200.2とか使って飛ばし続けます。
帰ってきたのが確認できた時点で終了です。

GCP側で確認

「ハイブリッド接続」→「VPN」から確認します。
VPNトンネルのステータスが「確立済み」になっていればOK。
v4_routing_4.jpg

Fortigate側で確認

「VPN」→「IPsecトンネル」から確認します。
ステータスが「アップ」になっていたらOK。

v4_routing_5.jpg

ブラウザから確認

pingも通った。それぞれでリンクアップしてることが確認できたなら、最後にブラウザから確認して目的を達成しに行きます。
http://192.168.200.2 をアドレスバーに入力すると、nginxの初期ページが出てくるはずです。。。
super_finish_final.jpg

私はインスタンスで遊んでSSLを有効化していたので、HTTPSで表示できちゃっています。
以上、お疲れさまでした。

参考にしたサイト

GCP側の設定

Fortigate側の設定

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?