WebRTC 利用時に認証付き HTTP Proxy を超える話をサクッと話せる人はそうそういないと思います。そもそも情報もほとんどないので、いい機会なので雑に書いておきます。
この記事を書くにあたり libwebrtc チョットデキル tnoho より色々教えていただきました。感謝します。
まとめ
- 世の中のブラウザ以外の WebRTC ライブラリは非対応が多い
- HTTP Proxy (CONNECT メソッド) + TURN-TCP / TURN-TLS
- PAC ファイル死すべし
認証付き HTTP Proxy
そもそも認証付き HTTP Proxy についての詳細な説明はここではしませんので以下をお読みください。
- https://developer.mozilla.org/ja/docs/Web/HTTP/Proxy_servers_and_tunneling
- https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Proxy-Authorization
HTTP を Proxy 処理する際に、その Proxy を利用するために認証情報を要求する Proxy の事です。認証情報には基本的にはベーシック認証が使われます。
ブラウザの WebRTC における認証付き HTTP Proxy 対応状況
ブラウザとしては Chrome / Edge / Firefox は対応済みです。Safari も対応しているはずです。
なにが対応していないのか
libwebrtc ベースの iOS や Android クライアント SDK が対応していないことがほとんどです。libwebrtc 以外は不明です。
なぜ対応していないのか
そもそも libwebrtc 自体がデフォルトで対応していないためです。対応する仕組み自体は提供していますが、C++ で対応する必要がありますし、libwebrtc に内蔵されている iOS / Android SDK は HTTP Proxy の枝すら生えておらず非対応です。
どんな処理をしなければならないのか
HTTP Proxy は基本的に TCP/IP が前提になりますので、TURN-TCP や TURN-TLS ありきとなります。ICE-TCP / ICE-TLS (tcpssl) でも実現可能だと思いますがこのあたりは追いかけてないのでわかりません。
つまり認証付き HTTP Proxy がある場合は TURN-TCP で接続にいくのではなく TURN-TCP や TURN-TLS に HTTP Proxy の CONECT メソッドをくっつけて接続にいく必要があります。
libwebrtc はこのあたりの処理を組み込む入り口は入っているのですが、実装自体は自分で行う必要があります。
PAC 対応は?
PAC とは HTTP Proxy の自動設定ファイルのことです。これはなんと!!!! JavaScript で書けるという鬼のような仕様になっています。
そのため、自前で対応するのは無謀なので、OS が持っている仕組みに乗っかる必要があります。それぞれの OS 事に処理が異なるので各 OS 事での対応が必要となります。本当にめんどくさいです。
認証付き HTTP Proxy なんて使われてるの?
企業ネットワークで使われてることはよくあります。そのためこれに対応しないと外に抜けられないという iOS や Android の WebRTC もあるかもしれません。4G/5G 使って抜けちゃうえばいいという話もありますが … 。
宣伝
時雨堂が開発する WebRTC SFU Sora のクライアントである Momo や SDK では、認証付き HTTP Proxy に対応し始めています。
HTTP Proxy 対応内容もすべて OSS にして公開しておりますので、是非対応出来ていない WebRTC 利用企業の方は参考にして見てください。