Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

ハイブリッドユーザー向けのセルフホスト VoIP サービスを導入する

最終更新 Markdown で表示Agent セットアップ

はじめに

従来の VPN は、VoIP 導入にいくつかの問題を起こします。主因は、SIPRTP などのリアルタイムトラフィックプロトコルの扱いが非効率なことです。レガシー VPN は高いレイテンシとジッタを招き、音声通話品質を下げます。加えて NAT 越えに苦労し、VoIP 通話の接続問題につながることがよくあります。

Cloudflare は、over 330 cities のデータセンターを持つ グローバルネットワーク を使い、リモートユーザーのレイテンシを大きく下げます。デバイスエージェントを使うと、リモートユーザーは最寄りの Cloudflare データセンターに自動接続し、レイテンシが下がります。

この文書では、Cloudflare を使ってセルフホスト VoIP サービスへのアクセスを設計する方法を説明します。以下の構成は Cloudflare Mesh(旧 WARP Connector)を使います。VoIP サーバーと同じサブネット上のサーバーに入れる小さなソフトウェアで、Cloudflare 経由の双方向トラフィックをユーザーとのあいだに作ります。

双方向 VoIP トラフィックフロー

図 1: Cloudflare は、ユーザーデバイスから SIP サーバーが動くネットワークへの安全な接続を実現します。
図 1: Cloudflare は、ユーザーデバイスから SIP サーバーが動くネットワークへの安全な接続を実現します。

上の図は、Cloudflare Mesh とデバイスエージェントを導入し、プライベート VoIP サービス向けに高性能で信頼性の高い接続を確立する様子です。Cloudflare はリモートユーザーに CGNAT レンジ のアドレスを割り当てます。これはデバイスエージェント間のプライベートネットワークに使われます。Cloudflare Mesh は、サーバーをパブリックインターネットに公開せず、リモートユーザーとオンプレミス SIP サーバー間の安全な双方向通信を確保します。VoIP 基盤を攻撃から守りつつ、リアルタイム通信向けのシームレスで暗号化された接続を維持します。

  1. VoIP サーバーはパブリック IP のないプライベートネットワーク上にあります。
  2. Cloudflare Mesh は Cloudflare への安全なトンネルを作り、プライベートネットワーク内の仮想ルーターとして設定されます。
  3. Cloudflare から VoIP サーバーへの到達を許可し、サーバー起点の発信 VoIP 通話など、プライベートネットワーク起点のトラフィックも Cloudflare トンネル経由でルーティングします。上図では、デフォルトゲートウェイに静的ルート 100.96.0.0/12(WARP CGNAT レンジ)via 10.0.50.10(Cloudflare Mesh 仮想ルーター)を追加します。
  4. トラフィックは Secure Web Gateway(SWG)を通り、着信と発信の両方にネットワークレベルのファイアウォールルールが適用されます。
  5. リモートユーザーのデバイスにデバイスエージェントをインストールします。エージェントは 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 クライアントをサーバーに登録済みです。

図 2: リモートユーザー同士では、すべてのトラフィックが Cloudflare Mesh 経由で SIP サーバーへ流れるわけではありません。
図 2: リモートユーザー同士では、すべてのトラフィックが Cloudflare Mesh 経由で SIP サーバーへ流れるわけではありません。

上の図は、シグナリングとメディアのパスの概要です。

  1. Alice は SIP サーバー(10.0.50.60)に直接登録し、Cloudflare が割り当てた CGNAT IP は 100.96.0.12 です。
  2. Bob も SIP サーバー(10.0.50.60)に直接登録し、CGNAT IP は 100.96.0.13 です。
  3. Alice が Bob に電話すると、SIP サーバーは 100.96.0.13 の Bob へ SIP INVITE メッセージを送ります。
  4. SIP サーバーのデフォルトゲートウェイは 10.50.0.1 ですが、宛先 100.96.0.0/12 のネクストホップを Cloudflare Mesh インターフェース(10.0.50.10)とする静的ルートを定義しています。
  5. SIP INVITE メッセージは Cloudflare Mesh 経由で Cloudflare ネットワークへルーティングされ、Bob が受信します。
  6. Bob が応答すると、SIP サーバーは Alice と Bob の両方に SIP/SDP メッセージを送り、RTP(音声)データに使うパラメータを指定します。
  7. SIP サーバーが音声パスに入らず、RTP ストリームが Alice と Bob の直接間になる Direct Media パスでは、Cloudflare で Allow all Cloudflare One traffic to reach enrolled devices が有効であることを確認してください。Direct Media の音声ストリームは Cloudflare Mesh 経由のルーティングが不要です。

