قم بتكوين خوادم STUN وTURN الخاصة بك لـ Discourse Live

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

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

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

ينطبق هذا الدليل على مكالمات نظير إلى نظير في Live. تستخدم الغرف التي تستخدم LiveKit إعدادات ICE/TURN الخاصة بها بدلاً من ذلك. تعرّف على إعدادات LiveKit في Live.

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

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

يمكن للمتصفح الذي يعرف عنوانه العام أن يقترحه كـ مرشح srflx (انعكاس الخادم)، وهذا هو ما يجعل الاتصالات المباشرة عبر NAT في المنازل والمكاتب ممكنة. بدونه، تنتقل معظم المكالمات إلى إعادة التوجيه عبر TURN، مما يزيد من زمن الاستهلاك وعرض النطاق الترددي لإعادة التوجيه.

يجب أن يبقى STUN مفتوحًا حتى عند تشغيل TURN. يحتوي استجابة تخصيص TURN أيضًا على عنوان المتصفح العام، لكن بعض المتصفحات فقط (مثل Firefox) تستخدمه كمرشح. تستخدم متصفحات Chromium و Safari STUN منفصل لطلب Binding للتعرف على عنوانها العام، ولا ترسل المتصفحات أبدًا بيانات اعتماد مع طلبات Binding. إذا قام الخادم بتعطيل STUN (no-stun) أو طلب مصادقة له (secure-stun)، فلن تحصل هذه المتصفحات على مرشح srflx وستتم إعادة توجيه كل مكالمة تنضم إليها.

عند إعداد TURN بمفتاح سري مشترك، يسمح Live بالاتصالات المباشرة وإعادة التوجيه معًا. لا يجبر إعداد TURN جميع المكالمات على المرور عبر إعادة التوجيه. إعدادات ICE في Live.

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

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

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

  • خادمًا بعنوان IP عام وعرض نطاق ترددي كافٍ للمكالمات المعاد توجيهها.
  • اسم مضيف مثل turn.example.com، يشير مباشرة إلى ذلك الخادم.
  • وصول جدار الحماية لمنفذ مستمع 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

# لا تضف no-stun أو secure-stun: ترسل المتصفحات طلبات STUN Binding
# بدون بيانات اعتماد، وتعتمد العديد منها لاكتشاف عنوانها العام.

min-port=49152
max-port=65535

no-multicast-peers

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

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

يُبلغ STUN المجهول فقط العميل بعنوانه الخاص مرة أخرى له؛ ولا يمكنه إعادة توجيه حركة المرور، لذا فهو لا يحوّل خادمك إلى خادم إعادة توجيه مفتوح. تحافظ الإصدارات الحديثة من coturn على سمات الاستجابة الاختيارية RFC 5780 و MAPPED-ADDRESS معطلة افتراضيًا، مما يبقي استجابات Binding قريبة من حجم الطلب ويحد من فائدتها لهجمات الانعكاس. اترك rfc5780 و stun-backward-compatibility معطلين.

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

المنفذ البروتوكول الغرض
3478 UDP STUN و TURN
3478 TCP TURN
49152–65535 UDP الوسائط المعاد توجيهها

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

إذا كان الخادم موجودًا خلف NAT، فعلى coturn إعداد external-ip=PUBLIC_IP/PRIVATE_IP ونقل منافذ المستمع وإعادة التوجيه. يجب أن تحتفظ منافذ إعادة التوجيه بأرقامها عبر 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

في لوحة التحكم → الإعدادات، ابحث عن إعدادات Live هذه:

الإعداد القيمة
live_stun_servers عنوان URI لـ STUN الخاص بخادم coturn لديك — استبدل الإدخالات الافتراضية
live_turn_secret القيمة المستخدمة لـ static-auth-secret في coturn
live_turn_secret_servers عناوين URI لـ TURN الخاص بك، مفصولة بـ |
live_turn_servers فارغ
live_turn_username فارغ
live_turn_credential فارغ

للإعداد أعلاه، أدخل هذا في live_stun_servers:

stun:turn.example.com:3478

