Edited at

【初心者向け】STUN/TURNサーバをざっくり解説してみた

More than 3 years have passed since last update.


1 概要

サーバ & AWS 初めましてな初心者がAWS上にTURNサーバを構築することになりました。

ここでは、一から学んだSTUN/TURNサーバ周りの知識をわかりやすい言葉で解説します。

(ちなみにQiita記事作成も初めてです。それも含めて間違いなど見つけたらご指摘いただけると嬉しいです。)


2 STUNサーバ・TURNサーバはなぜ必要なのか?

STUNサーバとTURNサーバはどちらも「NAT越え」を可能にするために必要です。

「NAT越え」はP2PしたいPCが異なるネットワークにある場合に必要になります。

いろんな言葉が出たので、順番に整理します。


2.1 NATとは?

NATは対応するプライベートIPアドレスとグローバルIPアドレスを双方向に変換するもの。

qiita_nat.png

この図だと、NATでは以下のような変換が行われる。

PC1のグローバルIPアドレス(111.111.111.111) → プライベートIPアドレス(222.222.222.222)

【プライベートIPアドレスとグローバルIPアドレスの違い】

プライベートIPアドレスはそのネットワーク内のみで使われるIPアドレスで、

グローバルIPアドレスはそのネットワークの外(インターネット)で使われる。


2.2 P2Pとは?

PC同士が直接通信すること。または、クライアントがサーバに問い合わせる「クライアント-サーバ方式」ではないもの。

P2Pでは相手のIPアドレスによって相手を特定し接続を確立します。

qiita_p2p_success.png


2.2.1 体感するのが1番


2.2.2 P2Pの課題

①P2P通信には接続相手のIPアドレスが必要なこと

②異なるNAT内のPCがお互いのプライベートIPアドレスを知る術はないこと

①と②を合わせると、NAT内PC同士でP2P通信を行うことは不可能です。

qiita_p2p_fail.png

この図ではPC1とPC4は異なるネットワークに属しているため、お互いのIPアドレスがわからず、P2Pできません。

が、「NAT越え」をするとP2Pっぽいものは可能です。

「NAT越え」をすべきかどうかはSTUNサーバを使って判定し、

実際の「NAT越え」作業はTURNサーバで実現します。


3 STUNサーバ・TURNサーバは何をするのか?


3.1 STUNサーバは何をするのか?

STUNサーバは外部から見た自PCのIPアドレスを返してくれるもの。

NAT付ネットワーク外にいる場合: 自PCの知っているIPアドレス = STUNの返すIPアドレス

NAT付ネットワーク内にいる場合: 自PCの知っているIPアドレス ≠ STUNの返すIPアドレス

になるはずなので、比較によって自PCがNAT付ネットワーク内かどうか判定できます。

自PCがNAT内の場合、「NAT越え」が必要だということがわかります。

qiita_stun.png


3.2 TURNサーバは何をするのか?

TURNサーバは、P2P通信したいPCの間に立ってデータをリレーするもの。

qiita_turn.png

TURNサーバにそれぞれ代理人(PC1', PC4')を立てて、代理人同士がデータのやり取りを行うことで、PC1-PC4間の擬似的な直接通信を行います。


4 実際にTURNサーバを構築してみよう

coTurnでEC2上にTURNサーバを作ってみたをご覧ください。


5 参考文献