<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://organizeseries.com/"
	>

<channel>
	<title>coTURN &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/coturn/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>[翻訳] coTURN:マルチテナント型のオープンソースのSTUN/TURNサーバ</title>
		<link>/iwase/11300/</link>
		<pubDate>Tue, 18 Nov 2014 00:30:37 +0000</pubDate>
		<dc:creator><![CDATA[岩瀬 義昌]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[TURN]]></category>
		<category><![CDATA[WebRTC]]></category>
		<category><![CDATA[coTURN]]></category>

		<guid isPermaLink="false">/?p=11300</guid>
		<description><![CDATA[連載： WebRTC (1)本記事は、webrtcHacksにて英語で掲載されている記事を、webrtcHacks様の許可を得た上で、翻訳＆掲載している記事となります。修正・更新・コメント等がございましたら、webrtc...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/webrtc/" class="series-395" title="WebRTC" data-wpel-link="internal">WebRTC</a> (1)</div><p>本記事は、webrtcHacksにて英語で掲載されている<a href="http://webrtchacks.com/coturn/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">記事</a>を、webrtcHacks様の許可を得た上で、翻訳＆掲載している記事となります。修正・更新・コメント等がございましたら、<a href="http://webrtchacks.com/coturn/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">webrtchacks/coturn/</a> までお願いいたします。</p>

<p>This article originally appeared in English at webrtcHacks and has been translated with webrtcHack&#8217;s permission for posting to html5experts.jp in Japanese. Please visit http://webrtchacks.com/coturn for edits, updates, and comments.</p>

<h2>イントロダクション</h2>

<p>昨年、Oleg Moskalenkoへインタビューし、オープンソースのSTUN&amp;TURNサーバで極めて人気のあるrfc-5766-turn-serverプロジェクトについての記事を公開しました。その数カ月後、Amazonが自身のサービスであるMaydayにこのプロジェクトを利用していることがわかりました。それ以後、IETFにてRFC 5766に多くの機能が新たに定義され、オープンソースの新プロジェクトであるcoTURNプロジェクトが生まれました。</p>

<p>今日はOlegに再度、話を伺って、coTURNの何が新しいのか・coTURNとは何なのか、という点についてキャッチアップしたいと思います。</p>

<p>{“導入の執筆者”, “victor”}</p>

<div id="attachment_11301" style="width: 448px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2014/11/coturn01.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/11/coturn01.jpg" alt="coturn image" width="438" height="640" class="size-full wp-image-11301" srcset="/wp-content/uploads/2014/11/coturn01.jpg 438w, /wp-content/uploads/2014/11/coturn01-205x300.jpg 205w, /wp-content/uploads/2014/11/coturn01-141x207.jpg 141w" sizes="(max-width: 438px) 100vw, 438px" /></a><p class="wp-caption-text">Photo courtesy of flikr user Grant Nicholson</p></div>

<h2>インタビュー</h2>

<p>webrtcHacks: 前回インタビューしたときは、rfc5766-turn-serverプロジェクトについて話をしていて、既に商用でも使われている例(WebRTCの例、WebRTC以外の例)があるのを教えてもらったよね。 coTURNプロジェクトの何が新しくて、現在人気のあるrfc5766-turn-serverと何が違うの？</p>

<p>Oleg: TURNとSTUNのプロトコルは進化が早くて、新しいネットワークの接続要件を備えていたり、もっとロバストな能力を提供してきている。ある時点で、新しい要件が現在の&#8221;レガシー&#8221;なユーザ要求と衝突する可能性があることがわかったんだ。そこで、プロジェクトを2つの開発ラインに分けて、2つのモデルをサポートしようと決めたんだよ。古いプロジェクト(rfc5766-turn-server)は安定したコードと多くのユーザを受けて継続する。つまり、バグフィックスや本当に必要な機能だけを加えて、信頼性のあるコードになる。このプロジェクトは古いスタイルのRFC 5766に準拠して欲しいという要望がある限り、存在し続けるよ。</p>

<p>一方で新しいプロジェクトである&#8221;<a href="https://code.google.com/p/coturn/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">coTURN</a>&#8220;(複数レルムでco-locationを提供するTURN)は4月にはじまり、2014年の5月に<a href="https://groups.google.com/forum/#!topic/turn-server-project-rfc5766-turn-server/rYF8nbm5rxc" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">公開</a>した。最初の主な違いは、新しい<a href="https://tools.ietf.org/wg/tram/charters" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">IETF TRAMワーキンググループ</a>で提案されているORIGIN属性をサポートしたmultiple-realms(複数領域)の仕様に対応している点だよ。</p>

<p>webrtcHacks: 読者はIETFでTRAMが何をやっていることについて詳しくないひともいるので、簡単に教えてもらえる？</p>

<p>Oleg: もちろん。TRAM WGのゴールは、複数の取組みを整理・統合して、TURNとSTUNをもっとWebRTCの環境に適したものにすること。その中では、以下の取組みが含まれている：</p>

<ul>
<li>追加トランスポートとしての<a href="https://tools.ietf.org/html/rfc7350" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">DTLS</a>を追加する</li>
<li>認証の仕組み</li>
<li>TURNとSTUNの拡張</li>
</ul>

<p>実際、知っていると思うけど、TURNbisやSTUNbisのドラフトにも取り組んでいるよ。私の意見だと、今後やって来る標準の中で最も重要な機能は、oAuthベースの認証と認可の仕組みだね。エンタープライズのユーザ・ISPのユーザにとって、マルチテナントサーバになるのが主要な機能になるだろうね。</p>

<p>これに加えて、多くな小さな追加もある：</p>

<ul>
<li>ALPN (Application Layer Protocol Negotiation)</li>
<li>帯域制御</li>
<li>IPv4とIPv6の割り当て(dual allocation)</li>
</ul>

<p>webrtcHacks: あと、さっき言ってたORIGIN属性もあるよね。</p>

<p>Oleg: その通り、これまで決めてきたものの1つに、新しい<a href="https://tools.ietf.org/html/draft-ietf-tram-stun-origin" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ORIGIN属性</a>がある。これは、セッション単位での領域選択を可能にするんだ。coturnのデータベースは、複数のレルムでグループ分けされたユーザを保持するようになる。それぞれのレルムは異なるパラメータをおそらく持つ。この機能のおかげで、複雑な大規模環境でもcoturnは対応できる。例えば、1つのIPアドレスとポートしないけど、複数のユーザに対応する必要がある場合とかね。エンタープライズ向けの大規模TURNサーバやISPの運用するTURNサーバも適用例になるだろうね。</p>

<p>webrtcHacks: マルチテナントへの変更って、rfc 5766のTURNサーバのプロジェクトから大きなアーキテクチャの変更が必要なの？</p>

<p>Oleg: アーキテクチャに大きな変更は無いんだけど、データマネジメントでかなりの量の変更があるんだ。これまでの多くのことはシステム全体でグローバルだと想定してたんだけど、これからはレルムに限定されるようになる。そのため、かなりの量のコードを書き換えないといけなくて、それがマルチテナントの移行に向けてとても大変なところなんだ。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/11/coturn02.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/11/coturn02.png" alt="Example from latest TURNbis draft" width="593" height="404" class="alignnone size-full wp-image-11302" srcset="/wp-content/uploads/2014/11/coturn02.png 593w, /wp-content/uploads/2014/11/coturn02-300x204.png 300w, /wp-content/uploads/2014/11/coturn02-207x141.png 207w" sizes="(max-width: 593px) 100vw, 593px" /></a></p>

<p>webrtcHacks: マルチテナント以外の機能は他にある？</p>

<p>Oleg: うん、もう一つの大きな変更はIPv4とIPv6の<a href="http://tools.ietf.org/html/draft-martinsen-tram-ssoda" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">2つの割り当て</a>だね。この機能のおかげで、サーバは1つのセッションに対して2つのエンドポイントを割り当てできる。つまり、1つがIPv4でもう1つがIPv6。もしTURNのクライアントがv4とv6の両方でピアとの接続を確立したい場合は、クライアントは同じセッションの中で両方の接続を扱えるから、クライアントとサーバのリソースの節約になる。</p>

<p>Coturnは、サーバ上であるレベルの<a href="http://tools.ietf.org/html/draft-thomson-tram-turn-bandwidth" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">帯域制御</a>も提供する仕様もサポートしているよ。この機能は、TURNクライアントへ提供するサービスレベルを保証したい場合に役立つよ。</p>

<p>webrtcHacks: プロジェクトのコミットを追っかけてて気づいんたんだけど、データベースのサポートについても何かしているよね。これについて教えてくれる？</p>

<p>Oleg: Coturnでは、もっとロバストで抽象化できるようにデータベースのコードを書き直したんだ。これは、新しい機能の開発に役立つし、新しいデータベースも採用できる。例えば、Coturnは古いTURNサーバのプロジェクトでもサポートしてたRedis、MySQL、Postgresに加えて、MongoDBもサポートしているよ。</p>

<p>webrtcHacks: セキュリティについてはどう？何か改善した？　</p>

<p>Oleg: あるよ、今のCoturnの開発はoAuthベースのサードパーティ認証＆認可について取り組んでいる。また、多くのTURNのセキュリティ課題も修正するつもりだよ。CoturnサーバはoAuthの鍵をデータベースから取得するようになり、外部の独立したエージェントがその鍵があるデータベースを扱うようになる。</p>

<p>webrtcHacks: Coturnのパフォーマンスについてはどう？前のrfc5766-turn-serverプロジェクトに比べてどう？</p>

<p>Oleg: Coturnはrfc5766-turn-serverと同じテストスイートを使ってる。Coturnのコードと機能は、より複雑だから理論的にはパフォーマンスは落ちる。だけど、これまでのテストだと気づけるパフォーマンスは落ちてないね。</p>

<p>TURNとして使うのならCPU1つで数千のコールをさばけるし、STUNだけでいいのなら数万のコールをさばけるよ。</p>

<p>webrtcHacks: デザイン面からパフォーマンスに貢献してそうなところはある？</p>

<p>Oleg: 高いパフォーマンスとスケーラビリティのために、TURNサーバはいくつかの機能を実装しているんだ：</p>

<ul>
<li>libevent2の利用 &#8211; 高パフォーマンスで、耐久性のあるのネットワークIOエンジン</li>
<li>設定可能なマルチスレッドモデル(OSがマルチスレッドを使えるなら、CPUのリソースをフルに使えるように)</li>
<li>設定可能な複数のリスニング、および複数のリレーアドレス</li>
<li>より効率的なメモリ管理モデル</li>
<li>ユーザスペースで動作して、システムに特別な制約を課さないこと</li>
</ul>

<p>このTURNプロジェクトのコードは、個別に専有されたネットワーク環境で使われることもある。TURNサーバのコードでは、抽象化されたネットワークAPIが使われているんだ。いくつかのファイルを書き直すだけで、TURNサーバに専有環境に適するコードをプラグインできるよ。このプロジェクトのおかげで、プロジェクトでは提供するのは標準のUNIXのネットワーク/IO APIだけでいいんだ。ユーザは他の環境に適したものを実装できる。TURNサーバのコードはもともと企業の専有環境で高パフォーマンスがでるように作られていて、その後にUNIXネットワークAPIを採用したんだ。　</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2014/11/coturn03.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2014/11/coturn03.png" alt="New coturn Project on Google code" width="796" height="407" class="alignnone size-full wp-image-11303" srcset="/wp-content/uploads/2014/11/coturn03.png 640w, /wp-content/uploads/2014/11/coturn03-300x153.png 300w, /wp-content/uploads/2014/11/coturn03-207x105.png 207w" sizes="(max-width: 796px) 100vw, 796px" /></a></p>

<p>webrtcHacks: スケールやロードバランスはどうするつもり？</p>

<p>Oleg: もちろん、仮想的には無制限にスケールするようにロードバランスのスキーマは使うよ。ロードバランスは次のようなツールを使って実装できる。1つでも複数の組み合わせでもいい：</p>

<ul>
<li>DNS SRVを用いたロードバランス</li>
<li>組み込みの300 ALTERNATE-SERVERメカニズム(TURNクライアントからの300レスポンスが必要)</li>
<li>ネットワークロードバランスサーバ</li>
</ul>

<p>webrtcHacks: メディアリレーするためにTURNサーバってどのぐらい使われるか知ってる？</p>

<p>Oleg: 異なる統計が異なるデータを出しているね。一般的に言えば、8-15%のコールで利用されているよ。もちろん、特別なアプリケーションによっては100％がTURNサーバを通る。ただ、僕の知るかぎりだとWebRTCのアプリケーションじゃないけど。</p>

<p>webrtcHacks: 開発者が全てのトラフィックをTURNサーバ経由にしないとならないシナリオって何か思いつく？伝統的なVoIPだと本質的にSBCを使うような。</p>

<p>Oleg: WebRTCの世界だとそういうシナリオに関する絶対的な情報は知らないな。だけど、一部のエンタープライズユーザはそういうネットワークパターンを議論しているから、ありえると思うよ。</p>

<p>webrtcHacks: Coturnはどのプラットフォームがサポートしているの？</p>

<p>Oleg: リストにすると長いね。サポートしているプラットフォームは</p>

<ul>
<li>Linux &#8211; Debina, Ubuntu, Mint, CentOS, Fedora, Redhat, Amazon Linux, Arch Linux, Open SUSE</li>
<li>BSD &#8211; FreeBSD, NetBSD, OpenBSD, DragonFlyBSD</li>
<li>Solaris</li>
<li>Mac OS X</li>
<li>Cygwin &#8211; R&amp;D用途でプロダクジョン向けじゃない</li>
</ul>

<p>このプロジェクトは、*NIXプラットフォームで利用できるはず。ただ、公式にはサポートしてないけど。</p>

<p>クライアントプラットフォームはなんでも大丈夫で、Android、iOS、Linux、OS X、Windows、Windows Phoneをサポートしているよ。</p>

<p>webrtcHacks: 昨年、統計付きパフォーマンスモニタリングも追加したいと言ってたけど、Coturnはそういう仕組を備えているの？</p>

<p>Oleg: 今のところは、パフォーマンスモニタリングのデータはTURNサーバに対してtelnetのインターフェースで取得できて、いくつかのパフォーマンス統計は、Redisの統計データベースから取得できるよ。統計以外だと、今のTURNサーバはパフォーマンスベースの輻輳制御の仕組みを備えているよ。この仕組みはTCPとTLSの接続で動作して、TCP/TLSのコネクションを効率良く自動的にチューニングしてくれる。</p>

<p>webrtcHacks: Coturnの将来のロードマップについて教えてくれる？</p>

<p>Oleg: Coturnは最新のTURNとSTUNの機能に追従していくつもりだよ。IETF TRAMグループは新しいTURNとSTUNのRFC(TURNbisとSTUNbisというコードネームがついてる)を採用する方向に進んでいる。RFCが最終的に定まったら、Coturnサーバは新しい仕様のサポートするように準備するだろう。</p>

<p>加えて、データベースやREST API等を扱える分離されたマネジメントサーバを追加したいんだ。リソースが不足しているから、ボランティアで参加してもらえると非常に助かるよ。</p>

<p>webrtcHacks: 読者がCoturnについての情報を知りたかったらどこを見ればいい？</p>

<p>Oleg: 一番良いのはプロジェクトのウェブサイ卜だよ。<a href="https://code.google.com/p/coturn/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">https://code.google.com/p/coturn/</a>　必要な情報は、全てリンクするようにしてる。</p>

<p>{“インタビューした人, “victor“}</p>

<p>{“インタビューを受けた人&#8221;, “Oleg Moskalenko“}</p>

<p>{“編集者&#8221;, “chad“}</p>

<p>{“翻訳者&#8221;, “岩瀬 義昌&#8221;}</p>
]]></content:encoded>
		
		<series:name><![CDATA[WebRTC]]></series:name>
	</item>
	</channel>
</rss>
