Cách cài đặt Turn Server cho WebRTC

WebRTC cài đặt TURN/STUN server

Đã 5 tháng tức lúc mình viết ra bài "WebRTC là cái hợi gì?" mình luôn tự nhủ bản thân phải làm hết series về WebRTC. Nhưng do dịch bệnh, và do bận một số công chuyện ở công ty cũng như các dự án cá nhân, nên mình đã pending lại các blogs trong một khoảng thời gian. Hôm nay mình sẽ viết các bài viết tiếp theo về WebRTC trên series để làm sao chúng ta có thể build được 1 ứng dụng có thể hội thoại trực tuyển từ 10 - 15 người nhé. Bài viết hôm nay sẽ là về Turn Server


Ở bài viết trước giới thiệu về WebRTC mình đã đi hầu hết các khái niệm, nhưng mình sẽ nhắc lại một chút về Turn Server là gì để cho các bạn không đọc bài viết trước có thể keep up được luôn.

Khi làm việc với WebRTC chúng ta sẽ tạo một kết nối giữa 2 khác hoặc cùng mạng với nhau, do một số vấn đề gì như là làm thế nào để kết nối được 2 máy tính khác mạng? Vì giả sử một máy tính trong mạng A muốn kết nối với một máy tính trong mạng B. Nhưng trong mạng A hoặc mạng B có 10 máy tính, thì làm sao để có thể kết nối được 2 máy tính có mong muốn được kết nối với nhau. Có rất nhiều cách được đề ra trong đó có TURN và STUN là hai cách chủ yếu để kết nối.

Bình thường chúng ta hoàn toàn có thể dùng server STUN (có rất nhiều server miễn phí ở đây, và có các server của google hoàn toàn miễn phí) đây là một phương pháp nhẹ và đơn giản nhất để kết nối hai máy với nhau tuy nhiên cách này chỉ có thể cover khoảng 80% các kết nối, đối với các kết nối có tường lửa giống như là mạng 3G, 4G ở một số quốc gia thì việc kết nối qua STUN là việc không thể. Vậy nên nó sinh ra khái niệm TURN. Các bạn có thể nhìn hình ảnh phía trên để xem cách kết nối giữa hai máy với TURN server. Ở bài viết này mình sẽ không nói chi tiết về cách hoạt động của TURN server, mà mình sẽ chỉ cho bạn cách để tạo 1 server TURN để có thể kết nối hai máy tính với nhau.

Note: Để giảm thiểu độ trễ, TURN server nên ở gần nhất với máy tính mà muốn kết nối với nó và TURN server sẽ ngốn rất nhiều băng thông vì nó phải nhận và truyền âm thanh và hình ảnh của cả 2 máy.

Cài đặt Coturn Server trên Ubuntu

Corturn là một open-source có thể tạo ra TURN và STURN server cho VOIP và WebRTC. Coturn hiện tại có sẵn trên Ubuntu repository mà không cần cài Repo ngoài thế nên là nó khá tiện, để cài đặt chúng ta sử dụng câu lệnh

sudo apt install coturn
Sau khi cài đặt hoàn thành, thì Coturn tự động chạy, bạn có thể check nó bằng
systemctl status coturn
Đây là ví dụ sau khi chạy kiểm tra trnajg thái:



Nếu nó không hiển thị trạng thái active thì bạn có thể khởi động lại với
sudo systemctl start coturn
Và chúng ta cũng cho nó tự chạy khi khởi động lại server
sudo systemctl enable coturn

Cấu hình Coturn

Chỉnh sửa config file tại
sudo nano /etc/turnserver.conf
Mặc định thì tất cả config trong file này sẽ không dùng tới tức là bị commented. Dưới đây là file config mẫu bạn có thể copy và dùng nó trong file config trên server
  • Thay thế your-domain.com thành domain name của bạn (optional)
  • Thay đổi 12.24.56.78 thành địa chỉ IP public của bạn (ifconfig.me)
  • Cài đặt mã xác thực để chỉ có mình bạn có thể truy cập vào server
# Run as TURN server only, all STUN requests will be ignored.
# If you want run STUN along with TURN, just comment this line
no-stun

# Specify listening port. Change to 80 or 443 to go around some strict NATs.
listening-port=8443
tls-listening-port=5349

# Specify listening IP, if not set then Coturn listens on all system IPs. 
listening-ip=12.34.56.78
relay-ip=12.34.56.78

# These lines enable support for WebRTC
fingerprint
lt-cred-mech
realm=your-domain.com

# Authentication method
use-auth-secret
static-auth-secret=your-auth-secret

total-quota=100

# Total bytes-per-second bandwidth the TURN server is allowed to allocate
# for the sessions, combined (input and output network streams are treated separately).
bps-capacity=0

# This line provides extra security.
stale-nonce

log-file=/var/log/turnserver/turn.log
no-loopback-peers
no-multicast-peers
Lưu file và khởi động lại Coturn server với
sudo systemctl restart coturn
Coturn sẽ chạy với user turnserver. Chạy command này để kiểm tra xem nó có chạy trên port 8443 hay không
sudo ss -lnpt | grep turnserver

Tổng kết

Và đó chúng ta đã cài đặt xong một TURN server, khá là đơn giản phải không. Với Coturn bạn hoàn toàn có thể cài đặt cả STUN nếu không muốn sài hàng free :D. Cuối cùng là để kiểm tra TURN/STUN server của chúng ta có hoạt động không thì các bạn vào link này. Rồi nhập thông tin server và bấm Gather candidates. Nếu server chúng ta không hoạt động thì sẽ báo lỗi là connection error hoặc không hiện candidates. Lúc này bạn check lại xem đã mở port 8443/tcp và 8443/udp hay chưa, check xem Coturn có đang chạy không nhé