Product SiteDocumentation Site

11.8. Layanan Komunikasi Real-Time

Layanan Real-Time komunikasi (RTC) meliputi suara, video/webcam, pesan instan (IM), dan berbagi pakai desktop. Bab ini memberikan pengantar singkat tiga layanan yang diperlukan untuk mengoperasikan RTC, termasuk server TURN, server SIP, dan server XMPP. Rincian komprehensif tentang bagaimana untuk merencanakan, memasang, dan mengelola layanan ini tersedia dalam Panduan Ringkas Komunikasi Real-Time termasuk contoh spesifik untuk Debian.
SIP dan XMPP dapat menyediakan fungsionalitas yang sama. SIP sedikit lebih dikenal untuk suara dan video sementara XMPP secara tradisional dianggap sebagai protokol IM. Pada kenyataannya, keduanya dapat digunakan untuk tujuan ini. Untuk memaksimalkan pilihan konektivitas, disarankan untuk menjalankan keduanya secara paralel.
Layanan-layanan ini bergantung pada sertifikat X.509 untuk otentikasi dan kerahasiaan. Lihat Bagian 10.2.1.1, “Infrastruktur Kunci Publik: easy-rsa untuk rincian tentang bagaimana untuk menciptakan mereka. Panduan Ringkas Komunikasi Real-Time juga memiliki beberapa penjelasan yang berguna:

11.8.1. Pengaturan DNS untuk layanan RTC

Layanan RTC memerlukan record DNS SRV dan NAPTR. Suatu contoh konfigurasi yang dapat ditempatkan dalam berkas zona untuk falcot.com:
; server tempat semua akan dijalankan
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. Server TURN

TURN adalah layanan yang membantu klien di belakang firewall dan router NAT untuk menemukan cara yang paling efisien untuk berkomunikasi dengan klien lain dan me-relay stream media jika tidak ditemukan path media yang langsung. Sangat dianjurkan untuk memasang server TURN sebelum salah satu layanan RTC lain ditawarkan kepada pengguna akhir.
TURN dan protokol ICE yang terkait adalah standar terbuka. Untuk memperoleh manfaat dari protokol-protokol ini, memaksimalkan konektivitas dan meminimalkan frustrasi, itu penting untuk memastikan bahwa semua perangkat lunak klien mendukung ICE dan TURN.
Agar algoritma ICE bekerja secara efektif, server harus memiliki dua alamat IPv4 publik.

11.8.2.1. Pasang server TURN

Pasang paket reciprocate-turn-server.
Sunting berkas konfigurasi /etc/reTurn/reTurnServer.config. Yang paling penting untuk dilakukan adalah memasukkan alamat IP server.
# alamat IP anda di sini:
TurnAddress = 198.51.100.19
TurnV6Address = 2001:DB8:1000:2000::19
AltStunAddress = 198.51.100.20
# your domain goes here, it must match the value used
# to hash your passwords if they are already hashed
# using the HA1 algorithm:
AuthenticationRealm = myrealm

UserDatabaseFile = /etc/reTurn/users.txt
UserDatabaseHashedPasswords = true
Restart layanan.

11.8.2.2. Mengelola pengguna TURN

Gunakan utilitas htdigest untuk mengelola daftar pengguna server TURN.
# htdigest /etc/reTurn/users.txt myrealm joe
Gunakan sinyal HUP untuk membuat server memuat ulang berkas /etc/reTurn/users.txt setelah mengubahnya atau aktifkan fitur muat ulang otomatis di /etc/reTurn/reTurnServer.config.

11.8.3. Server Proksi SIP

Server proksi SIP mengelola koneksi SIP masuk dan keluar antara organisasi, penyedia trunking SIP, PBX SIP seperti Asterisk, telepon SIP, softphones berbasis SIP, dan aplikasi WebRTC.
Sangat dianjurkan untuk memasang dan mengkonfigurasi proksi SIP sebelum mencoba konfigurasi PBX SIP. Proksi SIP menormalkan banyak lalu lintas yang mencapai PBX dan menyediakan konektivitas dan ketahanan yang lebih besar.

11.8.3.1. Memasang proksi SIP

Instal paket repro. Menggunakan paket dari jessie-backport sangat dianjurkan, karena memiliki perbaikan terbaru untuk memaksimalkan konektivitas dan ketahanan.
Sunting berkas konfigurasi /etc/repro/repro.config. Yang paling penting untuk dilakukan adalah memasukkan alamat IP server. Contoh di bawah menunjukkan bagaimana menyiapkan SIP reguler dan WebSockets/WebRTC, menggunakan TLS, IPv4, dan IPv6:
# Transport1 untuk SIP di atas koneks TLS
# We use port 5061 here but if you have clients connecting from
# locations with firewalls you could change this to listen on port 443
Transport1Interface = 198.51.100.19:5061
Transport1Type = TLS
Transport1TlsDomain = falcot.com
Transport1TlsClientVerification = Optional
Transport1RecordRouteUri = sip:falcot.com;transport=TLS
Transport1TlsPrivateKey = /etc/ssl/private/falcot.com-key.pem
Transport1TlsCertificate = /etc/ssl/public/falcot.com.pem

