Open4

TURN サーバでよくある間違い

voluntasvoluntas

よくある間違い

  • TURN サーバはリレーするパケットの中身を見ることができる
    • TURN サーバを通るもともとのパケットを復号化したりしない
    • ただ通信が暗号化されていなければ見ることはできる
  • TURN サーバはスケールが難しい
    • 1 接続事に独立しているので TURN サーバ同士で状態を共有する必要はないので難しくない
    • Username / Credential は RDB や KVS などに保存する必要があるのでそこはスケールがいるが、それは普通の話
  • TURN サーバは Proxy を超えられない
    • HTTP-Proxy を超えるかどうかは TURN クライアント側の実装依存
  • 同じ TURN サーバに接続しないと繋がらない
    • TURN サーバは個々の接続の「代理」を行うので、接続事にどれに繋いでもよい
  • TURN サーバは WebRTC 専用
  • P2P 専用
    • 主に P2P に利用されるが UDP を利用できない場合のフォールバックとしてクライアントサーバモデルでも使われる
    • WebRTC SFU を立てても TURN サーバが必要な場合などもある
  • 先に TURN-UDP を試して 、それがダメなら TURN-TCP 、そして TURN-TLS とフォールバックしていく
    • 実装依存かもしれないが、自分が今まで見てきた限り全て同時に試し、一番先に確立したのを利用するという仕組み
voluntasvoluntas

間違ってそうだけど正しい

  • TURN プロトコルは暗号化されていない
    • TURN-TLS や TURN-DTLS を利用しない限り、パケットをそのままリレーするだけなの暗号化はされない
    • TURN は安全な通信を目的とするのが第一ではない
    • もともとのパケットを暗号化して送れば問題ない
  • TURN-TCP と TURN-UDP over TCP がある
voluntasvoluntas

蛇足

  • 転送量がかかる
    • サーバ経由になるのだから当たり前
  • TURN サーバを導入しても繋がらない
    • TURN-UDP / TURN-TCP / TURN-TLS で TCP/TLS を 443 番にして繋がらない場合はどう頑張っても繋がらないことがほとんどなので諦めるしかない