የWebRTC መተግበሪያዎ በእርስዎ Wi-Fi ላይ ይሠራል፣ ከሆቴል ለሚደውለው ያ አንድ ደንበኛ ግን ይወድቃል። የአቻ ለአቻ ሚዲያ በሁለቱ ወገኖች መካከል መንገድ ያስፈልገዋል፤ ሁለቱም ከጥብቅ NAT ጀርባ ሲሆኑ፣ ወይም ፋየርዎል UDPን ሲጥል፣ መንገድ የለም፣ ጥሪውም በቀላሉ አይገናኝም። ማንም ስህተት አያይም — ማለቂያ የሌለው «በመገናኘት ላይ…» ብቻ።
TURN ሰርቨር ለእነዚህ ጥሪዎች የመጠባበቂያ መንገድ ነው፦ ሁለቱም ወገኖች ሚዲያቸውን ወደ እሱ ይልካሉ፣ እሱም ያስተላልፋል። በመተግበሪያ ውስጥ ቪዲዮ ወይም ድምፅ እያስገቡ ከሆነ፣ ለቡድን Matrix ወይም Jitsi እያሄዱ ከሆነ፣ ወይም ለጨዋታ የድምፅ ውይይት እየሠሩ ከሆነ አንድ ያስፈልግዎታል። coturn መደበኛው የክፍት ምንጭ ትግበራ ሲሆን ቀላል ነው።
የትኛው ዕቅድ
TURN አነስተኛ CPU እና ማህደረ ትውስታ ይጠቀማል። የሚጠቀመው የመተላለፊያ ይዘት ነው፦ እያንዳንዱ የሚተላለፍ ዥረት በሰርቨሩ በኩል ሁለት ጊዜ ያልፋል፣ ሲገባና ሲወጣ። በዕቅዶቻችን ላይ ትራፊክ በ1 Gbit/s ያልተገደበ ስለሆነ፣ ጥያቄው ስንት የሚተላለፉ ጥሪዎች በአንድ ጊዜ እንደሚሠሩ እንጂ ምን ያህል እንደሚከፍሉ አይደለም።
| በአንድ ጊዜ የሚተላለፉ ጥሪዎች | ዕቅድ |
|---|---|
| ጥቂት — አንድ ቡድን፣ ትንሽ መተግበሪያ | Nano-IP፦ 2 vCPU፣ 1 GB፣ 15 GB ($8/ወር) |
| በደርዘኖች | Micro-IP፦ 2 vCPU፣ 2 GB፣ 25 GB ($10/ወር) |
| ከዚያ በላይ፣ ወይም TURN ከመተግበሪያ ሰርቨሩ አጠገብ | Small-IP፦ 4 vCPU፣ 4 GB፣ 35 GB ($16/ወር) |
የራሱ IPv4 ያለው ዕቅድ መሆን አለበት — TURN ሙሉ በሙሉ በብዙ ፖርቶች ላይ ስለሚገቡ ግንኙነቶች ነው፣ የNAT ዕቅዶች ደግሞ ከውጭ SSHን ብቻ ይቀበላሉ። በእኛ የተለየ IP ዕቅዶች ላይ ይፋዊው አድራሻ በቀጥታ በሰርቨሩ በይነገጽ ላይ ስላለ coturn ያለ external-ip መስመር ያገኘዋል። ሰርቨሩን ለተጠቃሚዎችዎ ቅርብ ያድርጉ፦ ጀርመን ወይም ፊንላንድ፣ መገኘቱ በትዕዛዝ ጊዜ ይታያል። ለእርስዎ አስፈላጊ ከሆነ በክሪፕቶ ክፍያ፣ ያለ KYC።
የሚከፈቱ ፖርቶች፦ 3478 UDP እና TCP፣ ለሚተላለፈው ሚዲያ 49152–65535 UDP፣ TLS ካከሉ ደግሞ 5349 TCP።
ጭነትና ውቅረት
በUbuntu 24.04 ወይም Debian 12 ላይ እንደ root፦
apt install -y coturn
ip -4 addr # ይፋዊ IPዎ በኢንተርፌሱ ላይ መታየት አለበት
ውቅረቱን በአዲስ የጋራ ሚስጥር ይጻፉ፦
SECRET=$(openssl rand -hex 32)
cat > /etc/turnserver.conf <<EOF
listening-port=3478
fingerprint
use-auth-secret
static-auth-secret=$SECRET
realm=turn.example.com
min-port=49152
max-port=65535
no-cli
no-multicast-peers
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.168.0.0-192.168.255.255
EOF
echo "$SECRET" # ይህ እሴት ለbackendዎ ያስፈልጋል
systemctl restart coturn
ufw allow 22/tcp && ufw allow 3478 && ufw allow 49152:65535/udp && ufw enable
የdenied-peer-ip መስመሮችን አይዝለሉ። ያለ እነሱ ትክክለኛ ምስክርነት ያለው ማንኛውም ሰው relayዎን ተጠቅሞ የግል አድራሻዎችን መድረስ ይችላል — በሰርቨሩ ውስጣዊ ወገን ያሉ አገልግሎቶችን ጭምር። ፈትሸናል፦ በእነዚህ መስመሮች ወደ የግል አድራሻ የሚደረግ relay በ«403 Forbidden IP» ይከለከላል።
ጊዜያቸው የሚያልፍ ምስክርነቶች
በuse-auth-secret፣ coturn የማብቂያ ጊዜ የያዘ የተጠቃሚ ስምና የእሱ HMAC የሆነ የይለፍ ቃል ይቀበላል። የሚያመነጫቸው backendዎ ነው፤ ሚስጥሩ ከሰርቨሩ ወገን ፈጽሞ አይወጣም። በNode.js፦
const crypto = require("crypto");
// ጊዜያዊ የTURN የተጠቃሚ ስም/የይለፍ ቃል (coturn በuse-auth-secret የሚረዳው የTURN REST API ዘዴ)።
function turnCredentials(secret, user, ttlSeconds = 3600) {
const username = `${Math.floor(Date.now() / 1000) + ttlSeconds}:${user}`;
const credential = crypto.createHmac("sha1", secret).update(username).digest("base64");
return { username, credential };
}
console.log(JSON.stringify(turnCredentials(process.env.TURN_SECRET, "alice")));
በአሳሹ ውስጥ ከbackendዎ አዲስ ጥንድ ይጠይቁና ለRTCPeerConnection ይስጡት፦
const { username, credential } = await fetch("/api/turn-credentials").then((r) => r.json());
const pc = new RTCPeerConnection({
iceServers: [
{ urls: "stun:turn.example.com:3478" },
{
urls: ["turn:turn.example.com:3478?transport=udp", "turn:turn.example.com:3478?transport=tcp"],
username,
credential,
},
],
});
ይፈትኑት
ከሰርቨሩ፣ በዚያው ዘዴ opensslን በመጠቀም (ከNode.js ኮድ ጋር በትክክል አንድ ዓይነት የይለፍ ቃል ያወጣል — አነጻጽረናል)፦
U="$(( $(date +%s) + 3600 )):test"
P=$(echo -n "$U" | openssl dgst -binary -sha1 -hmac "$SECRET" | base64)
turnutils_uclient -y -n 10 -u "$U" -w "$P" YOUR_SERVER_IP
በመጨረሻ «Total lost packets 0» ማየት ይፈልጋሉ። በተሳሳተ የይለፍ ቃል ደንበኛው በ«Cannot complete Allocation» ይቆማል — ይህ ሰርቨሩ ሥራውን እየሠራ ነው።
ከእውነተኛ Chromiumም ፈትሸናል፦ በiceTransportPolicy: "relay" እና በአዲስ ምስክርነቶች አሳሹ ከሰርቨሩ relay candidates አግኝቷል፤ በተሳሳተ የይለፍ ቃል አንድም አላገኘም። የራስዎን አወቃቀር በተመሳሳይ መንገድ መፈተን ከፈለጉ ይህን አማራጭ ለአፍታ ያብሩ — እያንዳንዱን ጥሪ በTURN በኩል እንዲያልፍ ያስገድዳል።
TLS፣ ካስፈለገ
አንዳንድ አውታረ መረቦች UDPን ይዘጋሉ፣ በተራ TCP ላይም ይመርጣሉ፤ በTLS ላይ ያለ TURN ከእነሱ የበለጡትን ያልፋል። ለturn.example.com የምስክር ወረቀት ያግኙ (certbot ይበቃል)። ፋይሎቹ በroot ብቻ ይነበባሉ፣ coturn ግን እንደ turnserver ተጠቃሚ ይሠራል፤ ስለዚህ ለcoturn የራሱን ቅጂ ይስጡት፦
mkdir -p /etc/coturn
cp /etc/letsencrypt/live/turn.example.com/fullchain.pem /etc/letsencrypt/live/turn.example.com/privkey.pem /etc/coturn/
chown turnserver: /etc/coturn/*.pem && chmod 640 /etc/coturn/privkey.pem
cat >> /etc/turnserver.conf <<'EOF'
tls-listening-port=5349
cert=/etc/coturn/fullchain.pem
pkey=/etc/coturn/privkey.pem
EOF
systemctl restart coturn && ufw allow 5349/tcp
turns:turn.example.com:5349?transport=tcpን በurls ዝርዝር ውስጥ ያክሉ። የምስክር ወረቀቶች አጭር ዕድሜ ስላላቸው ቅጂውን በcertbot deploy hook ውስጥ ያስቀምጡ — አለበለዚያ TLS በመጀመሪያው እድሳት በጸጥታ ይሰበራል።
ማወቅ የሚገባ
- TURN መጥፎ ግንኙነትን ጥሩ አያደርግም። አንድ hop ይጨምራል፣ ስለዚህ ሰርቨሩን ለሚያስፈልጋቸው ሰዎች ቅርብ ያድርጉት።
- SFU — ለምሳሌ የJitsi videobridge — ካሄዱ፣ ያ የተለየ ክፍል ነው። TURN በቀጥታ ሊደርሱበት የማይችሉ ደንበኞችን ይረዳል።
- መላው የደህንነት ሞዴል ሚስጥሩ ነው። ከfrontend ያርቁት፣ መቼም ቢወጣ ይቀይሩት።
ተዛማጅ
- ለJitsi Meet VPS፦ በራስዎ ሰርቨር የቪዲዮ ጥሪዎች
- የራስዎ Matrix Synapse፦ የMatrix ጥሪዎችም TURN ሰርቨር ያስፈልጋቸዋል
- በራሱ IP ላይ ላለ ድረ ገጽ VPS፦ ምስክርነቶቹን የሚሰጠው መተግበሪያ
- የufw ፋየርዎልን እንዴት ማዋቀር እንደሚቻል
አስተያየቶች
እስካሁን አስተያየቶች የሉም። መጀመሪያ ይሁኑ።