وهذا في live_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 stun: و turn: و turns:، بدون //. أدرج فقط نقاط النهاية التي يدعمها خادمك فعليًا.

ترسل متصفحات Chromium أيضًا طلبات STUN إلى خوادم TURN التي تدرجها، لذا يمكن أن يعمل live_stun_servers الفارغ طالما استجاب coturn لطلبات STUN المجهولة. إن إدراج عنوان URI الخاص بـ STUN صراحةً يجعل الإعداد أكثر وضوحًا، ويغطي متصفحات أخرى، ويتيح لتشخيصات الاتصال في Live اختباره بمفرده.

تستخدم قائمة live_turn_secret_servers بيانات اعتماد مولدة من المفتاح السري المشترك. تستخدم قائمة live_turn_servers المنفصلة اسم مستخدم وكلمة مرور ثابتين. تعريفات إعدادات Live.

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

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

اختبره مع مشاركين على شبكات مختلفة، مثل النطاق العريض المنزلي وبيانات الهاتف الجوال، وفي أكثر من متصفح واحد — على الأقل متصفح واحد مبني على Chromium و Firefox. تأكد من أن الصوت يعمل في الاتجاهين، ثم اختبر الفيديو ومشاركة الشاشة.

أثناء وجودك في غرفة نظير إلى نظير، افتح قائمة الغرفة ⋮ واختر تشخيصات الاتصال:

  • تحت خوادم STUN/TURN، يجب أن يظهر لكل خادم قابل للوصول. يجب أن تعرض خوادم TURN عنوان إعادة التوجيه، ويجب أن تعرض خوادم UDP العنوان العام. يعني “العنوان العام: لا شيء” أن طلبات STUN لم تحصل على إجابة — تحقق من no-stun/secure-stun ومن أن 3478/UDP مفتوح.
  • تحت الأقران، يظهر المسار كيفية نقل كل اتصال للوسائط: مباشر (نفس الشبكة)، أو مباشر (عبر NAT عبر STUN)، أو معاد توجيهه عبر TURN. يجب أن يتصل معظم المشاركين في الشبكات المنزلية العادية مباشرة.
  • ينتج نسخ التقرير تقريرًا نصيًا يمكنك مشاركته مع من يقوم بإستكشاف الأخطاء وإصلاحها. يتضمن عناوين IP المشاركين، لذا شاركه بشكل خاص.

في متصفحات Chromium، تعرض chrome://webrtc-internals نفس التفاصيل بمستوى أدنى:

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

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

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

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

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

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

  • حدد الوصول إلى Live للمجموعات المقصودة.
  • راقب عرض النطاق الترددي لإعادة التوجيه وعدد التخصيصات.
  • حدد حيصص التخصيص وحدود عرض النطاق الترددي في coturn بما يتناسب مع مجتمعك.
  • احجب وصول إعادة التوجيه إلى العناوين الخاصة، وعناوين الرابط المحلي، وغيرها من وجهات الشبكة الداخلية القابلة للوصول من مضيف TURN.
  • حافظ على تحديث coturn وأدر المفتاح السري إذا تم كشفه.

استخدم مفتاحًا سريًا مخصصًا لنشر Discourse هذا. سيجيب خادمك أيضًا على طلبات STUN المجهولة من أي شخص؛ هذا متوقع، ويستخدم القليل من عرض النطاق الترددي، ولا يمنح وصول إعادة التوجيه. مصادقة coturn وضوابط الوصول.

بدائل

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

عين live_stun_servers إلى عناوين URI الخاصة بخادم STUN الخاص بك، مفصولة بـ |:

stun:stun.example.com:3478

اترك إعدادات TURN فارغة إذا لم تكن بحاجة إلى إعادة التوجيه. لا يمكن لـ STUN وحده جعل المكالمات تعمل على كل شبكة.

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

إذا لم يكن مزودك يدعم المصادقة بمفتاح سري مشترك، فقم بتكوين live_turn_servers، و live_turn_username، و live_turn_credential. اترك إعدادات المفتاح السري المشترك فارغة.

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

3 إعجابات