−25%

በWindows ዓመታዊ ክፍያ ላይ፣ እስከ ኦክቶበር 31። ዕቅዶችን ይመልከቱ

EQVPS
ጀምር

ለWebRTC የTURN ሰርቨር (coturn) VPS

ከጥብቅ NAT ጀርባ የሚወድቁ ጥሪዎች TURN relay ያስፈልጋቸዋል። የራሱ IPv4 ባለው ሰርቨር ላይ coturn፦ ፖርቶች፣ ጊዜያዊ ምስክርነቶች፣ የተፈተነ ውቅረትና ዕቅድ።

የ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 ያርቁት፣ መቼም ቢወጣ ይቀይሩት።

ተዛማጅ

ለማሰማራት ዝግጁ ኖት? በክሪፕቶ ይክፈሉ፣ KYC የለም — በአንድ ደቂቃ ገደማ ቀጥታ።

አሁን ያሰማሩ →

FAQ

የWebRTC ጥሪዎች ለምን TURN ሰርቨር ያስፈልጋቸዋል?

WebRTC ተሳታፊዎችን በቀጥታ ለማገናኘት ይሞክራል፣ ብዙ ጊዜም ይሳካለታል። ሁለቱም ወገኖች ከsymmetric NAT ወይም UDPን ከሚጥል ፋየርዎል ጀርባ ሲሆኑ — የሆቴል Wi-Fi፣ የቢሮ አውታረ መረቦች፣ አንዳንድ የሞባይል ኦፕሬተሮች — ቀጥተኛ መንገድ የለም፣ ጥሪውም በዝምታ ይወድቃል። TURN ሰርቨር ሚዲያውን የሚያስተላልፈው ለእነዚህ ጥሪዎች ነው፤ በብዛት የሚጠቀሰው ድርሻ ከአሥር ጥሪዎች አንድ ገደማ ነው።

TURN በNAT ዕቅድ ላይ ሊሠራ ይችላል?

አይችልም። ደንበኞች ወደ UDP እና TCP 3478 እና ወደ relay ፖርት ክልል ይገናኛሉ፣ የNAT ዕቅድ ደግሞ ከውጭ የሚቀበለው የእርስዎን SSH ፖርት ብቻ ነው። የራሱ IPv4 ያለው ዕቅድ ያስፈልግዎታል።

ምን ያህል የመተላለፊያ ይዘት ይጠቀማል?

እያንዳንዱ የሚተላለፍ ዥረት በሰርቨሩ በኩል ሁለት ጊዜ ያልፋል — ከአንዱ ወገን ይገባል፣ ወደ ሌላው ይወጣል። በእያንዳንዱ አቅጣጫ 1–2 Mbit/s ያለው የአንድ ለአንድ የቪዲዮ ጥሪ በሰርቨሩ ላይ ጥቂት Mbit/s ነው። CPU እና RAM እምብዛም አያስተውሉም፤ እውነተኛው ጣሪያ የ1 Gbit/s ፖርቱ ነው።

በመተግበሪያው ውስጥ ቋሚ የተጠቃሚ ስምና የይለፍ ቃል ለምን አላስቀምጥም?

ምክንያቱም በአሳሹ JavaScript ውስጥ ያለው ሁሉ ይፋ ነው፣ የይለፍ ቃሉ የታወቀ TURN ሰርቨር ደግሞ ለመላው ኢንተርኔት ነፃ relay ነው። በuse-auth-secret የእርስዎ backend አሳሹ ፈጽሞ በማያየው ሚስጥር የተፈረሙ፣ ጊዜያቸው የሚያልፍ ምስክርነቶችን ይሰጣል።

በፖርት 5349 ላይ TLS ያስፈልገኛል?

UDPን በሚዘጉና በተራ TCP ላይ ጥብቅ በሆኑ አውታረ መረቦች ይረዳል። ተራው TURN ከሠራ በኋላ ያክሉት፦ ለTURN የአስተናጋጅ ስም የምስክር ወረቀት ለcoturn ይስጡና 5349/tcpን ይክፈቱ። relayን በTLS በኩልም ፈትነነዋል።

አስተያየቶች

እስካሁን አስተያየቶች የሉም። መጀመሪያ ይሁኑ።

አስተያየት ይተዉ

አስተያየቶች ከመታየታቸው በፊት ይጣራሉ።