STUNサーバーとは何か?NAT越えで使われる理由を解説

ITインフラ
この記事は約10分で読めます。

この記事の最終更新日: 2026年5月29日

WebRTC、ビデオ通話、音声通話、オンラインゲーム、P2P通信などを調べていると、STUNサーバーという言葉が出てくることがあります。

STUNサーバーは、特にNAT越えと深く関係しています。

ただ、初心者にとっては少しわかりにくい用語です。

「STUNサーバーって何をするサーバーなの?」
「普通のWebサーバーと何が違うの?」
「なぜNAT越えに必要なの?」
「TURNサーバーとは何が違うの?」

この記事では、STUNサーバーの役割を初心者向けにわかりやすく解説します。


STUNサーバーとは?

STUNサーバーとは、簡単に言うと、

自分がインターネット側からどのIPアドレス・ポート番号に見えているかを教えてくれるサーバー

です。

STUNは、現在では主に
Session Traversal Utilities for NAT
の略として使われます。

NAT環境では、自宅や会社の端末はプライベートIPアドレスを使っています。

たとえば、自宅のPCには次のようなIPアドレスが割り当てられます。

192.168.1.10

しかし、このIPアドレスはインターネット上では直接使えません。

インターネット側から見ると、通信元はルーターのグローバルIPアドレスや、NATによって変換されたポート番号に見えます。

たとえば、外部からは次のように見えるかもしれません。

203.0.113.10:62001

STUNサーバーは、この

外から見た自分のIPアドレスとポート番号

を教えてくれるサーバーです。


なぜ「外から見た自分の住所」を知る必要があるのか?

通常のWebサイト閲覧では、STUNサーバーはほとんど意識しません。

たとえば、ブラウザでWebサイトを見る場合、通信は次のように始まります。

自分のPC → Webサーバー

自分のPCから外に向かって通信を開始するため、NATがあっても問題になりにくいです。

しかし、P2P通信やビデオ通話では話が変わります。

たとえば、端末Aと端末Bが直接通信したいとします。

端末A ←→ 端末B

このとき、端末Aも端末BもNATの内側にいる場合があります。

端末A
↓
家庭Aのルーター
↓
インターネット
↓
家庭Bのルーター
↓
端末B

この状態では、お互いの端末が自分のプライベートIPアドレスしか知らないと、直接通信できません。

端末Aが端末Bに対して、

192.168.1.10 に送ってください

と言っても、そのIPアドレスは家庭Aの中でしか意味がありません。

そこで必要になるのが、

インターネット側から見える自分の住所

です。

STUNサーバーは、この外向きの住所を確認するために使われます。


NAT環境で起きていること

NAT環境では、ルーターがIPアドレスやポート番号を変換します。

たとえば、自宅PCが外部に通信するとします。

自宅PC:192.168.1.10:50000

この通信がルーターを通ると、次のように変換されることがあります。

変換前:192.168.1.10:50000
変換後:203.0.113.10:62001

外部のサーバーから見ると、通信元は 192.168.1.10:50000 ではありません。

外部から見えるのは、次のようなアドレスです。

203.0.113.10:62001

この外部から見えるIPアドレスとポート番号を、サーバーリフレクシブアドレスと呼ぶことがあります。

初心者向けには、

NATを通ったあと、外から見えている自分の住所

と理解すれば十分です。


STUNサーバーの基本的な流れ

STUNサーバーを使った流れは、かなりシンプルです。

1. 端末がSTUNサーバーに問い合わせる

まず、自分の端末がSTUNサーバーに通信します。

自分の端末 → STUNサーバー

この通信は、自分の端末から外に向かう通信なので、NATを通過しやすいです。


2. STUNサーバーが通信元を確認する

STUNサーバーは、届いた通信を見て、

あなたは外から見ると 203.0.113.10:62001 に見えています

という情報を把握します。


3. STUNサーバーが結果を返す

STUNサーバーは、その情報を端末に返します。

STUNサーバー → 自分の端末

端末は、自分が外部からどのように見えているかを知ることができます。


図で見るSTUNの役割

イメージとしては、次のような流れです。

自宅PC
192.168.1.10:50000
   ↓
ルーターでNAT変換
   ↓
203.0.113.10:62001
   ↓
STUNサーバー

STUNサーバー:
「あなたは 203.0.113.10:62001 に見えています」

STUNサーバーは、通信を中継しているわけではありません。

あくまで、

外から見た自分のIPアドレスとポート番号を教えてくれる

という役割です。


STUNサーバーはなぜNAT越えで使われるのか?

