اضبط خوادم STUN وTURN الخاصة بك لـ Discourse Voice

:warning: إذا كنت تستضيف خدمتك عبر منصتنا، فقد تم إعداد هذا مسبقًا على موقعك. هذا الدليل مخصص للمشرفين الذين يستضيفون Discourse بأنفسهم.

يستخدم Discourse Voice تقنية WebRTC للمكالمات الصوتية والمرئية. يأتي مزودًا بخوادم STUN عامة لمساعدة المشاركين على الاتصال مباشرة. يمكن للمشرفين استبدال هذه الخوادم وإضافة TURN لدعم الشبكات التي يفشل فيها الاتصال المباشر.

لخادم مخصص لمجتمعك، نوصي باستخدام TURN مع مصادقة السرية المشتركة (shared-secret) وإعداد STUN فارغ. هذا يوفر اكتشاف عنوان عام ومصدر احتياطي للتحويل (relay) دون توزيع كلمة مرور TURN دائمة.

ينطبق هذا الدليل على المكالمات بين الأقران (peer-to-peer) في Voice. تستخدم الغرف التي تعتمد على LiveKit إعدادات ICE/TURN الخاصة بـ LiveKit بدلاً من ذلك. تعرف على إعداد LiveKit لـ Voice.

ما الذي يفعله STUN و TURN؟

  • STUN يساعد المتصفح على اكتشاف عنوان IP ومنفذ عامين له، مما يتيح له محاولة اتصال مباشر.
  • TURN يعيد توجيه الوسائط (media) عندما لا يمكن إنشاء اتصال مباشر.

يعيد تخصيص TURN المصادق عليه أيضًا عنوان المتصفح العام. يمكن لـ WebRTC استخدام هذا كمرشح انعكاسي من الخادم (server-reflexive candidate)، مما يوفر فائدة اكتشاف العنوان التي يقدمها STUN دون الحاجة إلى خادم STUN منفصل. مواصفة TURN.

عند إعداد TURN مع السرية المشتركة، يسمح Voice بالاتصالات المباشرة والمحوّلة (relayed) حتى لو كان إعداد STUN فارغًا. إعداد خوادم TURN فقط لا يجبر كل مكالمة على المرور عبر المحوّل (relay). إعداد ICE لـ Voice.

1. تجهيز خادم TURN

يمكنك استخدام خدمة TURN مُدارة تدعم مصادقة السرية المشتركة عبر REST API لـ TURN، أو تشغيل coturn بنفسك.

لإعداد ذاتي الاستضافة، جهّز:

  • خادمًا له عنوان IP عام وبند عرض (bandwidth) كافٍ للمكالمات المحوّلة.
  • اسم نطاق (hostname) مثل turn.example.com، يشير مباشرة إلى ذلك الخادم.
  • وصول جدار الحماية (Firewall) لمستمع TURN ونطاق منصات UDP للتحويل.
  • شهادة صالحة إذا كنت تقدم TURN عبر TLS.

يتصل متصفحات المشاركين بـ TURN مباشرة. لا يمكن لوكيل عكسي HTTP عادي أو وكيل CDN نقل حركة TURN.

مثال على إعداد coturn

أنشئ سرًا عشوائيًا:

openssl rand -hex 32

احتفظ بالنتيجة سرية. ستدخل القيمة نفسها في coturn و Discourse.

على خادم له عنوان IP عام مُسند مباشرة، استخدم ما يلي كنقطة انطلاق في /etc/turnserver.conf:

listening-port=3478

fingerprint
realm=turn.example.com

use-auth-secret
static-auth-secret=REPLACE_WITH_YOUR_RANDOM_SECRET

# تعطيل طلبات STUN المستقلة.
# تخصيصات TURN المصادق عليها ما زالت تعيد عنوان العميل العام.
no-stun

min-port=49152
max-port=65535

no-multicast-peers

# يبدأ هذا المثال دون TLS.
no-tls
no-dtls

استبدل اسم النطاق والسر، وحافظ على سرية ملف الإعداد، وأعد تشغيل coturn. احذف أي إعدادات متضاربة مثل no-auth أو user= الثابتة. يفعّل وضع السرية المشتركة في Coturn آلية المصادقة التي يحتاجها داخليًا. مرجع إعداد Coturn.

اسمح بحركة الوارد إلى:

المنفذ البروتوكول الغرض
3478 UDP و TCP اتصالات المتصفح إلى TURN
49152–65535 UDP الوسائط المحوّلة

اسمح أيضًا بحركة الخاضج المقابلة. يجب أن يتطابق نطاق التحويل مع min-port و max-port.

إذا كان الخادم خلف NAT، قم بإعداد تعيين external-ip=PUBLIC_IP/PRIVATE_IP في coturn وتحويل منصات المستمع والتحويل. يجب أن تحتفظ منصات التحويل بأرقامها عبر NAT. خيارات نشر Coturn.

إضافة TLS للشبكات المقيدة

يوفر TURN عبر TLS خيار اتصال آخر للمشاركين الذين تحجب شبكاتهم UDP.

احذف no-tls وقم بإعداد:

tls-listening-port=5349
cert=/path/to/fullchain.pem
pkey=/path/to/privkey.pem

افتح 5349/TCP، وتأكد من أن coturn يمكنه قراءة الشهادة والمفتاح، وأعد تشغيله بعد تجديد الشهادات.