リモートユーザーとオンプレミスユーザー

リモートとオンプレミスのユーザー間の通話はよく似ていますが、SIP シグナリングに加え、RTP 音声も Cloudflare Mesh 経由で送られます。

図 3: リモートユーザーからオンプレミスユーザーへは、すべてのトラフィックが Cloudflare 経由で SIP サーバーとクライアントへルーティングされます。
図 3: リモートユーザーからオンプレミスユーザーへは、すべてのトラフィックが Cloudflare 経由で SIP サーバーとクライアントへルーティングされます。

シグナリングとメディアのパスの概要は次のとおりです。

図 4: シグナリングとメディア(音声、映像など)は、リモートデバイスからオンプレミスクライアントへ、保護されたトンネル経由で流れます。
図 4: シグナリングとメディア(音声、映像など)は、リモートデバイスからオンプレミスクライアントへ、保護されたトンネル経由で流れます。
  1. Alice は SIP サーバー(10.0.50.60)に直接登録し、CGNAT IP は 100.96.0.12 です。
  2. Bob も SIP サーバー(10.0.50.60)に直接登録し、LAN IP は 10.0.50.101 です。
  3. Alice が Bob に電話すると、SIP サーバーは 10.0.50.101 の Bob へ SIP INVITE メッセージを送ります。
  4. SIP サーバーのデフォルトゲートウェイは 10.50.0.1 ですが、宛先 100.96.0.0/12 のネクストホップを Cloudflare Mesh インターフェース(10.0.50.10)とする静的ルートを定義しています。
  5. SIP INVITE メッセージはローカルネットワーク上で Bob へ送られます。
  6. Bob が応答すると、SIP サーバーは Alice と Bob の両方に SIP/SDP メッセージを送り、RTP(音声)データに使うパラメータを指定します。
  7. Bob は 100.96.0.12 の Alice へ音声を送り、これは Cloudflare Mesh 経由で Cloudflare へルーティングされます。Alice は 10.0.50.101 の Bob へ音声を送り、これは Cloudflare から Cloudflare Mesh 経由でオンプレミスのローカルネットワークへ送られます。

まとめ

Cloudflare Mesh を使うと、リモートユーザーはオンプレミス SIP サーバー経由で、ほかのリモートユーザーやオンプレミスユーザーと、両端でシームレスかつ安全に通信できます。主な利点は次のとおりです。

  1. 双方向接続: Cloudflare Mesh は双方向トラフィックに対応し、リモートユーザーとオンプレミスユーザーの通信に不可欠です。シグナリングとメディア(SIP/RTP)の両方は、ユーザーの物理的な場所に関係なく、両者のあいだで安全に流れます。これは Cloudflare のグローバルネットワークと暗号化トンネル経由で行われ、データの完全性と暗号化を確保します。

  2. CGNAT 上のプライベート通信: Cloudflare Mesh はデバイスに Carrier-Grade NAT(CGNAT)IP を割り当て、リモートユーザーがプライベートネットワーク上でオンプレミスユーザーと安全に通信できるようにします。通信はパブリックインターネットから隔離され、セキュリティが向上します。CGNAT により、リモートとオンプレミスのユーザーは同じネットワーク上にいるかのように通信できます。

  3. NAT 越えの問題がない: NAT 越えは VoIP でよく課題になります。Cloudflare Mesh は送信元 IP を保持し、追加の NAT 境界なしで双方向トラフィックを扱うため、ファイアウォールや NAT 機器が原因になりがちな問題なく、リモートとオンプレミスのユーザーが通信できます。通話確立と品質が向上します。

関連リソース

役に立ちましたか?