Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

UbiquitiとGCPのサイト間VPN構築ガイド

By Sayle MatthewsApr 14, 202011 min read

このページはEnglishDeutschEspañolFrançaisItalianoPortuguêsでもご覧いただけます。

Photo by Franck V. on Unsplash

Ubiquiti Networksは、ここ数年にわたりホームラボユーザーやプロシューマー、企業向けにUniFiシリーズのネットワーク製品を展開してきました。手頃な価格でありながら機能が充実しているため、多くの中小企業がネットワーク機器の定番として採用しています。

クラウド移行が進む中で、オンプレミスのデータセンターやバックオフィスからクラウドへ直接、暗号化された接続を確立したいというニーズは非常に多く見られます。

Google Cloud Platformは、低コストかつ機能豊富な環境を提供していることから、多くの中小企業がクラウド基盤として選んでいます。ただし、UniFi Security GatewayやUniFi Dream Machineシリーズのルーターを使用する場合、AWSやAzureに比べてGCPへ直接接続する方法に関するドキュメントはあまり整備されていないのが現状です。

本記事では、UniFiベースのネットワークとGCPの間でサイト間VPNを構築する手順を、ステップごとに解説していきます。

前提条件

まず、本作業を始める前に満たしておくべき前提条件が3つあります。

  1. オンプレミス側のネットワーク機器として、UniFi Security Gateway(USG)、UniFi Security Gateway Pro(USG3/USG4)、UniFi Dream Machine(UDM)、またはUniFi Dream Machine Pro(UDM Pro/UDMP)などのUniFiルーターが必要です。あわせて、UniFi controllerをセットアップしてルーターに接続しておく必要があります。後者2機種についてはコントローラーが本体に内蔵されています。
  2. 接続用の固定IPアドレスも必要です。お持ちでない場合はISPに問い合わせてください。多くの場合、少額の追加料金で固定IPを割り当ててもらえます。
  3. GCP側では、利用するユーザーが少なくともNetwork Management AdminのIAM権限を持つプロジェクトを用意しておく必要があります。

情報収集

調査ごとと同じく、実装の前にいくつかの情報を集めておく必要があります。テキストエディターを開き、後の手順で使う値をメモしていきましょう。

1つ目の情報はとても簡単で、固定IPアドレスです。

  1. もっとも簡単な方法は、同じネットワーク上のマシンからGoogleで「my IP」と検索することです。検索結果の最上部に表示されます。同じネットワーク上にいない場合は、管理者やISPに問い合わせて取得してください。
  2. 取得したらテキストエディターに記入し、後で参照しやすいようにStatic IP Addressとラベル付けしておきます。

2つ目の情報は、GCPに接続する予定のオンプレミスネットワークのサブネットIPアドレス範囲です。

  1. 取得するには、管理者アカウントでUniFi controllerにログインします。
  2. Settingsメニュー(左下の歯車アイコン)を開き、Networksページに移動します。
  3. 接続するネットワークを見つけ、subnet列の情報をメモします。

ここでは複数のネットワークを選択することも可能です。 4. これをテキストエディターに記入し、On-Prem Subnetとラベル付けしておきます。

以下のスクリーンショットがその例です。この例ではGamingおよびHome DevicesネットワークをGCPに接続したいので、CIDR表記で10.4.4.0/24と10.2.2.0/24の2つのIP範囲を控えておきます。

UniFi controller内のNetworks設定のスクリーンショット

このページは後で再度使うので、タブは開いたままにしておいてください。

最後に必要な情報は、GCPで接続するリージョンのサブネットIPアドレス範囲です。プロジェクト内の構成と、それがどのリージョンで稼働しているかを把握しておく必要があります。

取得するには、GCPコンソールにログインします。

  1. 左上のメインナビゲーションメニュー(3本線アイコン)をクリックし、VPCネットワーク -> VPCネットワークに進みます。
  2. 表示される画面には、リージョンごとのサブネット一覧を含む1つ以上のネットワークが表示されます。プロジェクトのネットワーク設計によって見え方は変わりますが、ここではGCPが提供するデフォルトのネットワーク設計を使用している前提で進めます。
  3. 探すのは、リソースが配置されているリージョンです。多くの場合us-central1ですが、ネットワークやインフラ構成によって異なる場合があります。
  4. 該当するリージョンがわかったら、IPアドレス範囲列の値をメモします。
  5. これをテキストエディターに記入し、GCP Network Rangeとラベル付けしておきます。

次の手順でもGCPコンソールを使用するので、タブは開いたままにしておいてください。

セットアップに必要な情報は以上です。それでは実装に取りかかりましょう。

実装

