[Jitisi-Meet] Phần 1 – Xây dựng hệ thống Jitsi-Meeting cho doanh nghiệp.

Tiếp nối thành công của talkshow “WORK FROM HOME”“GIẢI PHÁP VỀ HỘI NGHỊ TRỰC TUYẾN CHO DOANH NGHIỆP”. Xin chân thành cảm ơn bạn “Nguyễn Văn Long” có bài viết hướng dẫn mọi người cài đặt Jitsi trên Azure.

Ở đây, em chia sẽ  về project “Jitsi Meeting” em đang xây dựng cho công ty của em (khoảng 350 user). Trong bài viết này mình sẽ không đề cập đến cách sử dụng Jitsi Meeitng, mà ở đây mình muốn hướng dẫn các bạn xây dựng một hệ thống meeting miễn phí trong nội bộ dựa vào Open-Source. Hy vọng mọi người đón nhận và góp ý chân thành. “Nếu ai thấy hay xin góp về thêm về tính năng”, mình sẽ R&D để hoàn thiện giải pháp.

Bài toán doanh nghiệp

Doanh nghiệp bạn không dùng Office 365 hay google mail mà lại đang cần một giải pháp meeting online tiết kiệm chi phí?

Sự cố về Zoom giá rẻ khiến cho các ông chủ doanh nghiệp hoang mang.

Không lo ngại về vấn đề internet, meeting miễn phí mà hiệu năng lại cao.

Người dùng dễ dàng sử dụng mà không cần trải qua các bước training phức tạp.

Người dùng phải chứng thực vào meeting qua Active Directory.

Chốt lại: Jitsi sẽ là một giải pháp tuyệt vời hội đủ những tiêu chí ngon, bổ và rẻ trong trường hợp này.

Jitsi là gì?

Jitsi là một tập hợp các dự án open-source cho phép xây dựng một giải pháp video conference một cách đơn giản và dễ dàng nhất.

 

Những thành phần tạo thành Jitsi

  • Web UI: Nginx.

Jitsi sử dụng nginx để build thành web UI.

  • Prosody: the XMPP server

Prosody / XMPP đóng vai trò xác thực người dùng và giúp cung cấp dịch vụ nhắn tin và trò chuyện.

  • Jitsi meet: the core of Jitsi

Jitsi Meet is an open-source (Apache) WebRTC JavaScript application.

Nhiệm vụ của nó là:

  1. Tạo một lớp cho tín hiệu XMPP.
  2. Tạo các connection peer.
  3. Accepting media/ messages and files.

Khi ứng dụng bắt đầu thực thi và xử lý tín hiệu, người dùng có thể giao tiếp qua Jicofo vì nó chịu trách nhiệm truyền tín hiệu và chuyển tiếp JVB.

  • Jicofo: the XMPP focus component.

Nó là thành phần bắt buộc của Jitsi Meet bên cạnh Jitsi Videobridge (JVB). Nó chịu trách nhiệm quản lý các sesion truyền thông giữa mỗi người tham gia và JVB.
Jicofo hiện có các trách nhiệm sau:

  1. Quản lý hội nghị: ai tham gia phòng, ai ra khỏi phòng.
  2. Quản lý các kênh Colibri cho người tham gia và thiết lập luồng truyền thông tới JVB.
  3. Cân bằng tải cầu video Jitsi dựa trên số lượng hội nghị.
  4. Xử lý xác thực ứng dụng khách (tùy chọn).
  5. Tham gia thực hiện một số tính năng như tắt âm thanh, ghi âm, vv Jicofo là thành phần báo hiệu trung tâm trong hệ thống.
  • Jvb: Jitsi Videobridge, the video router.

Đây là một thành phần core, cho phép nhiều user  giao tiếp với nhau qua video conferance. Không giống như phần cứng chuyên dụng đắt tiền, Jitsi Videobridge SFU(Selective Forwarding Units) để phân phối media, không trộn các kênh video thành một luồng video tổng hợp, mà chỉ chuyển tiếp các kênh video nhận được cho tất cả những người tham gia cuộc gọi. Do đó, trong khi nó không cần phải chạy trên một server có bang thông cao, hoặc CPU cao cũng không ảnh hưởng đến hiệu năng.

