ستاسو WebRTC اپ په خپل Wi-Fi کار کوي او یوازې د هغه پېرودونکي لپاره ناکامېږي چې له هوټل زنګ وهي. د ملګري-ملګري رسنۍ د دواړو خواوو ترمنځ لارې ته اړتیا لري؛ کله چې دواړه د سخت NAT شاته وي، یا فایروال UDP وغورځوي، لار نشته او کال بس نه نښلي. هېڅوک تېروتنه نه ویني — یوازې نه ختمېدونکی «نښلول کېږي…».
TURN سرور همدې کالونو ته بدیله لار ده: دواړه خواوې خپلې رسنۍ ورته لېږي، او هغه یې ریلې کوي. که په یوه اپ کې ویډیو یا غږ اچوئ، د ټیم لپاره Matrix یا Jitsi چلوئ، یا د لوبې لپاره غږیز چټ جوړوئ، یو ته اړتیا لرئ. coturn معیاري خلاص سرچینې پلي کول دي، او سپک دي.
کوم پلان
TURN لږ CPU او حافظه لګوي. هغه څه چې کاروي یې بانډوېډ دی: هره ریلې شوې جریان دوه ځله له سرور تېرېږي، ننوتل او وتل. زموږ په پلانونو کې ټرافیک په 1 Gbit/s بې حده دی، نو پوښتنه دا ده چې په یو وخت کې څو ریلې شوي کالونه روان وي، نه دا چې څومره بیل به درته راشي.
| په یو وخت ریلې شوي کالونه | پلان |
|---|---|
| یو څو — یو ټیم، یو کوچنی اپ | Nano-IP: ۲ vCPU، ۱ GB، ۱۵ GB ($8/میاشت) |
| لسګونه | Micro-IP: ۲ vCPU، ۲ GB، ۲۵ GB ($10/میاشت) |
| ډېر، یا TURN د اپ سرور ترڅنګ | Small-IP: ۴ vCPU، ۴ GB، ۳۵ 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" # ستاسو بیک اېنډ دې ارزښت ته اړتیا لري
systemctl restart coturn
ufw allow 22/tcp && ufw allow 3478 && ufw allow 49152:65535/udp && ufw enable
کرښې denied-peer-ip مه پرېږدئ. له دوی پرته هر څوک چې باوري پېژندنه ولري ستاسو له ریلې څخه شخصي پتو ته رسېدای شي — حتی د سرور د خپل داخلي اړخ خدمتونو ته. موږ وکتل: د دې کرښو سره شخصي پتې ته ریلې د «403 Forbidden IP» سره ردېږي.
پېژندنه چې پای ته رسېږي
د use-auth-secret سره coturn داسې کارن نوم مني چې د پای وخت پکې وي، او داسې پټنوم چې د هغه HMAC وي. دا ستاسو بکاینډ جوړوي؛ راز هېڅکله د سرور اړخ نه پرېږدي. په Node.js کې:
const crypto = require("crypto");
// د TURN لپاره لنډمهاله کارننوم/پټنوم (د TURN REST API طرحه چې coturn یې د use-auth-secret له لارې پوهېږي).
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")));
په براوزر کې له بکاینډ څخه نوې جوړه وغواړئ او 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 کاندیدان ترلاسه کړل؛ د خراب پټنوم سره یو هم نه. که غواړئ خپل ترتیب همداسې وازمویئ، دا انتخاب د یوې شېبې لپاره فعال کړئ — هر کال د 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
لست urls ته turns:turn.example.com:5349?transport=tcp زیات کړئ. سندونه لنډمهاله دي، نو کاپي کول د certbot په deploy hook کې کېږدئ — که نه نو TLS به په لومړي نوي کولو کې په چوپتیا مات شي.
د پوهېدو وړ
- TURN خراب اتصال ښه نه کوي. یو ګام زیاتوي، نو سرور هغو خلکو ته نږدې کېږدئ چې ورته اړتیا لري.
- که SFU چلوئ — لکه د Jitsi videobridge — هغه جلا برخه ده. TURN له هغو پیرودونکو سره مرسته کوي چې مستقیم ورته نشي رسېدای.
- ټول امنیتي ماډل همدا راز دی. له فرنټاینډ یې لرې وساتئ، او که کله هم ووت، بدل یې کړئ.
اړوند
- د Jitsi Meet لپاره VPS: په خپل سرور ویډیو کالونه
- خپل Matrix Synapse: د Matrix کالونه هم TURN سرور ته اړتیا لري
- د خپل IP پر ویب سایټ لپاره VPS: هغه اپ چې پېژندنه ورکوي
- د ufw فایروال څنګه تنظیم کړو
تبصرې
لا تبصرې نشته. لومړی اوسئ.