STUN Server — adalah server dari protokol Session Traversal Utilities for NAT (STUN), yang memungkinkan klien menentukan alamat IP eksternal dan port-nya sendiri, serta jenis Network Address Translation (NAT) di belakangnya. Menurut IETF RFC 5389, 2008, STUN adalah komponen wajib infrastruktur WebRTC yang memastikan pembuatan koneksi peer-to-peer langsung antara klien di belakang NAT.
Poin Utama
STUN Server (Session Traversal Utilities for NAT) — adalah layanan jaringan yang beroperasi berdasarkan protokol yang didefinisikan dalam RFC 5389 dan diperbarui dalam RFC 8489. Tugas utama server STUN adalah memberikan informasi kepada klien tentang alamat IP publik dan port-nya sendiri yang terlihat dari jaringan eksternal, serta menentukan jenis perangkat NAT antara klien dan internet.
Arsitektur STUN mencakup dua komponen: klien STUN yang tertanam dalam aplikasi (misalnya, browser atau aplikasi WebRTC native) dan server STUN yang ditempatkan di jaringan publik. Klien mengirim STUN Binding Request ke server, yang dalam responsnya menunjukkan alamat IP dan port sumber permintaan — yaitu alamat publik klien yang dilihat oleh server. Dengan membandingkan data ini dengan alamat lokal, klien dapat menentukan jenis NAT apa yang digunakan di jaringannya.
STUN bekerja melalui UDP (port 3478 secara default) atau TCP (port 3478 atau 5349 untuk TLS). Pesan STUN terdiri dari header 20-byte dan sejumlah atribut yang bervariasi. Header berisi jenis pesan (Binding Request, Binding Response, Binding Error Response), panjang, dan pengidentifikasi transaksi unik (96 bit) yang memungkinkan pencocokan permintaan dan respons. Setiap Binding Response berisi atribut XOR-MAPPED-ADDRESS — alamat eksternal klien, yang dikodekan dengan masking untuk melindungi dari serangan berdasarkan penyadapan lalu lintas STUN.
Server STUN bekerja berdasarkan protokol permintaan-respons sederhana. Klien yang berada di belakang NAT membentuk Binding Request dan mengirimkannya ke server STUN. Server menerima paket, mengekstrak dari header UDP alamat IP sumber dan port pengirim, kemudian membentuk Binding Response dengan mengemas alamat ini ke dalam atribut XOR-MAPPED-ADDRESS. Respons dikirim kembali ke alamat sumber permintaan.
Klien menerima respons dan mengekstrak XOR-MAPPED-ADDRESS, yang berisi alamat IP eksternal dan port yang ditetapkan oleh perangkat NAT. Kemudian klien membandingkan alamat ini dengan alamat lokalnya (RFC 1919 — privat). Jika alamat cocok — klien tidak berada di belakang NAT. Jika berbeda — klien berada di belakang NAT, dan alamat eksternal digunakan sebagai kandidat untuk ICE (Interactive Connectivity Establishment) di WebRTC.
Server STUN memungkinkan penentuan jenis NAT melalui serangkaian permintaan uji. Klien mengirim permintaan dengan berbagai flag (CHANGE-REQUEST) dan menganalisis respons. Siklus deteksi lengkap mencakup pengiriman permintaan ke berbagai alamat IP dan port server STUN. Jika server merespons permintaan dengan port yang diubah — NAT jenis Restricted Cone. Jika tidak merespons permintaan dengan port dan IP yang diubah — NAT jenis Symmetric. Informasi ini sangat penting untuk pemilihan strategi ICE di WebRTC.
Server STUN mampu menentukan empat jenis utama NAT, yang masing-masing mempengaruhi kemungkinan pembentukan koneksi P2P secara berbeda. Jenis NAT menentukan apakah STUN dapat menyediakan koneksi langsung antara dua klien. Dari jenis NAT tergantung kandidat ICE mana — host, server reflexive, atau relay — yang akan digunakan untuk koneksi.
| Jenis NAT | Perilaku | STUN berfungsi | ICE Fallback |
|---|---|---|---|
| Full Cone | Host eksternal mana pun dapat mengirim paket ke klien | Ya | Server Reflexive |
| Restricted Cone | Hanya host yang pernah dikirimi paket oleh klien | Ya | Server Reflexive |
| Port Restricted | Seperti Restricted, tetapi juga memfilter berdasarkan port sumber | Ya | Server Reflexive |
| Symmetric NAT | Alamat eksternal unik untuk setiap pasangan host:port | Tidak | Relay (TURN) |
Symmetric NAT — satu-satunya jenis yang tidak dapat diatasi oleh STUN. Pada Symmetric NAT, setiap permintaan baru ke host tujuan baru mendapatkan alamat eksternal yang berbeda (IP dan/atau port). Karena server STUN melaporkan alamat untuk koneksi dengan server STUN itu sendiri, alamat ini tidak dapat digunakan untuk koneksi dengan klien lain. Dalam kasus seperti itu, di WebRTC digunakan server TURN untuk meneruskan lalu lintas. Menurut penelitian (Ford et al., RFC 3489, 2003), sekitar 8–10% dari semua perangkat NAT di internet bersifat simetris.
Server STUN diintegrasikan ke dalam WebRTC melalui konfigurasi RTCPeerConnection. Browser atau aplikasi native menggunakan STUN untuk mengumpulkan kandidat ICE, yang kemudian dipertukarkan melalui Signaling Server. Dalam konfigurasi WebRTC, server STUN ditentukan dalam array iceServers dengan awalan stun: untuk UDP atau stuns: untuk koneksi TLS.
Mari kita lihat contoh konfigurasi server STUN di JavaScript saat membuat RTCPeerConnection untuk aplikasi WebRTC.
const config = {
iceServers: [
{
urls: "stun:stun.l.google.com:19302"
},
{
urls: "stun:stun1.l.google.com:19302"
}
]
};
const pc = new RTCPeerConnection(config);
pc.onicecandidate = (event) => {
if (event.candidate) {
console.log("Kandidat ICE:", event.candidate.candidate);
}
};
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
Dalam contoh ini, server STUN publik Google (stun.l.google.com:19302) digunakan. Saat membuat offer atau answer, browser secara otomatis mengirim STUN Binding Request ke server yang ditentukan, menerima alamat eksternal (server reflexive candidate) dan menambahkannya ke daftar kandidat ICE. Setelah semua kandidat terkumpul, mereka dikirim ke mitra jarak jauh melalui Signaling Server untuk mencoba membuat koneksi P2P langsung.
Dalam proses ICE ada tiga jenis kandidat: host (alamat lokal), srflx (server reflexive — diperoleh dari STUN) dan relay (diteruskan melalui TURN). Server STUN memastikan munculnya kandidat srflx, yang memiliki prioritas lebih tinggi daripada relay, karena koneksi melalui STUN bersifat langsung dan tidak memerlukan penerusan. Proses ICE memeriksa semua kombinasi kandidat (lokal dan diperoleh dari STUN) dari kedua pihak, dimulai dari prioritas tertinggi.
Server STUN memiliki keterbatasan fundamental terkait arsitektur protokol. Keterbatasan utama adalah ketidakmampuan bekerja dengan Symmetric NAT, di mana setiap permintaan baru ke host eksternal mendapatkan port eksternal yang unik. Dalam hal ini, alamat yang diperoleh dari server STUN tidak dapat digunakan untuk koneksi dengan mitra lain, karena NAT telah membuat ikatan hanya untuk komunikasi dengan server STUN itu sendiri.
Keterbatasan kedua terkait dengan fakta bahwa STUN tidak menyediakan penerusan data. Jika koneksi P2P langsung tidak memungkinkan (kedua pihak berada di belakang Symmetric NAT), STUN tidak menyediakan jalur alternatif untuk transmisi data. Dalam hal ini diperlukan server TURN, yang bertindak sebagai penerus lalu lintas media antara pihak, menerima data dari satu peserta dan mengirimkannya ke peserta lain melalui alamat IP publiknya.
Meskipun memiliki keterbatasan, server STUN tetap menjadi komponen penting infrastruktur WebRTC. Dalam sebagian besar kasus (80–90%), koneksi P2P langsung dapat dibuat dengan bantuan STUN, yang memungkinkan menghindari biaya penerusan TURN dan mengurangi latensi transmisi data media. Untuk aplikasi WebRTC publik, disarankan menggunakan kombinasi server STUN dan TURN dengan fallback otomatis untuk menjamin koneksi dalam segala kondisi jaringan.
Pertanyaan yang Sering Diajukan
Server STUN — adalah cermin di internet yang memberi tahu klien alamat IP eksternalnya. Ketika komputer berada di belakang router (NAT), ia tidak mengetahui alamat publiknya. Server STUN membantu mengetahuinya sehingga komputer lain dapat terhubung secara langsung.
Di WebRTC, server STUN ditentukan dalam konfigurasi RTCPeerConnection. Browser mengirim permintaan STUN untuk mendapatkan alamat eksternal kandidat (srflx). Kandidat ini diteruskan ke mitra jarak jauh melalui Signaling Server, dan ICE mencoba membuat koneksi langsung di antara mereka.
STUN membantu mengetahui alamat eksternal untuk koneksi P2P langsung. TURN meneruskan lalu lintas melalui server sendiri ketika P2P tidak memungkinkan. STUN adalah cermin, TURN adalah perantara. TURN membebani server dan menambah latensi, oleh karena itu STUN lebih disukai.
Google menyediakan server STUN gratis: stun.l.google.com:19302, stun1.l.google.com:19302. Twilio juga menyediakan infrastruktur STUN + TURN melalui layanan Network Traversal Service. Untuk aplikasi produksi, lebih baik menggunakan server STUN/TURN sendiri atau komersial dengan ketersediaan terjamin.
Symmetric NAT membuat pemetaan port eksternal yang unik untuk setiap pasangan alamat lokal:alamat tujuan eksternal. Alamat yang diterima klien dari server STUN terikat pada koneksi dengan server STUN ini. Ketika mitra lain mencoba menggunakan alamat ini, Symmetric NAT memblokir paket karena pemetaan port berbeda untuk alamat tujuan baru.
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