Hình 01: So sánh SFU và MCU

Nguồn: https://developer.atlassian.com/blog/2015/07/video-conferencing/mcu-sfu.png

MCU (Đơn vị điều khiển đa điểm): Trong trường hợp này, các luồng video nhận được được giải mã đầu tiên, được tạo thành một hỗn hợp và sau đó được mã hóa lại. Điều này không chỉ làm giảm chất lượng của video do mã hóa bị mất mà còn tăng tải xử lý trên bộ trộn phương tiện theo cấp số nhân.

Chuyển tiếp nội dung video / SFU (Đơn vị chuyển tiếp chọn lọc): Trong phần này, các luồng video mà bộ trộn phương tiện nhận được được chuyển tiếp đến những người tham gia hội nghị.

  • Jigasi: the SIP (audio only) gateway.

Một ứng dụng liên kết cho phép các  SIP client thông thường tham gia các hội nghị Jitsi Meet do Jitsi Videobridge tổ chức.

  • Jibri: the broadcasting infrastructure.

Jibri cung cấp dịch vụ recording or streaming trong Jitsi Meet conference.

  • Etherpad: shared document editing addon.

Ngoài ra còn một vài thành phần nhỏ khác mình không liệt kê trên đây.

 

Hướng dẫn cài đặt và tích hợp Jitsi Meeting vào Active Directory.

 

1. Hướng dẫn cài đặt Jitsi

Mô hình triển khai

Hình 02:  Mô hình triển khai Jitsi-Meeting

Chuẩn bị

Ubuntu 18.04 Jitsi Meeting 172.16.111.35/24
MS AD User có quyền domain admin 10.10.10.10/24

Mở các port  trên Ubuntu Firewall, chúng ta sử dụng lệnh sau:

sudo ufw allow ssh

sudo ufw allow http

sudo ufw allow https

ufw allow 10000:20000/udp

ufw enable

Cuối cùng là restart services và kiểm tra lại rule

service ufw restart

ufw status

Hình 03: Rule ufw

 

Tiếp đến chúng ta sẽ update và upgrade cho Ubuntu server

sudo apt update && sudo apt upgrade -y

Cài đặt Jitsi

Đầu tiên chúng ta tiến hành thêm jitsi package repository

wget -qO – https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add –

sudo sh -c “echo ‘deb https://download.jitsi.org stable/’ > /etc/apt/sources.list.d/jitsi-stable.list”

Nếu add không được thì bạn thêm bằng tay với câu lệnh sau:

wget https://download.jitsi.org/jitsi-key.gpg.key

sudo apt-key add jitsi-key.gpg.key

sudo sh -c “echo ‘deb https://download.jitsi.org stable/’ > /etc/apt/sources.list.d/jitsi-stable.list”

Tiếp tục update package chúng ta vừa thêm vào ở trên

sudo apt-get -y update

Tiến hành cài đặt Jitsi-meet bằng lệnh sau:

sudo apt-get -y install jitsi-meet

Sau khi cài đặt xong, hệ thống sẽ yêu cầu bạn cài đặt hostname cho jitsi meeting – bạn sẽ đặt tên tương ứng với public dns mà bạn sẽ sử dụng, cho thuận tiện với các bạn nào ko biết nhiều về nginx: meeting.xxx.com.vn

Tiếp tục chọn:

Generate a new self-signed certificate (You will later get a chance to obtain a Let’s Encrypt certificate).

Sau khi quá trình cài đặt hoàn tất, bạn có thể chạy script để cài đặt SSL Let’s Encrypt miễn phí.

sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh

Trong quá trình cài đặt, bạn sẽ được yêu cầu nhập email. Phần còn lại script sẽ tự động cài cho bạn.

Chúng ta sẽ restart và enable nginx

service nginx restart

systemctl enable nginx

Tích hợp Jitsi vào MS AD

Để kết nối được với MS AD bạn cần phải cài đặt những package sau:

apt install sasl2-bin lua-cyrussasl

Vào file config của Jitsi edit lại phương pháp chứng thực:

vi /etc/prosody/conf.avail/meeting.xxx.com.vn.cfg.lua

authentication = “cyrus”

Thêm các tham số sau như hình bên dưới.

cyrus_application_name = “xmpp”