GCPセットアップ Pt. I:VPN Gatewayの設定

ここからはGCPのVPNサービスのセットアップを進めます。

  1. GCPコンソールのタブを開きます。
  2. 左上のメインナビゲーションメニューをクリックします。
  3. ネットワーキング -> ハイブリッド接続 -> VPNに進みます。
  4. VPN接続を作成ボタンをクリックすると、セットアップが始まります。
  5. ここではClassic VPNを選択します。

互換性に関する注意:このモードはVPNが1本のみで、接続が失敗した際の冗長性はありません。高可用性VPNにはBGPサポートが必要ですが、本記事執筆時点でUniFiのネットワーク機器はBGPに対応していないためです。 6. 作成画面に入ったら、上部のVPN gatewayセクションに分かりやすい名前と説明を入力します。 7. 次に使用するネットワークを選択します。

多くの場合、自動生成されたデフォルトのネットワーク(default)になりますが、カスタムネットワーク構成を作成している場合は適切なものを選択してください。 8. リージョンも同様に設定します。最後に既存の外部IPアドレスを選択するか、新しく作成します。

以下は、GCPコンソール内で正しく構成されたVPN gatewayの例です。

us-central1リージョンに構成されたVPN gatewayの例。

GCPセットアップ Pt. II:VPNトンネルのセットアップ

ページの2つ目のセクションは、GCPとオンプレミスネットワークを実際につなぐVPNトンネルの設定です。

  1. VPN tunnelとラベル付けされたページ2つ目のセクションまでスクロールします。

  2. 分かりやすい名前と説明を入力します。

  3. Remote peer IP addressフィールドに、テキストエディターに控えたOn-Prem Subnetの値を入力します。

  4. IKE versionフィールドの値がIKEv2になっていることを確認します。

  5. 続いて、Generate and copyボタンをクリックします。

  6. 取得した値をテキストエディターにIKE Keyとラベル付けして保存します。

    重要:この値は必ず保管してください。このページを送信したあとは、GCP上で再表示することはできません。

  7. 最後のセクションでRoute-basedタブをクリックします。

  8. Remote network IP rangesボックスに、UniFi controllerから控えたOn-Prem Subnetの値を入力します。各値の入力後にEnterを押し、「ボックス」として確定させてください。

  9. 入力内容が以下のスクリーンショットと同様になっていることを確認します。

  10. 確認できたら、このペインのDoneボタンを押し、ページ下部のCreateボタンを押します。

先ほどのスクリーンショットで示した2つのオンプレミスネットワークを使用したトンネル設定の例。

送信後はVPN Gatewayとトンネルのステータス画面にリダイレクトされます。サービスのプロビジョニングには数分かかります。

プロビジョニングが完了したら、GCPの構成を仕上げる最後の手順がいくつか残っています。

  1. トンネルのステータスが、黄色の感嘆符付きでFirst handshakeと表示されたら、次の手順に進める状態です。
  2. Cloud VPN gateway列にIPアドレスが表示されます。
  3. これをテキストエディターにCloud VPN IPとしてメモしておきます。
  4. UniFiデバイスのセットアップ後にこのページへ戻るので、当面はGCPコンソールのタブを開いたままにしておいてください。

UniFiセットアップ

GCP側の構成は完了し、接続を待つVPNトンネルとgatewayが稼働している状態になりました。続いて、オンプレミス側のVPN接続を完成させるためにUniFiデバイスをセットアップします。

  1. UniFi controllerのタブを開き直します。
  2. 左側のメインナビゲーションバーでSiteオプションをクリックします。
  3. SiteページのServicesセクションにEnable advanced featuresというチェックボックスがあるので、これにチェックを入れる必要があります。
  4. 未チェックの場合はチェックを入れ、下部のApplyを押します。警告が表示されますが、現時点では無視して構いません。
  5. 続いてNetworksページをクリックしてネットワーク一覧に戻り、ページ下部のCreate New Networkボタンを押します。
  6. このページには設定が必要なオプションがいくつかあるので、まず項目を列挙してから、各ボックスに入力する内容を説明します。
  7. PurposeではSite-to-Site VPNを選択します。VPN TypeにはManual IPSecを選択します。Advanced Optionsを展開し、Key Exchange VersionIKEv2に変更します。
  8. その他はいったんデフォルト値のままにします。
  9. まず、ネットワーク名を入力します。
  10. Add Subnetボタンを押し、表示されるフィールドにテキストエディターのGCP Network Rangeの値を入力します。
  11. テキストエディターのCloud VPN IPの値をPeer IPフィールドに入力します。
  12. Local WAN IPには、テキストエディターのStatic IP Addressを入力します。
  13. 最後に、テキストエディターのIKE Keyを貼り付けます。保存を押す前に、ページが下のスクリーンショットと同じ構成(値はご自身のもの)になっていることを確認してください。

