STUN (Session Traversal Utilities for NATs) は、音声、映像、文章などの双方向リアルタイムIP通信を行うアプリケーションにおいて、NAT traversal(NAT通過)の方法の1つとして使われる標準化された (standards-based) 通信プロトコルである。STUNプロトコルは、アプリケーションがNATの存在と種類とを発見し、リモートホストへのUDP (User Datagram Protocol) 接続にNATが割り当てたグローバルIPアドレスとポート番号とを得ることを許す。STUNプロトコルが動作するには、インターネット上にSTUNサーバが存在する必要がある。STUNプロトコルは、RFC (Request for Comments) 8489に定められる。
TCP/IP群 |
---|
アプリケーション層 |
|
トランスポート層 |
カテゴリ |
インターネット層 |
カテゴリ |
リンク層 |
カテゴリ |
STUNは、軽量なクライアントサーバ型のプロトコルである。STUNクライアントは、例えばVoIP (Voice Over IP) 電話やインスタントメッセージクライアントなどのアプリケーションが有するプロトコルライブラリに含まれる。STUNクライアントは、NATによるIPマスカレードが行われるローカルネットワーク内で動作する。STUNを使用するホスト間で通信を行い始める際に、STUNクライアントはインターネット上のSTUNサーバにリクエストを送る。STUNサーバは、双方のSTUNクライアントのそれぞれのリクエストに対し、他方のパブリックIPアドレスとポート番号とを返す。数種類のリクエストの結果から、クライアントアプリケーションはNATのポート接合の有効時間を含む、NATの操作法を学ぶことができる。
NATデバイスは、アドレス及びポートマッピングの方式が異なるいくつかの種類で実装される。STUNは、全種類のNATで正常に機能するわけではない。STUNは、NATの主な4種類のうちフルコーン、制限コーン、ポート制限コーンの3種類で機能する。双方向性NATとも呼ばれ、企業などのネットワークで使われることの多い対称形NATではSTUNは機能しない。制限コーンまたはポート制限コーンの場合は、クライアントがエンドポイントにパケットを送らなければ、NATはエンドポイントからクライアントへのパケットを通すことを許可しない。対称型のNATでは、STUNサーバのIPアドレスはエンドポイントのIPアドレスとは異なるので、STUNサーバへのNATマッピングはエンドポイントへのものとは異なる。対称型NATではTURNがベターな解決方法となる。
STUNサーバは、通常3478番ポートでリクエストを待ち受ける。
クライアントが通信相手の外部アドレスを見つけたならば、その相手との接続が可能となる。NATがフルコーンならばどちら側からも通信を始められ、NATが制限コーンまたはポート制限コーンならば双方が同時に通信を始めなければならない。
STUNは、NATの後ろにあるホストがUDP接続を行う際に使用される。例えばRTPやSIPなどのプロトコルが、音声、映像、文章などのシグナリングトラフィックを転送する際にUDPパケットを用いる。
想定されうるアプリケーションの使用状況において、双方のエンドポイントが共にNATの後ろにあることは一般的である。このような二重のNAT問題の解決はSTUNを用いても容易でなく、通常はアプリケーションプロキシサーバが必要とされる。
STUNはNATゲートウェイとファイアウォールとの存在を発見するために、RFC 3489から構成される下図のアルゴリズムを使用する。
図を通る経路が赤い箱で終わる所ではUDP通信は可能でない。経路が黄色であるか緑の箱で終わる所で、UDP通信は可能である。
RFC 3489の方法は、プロダクションネットワークで遭遇するNATの実装形態の多様性とアプリケーションシナリオに対処するにはあまりに頼りにならないとわかった。2008年10月にそれに代わる新たな方法RFC5389が策定された。
2020年2月のRFC8489の策定により、RFC5389は現在廃止されている。