Cloudflare Zero Trust で Google Meet 向け Split Tunnel エントリを追加する

# Google Meet の推奨確認
Google によると VPN や Proxy 利用時は、指定の SNI や IP レンジの通信に対して VPN や Proxy を通らないように Split Tunnel のリストに追加することが推奨されています。

https://support.google.com/a/answer/1279090?hl=ja

> プロキシを使用しない
Meet のトラフィックにはプロキシ サーバーを使用しないことをおすすめします。トラフィックにプロキシを使用するとレイテンシが増加し、動画の品質が低下する可能性があります。 
>
> **ネットワークでプロキシ サーバーを使用する必要がある場合**
どうしてもプロキシを使用する必要がある場合は、プロキシ サーバーがパフォーマンスに重大な影響を与える可能性があることを理解したうえで、次の操作を行ってください:
>
> - プロキシ設定で Meet トラフィックへのアクセスを許可する。
> - Meet で Chrome のプロキシ設定が使用されるようにする。
> - ネットワークが [Meet の IP アドレスと SNI]((https://support.google.com/a/answer/1279090?hl=ja#IP_ranges)) のプロキシをバイパスするようにする。
>
> ソケット セキュア（SOCKS5）インターネット プロトコルは現在サポートされていません。
> 
> ---
>VPN を使用しない
Meet のトラフィックには VPN を使用しないことをおすすめします。VPN を使用するとレイテンシが増え、Meet の動画および音声の品質が低下する可能性があります。
>
> **VPN を使用する必要がある場合:**
>
>VPN のスプリット トンネリングを有効にする
手順 2 のドメインを DNS または SNI を使用して VPN の外部にルーティングする（SNI を推奨）
手順 3 の IP 範囲を、プレフィックス マッチングを使用して VPN の外部にルーティングする

# Proxy や VPN を通すことが推奨されていない SNI と IP レンジ

## Web 通信
静的リソース、API、フィードバックとイベントログをアップロードの通信に TCP/UDP 443 を使います。
ただし、この通信によって動画および音声の品質が低下するかというと大きな影響はなさそうです。

> - 静的リソース用のドメイン
>   - `clients2.google.com`
>   - `clients4.google.com`
>   - `clients6.google.com`
>   - `www.gstatic.com`
>   - `fonts.gstatic.com`
>   - `lh3.googleusercontent.com`
>   - `meetings.clients6.google.com`
> - API エンドポイント接続用のドメイン
>   - `accounts.google.com`
>   - `apis.google.com`
>   - `meetings.googleapis.com`
>   - `hangouts.googleapis.com`
>   - `meet.google.com`
>   - `apps.google.com`
>   - `jamboard.google.com`
>   - `docs.google.com`
> - ユーザーフィードバックとイベントログをアップロードするためのドメイン
>   - `https://www.google.com/tools/feedback`
>   - `https://feedback.googleusercontent.com/resources/`
>   - `https://play.google.com/log`

## ライブストリーミング
Google Meet でライブストリーミングを使う場合には必要となりますが、
通常の社内外の Web 会議を使う方であれば、特に関係のない宛先になります。

https://rakumo.com/gsuite/gws-hint/google-meet/live-streaming/

https://support.google.com/meet/answer/9308630?hl=ja

> - ライブ ストリーミング用のドメイン
>   - `stream.meet.google.com`
>   - `youtube.googleapis.com`
>   - `www.youtube-nocookie.com`
>   - `googlevideo.com`

## 音声と動画
https://support.google.com/a/answer/1279090?hl=ja#IP_ranges

### Google Workspace ユーザ
企業やビジネス向けの Google Workspace で音声・動画通信に使われます。

> Google Workspace の IP アドレス範囲（ユーザー用）を追加します。次の IP 範囲と SNI を使用して、Meet のメディア サーバーへのアクセスを許可します。 
IPv4: `74.125.250.0/24`
IPv6: `2001:4860:4864:5::0/64`
SNI: `workspace.turns.goog`

### コンシューマユーザ
企業やビジネス向けの Google Workspace ではない一般 Google アカウントによる音声・動画通信に使われます。

> コンシューマ IP アドレス範囲を追加します。次の IP 範囲を使用して、Meet のメディア サーバーへのアクセスを許可します。
IPv4: `142.250.82.0/24`
IPv6: `2001:4860:4864:6::/64`
SNI: `meet.turns.goog`

# 音声と動画通信の Split Tunnel エントリを追加する場合
例えば、以下のケースでは [音声と動画](#音声と動画) 通信の最適化という観点で Split Tunnel を設定します。

- 音声・動画通信に大きな影響はなさそうな [Web 通信](#web-通信) は、Cloudflare Zero Trust を経由して利用させたい
- [ライブストリーミング](#ライブストリーミング) は特に使わない
- 一般の [コンシューマユーザ](#コンシューマユーザ) ではなく、企業やビジネス向けの [Google Workspace ユーザ](#google-workspace-ユーザ)

https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/configure-warp/route-traffic/split-tunnels/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/abd8540a-81cf-1e22-0cef-1ce9111782b3.png)

# 動作確認
Google Meet を接続しているブラウザで以下のリンクを開くと、
`local-candidate`、`remote-candidate` の情報を確認できます。

[chrome://webrtc-internals](chrome://webrtc-internals)

`remote-candidate` では、[Google Workspace ユーザ](#google-workspace-ユーザ) 向けの IP アドレスに接続されていることが確認できます。

```text:remote-candidate
> remote-candidate (candidateType=host, id=I4BdqzIvP)
Statistics I4BdqzIvP
timestamp	2024/7/11 13:52:58	
transportId	T01	🔗
isRemote	true	
ip	74.125.250.255	
address	74.125.250.255	
port	3478	
protocol	udp	
candidateType	host	
priority	2113932036	
foundation	2113932036	
usernameFragment	CSQx4Z1W7sZl6AoKAAiKYigCIAQQ	
```

`local-candidate` では、Cloudflare WARP のインターフェースアドレスではないところから接続されていることが確認できます。

```text:local-candidate
> local-candidate (candidateType=prflx, id=I7y+6xtXI)
Statistics I7y+6xtXI
timestamp	2024/7/11 13:53:15	
transportId	T01	🔗
isRemote	false	
networkType	ethernet	
ip	x.x.x.x
address	x.x.x.x
port	50600	
protocol	udp	
candidateType	prflx	
priority	1853693695	
foundation	405420391	
relatedAddress	172.16.155.128	
relatedPort	60157	
usernameFragment	NJ+a	
vpn	false	
networkAdapterType	ethernet
```

また、以下のようなパフォーマンス統計情報も参考にできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/4653ae19-2768-9f7a-dfeb-bdaf6c91f0fe.png)

# 参考
https://www.linkedin.com/pulse/google-meet-anyconnect-split-tunnelling-steve-mckee/

https://services.google.com/fh/files/blogs/enabling_remote_working_with_hangouts_meet_quick_deployment_guide.pdf

https://www.xenos.jp/~zen/blog2/index.php/2021/02/24/post-5071/

https://qiita.com/ku_mickey/items/a1fb2debdd94caf7d76d