# Transport2 is the IPv6 version of Transport1
Transport2Interface = 2001:DB8:1000:2000::19:5061
Transport2Type = TLS
Transport2TlsDomain = falcot.com
Transport2TlsClientVerification = Optional
Transport2RecordRouteUri = sip:falcot.com;transport=TLS
Transport2TlsPrivateKey = /etc/ssl/private/falcot.com-key.pem
Transport2TlsCertificate = /etc/ssl/public/falcot.com.pem

# Transport3 will be for SIP over WebSocket (WebRTC) connections
# We use port 8443 here but you could use 443 instead
Transport3Interface = 198.51.100.19:8443
Transport3Type = WSS
Transport3TlsDomain = falcot.com
# This would require the browser to send a certificate, but browsers
# don't currently appear to be able to, so leave it as None:
Transport3TlsClientVerification = None
Transport3RecordRouteUri = sip:falcot.com;transport=WSS
Transport3TlsPrivateKey = /etc/ssl/private/falcot.com-key.pem
Transport3TlsCertificate = /etc/ssl/public/falcot.com.pem

# Transport4 is the IPv6 version of Transport3
Transport4Interface = 2001:DB8:1000:2000::19:8443
Transport4Type = WSS
Transport4TlsDomain = falcot.com
Transport4TlsClientVerification = None
Transport4RecordRouteUri = sip:falcot.com;transport=WSS
Transport4TlsPrivateKey = /etc/ssl/private/falcot.com-key.pem
Transport4TlsCertificate = /etc/ssl/public/falcot.com.pem

# Transport5: this could be for TCP connections to an Asterisk server
# in your internal network.  Don't allow port 5060 through the external
# firewall.
Transport5Interface = 198.51.100.19:5060
Transport5Type = TCP
Transport5RecordRouteUri = sip:198.51.100.19:5060;transport=TCP

HttpBindAddress = 198.51.100.19, 2001:DB8:1000:2000::19
HttpAdminUserFile = /etc/repro/users.txt

RecordRouteUri = sip:falcot.com;transport=tls
ForceRecordRouting = true
EnumSuffixes = e164.arpa, sip5060.net, e164.org
DisableOutbound = false
EnableFlowTokens = true
EnableCertificateAuthenticator = True
Gunakan utilitas htdigest untuk mengelola kata sandi admin untuk antarmuka web. Nama pengguna harus admin dan nama realm harus sesuai nilai yang ditentukan dalam repro.config.
# htdigest /etc/repro/users.txt repro admin
Jalankan ulang layanan menggunakan konfigurasi baru.

11.8.3.2. Mengelola proksi SIP

Pergi ke antarmuka web di http://sip-proxy.falcot.com:5080 untuk menyelesaikan konfigurasi dengan menambahkan domain, pengguna lokal, dan rute statik.
Langkah pertama adalah untuk menambahkan domain lokal. Proses harus dimulai ulang setelah menambahkan atau menghapus domain dari daftar.
Proksi tahu bagaimana untuk mengarahkan panggilan antara pengguna lokal dan alamat SIP yang lengkap, konfigurasi routing hanya diperlukan untuk mengganti perilaku default, misalnya, untuk mengenali nomor telepon, tambahkan awalan, dan rute mereka ke penyedia SIP.

11.8.4. Server XMPP

Suatu server XMPP mengelola konektivitas antara pengguna XMPP lokal dan XMPP pengguna di domain lainnya di Internet.
Prosody adalah server XMPP populer yang beroperasi secara andal pada server Debian.

11.8.4.1. Pasang server XMPP

Instal paket prosody. Menggunakan paket dari jessie-backport sangat dianjurkan, karena memiliki perbaikan terbaru untuk memaksimalkan konektivitas dan ketahanan.
Tinjau berkas konfigurasi /etc/prosody/prosody.cfg.lua. Yang paling penting untuk dilakukan adalah memasukkan JID pengguna yang diizinkan untuk mengelola server.
admins = { "joe@falcot.com" }
Berkas konfigurasi individu juga diperlukan untuk setiap domain. Salin contoh dari /etc/prosody/conf.avail/example.com.cfg.lua dan gunakan sebagai titik awal. Berikut adalah falcot.com.cfg.lua:
VirtualHost "falcot.com"
        enabled = true
        ssl = {
                key = "/etc/ssl/private/falcot.com-key.pem";
                certificate = "/etc/ssl/public/falcot.com.pem";
                }
