TURN Server — adalah server dari protokol Traversal Using Relays around NAT yang mentransmisikan ulang traffic media antara dua peer ketika koneksi langsung P2P tidak memungkinkan. Menurut IETF RFC 5766, 2010, server TURN bertindak sebagai cadangan terakhir (fallback) dalam proses ICE WebRTC, memastikan koneksi terjamin bahkan dengan Symmetric NAT dan firewall korporat.
Poin Utama
TURN Server (Traversal Using Relays around NAT) — adalah layanan jaringan yang didefinisikan dalam RFC 5766 dan diperbarui dalam RFC 8656, yang mentransmisikan ulang traffic UDP dan TCP antara dua klien ketika koneksi langsung P2P tidak memungkinkan karena keterbatasan NAT atau firewall. Dalam arsitektur WebRTC, server TURN bertindak sebagai mekanisme cadangan terakhir, menjamin koneksi dalam kondisi jaringan apa pun.
Berbeda dengan STUN yang hanya memberi tahu klien alamat eksternalnya, server TURN secara aktif berpartisipasi dalam transmisi data. Setiap peer membuat koneksi dengan server TURN dan mengirim data medianya ke sana. Server TURN kemudian meneruskan data ini ke peer lain. Hasilnya, tidak ada koneksi langsung antar peer — semua traffic melewati server relai, yang menjamin pengiriman bahkan dalam keterbatasan NAT yang paling ketat.
TURN adalah perpanjangan dari protokol STUN. Pesan TURN menggunakan header 20-byte yang sama dan mekanisme atribut yang sama. Perbedaan utamanya adalah TURN mendefinisikan jenis pesan baru (Allocate, Refresh, Send, Data, CreatePermission, ChannelBind) dan atribut yang diperlukan untuk mengelola alokasi relai. Klien membuat alokasi di server TURN melalui pesan Allocate, menerima alamat transport relai (relayed transport address) dan menggunakannya untuk mengirim dan menerima data melalui server.
Server TURN bekerja berdasarkan urutan langkah berikut. Klien mengirim Allocate Request dengan otentikasi (username, credential). Server memeriksa kredensial dan membuat alokasi — ikatan sementara alamat relai (IP:port di server TURN) dengan klien. Server mengembalikan Allocate Response dengan relayed transport address — alamat yang akan digunakan peer lain untuk mengirim data ke klien ini melalui server TURN.
Setelah pembuatan alokasi, klien dapat mengirim data melalui server TURN menggunakan pesan Send Indication atau melalui saluran (ChannelBind). Saat menerima data dari klien, server TURN memeriksa izin (permissions) dan mentransmisikan ulang data ke peer tujuan. Untuk menerima data masuk, klien harus terlebih dahulu membuat izin untuk peer yang diharapkan datanya, jika tidak server TURN akan menolak paket masuk. Izin dibuat melalui pesan CreatePermission dengan menentukan alamat IP peer.
Alokasi di server TURN memiliki masa berlaku terbatas — secara default 10 menit. Klien harus secara periodik mengirim Refresh Request untuk memperpanjang alokasi. Masa berlaku ditentukan dalam detik di atribut LIFETIME. Jika tidak ada Refresh, server menghapus alokasi dan membebaskan alamat relai. Interval penyegaran yang disarankan adalah 5 menit (300 detik) untuk melindungi dari kehilangan paket Refresh.
Di WebRTC, server TURN dikonfigurasi melalui pengaturan RTCPeerConnection di array iceServers. Server TURN dapat menggunakan transport UDP, TCP, atau TLS. Untuk otentikasi biasanya digunakan kredensial sementara (TURN credentials), yang dihasilkan di server aplikasi dan terbatas waktu.
Mari kita lihat contoh konfigurasi server TURN di JavaScript dengan otentikasi melalui token HMAC-SHA1.
async function createPeerConnection(turnServerUrl) {
const credentials = await fetchTurnCredentials();
const config = {
iceServers: [
{
urls: "stun:stun.l.google.com:19302"
},
{
urls: turnServerUrl,
username: credentials.username,
credential: credentials.credential
}
],
iceTransportPolicy: "all"
};
return new RTCPeerConnection(config);
}
async function fetchTurnCredentials() {
const response = await fetch("/api/turn-credentials");
return response.json();
}
const turnUrl = "turn:turn.example.com:3478";
const pc = await createPeerConnection(turnUrl);
Dalam contoh ini, server TURN ditentukan bersama dengan server STUN dalam konfigurasi ICE terpadu. Proses ICE pertama-tama akan mencoba menggunakan kandidat host dan kandidat srflx yang diperoleh dari STUN. Jika koneksi langsung gagal, ICE secara otomatis beralih ke kandidat relai yang diperoleh dari server TURN. Parameter iceTransportPolicy: "all" mengizinkan kandidat relai — nilai alternatif "relay" melarang semua kandidat kecuali TURN, yang berguna untuk pengujian.
Untuk mencegah penggunaan tidak sah, server TURN memerlukan otentikasi. Pendekatan standar adalah menggunakan kredensial sementara (time-limited credentials), yang dihasilkan di server aplikasi menggunakan HMAC-SHA1. Server aplikasi mengenkripsi nama pengguna dengan kunci rahasia server TURN dan mengembalikan nama pengguna dan kredensial ke klien. Klien meneruskannya ke konfigurasi RTCPeerConnection, dan browser menggunakannya saat membuat alokasi di server TURN. Setelah kredensial kedaluwarsa, klien mendapatkan yang baru dari server aplikasi.
TURN dan STUN memecahkan tugas NAT traversal yang serupa, tetapi secara fundamental berbeda dalam mekanisme dan biaya. TURN mentransmisikan ulang traffic, bertindak sebagai perantara, sementara STUN hanya membantu menentukan alamat eksternal untuk koneksi langsung P2P. Pilihan di antara keduanya ditentukan oleh jenis NAT peer dan persyaratan kinerja.
| Kriteria | STUN | TURN |
|---|---|---|
| Mekanisme | Penentuan alamat eksternal | Transmisi ulang traffic |
| Koneksi | Langsung P2P | Melalui server relai |
| Latensi | Minimal (rute langsung) | Tambahan (melalui relai) |
| Beban server | Hanya permintaan awal | Transmisi ulang traffic terus-menerus |
| Biaya | Rendah (permintaan tunggal) | Tinggi (traffic server) |
| Kompatibilitas Symmetric NAT | Tidak | Ya |
| Bandwidth | Hanya batas saluran P2P | Batas saluran server |
Dalam praktiknya, server TURN hanya digunakan untuk koneksi di mana P2P tidak memungkinkan. Menurut data Google (statistik WebRTC, 2023), sekitar 15–20% dari semua koneksi WebRTC memerlukan transmisi ulang TURN. Sisanya 80–85% dibuat melalui STUN atau kandidat host lokal. Saat merancang aplikasi, anggaran untuk traffic TURN harus dialokasikan sebesar 15–20% dari total volume data media jika audiens mencakup pengguna dari jaringan korporat dan wilayah dengan keterbatasan NAT yang ketat.
Server TURN mengonsumsi sumber daya yang signifikan karena semua traffic media melewatinya. Setiap panggilan aktif dengan transmisi ulang TURN menggunakan bandwidth server yang sama dengan kapasitas total traffic media (aliran masuk + keluar). Untuk panggilan video berkualitas HD (720p), ini bisa mencapai 1,5–2,5 Mb/s per koneksi di setiap arah, atau 3–5 Mb/s total traffic melalui server TURN.
Ada beberapa opsi untuk menerapkan infrastruktur TURN. Server TURN publik gratis tidak direkomendasikan untuk produksi karena tidak ada jaminan kualitas dan keamanan. Penyedia komersial (Twilio Network Traversal Service, Xirsys, Metered) menawarkan TURN sebagai layanan dengan pembayaran per gigabyte traffic — biaya tipikal $0,005–0,02 per gigabyte. Implementasi sendiri berbasis coturn (server TURN open-source) memerlukan server dengan bandwidth yang memadai dan konfigurasi monitoring.
Saat memilih solusi untuk server TURN, pertimbangkan geografi pengguna, biaya traffic, dan persyaratan keamanan. Untuk aplikasi dengan ribuan panggilan simultan, self-hosted coturn di server dengan bandwidth lebar (1+ Gb/s) bisa lebih ekonomis daripada penyedia komersial. Untuk proyek kecil dengan puluhan pengguna, layanan TURN komersial lebih disukai karena tidak adanya biaya administrasi dan monitoring.
Pertanyaan Umum
Server TURN adalah perantara yang mentransmisikan data antar pengguna ketika mereka tidak dapat terhubung secara langsung. Jika dua komputer berada di belakang router yang tidak memungkinkan koneksi langsung, server TURN menerima data dari satu dan mengirimkannya ke yang lain.
Server TURN diperlukan ketika kedua peserta panggilan WebRTC berada di belakang Symmetric NAT atau firewall korporat yang memblokir traffic P2P. Dalam kasus seperti itu, STUN tidak dapat membantu dan proses ICE secara otomatis beralih ke kandidat relai yang diperoleh dari server TURN.
STUN hanya menunjukkan alamat eksternal komputer untuk koneksi langsung. TURN secara aktif mentransmisikan ulang traffic melalui dirinya sendiri. STUN tidak menimbulkan beban server, TURN mengonsumsi bandwidth. STUN hanya bekerja dengan jenis NAT tertentu, TURN selalu berfungsi tetapi lebih mahal.
Biaya server TURN tergantung pada penyedia dan volume traffic. Twilio mengenakan biaya sekitar $0,005–0,01 per GB traffic yang melewati TURN. Xirsys — mulai dari $0,007 per GB. Implementasi sendiri coturn memerlukan server dengan bandwidth minimal 100 Mb/s, yang biayanya tergantung pada penyedia hosting.
Server TURN sendiri dikonfigurasi menggunakan coturn (open-source). Instalasi meliputi konfigurasi port, otentikasi (shared secret), sertifikat TLS, dan firewall. File konfigurasi dasar berisi parameter listening-port, realm, user, dan fingerprint. Setelah konfigurasi, server ditentukan di iceServers WebRTC dengan prefiks turn: atau turns: untuk TLS.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga