🧊 STUN vs TURN Server untuk WebRTC — Penjelasan Lengkap

WebRTC (Web Real-Time Communication) adalah teknologi yang memungkinkan komunikasi peer-to-peer langsung antar browser. Namun, salah satu tantangan terbesar dalam WebRTC adalah menghubungkan dua perangkat yang berada di balik NAT (Network Address Translation) atau firewall. Di sinilah peran STUN dan TURN server menjadi sangat penting.

Apa Itu STUN Server?

STUN (Session Traversal Utilities for NAT) adalah protokol yang membantu perangkat menemukan alamat IP publik dan port yang digunakan untuk komunikasi. Ketika dua perangkat ingin terhubung, mereka mengirim permintaan ke STUN server, dan server tersebut akan memberi tahu alamat publik mereka. Informasi ini kemudian dibagikan ke perangkat lain untuk memulai koneksi P2P.

STUN server biasanya gratis dan ringan. Contohnya: stun.l.google.com:19302 (milik Google).

Apa Itu TURN Server?

TURN (Traversal Using Relays around NAT) digunakan ketika koneksi langsung (via STUN) tidak memungkinkan — misalnya karena NAT simetris atau firewall yang sangat ketat. Dalam skenario ini, data tidak dikirim langsung antar perangkat, melainkan melalui server relay (TURN server) yang meneruskan data dari satu perangkat ke perangkat lain.

TURN server membutuhkan bandwidth dan biaya operasional yang lebih besar, tetapi sangat penting untuk koneksi yang stabil di jaringan yang kompleks.

Kapan Menggunakan STUN vs TURN?

Cara Kerja ICE (Interactive Connectivity Establishment)

ICE adalah framework yang digunakan WebRTC untuk menemukan jalur komunikasi terbaik. Prosesnya:

  1. Browser mengumpulkan semua kandidat alamat (IP lokal, IP publik dari STUN, dan relay dari TURN).
  2. Kandidat dikirim ke perangkat lain melalui signaling (misal Firebase atau MQTT).
  3. Kedua perangkat mencoba terhubung secara paralel — yang pertama berhasil akan digunakan.

ICE akan memprioritaskan koneksi langsung (P2P) karena lebih cepat dan murah. TURN hanya digunakan sebagai opsi terakhir.

Contoh Konfigurasi WebRTC dengan STUN/TURN

const configuration = {
  iceServers: [
    { urls: 'stun:stun.l.google.com:19302' },
    { urls: 'stun:stun1.l.google.com:19302' },
    { 
      urls: 'turn:turn.anydomain.com:3478',
      username: 'user',
      credential: 'password'
    }
  ]
};
const peerConnection = new RTCPeerConnection(configuration);

Troubleshooting Koneksi WebRTC

Kesimpulan

STUN dan TURN adalah komponen penting dalam WebRTC. STUN memungkinkan koneksi P2P langsung di sebagian besar kasus, sedangkan TURN menjadi "jalan darurat" untuk koneksi di jaringan yang rumit. Dengan memahami keduanya, lo bisa membangun aplikasi WebRTC yang lebih andal dan stabil.