IP値はそれぞれ異なりますが、ページの見た目はちょうどこのようになります。

最後に、UniFi controllerでこのVPN接続経由でトラフィックをルーティングするための静的ルートを作成します。

  1. メインナビゲーションペインでRouting & Firewallページを選択します。
  2. Create New Routeボタンをクリックします。
  3. このルートに名前を入力します。
  4. テキストエディターのGCP Network Rangeの値をDestination Networkフィールドに入力し、distance1に設定します。
  5. Static Route TypeではInterfaceを選択し、Interfaceフィールドで先ほど作成したネットワーク名を選択します。
  6. Saveを押せばテストの準備は完了です。

先ほどEnable advanced featuresにチェックを入れた場合、このモードを有効のままにしたくないなら、以下の手順で無効化してください。

  1. 左側のメインナビゲーションバーでSiteオプションをクリックします。
  2. Servicesの下にあるEnable advanced featuresのチェックを外します。
  3. ページ下部のApplyをクリックすれば、再度無効化されます。

接続の検証

この時点でVPN接続は完了し、確立されているはずです。以下の手順で、接続が想定通りに確立されているかを確認します。

  1. GCPコンソールのタブに戻ります。
  2. そのタブのページが切り替わっている場合は、メインナビゲーションメニューからネットワーキング -> ハイブリッド接続 -> VPNに移動します。
  3. ページ内のCloud VPN Tunnelsタブをクリックします。
  4. 表のVPN tunnel status列に、Establishedというメッセージとともに緑のチェックマークが表示されているはずです。

接続には数分かかる場合があるので、表示されるまで上部のRefreshボタンでデータを更新してください。 5. 問題がなければ、GCPとオンプレミスのUniFiデバイスの間でVPNが接続されています。

VPNが接続されていることは確認できましたが、接続が正しく機能しているかどうかは、簡単なテストを行って確認する必要があります。

**接続のテスト**

  1. GCP Consoleのページを開いていることを確認します。
  2. メインナビゲーションメニューからCompute Engine -> VMインスタンスに移動します。
  3. Compute Engineのインスタンスをまだ作成していない場合や、上記でVPNを構成したリージョン内にインスタンスがない場合は、GCPのYouTubeチャンネルにある以下のガイドを参考に、テスト用の一時インスタンスを作成してください。作成するリージョンが正しいことを必ず確認してください:https://www.youtube.com/watch?v=1XH0gLlGDdk
  4. Compute Engineインスタンスの一覧から、上記でVPNを構成したリージョンに配置されているインスタンスを探します。デフォルトではus-central1です。
  5. そのインスタンスの内部IP列の値を確認します。
  6. ターミナルウィンドウを開きます。
  7. 前の手順で確認した内部IPに置き換えて、以下のコマンドを実行します。
ping <internal IP>

このコマンドを実行すると、対象のIPアドレスから返ってきたバイト数とレイテンシ時間を示すテキストが表示されはじめるはずです。表示されればVPNは接続されており、準備完了です。決して簡単な作業ではないので、ここまでたどり着いたことに拍手です。

うまくいかない場合は、次のセクションのトラブルシューティングのヒントを参考にしてください。

トラブルシューティング

問題が発生している場合に備えて、本記事の執筆中に得られたトラブルシューティングのヒントをいくつか紹介します。

Stackdriverのログは強い味方です。VPN GatewayやVPNトンネルのログには、接続失敗の原因を示す手がかりが残っていることが多くあります。

UniFi controllerの静的ルートを確認し、設定値が正しいかをチェックすることをおすすめします。

ローカルマシンがICMPルーティングテーブルをキャッシュしている場合があります。筆者は再起動で解決しました。

GCPおよびUniFi controllerのファイアウォールルールを確認し、内部ノード間の通信がブロックされていないことを確認してください。VPN経由ではプライベートIPでGCPと通信することを忘れないでください。

UniFi controllerは要するにLinuxマシンであり、SSH経由でアクセスして基本的なコマンドを実行できます。コントローラーのGeneralページに、SSHのオン/オフと認証情報を設定するオプションがあります。コントローラーから、GCPの内部IPに対してpingやtracerouteを実行できるはずです。

固定IPが正しく設定され、ルーターに割り当てられていることを確認してください。

テストには必ずGCPの内部IPを使用し、外部IPは使用しないでください。外部IPではトラフィックがVPNトンネル経由でルーティングされません。