STUN
STUN(Simple Traversal of UDP through NATs)は、音声、映像、文章などの双方向リアルタイムIP通信を行うアプリケーションにおいて、NAT traversal(NAT通過)の方法の1つとして使われる標準化された(standards-based)インターネットプロトコルである。 STUNプロトコルは、アプリケーションがNATの存在と種類とを発見し、リモートホストへのUDP(User Datagram Protocol)接続にNATが割り当てたグローバルIPアドレスとポート番号とを得ることを許す。 STUNプロトコルが動作するには、インターネット上にSTUNサーバが存在する必要がある。 STUNプロトコルは、RFC(Request for Comments) 3489に定められる。
| TCP/IP群 | |
|---|---|
| アプリケーション層 | |
|
BGP / DHCP / DNS / FTP / HTTP / IMAP / IRC / LDAP / MGCP / NNTP / NTP / POP / RIP / RPC / RTP / SIP / SMTP / SNMP / SSH / Telnet / TFTP / TLS/SSL / XMPP カテゴリ |
|
| トランスポート層 | |
|
TCP / UDP / DCCP / SCTP / RSVP / ECN カテゴリ |
|
| ネットワーク層 | |
|
IP (IPv4, IPv6) / ICMP / ICMPv6 / IGMP / IPsec カテゴリ |
|
| リンク層 | |
|
ARP/InARP / NDP / OSPF / トンネリング (L2TP) / PPP / MAC (イーサネット, IEEE 802.11, DSL, ISDN, FDDI) カテゴリ |
目次 |
概要 [編集]
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マッピングはエンドポイントへのものとは異なる。
STUNサーバは、通常3478番ポートでリクエストを待ち受ける。
クライアントが通信相手の外部アドレスを見つけたならば、その相手との接続が可能となる。NATがフルコーンならばどちら側からも通信を始められ、NATが制限コーンまたはポート制限コーンならば双方が同時に通信を始めなければならない。
STUNは、NATの後ろにあるホストがUDP接続を行う際に使用される。 例えばRTPやSIPなどのプロトコルが、音声、映像、文章などのシグナリングトラフィックを転送する際にUDPパケットを用いる。
想定されうるアプリケーションの使用状況において、双方のエンドポイントが共にNATの後ろにあることは一般的である。このような二重のNAT問題の解決はSTUNを用いても容易でなく、通常はアプリケーションプロキシサーバが必要とされる。
アルゴリズム [編集]
STUNはNATゲートウェイとファイアウォールとの存在を発見するために、RFC 3489から構成される下図のアルゴリズムを使用する。
図を通る経路が赤い箱で終わる所ではUDP通信は可能でない。経路が黄色であるか緑の箱で終わる所で、UDP通信は可能である。
RFC3489に従ったSTUNの後継技術 [編集]
RFC 3489の方法は、プロダクションネットワークで遭遇するNATの実装形態の多様性とアプリケーションシナリオに対処するにはあまりに頼みにならないとわかった。 文書は非難され、2008年7月現在、それに代わる新たな方法が策定されつつあるが、まだ草案ステータスにある。(draft-ietf-behave-rfc3489bis)
参照 [編集]
- ネットワークアドレス変換
- NAT traversal
- Interactive Connectivity Establishment (ICE)
- Traversal Using Relay NAT (TURN)
- UDPホールパンチング
外部リンク [編集]
- RFC 3489, STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)
- Latest revision (bis) to the RFC - draft-ietf-behave-rfc3489bis
- NAT traversal White Paper comparing STUN with other NAT traversal techniques such as TURN, ICE, ALGs and Session Border Controllers - Source: Newport Networks
- STUNT - "STUN and TCP too", which extends STUN to include TCP functionality
- Yahoo! - Director of Engineering explaining STUN and TURN (Video)
- stunserver.org an open and freely-available STUN server.
実装 [編集]
- STUN Client and Server library
- JSTUN - A Java STUN implementation
- Java STUN library "stun4j"
- Numb is a free STUN/TURN server.