يمكنك استخدام 443/TCP بدلاً من ذلك إذا كان هذا المنفذ متاحًا على خادم TURN. قد يساعد هذا في الشبكات المقيدة، على الرغم من أن بعض الشبكات تفحص أيضًا حركة غير HTTP على المنفذ 443 وتحجبها. لا يزال نطاق UDP للتحويل مطلوبًا عندما تصل المتصفحات إلى TURN عبر TCP أو TLS. توثيق خادم Coturn.

2. إعداد Discourse

في الإدارة → الإعدادات، ابحث عن إعدادات Voice التالية:

الإعداد القيمة
voice_stun_servers فارغ — احذف الإدخالات الافتراضية
voice_turn_secret القيمة المستخدمة لـ static-auth-secret في coturn
voice_turn_secret_servers عناوين URI الخاصة بـ TURN الخاصة بك، مفصولة بـ |
voice_turn_servers فارغ
voice_turn_username فارغ
voice_turn_credential فارغ

بالنسبة للإعداد أعلاه، أدخل هذا في voice_turn_secret_servers:

turn:turn.example.com:3478?transport=udp|turn:turn.example.com:3478?transport=tcp

إذا فعّلت TLS، أضف نقطة النهاية الخاصة به:

turn:turn.example.com:3478?transport=udp|turn:turn.example.com:3478?transport=tcp|turns:turn.example.com:5349?transport=tcp

استخدم عناوين URI بصيغة turn: و turns:، دون //. اذكر فقط نقاط النهاية التي يدعمها خادمك فعليًا.

يستخدم قائمة voice_turn_secret_servers بيانات اعتماد مولدة من السرية المشتركة. تستخدم قائمة voice_turn_servers المنفصلة اسم مستخدم وكلمة مرور ثابتين. تعريفات إعدادات Voice.

احفظ الإعدادات، ثم اطلب من المشاركين مغادرة المكالمات والعودة إليها للحصول على الإعداد الجديد.

3. التحقق من الإعداد

اختبر مع مشاركين على شبكات مختلفة، مثل宽带 المنزل وبيانات الجوال. تأكد من عمل الصوت في كلا الاتجاهين، ثم اختبر الفيديو ومشاركة الشاشة.

في متصفحات Chromium، افتح chrome://webrtc-internals قبل الانضمام:

  • المرشح srflx يمثل عنوانًا عامًا مكتشفًا.
  • المرشح relay يمثل محوّل TURN متاحًا.
  • زوج المرشحين المختار يظهر الاتصال الذي ينقل الوسائط فعليًا.

نجاح مكالمة مباشرة لا يثبت عمل التحويل (relaying). اختبر أيضًا من شبكة تتطلب TURN، أو استخدم عميل اختبار WebRTC مع iceTransportPolicy: "relay" وبيانات اعتماد مؤقتة.

تحقق من سجلات coturn للتخصيصات المصادقة الناجحة. يجب ألا تحصل الطلبات بدون بيانات اعتماد صالحة على تخصيص تحويل. تحدي المصادقة الأولي 401 طبيعي؛ فشل المصادقة المتكرر يحتاج إلى تحقيق.

حافظ على الخادم مخصصًا لمجتمعك

تبقى السرية المشتركة على Discourse وخادم TURN. يتلقى المشاركون بيانات اعتماد مؤقتة بدلاً من ذلك. حاليًا، يولّد Voice بيانات اعتماد صالحة لإنشاء تخصيصات لمدة 12 ساعة؛ يمكن للتخصيص المنشأ أن يستمر طالما يتم تجديده. توليد بيانات اعتماد Voice.

يمنع هذا إنشاء محوّل عام مجهول، لكن بيانات اعتماد TURN ليست مرتبطة بأصل المتصفح (browser origin): يمكن للمشارك نسخ بياناته المؤقتة وإعادة استخدامها. للحد من سوء الاستخدام:

  • قيّد وصول Voice إلى المجموعات المقصودة.
  • راقب بند عرض التحويل وعدد التخصيصات.
  • اضبط حصص التخصيص وحدود بند العرض في coturn بما يناسب مجتمعك.
  • احجب وصول التحويل إلى الوجهات الخاصة، المحلية للروابط (link-local)، والوجهات الداخلية الأخرى القابلة للوصول من مضيف TURN.
  • حافظ على تحديث coturn وبدّل السرية المشتركة إذا تم كشفها.

استخدم سرًا مخصصًا لهذا النشر من Discourse. مع تفعيل no-stun، يتوقف الخادم أيضًا عن تقديم خدمة STUN المستقلة المجهولة. مصادقة Coturn وتحكمات الوصول.

بدائل

استبدال خوادم STUN العامة فقط

اضبط voice_stun_servers على عناوين URI الخاصة بـ STUN الخاصة بك، مفصولة بـ |:

stun:stun.example.com:3478

اترك إعدادات TURN فارغة إذا لم تكن بحاجة إلى تحويل. لا يمكن لـ STUN وحده جعل المكالمات تعمل على كل شبكة. خادم coturn مُعد بـ no-stun لا يمكنه تقديم هذا المنفذ.

استخدام TURN مع اسم مستخدم وكلمة مرور ثابتين

إذا لم يدعم مزودك المصادقة بالسرية المشتركة، قم بإعداد voice_turn_servers و voice_turn_username و voice_turn_credential. اترك إعدادات السرية المشتركة فارغة.

يتلقى المشاركون تلك البيانات الثابتة، مما يجعلها أسهل لإعادة الاستخدام خارج موقعك. أيضًا، يجبر Voice حاليًا اتصالات التحويل عندما يتم إعداد خوادم TURN ثابتة وقائمة STUN فارغة. فضّل المصادقة بالسرية المشتركة إذا كان مزودك يدعمها. إعداد ICE لـ Voice.

إعجابَين (2)