ネットワークエンジニアのITブログ

長らくネットワークで仕事をしてきましたが、ここ数年クラウドとサーバー系に触れる機会が増えて、クラウドのネットワークというのが自分の性分にはあっているようです。最近のお気に入りはNSXALBとGoogle Cloud。

Private Service Connectインターフェース機能ガイドと設定方法を紹介

富士ソフトの佐藤です。
前回ご紹介したPrivate Service Connect(PSC)エンドポイントは、公開サービスに接続するための機能でしたが、公開サービス側のサーバーからは、VPCピアリングやNetwork Connectivity Centerで接続していないVPCへは接続できません。
今回は、Private Serivce Connectインターフェースを利用して、公開サービス側から他のVPCへ接続する方法について紹介します。

Private Service Connect と 3 種類のタイプについて

Google Cloud ネットワーキング機能の一つで、外部IPを持たない仮想マシンやオンプレミスのクライアントが、 VPC ネットワーク内からプライベートIPを経由して、次のタイプのマネージド サービスへのアクセスをサポートしています。


Google Cloud ドキュメントから引用


Private Service Connect(以下、PSC)には、以下の 3 つのタイプがあります。

1.Endpoint

PSC エンドポイントは、コンシューマー VPC ネットワーク内のクライアントが、アクセスできる内部 IP アドレスです。エンドポイントは、接続したいサービスがあるプロジェクトのサービス アタッチメントまたは Google API のバンドルを参照する転送ルールをデプロイすることで作成されます。
以下は、組織内で開発した公開サービスにアクセスする例です。


以下は、Cloud Storage や BigQuery などの Google API にアクセスする例です。

2.Backend

コンシューマーロードバランサ経由で バックエンドへトラフィックを送信し、公開サービスまたは Google API にアクセスできます。PSC バックエンドは、プロデューサー サービス アタッチメントまたはサポートされている Google API を参照する、PSC ネットワーク エンドポイント グループ(NEG)を使用してデプロイされます。
マネージド サービスの前面にロードバランサを配置すると、同じ接続先を通じて移行元と移行先のサービスを同時に提供でき、移行プロセスを簡素化することができます。また、エンドポイントを介した場合よりもコンシューマーの可視性が高まり制御しやすくなります。

3.Interface

PSC インターフェースは、プロデューサーの仮想マシンに、2 つ目の標準ネットワークインターフェースを提供し、コンシューマー VPC ネットワーク内のサブネットの IP アドレスを割り当てます。
これにより、プロデューサーの仮想マシンは、コンシューマー VPC経由で、Google Cloud 内およびオンプレミスネットワークと通信することが可能です。
今回は、この機能についての紹介です。


どのようなときに Private Service Connect インターフェースを使うのか

VPCがネットワーク的に孤立している

プロデューサー VPC を作成した際に、VPC ピアリングや Network Connectivity Center により、Google Cloud 内または、InterConnect や VPN 経由でオンプレミス環境と接続しますが、ネットワークアドレスの重複などにより、コンシューマー VPC が接続できない場合があります。このような時に、PSCエンドポイントで開発したサービスを公開したり、PSCインターフェースにより社内システムへの接続を実現することが可能です。

設計時のポイント

デフォルトルートは1つ目のネットワークインターフェースとなる

PSCインターフェースを利用すると、Compute Engineに2つ目のネットワークインターフェース(NIC)ができますが、デフォルトルートは1つ目のNICとなっています。PSCインターフェースのNICのみにすることや、1つ目をPSCインターフェースにすることはできないため、インターネットへの接続がどちらのNICを経由した先にあるのかをあらかじめ確認しておき、ネットワーク構成を決定する必要があります。

Compute EngineへのアクセスはPSCエンドポイントのみである。

一般的に、VPCピアリングやNetwork Connectivity CenterなどでVPCが接続していて、ファイアウォールで上り(内向き)の通信許可を行っていれば、Compute Engineへ接続することは可能ですが、PSCエンドポイントやPSCインターフェースの構成を採用していると、直接接続することはできないため、必ずPSCエンドポイント経由での接続が必要となります。
様々なポートを使用して頻繁に接続するようなCompute Engineに適用してしまうと、運用が煩雑となってしまいます。

PSCインターフェース設定手順

今回は、3 種類ある PSC タイプの中から、PSCインターフェースを使用した 公開サービスへのアクセス手順について紹介します。

ネットワーク構成図

ホームラボとGoogle Cloudの環境を接続して、SpokeBに新規作成したCompute Engineからオンプレ環境の仮想マシンへ接続する検証を行います。


