# ファイアウォール・ネットワーキングとWebRTC + TURN

ネットワークアクセスが制限された環境でデジタルヒューマンを使用するためには、デジタルヒューマンを表示・使用する端末が以下のドメインと通信できるように、ファイアウォール、プロキシ、ルーターなどを許可してください。

{% hint style="info" %}
デジタルヒューマンプラットフォームとの通信はWebRTCを使用します。デジタルヒューマンの表示にはTURNを使用しており、TURNサーバーのIPアドレス、デジタルヒューマンプラットフォームのIPアドレスは環境や状況によって動的に決まりますので、IPアドレスで縛らないでください。
{% endhint %}

### **アニメーションプラットフォーム、プラットフォーム標準の音声認識（必須）**

アプリケーション層ファイアウォールで下記のドメインとの通信、戻りの通信を許可してください。（※ 大手クラウドベンダーとの通信は許可されている前提です。）

```jsx
*.uneeq.io
*.digitalhumans.ne.jp
*.hosted-experience.jp
```

上記に追加でデモ・フリートライアルやサービス用のフロントエンドが設置されているドメインの許可も必要です。

```jsx
お客様がデジタルヒューマンを設置したいドメイン
your-domain.com # 例

デモ・フリートライアル（ホステッドエクスペリエンス デモコンフィグレーター）は下記のドメインを使用します
*.digitalhumans-demo.jp
```

## ネットワーキング、WebRTC + TURN

ユーザーとデジタルヒューマンとの間で会話を行うためには、デジタルヒューマンのレンダラー（レンダリングアプリケーション）からユーザーのブラウザへメディアストリームを確立する必要があります。これは一般的にWebRTC APIとして知られているものを使用します。

![](/files/zODay2IMscpdbK5lfsKJ)

WebRTCのためのハイレベルネットワーク通信経路

### ダイレクト / 直接接続 （P2P）

レンダラーとブラウザ間の直接接続をネゴシエートできるようにするためには、各当事者が相手に自分のIPアドレスを送信する必要があります。ブラウザはレンダラーアプリケーションから送信されたIPアドレスにアクセスできる必要があり、その逆も同様です。直接接続できる条件がそろった場合は、この方式で接続可能です。

### **インダイレクト /** 間接接続

クラウドでホストされているレンダラーとエンドユーザー間の通信では、レンダラーとエンドユーザーのブラウザ間でメディアストリームを中継するためにTURNサーバーを使用する必要があります。TURNプロトコルでは、TURNサーバーがレンダラーとブラウザの両方に接続します。

レンダラーはストリーミングデータをすべてTURNサーバーに送信し、TURNサーバーはそのデータをブラウザに転送します。この場合、レンダラーとブラウザ間に直接の接続はありません。

これはWebRTCでは非常に一般的であり、モバイルデバイスを無線キャリアネットワーク経由でサポートする必要がある場合や、セキュリティ保護されたエンタープライズネットワーク上のクライアントをサポートする場合には、TURNサーバーを使用する以外に選択肢がないことがあります。モバイルおよびエンタープライズネットワークでは、クライアントがWebRTCプロトコルを使用して正常に接続することが妨げられる場合があります。

### 詳細なネットワーク設定

更に詳細に設定が必要な場合は、表示端末のネットワークの設定を下記の様に設定してください：

**通常サービス（クラウドレンダリング）の場合**

| リージョン      | ステータス               | URL                                                                          | ポート                                                   |
| ---------- | ------------------- | ---------------------------------------------------------------------------- | ----------------------------------------------------- |
| すべて        | 現行                  | <p><em>.uneeq.io</em><br>.digitalhumans.ne.jp<br>\*.hosted-experience.jp</p> | 443 (TCP)                                             |
| グローバル / 米国 | 推奨                  | \*.turn.uneeq.io                                                             | <p>3478および5349（UDPとTCP）<br>22000 - 23000 UDP</p>      |
| グローバル / 米国 | 非推奨、まだ稼働中ですが終息予定です。 | [turn.us.uneeq.io](http://turn.us.uneeq.io/)                                 | <p>3478および5349（UDPとTCP）<br>49152 - 65535（UDPとTCP）</p> |

**MiniPremを使用したオンプレミスの場合**

MiniPremは音声認識や音声合成プロバイダー、NLPと直接通信します。

詳細な情報はMiniPremの [ファイアウォール設定](/dev/miniprem/miniprem-firewall.md) をご覧下さい。

ご質問がある場合は、カスタマーサービスにお問い合わせください。

## シーケンスダイアグラム

デジタルヒューマンを表示するために必要なWebRTCシーケンス、通信経路は以下の通りです。

```mermaid
sequenceDiagram
    participant Client
    participant SDK
    participant API_Server
    participant Socket_Server
    participant Renderer
    participant TURN_Server

    Client->>SDK: ボタンをクリック / 機能を起動
    SDK->>API_Server: HTTP Request (セッション開始)
    activate API_Server
    API_Server->>Socket_Server: Rendererの利用可能性を確認
    activate Socket_Server
    Socket_Server-->>API_Server: Renderer準備完了
    deactivate Socket_Server
    API_Server-->>SDK: セッション詳細 (Renderer情報)
    deactivate API_Server
    SDK->>Renderer: WebRTC接続の開始

    alt 直接接続が可能な場合 (P2P)
        Client-->>Renderer: WebRTC Media Stream (P2P)
        Note over Client,Renderer: クライアントとレンダラーが直接接続
    else NAT/Firewallが検出された場合 (TURN)
        Client-->>TURN_Server: WebRTC Media Stream (TURN)
        Note over Client,TURN_Server: クライアントとレンダラー間をTURNサーバー経由で接続
    end

    SDK-->>Socket_Server: Secure Socket Connection (制御メッセージ)
```

Renderer（レンダラー） は弊社が管理・運用するクラウド、カスタマーが運用するクラウド、オンプレミス、デスクトップやラップトップにインストールされた環境など複数のパターンが存在します。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digitalhumans.jp/dev/overview/firewall-requirements.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