NAT越えでは、NATの内側にある端末同士が通信できるようにする必要があります。

そのためには、まずお互いが

自分は外からどう見えているのか

を知る必要があります。

たとえば、端末Aと端末Bがビデオ通話をするとします。

それぞれがSTUNサーバーに問い合わせます。

端末A → STUNサーバー
端末B → STUNサーバー

すると、端末Aと端末Bはそれぞれ、外部から見た自分のアドレスを取得できます。

端末A:203.0.113.10:62001
端末B:198.51.100.20:53001

その後、端末Aと端末Bは、この情報を使って直接通信を試みます。

端末A ←→ 端末B

つまりSTUNサーバーは、NAT越えにおいて

直接通信を試すための住所確認

を担当していると考えるとわかりやすいです。


STUNサーバーは通信を中継しない

ここは非常に重要です。

STUNサーバーは、通信を中継するサーバーではありません。

たとえば、ビデオ通話の映像や音声データが、常にSTUNサーバーを通るわけではありません。

STUNサーバーの役割は、あくまで次の確認です。

外から見た自分のIPアドレスとポート番号を調べる

その後、実際の通信は端末同士で直接行われる可能性があります。

端末A ←→ 端末B

この点が、TURNサーバーとの大きな違いです。


TURNサーバーとの違い

STUNとよく混同されるのが、TURNサーバーです。

STUNとTURNの違いは、次のように整理できます。

項目STUNサーバーTURNサーバー
主な役割外から見たIPアドレス・ポートを調べる通信を中継する
実際のデータ通信基本的には中継しない中継する
サーバー負荷比較的軽い重い
通信コスト低め高め
使われる場面直接通信できるか試すとき直接通信できないとき

STUNは、直接通信を成立させるための補助役です。

一方、TURNは、直接通信できない場合の中継役です。


STUNだけでNAT越えできるのか?

STUNを使えば、必ずNAT越えできるわけではありません。

STUNは、自分の外部アドレスを知るための仕組みです。

しかし、外部アドレスがわかったからといって、相手からの通信が必ず届くとは限りません。

NATの種類やネットワーク環境によっては、通信がブロックされることがあります。

たとえば、次のような環境ではSTUNだけでは難しいことがあります。

  • 厳しいNAT環境
  • シンメトリックNAT
  • 企業ネットワーク
  • 学校や公共Wi-Fi
  • UDP通信が制限されている環境
  • 二重NAT
  • CGNAT
  • ファイアウォールが厳しい環境

この場合は、TURNサーバーを使って通信を中継する必要があります。


STUNとICEの関係

WebRTCでは、STUNサーバーは単体で使われるというより、ICEという仕組みの中で使われることが多いです。

ICEは、簡単に言うと、

どの通信経路が使えるかを試して、最適な経路を選ぶ仕組み

です。

ICEでは、通信候補をいくつか集めます。

代表的には、次のような候補です。

候補意味
host candidate自分のローカルIPアドレス
server reflexive candidateSTUNで取得した外部アドレス
relay candidateTURNサーバー経由のアドレス

STUNサーバーは、このうち

server reflexive candidate

を取得するために使われます。

つまり、WebRTCでは次のような流れになります。

1. ローカルIPを候補にする
2. STUNで外部から見たIP・ポートを取得する
3. TURNで中継用の候補も用意する
4. 相手と候補を交換する
5. 接続できる経路を試す
6. 最適な経路で通信する

STUNは、ICEの中で通信候補を増やすための重要な役割を持っています。


WebRTCでSTUNサーバーが使われる理由

WebRTCでは、ブラウザ同士が音声、映像、データを直接やり取りできます。

たとえば、次のような機能です。

  • ビデオ通話
  • 音声通話
  • 画面共有
  • P2Pファイル送信
  • リアルタイムデータ通信

しかし、実際の利用者は多くの場合、NATの内側にいます。

ブラウザA
↓
家庭Aのルーター
↓
インターネット
↓
家庭Bのルーター
↓
ブラウザB

この状態で直接通信を成立させるには、外から見た自分のアドレスを知る必要があります。

そのため、WebRTCではSTUNサーバーがよく使われます。


STUNサーバーの通信例

WebRTCなどでSTUNを使う場合、設定として次のようなSTUNサーバーを指定することがあります。

const configuration = {
  iceServers: [
    {
      urls: "stun:stun.example.com:3478"
    }
  ]
};

ここで指定している stun:stun.example.com:3478 がSTUNサーバーです。