提供側のプロジェクトでネットワークアタッチメントを作成

1.JITHUBプロジェクトで、 [ネットワークサービス]-[Private Service Connect ]-[ネットワークアタッチメント]を選択し、[+ネットワークアタッチメントを作成]を選択する。

2. ネットワーク アタッチメントの作成で、以下の情報を入力し、「ネットワーク アタッチメントの作成」を選択する。なお、ネットワークアタッチメントは、リージョンごとに作成する必要があるので、大阪リージョンにもネットワークがある場合は、PSC用のサブネットを作成し、同様の設定を行ってください。
  名前:attatch-tokyo01
  ネットワーク:mainvpc
  リージョン:asia-northeast1(東京)
  サブネットワーク:subnet-psc
  接続の設定:すべてのプロジェクトの接続を自動的に受け入れる

3.作成したネットワークアタッチメントの「attatch-tokyo01」を選択し、ネットワーク アタッチメントの接続情報を控えておきます。
  ネットワークアタッチメント:projects/jithub-414902/regions/asia-northeast1/networkAttachments/attatch-tokyo01


利用側のCompute Engineを作成しPSCインターフェースを設定する。

1.SpokeBプロジェクトで、 [Compute Engine]-[VMインスタンス]を選択し、[+インスタンスを作成]を選択する。

2.「VMの基本」で、エンドポイントを接続の画面で、以下の情報を入力する。
  名前:instance-win01
  リージョン:asia-northeast1(東京)

3.「マシンの構成」で、マシンタイプを「e2-standard-2」に変更する。

4.「OSとストレージ」で、イメージを「Windows Server 2022 Datacenter」に変更する。

5.「ネットワーキング」で、1つ目のネットワークインターフェースの情報を入力し、「完了」を選択後、「ネットワーク インターフェースを追加」をクリックする。
  ネットワーク:vpc-b
  サブネットワーク:subnet-b01 IPv4(10.168.10.0/24)
  外部 IPv4 アドレス:なし

6.2つ目のネットワークインターフェースの情報を入力し、「完了」を選択後、「作成」をクリックしインスタンスを作成する。
  インターフェース タイプ:Private Serivce Connect
  ネットワーク アタッチメントのURL:projects/jithub-414902/regions/asia-northeast1/networkAttachments/attatch-tokyo01
  IP スタックタイプ:IPv4(シングル スタック)

7.作成したインスタンスに2つのNICがあることを確認する。


インスタンスのルート情報確認とスタティックルートの設定

1.インスタンス名の「instance-win01」をクリックし、「WINDOWS パスワードを設定」からアカウントの作成を行う。

2.Google Consoleの操作をしている端末でコマンドプロンプトを開き、IAP接続のためのトンネル設定を行う。

C:\>gcloud compute start-iap-tunnel instance-win01 3389 --local-host-port=localhost:0 --zone=asia-northeast1-c
Picking local unused port [58146].
WARNING:

To increase the performance of the tunnel, consider installing NumPy. For instructions,
please see https://cloud.google.com/iap/docs/using-tcp-forwarding#increasing_the_tcp_upload_bandwidth

Testing if tunnel connection works.
Listening on port [58146].

3.リモートデスクトップアプリを開き、コンピュータ名に、「localhost:58146」と入力し接続する。

4.IPアドレスとルート情報を確認し、デフォルトルートが10.168.10.13となっていることを確認する。

C:\>ipconfig

Windows IP Configuration


Ethernet adapter Ethernet:

   Connection-specific DNS Suffix  . : asia-northeast1-c.c.spokeb-430504.internal.
   Link-local IPv6 Address . . . . . : fe80::1745:2100:ee54:8873%5
   IPv4 Address. . . . . . . . . . . : 10.168.10.13
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 10.168.10.1

Ethernet adapter Ethernet 2:

   Connection-specific DNS Suffix  . : asia-northeast1-c.c.spokeb-430504.internal.
   Link-local IPv6 Address . . . . . : fe80::fa8:8240:edb6:f402%4
   IPv4 Address. . . . . . . . . . . : 10.24.6.6
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :

C:\>
C:\>route print
===========================================================================
Interface List
  5...42 01 0a a8 0a 0d ......Google VirtIO Ethernet Adapter
  4...42 01 0a 18 06 06 ......Google VirtIO Ethernet Adapter #2
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      10.168.10.1     10.168.10.13      5
        10.24.6.0    255.255.255.0        10.24.6.1        10.24.6.6      6
        10.24.6.1  255.255.255.255         On-link         10.24.6.6      6
        10.24.6.6  255.255.255.255         On-link         10.24.6.6    261
      10.168.10.0    255.255.255.0      10.168.10.1     10.168.10.13      6
      10.168.10.1  255.255.255.255         On-link      10.168.10.13      6
     10.168.10.13  255.255.255.255         On-link      10.168.10.13    261
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
  169.254.169.254  255.255.255.255         On-link      10.168.10.13      6
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
        224.0.0.0        240.0.0.0         On-link         10.24.6.6    261
        224.0.0.0        240.0.0.0         On-link      10.168.10.13    261
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
  255.255.255.255  255.255.255.255         On-link         10.24.6.6    261
  255.255.255.255  255.255.255.255         On-link      10.168.10.13    261
===========================================================================
Persistent Routes:
  Network Address          Netmask  Gateway Address  Metric
  169.254.169.254  255.255.255.255         On-link        1
===========================================================================

5.このままでは、オンプレ環境へ接続できないため、以下のスティックルートを設定し、ルート情報が反映されていることを確認する。

html >

C:\>route add 192.168.0.0 mask 255.255.0.0 10.24.6.1 -p
OK!

C:\>
C:\>
C:\>route print
===========================================================================
Interface List
5...42 01 0a a8 0a 0d ......Google VirtIO Ethernet Adapter
4...42 01 0a 18 06 06 ......Google VirtIO Ethernet Adapter #2
1...........................Software Loopback Interface 1
===========================================================================

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 10.168.10.1 10.168.10.13 5
10.24.6.0 255.255.255.0 10.24.6.1 10.24.6.6 6
10.24.6.1 255.255.255.255 On-link 10.24.6.6 6
10.24.6.6 255.255.255.255 On-link 10.24.6.6 261
10.168.10.0 255.255.255.0 10.168.10.1 10.168.10.13 6
10.168.10.1 255.255.255.255 On-link 10.168.10.13 6
10.168.10.13 255.255.255.255 On-link 10.168.10.13 261
127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
169.254.169.254 255.255.255.255 On-link 10.168.10.13 6
192.168.0.0 255.255.0.0 10.24.6.1 10.24.6.6 6
224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 10.24.6.6 261
224.0.0.0 240.0.0.0 On-link 10.168.10.13 261
255.255.255.255 255.255.255.255 On-link 127.0.0.1 331
255.255.255.255 255.255.255.255 On-link 10.24.6.6 261
255.255.255.255 255.255.255.255 On-link 10.168.10.13 261
===========================================================================
Persistent Routes:
Network Address Netmask Gateway Address Metric
169.254.169.254 255.255.255.255 On-link 1
192.168.0.0 255.255.0.0 10.24.6.1 1
===========================================================================
|

動作確認

オンプレ環境にある仮想マシン(192.168.10.91)へICMP、およびHTTP接続できることを確認する。

C:\>ipconfig

Windows IP Configuration


Ethernet adapter Ethernet:

   Connection-specific DNS Suffix  . : asia-northeast1-c.c.spokeb-430504.internal.
   Link-local IPv6 Address . . . . . : fe80::1745:2100:ee54:8873%5
   IPv4 Address. . . . . . . . . . . : 10.168.10.13
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 10.168.10.1

Ethernet adapter Ethernet 2:

   Connection-specific DNS Suffix  . : asia-northeast1-c.c.spokeb-430504.internal.
   Link-local IPv6 Address . . . . . : fe80::fa8:8240:edb6:f402%4
   IPv4 Address. . . . . . . . . . . : 10.24.6.6
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :

C:\>ping 192.168.10.91

Pinging 192.168.10.91 with 32 bytes of data:
Reply from 192.168.10.91: bytes=32 time=53ms TTL=61
Reply from 192.168.10.91: bytes=32 time=51ms TTL=61
Reply from 192.168.10.91: bytes=32 time=40ms TTL=61
Reply from 192.168.10.91: bytes=32 time=52ms TTL=61

Ping statistics for 192.168.10.91:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 40ms, Maximum = 53ms, Average = 49ms

C:\>


まとめ

本記事では、Private Service Connectインターフェースを使用して、どのVPCにも接続していないプロジェクトからオンプレミス環境へ接続する方法について解説しました。本機能を利用することで、プロジェクトで自由なサブネット設計を行いながら、既存の社内ネットワークに接続できるようになります。
このようにプロジェクト開発者に自身のプロジェクトのネットワーク管理を任せることができ、管理者側の運用負担を軽減することが可能になりますので、今後プロジェクトを払い出す際には、PSCを利用した接続の検討をしてみてはいかがでしょうか。