Untuk mengaktifkan domain, harus ada symlink dari /etc/prosody/conf.d/. Buat dengan cara:
# ln -s /etc/prosody/conf.avail/falcot.com.cfg.lua /etc/prosody/conf.d/
Jalankan ulang layanan menggunakan konfigurasi baru.

11.8.4.2. Mengelola server XMPP

Beberapa operasi manajemen dapat dilakukan dengan menggunakan utilitas baris perintah prosodyctl. Misalnya, untuk menambahkan akun administrator yang ditentukan dalam /etc/prosody/prosody.cfg.lua:
# prosodyctl adduser joe@falcot.com
Lihat dokumentasi daring Prosody untuk informasi lebih lanjut tentang cara menyesuaikan konfigurasi.

11.8.5. Menjalankan layanan pada port 443

Beberapa administrator lebih suka untuk menjalankan semua layanan RTC mereka pada port 443. Ini membantu pengguna untuk menyambung dari lokasi terpencil seperti Hotel dan Bandara dimana port lain dapat diblokir atau lalu lintas Internet disalurkan melalui server proksi HTTP.
Untuk menggunakan strategi ini, setiap layanan (SIP, XMPP, dan TURN) membutuhkan alamat-alamat IP yang berbeda. Semua layanan masih bisa diwadahi pada host yang sama karena Linux mendukung beberapa alamat IP pada satu host. Nomor port, 443, harus ditentukan di berkas konfigurasi untuk setiap proses dan juga di record SRV DNS.

11.8.6. Menambahkan WebRTC

Falcot ingin membiarkan pelanggan membuat panggilan telepon secara langsung dari situs web. Para administrator Falcot juga ingin menggunakan WebRTC sebagai bagian dari rencana pemulihan bencana, sehingga staf dapat menggunakan peramban web di rumah untuk log masuk ke sistem telepon perusahaan dan bekerja secara normal dalam keadaan darurat.
WebRTC adalah sebuah teknologi yang berkembang pesat dan sangat penting untuk menggunakan paket dari distribusi jessie-backport atau Testing.
JSCommunicator adalah telepon WebRTC generik, tanpa merek, yang tidak memerlukan script sisi server apapun seperti PHP. Hal ini dibangun secara eksklusif dengan HTML, CSS, dan JavaScript. Ini adalah dasar bagi banyak layanan WebRTC lainnya dan modul untuk penerbitan framework web yang lebih lanjut.
Paket jscommunicator-web-telepon adalah cara tercepat untuk menginstal telepon WebRTC ke sebuah situs web. Hal ini membutuhkan proksi SIP dengan transport WebSocket. Petunjuk di Bagian 11.8.3.1, “Memasang proksi SIP” memuat rincian yang diperlukan untuk mengaktifkan transport WebSocket di proksi SIP repro.
Setelah menginstal jscommunicator-web-phone, ada berbagai cara untuk menggunakannya. Strategi yang sederhana adalah untuk menyertakan atau menyalin konfigurasi dari /etc/jscommunicator-web-phone/apache.conf ke konfigurasi virtual host Apache.
Setelah berkas-berkas web-phone tersedia di server web, sesuaikan /etc/jscommunicator-web-phone/config.js untuk menunjuk pada server TURN dan proksi SIP. Sebagai contoh:
JSCommSettings = {

  // Web server environment
  webserver: {
    url_prefix: null            // If set, prefix used to construct sound/ URLs
  },

  // STUN/TURN media relays
  stun_servers: [],
  turn_servers: [
    { server:"turn:turn-server.falcot.com?transport=udp", username:"joe", password:"j0Ep455d" }
  ],

  // WebSocket connection
  websocket: {
      // Notice we use the falcot.com domain certificate and port 8443
      // This matches the Transport3 and Transport4 example in
      // the falcot.com repro.config file
    servers: 'wss://falcot.com:8443',
    connection_recovery_min_interval: 2,
    connection_recovery_max_interval: 30
  },

  ...
Situs-situs web klik-untuk-memanggil yang lebih lanjut biasanya menggunakan script sisi server untuk menghasilkan berkas config.js secara dinamis. Kode sumber DruCall menunjukkan bagaimana melakukan ini dengan PHP.
Bab ini mencuplik hanya sebagian kecil dari perangkat lunak server yang tersedia; namun, sebagian besar layanan jaringan umum telah digambarkan. Sekarang saatnya untuk bab yang bahkan lebih teknis: kita akan pergi ke detail yang lebih untuk beberapa konsep, menggambarkan penyebaran besar-besaran, dan virtualisasi.