STUN Server — ay ang server ng Session Traversal Utilities for NAT (STUN) protocol, na nagpapahintulot sa isang client na matukoy ang kanyang panlabas na IP address at port, pati na rin ang uri ng Network Address Translation (NAT) na nasa likod niya. Ayon sa IETF RFC 5389, 2008, ang STUN ay isang mandatoryong bahagi ng imprastraktura ng WebRTC, na tinitiyak ang pagtatatag ng direktang peer-to-peer na koneksyon sa pagitan ng mga client sa likod ng NAT.
Mga Pangunahing Punto
STUN Server (Session Traversal Utilities for NAT) — ay isang serbisyo sa network na gumagana ayon sa protocol na tinukoy sa RFC 5389 at na-update sa RFC 8489. Ang pangunahing gawain ng STUN server ay magbigay sa client ng impormasyon tungkol sa kanyang sariling pampublikong IP address at port na nakikita mula sa panlabas na network, pati na rin matukoy ang uri ng NAT device sa pagitan ng client at internet.
Ang arkitektura ng STUN ay may dalawang bahagi: STUN client na naka-embed sa application (halimbawa, browser o native na WebRTC application) at STUN server na inilagay sa pampublikong network. Ang client ay nagpapadala ng STUN Binding Request sa server, na sa tugon ay nagpapahiwatig ng IP address at port ng pinagmulan ng request — iyon ay, ang mga pampublikong address ng client na nakikita ng server. Sa pamamagitan ng paghahambing ng mga data na ito sa mga lokal na address, matutukoy ng client kung anong uri ng NAT ang ginagamit sa kanyang network.
STUN ay gumagana sa pamamagitan ng UDP (port 3478 bilang default) o TCP (port 3478 o 5349 para sa TLS). Ang STUN message ay binubuo ng 20-byte na header at variable na bilang ng mga attribute. Ang header ay naglalaman ng uri ng mensahe (Binding Request, Binding Response, Binding Error Response), haba, at natatanging transaction identifier (96 bits) na nagpapahintulot sa pagtutugma ng mga request at response. Ang bawat Binding Response ay naglalaman ng attribute na XOR-MAPPED-ADDRESS — ang panlabas na address ng client, na naka-encode na may masking para sa proteksyon laban sa mga pag-atake batay sa pagharang ng STUN traffic.
Ang STUN server ay gumagana ayon sa simpleng request-response protocol. Ang client na nasa likod ng NAT ay bumubuo ng Binding Request at ipinapadala ito sa STUN server. Tinatanggap ng server ang packet, kinukuha mula sa UDP header ang source IP address at port ng nagpadala, pagkatapos ay bumubuo ng Binding Response sa pamamagitan ng pag-empake ng address na ito sa attribute na XOR-MAPPED-ADDRESS. Ang tugon ay ibinabalik sa source address ng request.
Tinatanggap ng client ang tugon at kinukuha ang XOR-MAPPED-ADDRESS, na naglalaman ng panlabas na IP address at port na itinalaga ng NAT device. Pagkatapos ay inihahambing ng client ang address na ito sa kanyang lokal (RFC 1919 — pribadong) address. Kung magkatugma ang mga address — ang client ay wala sa likod ng NAT. Kung magkaiba — ang client ay nasa likod ng NAT, at ang panlabas na address ay ginagamit bilang kandidato para sa ICE (Interactive Connectivity Establishment) sa WebRTC.
Ang STUN server ay nagbibigay-daan sa pagtukoy ng uri ng NAT sa pamamagitan ng isang serye ng mga test request. Ang client ay nagpapadala ng mga request na may iba't ibang flag (CHANGE-REQUEST) at sinusuri ang mga tugon. Ang buong cycle ng pagtuklas ay kinabibilangan ng pagpapadala ng mga request sa iba't ibang IP address at port ng STUN server. Kung ang server ay tumugon sa isang request na may binagong port — NAT ng uri Restricted Cone. Kung hindi tumugon sa request na may binagong port at IP — NAT ng uri Symmetric. Ang impormasyong ito ay kritikal para sa pagpili ng ICE strategy sa WebRTC.
Ang STUN server ay may kakayahang matukoy ang apat na pangunahing uri ng NAT, na ang bawat isa ay may iba't ibang epekto sa posibilidad ng pagtatatag ng P2P na koneksyon. Ang uri ng NAT ay tumutukoy kung ang STUN ay maaaring magbigay ng direktang koneksyon sa pagitan ng dalawang client. Depende sa uri ng NAT kung aling ICE candidate — host, server reflexive o relay — ang gagamitin para sa koneksyon.
| Uri ng NAT | Pag-uugali | Gumagana ang STUN | ICE Fallback |
|---|---|---|---|
| Full Cone | Kahit sinong panlabas na host ay maaaring magpadala ng packet sa client | Oo | Server Reflexive |
| Restricted Cone | Tanging mga host na pinadalhan ng client ng packets | Oo | Server Reflexive |
| Port Restricted | Tulad ng Restricted, ngunit nagfa-filter din ayon sa source port | Oo | Server Reflexive |
| Symmetric NAT | Ang panlabas na address ay natatangi para sa bawat pares ng host:port | Hindi | Relay (TURN) |
Symmetric NAT — ang tanging uri na hindi kayang hawakan ng STUN. Sa Symmetric NAT, ang bawat bagong request sa bagong target na host ay nakakakuha ng ibang panlabas na address (IP at/o port). Dahil ang STUN server ay nag-uulat ng address para sa koneksyon sa STUN server mismo, ang address na ito ay hindi magagamit para sa koneksyon sa ibang client. Sa mga ganitong kaso, sa WebRTC ay ginagamit ang TURN server para sa pag-relay ng trapiko. Ayon sa pananaliksik (Ford et al., RFC 3489, 2003), humigit-kumulang 8–10% ng lahat ng NAT device sa internet ay simetriko.
Ang STUN server ay isinasama sa WebRTC sa pamamagitan ng configuration ng RTCPeerConnection. Ang browser o native na application ay gumagamit ng STUN para sa pagkolekta ng mga ICE candidate, na pagkatapos ay ipinagpapalit sa pamamagitan ng Signaling Server. Sa configuration ng WebRTC, ang STUN server ay tinutukoy sa array na iceServers na may prefix na stun: para sa UDP o stuns: para sa TLS connection.
Tingnan natin ang isang halimbawa ng pag-configure ng STUN server sa JavaScript kapag gumagawa ng RTCPeerConnection para sa isang WebRTC application.
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("Kandidato sa ICE:", event.candidate.candidate);
}
};
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
Sa halimbawang ito, ginagamit ang mga pampublikong STUN server ng Google (stun.l.google.com:19302). Kapag gumagawa ng offer o answer, awtomatikong nagpapadala ang browser ng STUN Binding Request sa mga tinukoy na server, natatanggap ang panlabas na address (server reflexive candidate) at idinadagdag ito sa listahan ng mga ICE candidate. Pagkatapos makolekta ang lahat ng kandidato, ipinapadala sila sa malayong partner sa pamamagitan ng Signaling Server para subukang magtatag ng direktang P2P na koneksyon.
Sa proseso ng ICE, may tatlong uri ng kandidato: host (lokal na address), srflx (server reflexive — nakuha mula sa STUN) at relay (na-relay sa pamamagitan ng TURN). Tinitiyak ng STUN server ang paglitaw ng mga srflx na kandidato, na may mas mataas na priyoridad kaysa sa relay, dahil ang koneksyon sa pamamagitan ng STUN ay direkta at hindi nangangailangan ng relay. Sinusuri ng ICE process ang lahat ng kombinasyon ng mga kandidato (lokal at nakuha mula sa STUN) ng parehong partido, simula sa pinakamataas na priyoridad.
Ang STUN server ay may mga pangunahing limitasyon na nauugnay sa arkitektura ng protocol. Ang pangunahing limitasyon ay ang kawalan ng kakayahang gumana sa Symmetric NAT, kung saan ang bawat bagong request sa panlabas na host ay nakakakuha ng natatanging panlabas na port. Sa kasong ito, ang address na nakuha mula sa STUN server ay hindi maaaring gamitin para sa koneksyon sa ibang partner, dahil ang NAT ay lumikha ng binding para lamang sa komunikasyon sa STUN server mismo.
Ang pangalawang limitasyon ay nauugnay sa katotohanan na ang STUN ay hindi nagbibigay ng relay ng data. Kung ang direktang P2P na koneksyon ay imposible (parehong partido ay nasa likod ng Symmetric NAT), ang STUN ay hindi nagbibigay ng alternatibong landas para sa paghahatid ng data. Sa kasong ito, kinakailangan ang TURN server, na kumikilos bilang relay ng media traffic sa pagitan ng mga partido, tumatanggap ng data mula sa isang kalahok at ipinapadala ito sa isa pa sa pamamagitan ng kanyang pampublikong IP address.
Sa kabila ng mga limitasyon, ang STUN server ay nananatiling kritikal na bahagi ng imprastraktura ng WebRTC. Sa karamihan ng mga kaso (80–90%), ang direktang P2P na koneksyon ay maaaring maitatag sa tulong ng STUN, na nagpapahintulot na maiwasan ang mga gastos sa TURN relay at mabawasan ang latency ng paghahatid ng media data. Para sa mga pampublikong WebRTC application, inirerekomenda na gumamit ng kombinasyon ng STUN at TURN server na may automatic fallback para sa garantiya ng koneksyon sa lahat ng kondisyon ng network.
Mga Madalas Itanong
Ang STUN server — ay isang salamin sa internet na nagsasabi sa client ng kanyang panlabas na IP address. Kapag ang computer ay nasa likod ng router (NAT), hindi nito alam ang kanyang pampublikong address. Tinutulungan siya ng STUN server na malaman ito upang ang ibang mga computer ay direktang makakonekta.
Sa WebRTC, ang STUN server ay tinutukoy sa configuration ng RTCPeerConnection. Ang browser ay nagpapadala ng STUN request upang makuha ang panlabas na address ng kandidato (srflx). Ang kandidatong ito ay ipinapadala sa malayong partner sa pamamagitan ng Signaling Server, at sinusubukan ng ICE na magtatag ng direktang koneksyon sa pagitan nila.
STUN ay tumutulong na malaman ang panlabas na address para sa direktang P2P na koneksyon. TURN ay nagre-relay ng trapiko sa pamamagitan ng sarili nitong server kapag hindi posible ang P2P. Ang STUN ay isang salamin, ang TURN ay isang tagapamagitan. Ang TURN ay lumilikha ng karga sa server at nagdaragdag ng latency, kaya mas gusto ang STUN.
Ang Google ay nagbibigay ng mga libreng STUN server: stun.l.google.com:19302, stun1.l.google.com:19302. Ang Twilio ay nagbibigay din ng STUN + TURN na imprastraktura sa pamamagitan ng serbisyo Network Traversal Service. Para sa mga production application, mas mainam na gumamit ng sarili o komersyal na STUN/TURN server na may garantisadong availability.
Symmetric NAT ay lumilikha ng natatanging panlabas na port mapping para sa bawat pares ng lokal na address:panlabas na target na address. Ang address na natatanggap ng client mula sa STUN server ay nakatali sa koneksyon sa STUN server na ito. Kapag sinubukan ng ibang partner na gamitin ang address na ito, haharangin ng Symmetric NAT ang packet dahil iba ang port mapping para sa bagong target na address.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din