thêm “auth_cyrus” vào modules_enabled;

Hình 04: Cấu hình prosody authen MS AD

Tạo folder chứa xmpp.conf

mkdir /etc/sasl

vi /etc/sasl/xmpp.conf

Thêm cấu hình vào file xmpp.conf như sau:

pwcheck_method: saslauthd

mech_list: PLAIN

Tạo file /etc/saslauthd.conf để thực hiện kết nối đến MS AD

vi /etc/saslauthd.conf

Nếu sử dụng none TLS thì dùng config sau:

ldap_servers: ldap://10.10.10.10:389

ldap_search_base: dc=xxx,dc=local

ldap_bind_dn: xxx\userauthen

ldap_bind_pw: password

ldap_filter: (samAccountName=%u)

ldap_auth_method: bind

ldap_use_sasl: no

ldap_start_tls: no

Nếu muốn thêm ssl, tls vào kết nối thì thêm vào config trên những dòng sau:

Bỏ dòng ldap_start_tls: no

ldap_tls_key: /etc/ssl/meeting.xxx.com.vn.key

ldap_tls_cert: /etc/ssl/meeting.xxx.com.vn.crt

ldap_tls_check_peer: yes

ldap_tls_cacert_file: /etc/ssl/certs/ca-certificates.crt

ldap_tls_cacert_dir: /etc/ssl/certs

Tiếp tục edit saslauthd file

vi /etc/default/saslauthd

START=yes

MECHANISMS=ldap

MECH_OPTIONS=”/etc/saslauthd.conf”

Prosody mặc định không thể giao tiếp với saslauthd chính vì vậy cần phải phân quyền thêm:

chmod 777 /var/run/saslauthd

usermod -aG sasl prosody

 

Cuối cùng chúng ta sẽ restart service

service saslauthd restart

service prosody restart

Test saslauthen bằng câu lệnh sau:

testsaslauthd -u user -p pass -s xmpp

Nếu output là : 0: OK “Success.” Thì thành công.

Nếu output là : 0: NO “authentication failed” làm lại hehe.

Mặc định user trong MS AD sẽ có quyền authen create và join meeting.
Công ty mình public cho guest sử dụng thì bên mình sẽ tạo 1 User domain – (giới hạn thời gian active).

Khi đó guest bên mình sẽ dung user  này đăng nhập vào meeting.

Note : nhiều người dùng chung 1 user  vẫn dùng để join vào meeting.

Fix lổi NAT trên Jitsi Meeting

Chắc hẳn nhiều bạn thấy lạ. NAT thôi mà, làm gì mà phải xoắn.

  • Đúng NAT thôi mà, các bạn chỉ cần NAT trên Firewall giống như public các dịch vụ web bình thường thôi.

Nhưng như thế thì chưa đủ, nếu các bạn không thực hiện 1 bước NAT SIP nữa, thì ở ngoài internet public các thiết bị  mobile sẽ  không có sound + media.

Chính vì vậy mình phải hướng dẫn các bạn phần này.

Thêm dòng NAT này vào file sip-communicator.properties

vi /etc/jitsi/videobridge/sip-communicator.properties

org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=172.16.111.35 => IP local

org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=112.109.94.66 => IP public của Firewall

Cuối cùng là restart services:

service jitsi-videobridge2 restart

Đến đây là kết thúc rồi. Các bạn chỉ cần tạo User trên MS AD và test meeting, chúc các bạn thành công!

Mình xin chân thành nhận các đóng góp của các bạn về những tính năng của Jitsi meeting này, mình sẽ cố gắng R&D để hoàn thiện và sẽ chia sẽ với các bạn trong thời gian tới.

Chân thành cảm ơn các bạn. Nếu mọi người thấy có ích xin hãy share bài viết này để tạo động lực giúp mình nhé.

Tác giả:  Nguyễn Hiếu – ITFORVN.COM

To you support to be access :  Group Facebook ITFORVN

Nguồn tham khảo:

https://jitsi.org/
https://github.com/jitsi
https://prosody.im/

Demystifying JITSI


https://github.com/jitsi/jitsi-meet/wiki/LDAP-Authentication

Đánh giá post

Leave a Reply

Your email address will not be published. Required fields are marked *