一般的にSTUNでは、3478 番ポートが使われることがあります。

ただし、実際にどのポートを使うかはサービスや設定によって変わります。


STUNサーバーを使ったからといって安全性が下がる?

STUNサーバーを使うこと自体が、ただちに危険というわけではありません。

ただし、STUNは外部から見たIPアドレスとポート番号を取得する仕組みです。

そのため、通信設計やログの扱いには注意が必要です。

特にサービス開発者は、次の点を意識する必要があります。

  • 不要な情報をログに残しすぎない
  • 信頼できるSTUN/TURNサーバーを使う
  • 認証が必要なTURNサーバーは適切に保護する
  • 通信内容の暗号化を前提にする
  • ユーザーのIPアドレスが相手に見える可能性を理解する

WebRTCでは、P2P通信が成立すると相手にネットワーク情報が伝わる可能性があります。

そのため、プライバシー面も含めて設計を考える必要があります。


STUNサーバーを自分で用意する必要はある?

個人開発や小規模な検証であれば、まずは既存のSTUNサーバーを使って試すことが多いです。

ただし、本番サービスでは慎重に考える必要があります。

たとえば、次のような観点があります。

  • 利用規約
  • 安定性
  • 可用性
  • レイテンシ
  • ログやプライバシー
  • TURNとの組み合わせ
  • 障害時の影響
  • サービス規模

STUNサーバー自体の負荷はTURNに比べると軽いですが、サービスの重要な通信経路に関係するため、適当に選ぶべきではありません。

本番のWebRTCサービスでは、STUNだけでなくTURNサーバーも含めて、きちんと設計することが重要です。


STUNサーバーが不要なケース

すべての通信でSTUNサーバーが必要なわけではありません。

たとえば、一般的なWebアプリでは通常不要です。

ブラウザ → Webサーバー

このようなHTTP通信では、ブラウザからサーバーに向かって通信を開始するため、NAT越えの問題は起きにくいです。

STUNサーバーが必要になりやすいのは、次のようなケースです。

  • 端末同士で直接通信したい
  • P2P通信をしたい
  • WebRTCを使う
  • 音声通話やビデオ通話を作る
  • オンラインゲームで低遅延通信をしたい
  • IoT機器と外部から通信したい

つまり、STUNサーバーは主に

クライアント同士が直接つながりたい場面

で登場します。


STUNサーバーを一言で表すなら

STUNサーバーを一言で表すなら、次のようになります。

STUNサーバーとは、NATの外側から見た自分のIPアドレスとポート番号を教えてくれるサーバー

もう少し実務寄りに言うと、

P2P通信やWebRTCで、直接通信できる経路を探すために使われるサーバー

です。

重要なのは、STUNサーバーは通信を中継するものではないという点です。

通信を中継するのはTURNサーバーです。


初心者が押さえるべきポイント

STUNサーバーについて、初心者がまず押さえるべきポイントは次のとおりです。

  • STUNはNAT越えで使われる技術
  • STUNサーバーは外から見た自分のIPアドレスとポート番号を教えてくれる
  • NAT環境では、自分のローカルIPだけでは相手と直接通信できない
  • STUNは直接通信を試すための情報を取得する
  • STUNサーバーは映像や音声を中継しない
  • 直接通信できない場合はTURNサーバーが使われる
  • WebRTCではICEの仕組みの中でSTUNが使われることが多い
  • STUNだけで必ずNAT越えできるわけではない

まとめ

STUNサーバーは、NAT越えを理解するうえで非常に重要な存在です。

NATの内側にいる端末は、自分のプライベートIPアドレスしか知らないことがあります。

しかし、P2P通信やWebRTCでは、相手と直接通信するために、

外から見た自分のIPアドレスとポート番号

を知る必要があります。

その情報を教えてくれるのがSTUNサーバーです。

ただし、STUNサーバーは通信を中継するサーバーではありません。

直接通信できる可能性を探るための補助役です。

直接通信できない場合には、TURNサーバーのような中継サーバーが必要になります。

最後に、STUNサーバーの役割をもう一度まとめると、次のとおりです。

端末がSTUNサーバーに問い合わせる
↓
STUNサーバーが外から見たIPアドレス・ポート番号を返す
↓
その情報を使って、相手との直接通信を試す
↓
直接通信できない場合はTURNサーバーなどを使う

STUNサーバーは、WebRTC、ビデオ通話、音声通話、オンラインゲーム、P2P通信など、リアルタイム通信を支える重要な仕組みです。

コメント

タイトルとURLをコピーしました