Product SiteDocumentation Site

11.8. خدمات التواصل في الزمن الحقيقي

Real-Time Communication (RTC) services include voice, video/webcam, instant messaging (IM) and desktop sharing. This chapter gives a brief introduction to three of the services required to operate RTC, including a TURN server, SIP server and XMPP server. Comprehensive details of how to plan, install and manage these services are available in the Real-Time Communications Quick Start Guide which includes examples specific to Debian.
يوفر كلاً من SIP وXMPP نفس الوظائف. لكن SIP معروف أكثر في مجال الصوت والفيديو بينما يعتبر XMPP تقليدياً بروتوكولاً للمراسلة الفورية (IM). في الواقع، يمكن استخدام أي منهما لأي من هذه الأغراض. من المستحسن استخدام الاثنين معاً على التوازي لزيادة خيارات الاتصال.
These services rely on X.509 certificates both for authentication and confidentiality purposes. See قسم 10.2, “X.509 certificates” for more information.

11.8.1. إعدادات DNS لخدمات RTC

RTC services require DNS SRV and NAPTR records. A sample configuration that can be placed in the zone file for falcot.com (see also مثال 10.13, “مقتطفات من /etc/bind/db.falcot.com:
; the server where everything will run
server1            IN     A      198.51.100.19
server1            IN     AAAA   2001:DB8:1000:2000::19

; IPv4 only for TURN for now, some clients are buggy with IPv6
turn-server        IN     A      198.51.100.19

; IPv4 and IPv6 addresses for SIP
sip-proxy          IN     A      198.51.100.19
sip-proxy          IN     AAAA   2001:DB8:1000:2000::19

; IPv4 and IPv6 addresses for XMPP
xmpp-gw            IN     A      198.51.100.19
xmpp-gw            IN     AAAA   2001:DB8:1000:2000::19

; DNS SRV and NAPTR for STUN / TURN
_stun._udp  IN SRV    0 1 3467 turn-server.falcot.com.
_turn._udp  IN SRV    0 1 3467 turn-server.falcot.com.
@           IN NAPTR  10 0 "s" "RELAY:turn.udp" "" _turn._udp.falcot.com.

; DNS SRV and NAPTR records for SIP
_sips._tcp  IN SRV    0 1 5061 sip-proxy.falcot.com.
@           IN NAPTR  10 0 "s" "SIPS+D2T" "" _sips._tcp.falcot.com.

; DNS SRV records for XMPP Server and Client modes:
_xmpp-client._tcp  IN     SRV    5 0 5222 xmpp-gw.falcot.com.
_xmpp-server._tcp  IN     SRV    5 0 5269 xmpp-gw.falcot.com.

11.8.2. مخدم TURN

TURN هي خدمة تساعد العملاء الذين تفصل بينهم موجهات NAT والجدران النارية على اكتشاف الطريق الأكثر فعالية للتواصل فيما بينهم ونقل تيار البيانات (stream) إذا لم يعثروا على طريق مباشر لنقل الوسائط. ينصح بشدة بتثبيت مخدم TURN قبل إتاحة أي خدمة RTC أخرى للمستخدمين النهائيين.
TURN وبروتوكول ICE المرتبط بها هما معياران مفتوحان. من المهم أن تضمن أن كافة برمجيات العملاء تدعم ICE وTURN للاستفادة من هذين المعيارين وتحقيق أعظم قدر من الاتصالية وتقليل خيبات المستخدمين إلى أدنى حد.
يجب أن يملك المخدم عنواني IPv4 عموميين حتى تعمل خوارزمية ICE بفعالية.
Install the coturn package and edit the /etc/turnserver.conf configuration file. By default, a SQLite database is configured in /var/db/turndb for user account settings, but PostgreSQL, MySQL or Redis can be set up instead if preferred. The most important thing to do is insert the IP addresses of the server.
The server can be started running turnserver from the coturn package. We want the server to be an automatically started system service. This is the default behavior using systemd. Only when using the older SysVinit you have to edit the /etc/default/coturn file like this:
#
# Uncomment it if you want to have the turnserver running as
# an automatic system service daemon
#
TURNSERVER_ENABLED=1
By default, the TURN server uses anonymous access. We have to add the users we want to use:
# turnadmin -a -u roland -p secret_password -r falcot.com
# turnadmin -A -u admin -p secret_password
We use the argument -a to add a normal user and -A to add an admin user.

11.8.3. مخدم بروكسي SIP

يدير مخدم بروكسي SIP اتصالات SIP الواردة والصادرة بين المنظمات الأخرى، أو مزودي SIP trunking، أو مقاسم SIP الهاتفية الخاصة (Private Automatic Branch eXchange أو PBX اختصاراً) مثل Asterisk، أو هواتف SIP، أو تطبيقات المهاتفة وWebRTC المعتمدة على SIP.
ننصح بشدة أن تثبت بروكسي SIP وتضبطه قبل محاولة تثبيت SIP PBX (المقسم الهاتفي الخاص). ينظم بروكسي SIP جزءاً كبيراً من البيانات الواردة إلى PBX ويسمح بدرجات أعلى من القدرة على الاتصال والمتانة.

11.8.3.1. تثبيت بروكسي SIP

Install the kamailio package and the package for the database backend. The Falcot administrators chose MySQL, so they install kamailio-mysql-modules and mariadb-server. /etc/kamailio/kamctlrc is the configuration file for the control tools kamctl and kamdbctl. You need to edit and set the SIP_DOMAIN to your SIP service domain and set the DBENGINE to MySQL, another database backend can be used.
[...]
## your SIP domain
SIP_DOMAIN=sip.falcot.com

## chrooted directory
# CHROOT_DIR="/path/to/chrooted/directory"

## database type: MYSQL, PGSQL, ORACLE, DB_BERKELEY, DBTEXT, or SQLITE
# by default none is loaded
#
# If you want to setup a database with kamdbctl, you must at least specify
# this parameter.
DBENGINE=MYSQL
[...]
Now we focus on the configuration file /etc/kamailio/kamailio.cfg. Falcot needs user authentication and persistent user location, so they add the following #!define directives at the top of that file:
#!KAMAILIO
#
# Kamailio (OpenSER) SIP Server v5.2 - default configuration script
#     - web: https://www.kamailio.org
#     - git: https://github.com/kamailio/kamailio
#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_USRLOCDB
[...]
Kamailio needs a database structure that we can create running kamdbctl create as root. Finally, we can add some users with kamctl.
# kamdbctl create
[...]
# kamctl add roland secret_password
Once everything is properly configured you can start or restart the service with systemctl restart kamailio, you can connect with a SIP client providing the IP address and the port (5090 is the default port). The users have the following id: roland@sip.falcot.com, and they can login using a client (see قسم 13.9, “برمجيات التواصل في الزمن الحقيقي”).

11.8.4. مخدم XMPP

يدير مخدم XMPP الاتصالات بين مستخدمي XMPP المحليين ومستخدمي XMPP في النطاقات الأخرى على الإنترنت العام.
prosody is a popular XMPP server that operates reliably on Debian servers.

11.8.4.1. تثبيت مخدم XMPP

Install the prosody package.
راجع ملف الإعداد /etc/prosody/prosody.cfg.lua. أهم شيء تفعله هو إدخال JIDs للمستخدمين الذين يُسمَح لهم بإدارة المخدم.
admins = { "joe@falcot.com" }
ستحتاج لملف إعداد منفصل لكل نطاق أيضاً. انسخ المثال من /etc/prosody/conf.avail/example.com.cfg.lua واستخدمه كنقطة بدء. هذا ملف falcot.com.cfg.lua:
VirtualHost "falcot.com"
        enabled = true
        ssl = {
                key = "/etc/ssl/private/falcot.com.key";
                certificate = "/etc/ssl/certs/falcot.com.pem";
                }

-- Set up a MUC (multi-user chat) room server on conference.example.com:
Component "conference.falcot.com" "muc"
لتفعيل النطاق، يجب إنشاء رابط رمزي له من المجلد /etc/prosody/conf.d/. أنشئه كما يلي:
# ln -s /etc/prosody/conf.avail/falcot.com.cfg.lua /etc/prosody/conf.d/
إعادة تشغيل الخدمة لاعتماد الإعدادات الجديدة.

11.8.4.2. إدارة مخدم XMPP

Some management operations can be performed using the prosodyctl command line utility. For example, to add the administrator account specified in /etc/prosody/prosody.cfg.lua:
# prosodyctl adduser joe@falcot.com
See the Prosody online documentation for more details about how to customize the configuration.

11.8.5. تشغيل الخدمات على المنفذ 443

بفضل بعض مديرو النظم تشغيل كافة خدمات RTC على المنفذ 443. يساعد هذا المستخدمين على الاتصال من المواقع البعيدة مثل الفنادق والمطارات لأن المنافذ الأخرى قد تحجب أو قد تستخدم مخدمات HTTP وسيطة لتمرير الاتصال بالإنترنت.
لاستخدام هذه الاستراتيجية، ستحتاج كل خدمة (SIP، وXMPP وTURN) لعنوان IP مختلف. يمكن أن تبقى الخدمات كلها على المضيف نفسه حيث يدعم لينكس تعدد عناوين IP للمضيف الواحد. يجب تحديد رقم المنفذ 443 في ملفات الإعداد لكل عملية وأيضاً في سجلات DNS SRV.

11.8.6. إضافة WebRTC

تريد فلكوت السماح للزبائن بالاتصال هاتفياً مباشرة من موقع الوب. كما يريد مديرو النظم في فلكوت أيضاً استخدام WebRTC كجزء من خطتهم للإنقاذ من الكوارث، بحيث يستطيع الموظفون استخدام متصفحات الوب من بيوتهم للدخول إلى نظام الشركة الهاتفي والعمل بشكل طبيعي في حالات الطوارئ.
WebRTC is a rapidly evolving technology and it is essential to use packages from the Testing distribution. Another option is to compile the software.
WebRTC uses a simple API to provide browsers and mobile applications with RTC, it is free software and it is being developed by Google.
A very flexible approach is using GStreamer's WebRTC implementation. It enables pipeline-based multimedia applications, which allows developing interesting and highly efficient applications. A good starting point is the following demo by Centricular, the main company that is developing it:
More advanced click-to-call web sites typically use server-side scripting to generate the config.js file dynamically. The DruCall source code demonstrates how to do this with PHP.
استعرض هذا الفصل جزءاً من برمجيات المخدمات المتاحة فقط؛ لكنه شرح معظم الخدمات الشبكية الشائعة. حان الوقت الآن للدخول في فصل تقني أكثر: سوف نتعمق في تفاصيل بعض المفاهيم، ونشرح عمليات التنصيب على نطاق واسع، والحوسبة الظاهرية.