نصب و راه اندازی WebRTC در استریسک
برای راه اندازی این سرویس ابتدا نیاز به نصب چند ماژول بر روی استریسک داریم. این ماژول ها عبارتند از :
· res_crypto
· res_http_websocket
· res_pjsip_transport_websocket
برای بهبود در کیفیت صدا نصب کدک Opus نیز توصیه می گردد. البته در صورت عدم نصب از کدک های دیگر می توان بهره برد که کیفیت قابل قبولی به شما ارائه میدهد.
کدک های پشتیبانی شونده با مرورگرهای مختلف به شرح زیر می باشند:
video codecs:
Codec | Browser |
---|---|
VP9 | Chrome (48+), Firefox |
VP8 | Chrome, Edge, Firefox, Safari (12.1+) |
AVC / H.264 | Chrome (52+), Edge, Firefox, Safari |
audio codecs:
codec | Browser |
---|---|
G.722 | Chrome, Firefox, Safari |
iLBC | Chrome, Safari |
iSAC | Chrome, Safari |
Opus | Chrome, Edge, Firefox, Safari |
G.711 PCM(A-law) | Chrome, Firefox, Safari |
G.711 PCM(U-law) | Chrome, Firefox, Safari |
برای بررسی ماژول های نصب شده بر روی استریسک می توانید از دستور زیر استفاده فرمایید:
ls -w 1 /usr/lib/asterisk/modules/{crypto,websocket,opus}
در صورتی که خروجی به صورت زیر بود یعنی ماژول های مورد نیاز نصب شده است
/usr/lib/asterisk/modules/codec_opus.so
/usr/lib/asterisk/modules/res_crypto.so
/usr/lib/asterisk/modules/res_format_attr_opus.so
/usr/lib/asterisk/modules/res_http_websocket.so
/usr/lib/asterisk/modules/res_pjsip_transport_websocket.so
مرحله دوم بررسی load بودن ماژول ها در استریسک:
asterisk -rx “module show like crypto”
asterisk -rx “module show like websocket”
asterisk -rx “module show like opus”
در صورتیکه خروجی دستورات وارد شده به صورت زیر بودند ماژول ها به شکل صحیحی راه اندازی شده اند:
نکته: در صورتیکه هر یک از ماژول ها نصب نشده بودند،می توانید با استفاده از menuselect استریسک آن را نصب فرمایید.
مرحله سوم ایجاد گواهینامه certificate
ابتدا فولدر keys را ایجاد می کنیم.
mkdir /etc/asterisk/keys
سپس با استفاده از دستور زیر فایل های مربوطه را ایجاد می نماییم:
./ast_tls_cert -C pbx.example.com -O “My Super Company” -b 2048 -d /etc/asterisk/keys
با استفاده از ast_tls_cert در داخل خود استریسک می توان اقدام به ایجاد این گواهینامه کرد.
-C : ipaddress or DNS name
-O : نام شرکت
-d : آدرس محل ذخیره keys
در ادامه با تایپ دستور زیر از ایجاد فایل ها اطمینان حاصل فرمایید:
ls -w 1 /etc/asterisk/keys
خروجی صحیح به صورت زیر است:
asterisk.crt
asterisk.csr
asterisk.key
asterisk.pem
ca.cfg
ca.crt
ca.key
tmp.cfg
پیکر بندی استریسک
در اینجا ابتدا فایل http.conf را به صورت زیر ویرایش می کنیم (etc/asterisk/http.conf):
[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8088
tlsenable=yes
tlsbindaddr=0.0.0.0:8089
tlscertfile=/etc/asterisk/keys/asterisk.pem
سپس سرویس استریسک را reset کرده و با استفاده از دستور زیر وضعیت پورت را بررسی کنید:
netstat -an | grep 8089
در صورتیکه به صورت زیر نمایش داده شد پورت به صورت صحیح فعال گردیده است.
tcp 0 0 0.0.0.0:8089 0.0.0.0:* LISTEN
در آخرین مرحله نیز می توانید داخلی ها را در فایل sip.conf یا pjsip.conf به صورت زیر تعریف کنید:
SIP
sip.conf====================
[general]
udpbindaddr=0.0.0.0:5060
realm=123.123.123.123 ;replace with your Asterisk server public IP address or host
transport=udp,ws,wss
[199]
host=dynamic
secret=199
context=default
type=friend
encryption=yes
avpf=yes
force_avp=yes
icesupport=yes
directmedia=no
disallow=all
allow=opus
allow=ulaw
allow=h264
allow=vp8,vp9
dtlsenable=yes
dtlsverify=fingerprint
dtlscertfile=/etc/asterisk/keys/asterisk.pem
dtlscafile=/etc/asterisk/keys/ca.crt
dtlssetup=actpass
rtcp_mux=yes
PJSIP
pjsip.conf==================
[transport-wss]
type=transport
protocol=wss
bind=0.0.0.0
; All other transport parameters are ignored for wss transports.
[201]
type=aor
max_contacts=5
remove_existing=yes
[201]
type=auth
auth_type=userpass
username=201
password=201 ; This is a completely insecure password. Do NOT expose this
; system to the Internet without utilizing a better password.
[201]
type=endpoint
aors=201
auth=201
;dtls_auto_generate_cert=yes
webrtc=yes
use_avpf=yes
media_encryption=dtls
dtls_ca_file=/etc/asterisk/keys/ca.crt
dtls_cert_file=/etc/asterisk/keys/asterisk.pem
dtls_verify=fingerprint
dtls_setup=actpass
ice_support=yes
media_use_received_transport=yes
rtcp_mux=yes
context=default
disallow=all
allow=opus
allow=ulaw
allow=h264
allow=vp8,vp9
در نهایت می توانید داخلی مد نظر را بر روی یک کلاینت webrtc تعریف کنید.
در زیر مسیر کلاینتی جهت تست ارائه می گردد:
https://www.doubango.org/sipml5/call.htm
دو نکته قابل توجه:
۱- در مواردی با ایجاد گواهینامه به شکل فوق الذکر با مشکلاتی مواجه خواهید شد که می توانید از طریق زیر نسبت به ایجاد گواهینامه اقدام نمایید.
ایجاد گواهینامه با استفاده از certbot
در ابتدا در صورت عدم نصب certbot آن را نصب می کنیم.
apt install certbot python-certbot-apache
add-apt-repository ppa:certbot/certbot
سپس با دستور زیر گواهینامه را ایجاد می کنیم:
certbot --apache -d your domain
و در نهایت فایل های ایجاد شده را به محل پیش فرض استریسک انتقال دهید.
cat /etc/letsencrypt/live/your domain/privkey.pem >> /etc/asterisk/keys/asterisk.pem
cat /etc/letsencrypt/live/your domain/fullchain.pem >> /etc/asterisk/keys/asterisk.pem
۲- در مواردی احتمالا با فعال کردن پورت WSS با مشکل مواجه خواهید شد، با دستورات زیر مرتفع خواهد شد.
(البته این موارد در ابتدای نصب استریسک باید اعمال شوند)
sudo groupadd asterisk
sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk
sudo usermod -aG audio,dialout asterisk
sudo chown -R asterisk.asterisk /etc/asterisk
sudo chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk
sudo chown -R asterisk.asterisk /usr/lib/asterisk