従来の VPN は、VoIP 導入にいくつかの問題を起こします。主因は、SIP ↗ や RTP ↗ などのリアルタイムトラフィックプロトコルの扱いが非効率なことです。レガシー VPN は高いレイテンシとジッタを招き、音声通話品質を下げます。加えて NAT ↗ 越えに苦労し、VoIP 通話の接続問題につながることがよくあります。
Cloudflare は、over 330 cities のデータセンターを持つ グローバルネットワーク ↗ を使い、リモートユーザーのレイテンシを大きく下げます。デバイスエージェントを使うと、リモートユーザーは最寄りの Cloudflare データセンターに自動接続し、レイテンシが下がります。
この文書では、Cloudflare を使ってセルフホスト VoIP サービスへのアクセスを設計する方法を説明します。以下の構成は Cloudflare Mesh(旧 WARP Connector)を使います。VoIP サーバーと同じサブネット上のサーバーに入れる小さなソフトウェアで、Cloudflare 経由の双方向トラフィックをユーザーとのあいだに作ります。
上の図は、Cloudflare Mesh とデバイスエージェントを導入し、プライベート VoIP サービス向けに高性能で信頼性の高い接続を確立する様子です。Cloudflare はリモートユーザーに CGNAT レンジ のアドレスを割り当てます。これはデバイスエージェント間のプライベートネットワークに使われます。Cloudflare Mesh は、サーバーをパブリックインターネットに公開せず、リモートユーザーとオンプレミス SIP サーバー間の安全な双方向通信を確保します。VoIP 基盤を攻撃から守りつつ、リアルタイム通信向けのシームレスで暗号化された接続を維持します。
- VoIP サーバーはパブリック IP のないプライベートネットワーク上にあります。
- Cloudflare Mesh は Cloudflare への安全なトンネルを作り、プライベートネットワーク内の仮想ルーターとして設定されます。
- Cloudflare から VoIP サーバーへの到達を許可し、サーバー起点の発信 VoIP 通話など、プライベートネットワーク起点のトラフィックも Cloudflare トンネル経由でルーティングします。上図では、デフォルトゲートウェイに静的ルート
100.96.0.0/12(WARP CGNAT レンジ)via10.0.50.10(Cloudflare Mesh 仮想ルーター)を追加します。 - トラフィックは Secure Web Gateway(SWG)を通り、着信と発信の両方にネットワークレベルのファイアウォールルールが適用されます。
- リモートユーザーのデバイスにデバイスエージェントをインストールします。エージェントは Cloudflare への安全なトンネルを確立し、VoIP ソフトが着信と発信の両方をできるようにします。
リモートユーザーのデバイスで動く VoIP ソフトは、SIP で VoIP サーバーに登録します。Cloudflare デバイスエージェントには CGNAT IP レンジ 100.96.0.0/12 のアドレスが割り当てられます。100.96.0.0/12 向けと、オンプレミスネットワーク 10.0.50.0/24 向けのルーティングが Cloudflare 経由で確立されているため、直接メディアと間接メディアの両方を含め、通話フローは通常どおり動きます。
ユーザー同士の通話では、一部のトラフィックはユーザーデバイスから Cloudflare 経由でオンプレミスサーバーへ流れ、ほかのトラフィックは Cloudflare 経由で直接もう一方のユーザーへ流れます。デバイスエージェントは、CGNAT アドレスがルーティングされる安全なトンネルを作っています。このフローの両ユーザーは、SIP クライアントをサーバーに登録済みです。
上の図は、シグナリングとメディアのパスの概要です。
- Alice は SIP サーバー(
10.0.50.60)に直接登録し、Cloudflare が割り当てた CGNAT IP は100.96.0.12です。 - Bob も SIP サーバー(
10.0.50.60)に直接登録し、CGNAT IP は100.96.0.13です。 - Alice が Bob に電話すると、SIP サーバーは
100.96.0.13の Bob へ SIP INVITE メッセージを送ります。 - SIP サーバーのデフォルトゲートウェイは
10.50.0.1ですが、宛先100.96.0.0/12のネクストホップを Cloudflare Mesh インターフェース(10.0.50.10)とする静的ルートを定義しています。 - SIP INVITE メッセージは Cloudflare Mesh 経由で Cloudflare ネットワークへルーティングされ、Bob が受信します。
- Bob が応答すると、SIP サーバーは Alice と Bob の両方に SIP/SDP メッセージを送り、RTP(音声)データに使うパラメータを指定します。
- SIP サーバーが音声パスに入らず、RTP ストリームが Alice と Bob の直接間になる Direct Media パスでは、Cloudflare で Allow all Cloudflare One traffic to reach enrolled devices が有効であることを確認してください。Direct Media の音声ストリームは Cloudflare Mesh 経由のルーティングが不要です。
リモートとオンプレミスのユーザー間の通話はよく似ていますが、SIP シグナリングに加え、RTP 音声も Cloudflare Mesh 経由で送られます。
シグナリングとメディアのパスの概要は次のとおりです。
- Alice は SIP サーバー(
10.0.50.60)に直接登録し、CGNAT IP は100.96.0.12です。 - Bob も SIP サーバー(
10.0.50.60)に直接登録し、LAN IP は10.0.50.101です。 - Alice が Bob に電話すると、SIP サーバーは
10.0.50.101の Bob へ SIP INVITE メッセージを送ります。 - SIP サーバーのデフォルトゲートウェイは
10.50.0.1ですが、宛先100.96.0.0/12のネクストホップを Cloudflare Mesh インターフェース(10.0.50.10)とする静的ルートを定義しています。 - SIP INVITE メッセージはローカルネットワーク上で Bob へ送られます。
- Bob が応答すると、SIP サーバーは Alice と Bob の両方に SIP/SDP メッセージを送り、RTP(音声)データに使うパラメータを指定します。
- Bob は
100.96.0.12の Alice へ音声を送り、これは Cloudflare Mesh 経由で Cloudflare へルーティングされます。Alice は10.0.50.101の Bob へ音声を送り、これは Cloudflare から Cloudflare Mesh 経由でオンプレミスのローカルネットワークへ送られます。
Cloudflare Mesh を使うと、リモートユーザーはオンプレミス SIP サーバー経由で、ほかのリモートユーザーやオンプレミスユーザーと、両端でシームレスかつ安全に通信できます。主な利点は次のとおりです。
-
双方向接続: Cloudflare Mesh は双方向トラフィックに対応し、リモートユーザーとオンプレミスユーザーの通信に不可欠です。シグナリングとメディア(SIP/RTP)の両方は、ユーザーの物理的な場所に関係なく、両者のあいだで安全に流れます。これは Cloudflare のグローバルネットワークと暗号化トンネル経由で行われ、データの完全性と暗号化を確保します。
-
CGNAT 上のプライベート通信: Cloudflare Mesh はデバイスに Carrier-Grade NAT(CGNAT)IP を割り当て、リモートユーザーがプライベートネットワーク上でオンプレミスユーザーと安全に通信できるようにします。通信はパブリックインターネットから隔離され、セキュリティが向上します。CGNAT により、リモートとオンプレミスのユーザーは同じネットワーク上にいるかのように通信できます。
-
NAT 越えの問題がない: NAT 越えは VoIP でよく課題になります。Cloudflare Mesh は送信元 IP を保持し、追加の NAT 境界なしで双方向トラフィックを扱うため、ファイアウォールや NAT 機器が原因になりがちな問題なく、リモートとオンプレミスのユーザーが通信できます。通話確立と品質が向上します。