CHƯƠNG 2 : XÂY DỰNG TỔNG ĐÀI NỘI BỘ ASTERISK
2.2. CÀI ĐẶT ASTERISK TRÊN CENTOS 6.7
2.2.3. CÁC CÔNG CỤ HỖ TRỢ VẬN HÀNH VÀ CẤU HÌNH ASTERISK
2.2.3.1. MOBAXTERM
Đây là một SSH Client , ứng dụng quản trị máy chủ từ xa thông qua SSH dành cho máy khách, MobaXterm có các tính năng sau:
• Lưu trữ thông tin của nhiều server theo dạng profilẹ Muốn kết nối vào server nào thì click 1 cái, nó sẽ tự mở tab mớị
• Có tính năng Multi Execution – Nghĩa là gõ một lệnh thực thi cùng lúc trên nhiều server.
• Hỗ trợ lưu session, không cần gõ lại mật khẩu mà chỉ cần nhập username là nó tự tìm session phù hợp.
• Remote vào máy tính khác, giống như Teamviewer.
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 18
2.2.3.2. CÁC PHẦN MỀM SOFTPHONE
Các phần mềm dùng gọi điện thoại VoIP thông dụng nhất hiện nay:
▪ X-lite
▪ Zoiper
▪ PortGo
▪ Jitsi
Hình 2.5a: phần mềm Zoiper Hình 2.5b: phần mềm Jitsi
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 19
2.3. CÁCH CẤU HÌNH ASTERISK
Thư mục /etc/asterisk chứa tất cả các tập tin cấu hình cho Asterisk. Mỗi ứng dụng riêng của Asterisk đều có tập tin cấu hình riêng của mình, tuy nhiên có 2 tập tin cấu hình quan trọng nhất là sip.conf và extensions.conf trong /etc/asterisk.
2.3.1. SIP.CONF
Tệp tin này chứa chi tiết cấu hình thuê bao SIP, bao gồm cấu hình chung (trong thẻ
[general]) và cấu hình từng thuê bao (trong thẻ [tên thuê bao]), cấu hình từng thuê bao
về các thông tin của số nội bộ client như username, password, IP, type, security…vv
▪ [general] context dùng để khai báo các thông số chung cho tất cả các thuê bao
sip trong toàn bộ tập tin này, sau đây là các tham số chính:
Tham số Ý nghĩa
Context Tất cả các cuộc gọi mặc định sẽ được chuyển đến ngữ cảnh này ngoại trừ phần dưới tệp tin cấu hình có khai báo ngữ cảnh khác. Udpbindađr Địa chỉ IP mà client kết nối đến kênh udp này, nếu thông số này
được khai báo là 0.0.0.0 tức là cho phép tất cả các địa chỉ IP. Tcpenable Yes|no cho phép và không cho phép dùng tcp
Tcpbindađr Địa chỉ IP mà client kết nối đến kênh tcp này, nếu thông số này được khai báo là 0.0.0.0 tức là cho phép tất cả các địa chỉ IP. Transport Khai báo giao thức truyền thoại udp, tcp/ip
srvlookup quyết định có kích hoạt chức năng DNS SRV lookup hay khơng Callcounter Cho phép =yes để kích hoạt truy cập cuộc gọi các thiết bị SIP Register Để kết nối giao tiếp với server khác.
Allow/disallow
Định nghĩa sử dụng các codec (encoder/decoder) nào được sử dụng cho các cuộc gọi SIP mà chúng ta cho phép thông qua Astersik. Đầu tiên lập disalow=all để vô hiệu tất cả các codec. Sau đó thêm từng codec bằng cách dùng allow=codec như gsm,
alaw, ulaw…vv
Musicclass là nơi thiết lập các bản nhạc chờ mặc định cho tất cả các cuộc gọi SIP. Mặc định là “default”.
Nat Có 2 trạng thái yes|no cho phép hoặc khơng cho phép route ra mạng bên ngoàị
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 20
▪ Cấu hình thuê bao: Trong phần này sẽ khai báo các kênh sip riêng cho từng thuê
bao, tất nhiên các thông số trong phần [general] sẽ có hiệu lực trên các kênh này trừ khi các thơng số được cấu hình lại tại phần cấu hình các kênh này.
Tham số Ý nghĩa
Username Đây là phần cấu hình cho th bao có tên tương ứng, tên có thể là ký tự hay con số.
Secret Mật khẩu để sử dụng kênh này
Type Kiểu kết nối thông tin user, peer hay friend. Kiểu user là chỉ gọi, kiểu peer là chỉ nghe và kiểu friend là kết hợp của cả 2. Host Địa chỉ IP hay tên miền mà client kết nối với kênh nàỵ Giá trị
là dynamic cho tất cả client kết nối đến.
Context Các thuê bao cùng ngữ cảnh có thể nói chuyện với nhau Permit Thiết lập danh sách các địa chỉ IP cho phép đăng ký đến .Mặc
định là tất cả các địa chỉ đều được phép.
Deny Thiết lập danh sách các địa chỉ IP không cho phép đăng ký
Bảng 2.2: Tham Số Dành Riêng Cho Từng Thuê Bao 2.3.2. EXTENSIONS.CONF 2.3.2. EXTENSIONS.CONF
Tệp tin này là tập tin cấu hình Dialplan của hệ thống Asterisk. Dialplan cho biết các cuộc gọi sẽ được xử lý như thế nào qua hệ thống Asterisk. Dialplan sẻ thiết lập cho hoạt động của hệ thống như định hướng các cuộc gọi vào và ra hệ thống, đó là một danh sách các bước hay các lệnh liên tục nhau để thực hiện một tác vụ nào đó mà hệ thống phải thực hiện theọ Dialplan được cấu hình qua tập tin extension.conf về cơ bản gồm những khái niệm sau: Extension(số nội bộ), Priority (độ ưu tiên), Application (ứng dụng), Context (ngữ cảnh).
Trong mỗi ngữ cảnh [context] sẽ có thể có nhiều extension. Extenstion chính là hạt nhân để hệ thống xác định cuộc gọi cần thực hiện. Extension hồn chỉnh gồm có các phần :
exten => Extension, priority, application( ) Trong đó:
▪ Extension: là số điện thoại được quay số.
▪ Priority: là thứ tự thực hiện các ứng dụng trong dialplan.
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 21
Ví dụ: cài đặt Dialplan để có thể thực hiện các cuộc gọi đến thuê bao 101:
[default]
exten=>101,1,Dial(SIP/101,20) exten=>101,2,Hangup()
▪ Lệnh “exten=>” mô tả bước tiếp theo của cuộc gọi đến số “101”.
▪ Số “1”,”2” là độ ưu tiên xử lý lệnh, “1” được xử lý đầu tiên sau đó là “2” , ở đây có thể thay “2” bằng thuật ngữ “n” đại diện cho số ưu tiên tiếp theọ
▪ Lệnh “Dial(SIP/101,20)” là ứng dụng quay số 101, “20” là thời gian chờ nghe máy tính bằng giâỵ Có thể dùng biến ${EXTEN} để thay cho số 101 ở phần application, đây là biến lấy số nhập vàọ
▪ Lệnh “Hangup()” là giải phóng cuộc gọị
Khi quay số “101” lệnh “exten=>” sẽ gọi SIP IP Phone đã đăng ký số “101” tương ứng, nếu cuộc gọi sau 20 giây không được trả lời nó sẽ tự động giải phóng cuộc gọị
Một estension là một nhóm các lệnh báo cho Asterisk thực thi một số công việc .Kế hoạch quay số là một tập gồm nhiều extension, khi một cuộc gọi tương ứng với extension nào thì ứng dụng cho cuộc gọi đó sẽ được thực hiện.
Một extension có nhiều dạng như sau:
Định dạng Giá trị
201 Số cụ thể : 201 _2XX Số đại diện tổng quát
S Extension khởi tạọ Nếu khơng có số extension nào khác được đưa vào, thì đây là extension để thực thi
_(gạch dưới) Bắt đầu một số đại diện tổng quát .(dấu chấm) Số bất kỳ
X Số bất kỳ từ 0-9 Z Số bất kỳ từ 1-9 N Số bất kỳ từ 2-9
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 22
priority : là thứ tự thực hiện các ứng dụng trong kế hoạch quay số, Astersik sẽ bắt đầu
ở priority 1, kế tiếp là ứng dụng tại priority 2 được thực hiện. Một vài lệnh có thể buộc Asterisk nhảy đến priority n +1 .
Kể từ version 1.2 của Astersik, thay vì gán một con số cụ thể cho thứ tự thực hiện như trên, ta có thể gán thứ tự “n” cho mọi dịng “exten=>” , điều này sẽ nói với Astersik là ứng dụng với thứ tự tiếp theo sẽ thực hiện.
Ví dụ:
exten => 123,1,Answer() exten => 123,n, do something exten => 123,n, do something else exten => 123,n, do one last thing exten => 123,n,Hangup()
Version 1.2 cũng cho phép chúng ta gán các nhãn dạng text vào priority. Để gán một
nhãn dạng text vào một priority, đơn giản chỉ là thêm nhãn vào bên trong dấu ngoặc “()” sau priority như sau :
exten => 123,n(label),do something
Application : đây là nơi chúng ta báo cho Astersik biết chúng ta muốn làm gì ,tức là
ứng dụng nào sẽ được thực hiện mỗi khi extesion nào đó được gọi, các ứng dụng như thực hiện quay số, trả lời cuộc gọi hay đơn giản là nhấc máy hay gác máy … Một vài ứng dụng tiêu biểu thường hay được dùng gồm :
Ứng Dụng Mô tả
Answer()
Trả lời cuộc gọi này .Rất nhiều ứng dụng đòi hỏi rằng cuộc gọi phải được trả lời trước khi chúng có thể thực thi các tác vụ khác.
Playback(tên_tệp)
Dùng để phát một file âm thanh dạng .wav hoặc .gsm. Cuộc gọi phải được trả lời trước khi thực thi tác vụ nàỵ
Background(tên_tệp)
Giống như ứng dụng Playback, tuy nhiên nó được dùng để chờ một phím nhập vào từ user, khơng bắt buộc phải nghe hết file âm thanh rồi mới chuyển tới extension khác .Ứng dụng này đòi hỏi cuộc gọi phải trả lời trước
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 23 Goto(contex,extension,priority)
Ứng dụng này giúp chúng ta gởi một cuột gọi đến một context, extension và priority được chỉ định cụ thể.
Voicemail(extension) Chức năng này dùng để chuyển cuộc gọi hiện tại vào hộp thư thoại
VoicemailMain()
Ứng dụng này cho phép user lắng nghe các tin nhắn thoại, cũng như ghi âm các lời chào, tên và thiết lập các tùy chọn cấu hình khác .
Dial(technology/id,options,timeout)
Đây là nơi chúng ta báo cho Asterisk biết để rung chng một điện thoại khi nó được quay số. Các tùy chọn bao gồm:
t : cho phép user bị gọi chuyển cuộc gọi bằng cách nhấn phím # .
T : cho phép user gọi chuyển cuộc gọi bằng cách nhấn phím # .
r : rung chng
m: cung cấp nhạc chờ
H : cho phép gác máy bằng cách nhấn phím
Bảng 2.4: Các Application Thường Dùng
Ngồi ra cịn rất nhiều ứng dụng linh hoạt khác.
Để biết thêm thông tin về các ứng dụng cũng như các tham số kèm theo, dùng lệnh show
aplications ở giao tiếp dòng lệnh của Asterisk. CLI> show Aplications
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 24
2.3.3. CẤU HÌNH TRUNG KẾ
Với các doanh nghiệp thì ngồi nhu cầu gọi nội bộ trong cơng ty thì cịn phải liên hệ với các khách hàng, do đó hệ thống tổng đài này cần được kết nối với mạng điện thoại truyền thống, di động, quốc tế.
Để làm được điều đó thì cơng ty cần phải đăng ký dịch vụ trung kế với các nhà mạng viễn thơng, có thể sử dụng kết nối CO, E1 hoặc Sip Trunk.
Trong bài lab này em sử dụng kết nối sip trunk đến nhà cung cấp Sip Trunk, với đầu số thuê bao là 0873020777. Tài khoản Trunk được cung cấp với cấu trúc như sau:
[trunk] username=2663059143 ;< yoursipaccount> type=friend fromuser=2663059143 ;< yoursipaccount> secret=3240552995 host=sip.tel4vn.com nat=force_rport,comedia dtmfmode=RFC2833 qualify=yes disallow=all allow=ulaw,alaw context=tongdai port=50061 insecure=port,invite
Copy đoạn code trên vào file sip.conf và tiến hành đăng ký sip-trunk như sau:
register =>2663059143:3240552995@sip.tel4vn.com:50061/0873020777
với register => username: secret@host:port/DID_Number
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 25
2.4. THI CÔNG HỆ THỐNG TỔNG ĐÀI ASTERISK CƠ BẢN
Phần này sẽ tiến hành thi cơng một mơ hình tổng đài nội bộ cơ bản như sau:
✓ Tổng đài PBX Asterisk được cài trên hệ điều hành CentOS
✓ CentOS được cài trên máy ảo Oracle VM VirtualBox
✓ Oracle VM VirtualBox cài trên máy Laptop cá nhân
✓ Các softphone X-Lite, Zoiper, PortGo cài trên Laptop cá nhân
✓ Cấu hình phần cứng Laptop: Chip intel core i5, ram 6Gb, HĐ 500Gb, card wifi onboard.
2.4.1. MƠ HÌNH THI CƠNG
Hình 2.6: Mơ hình IP PBX Asterisk
▪ Các softphone và tổng đài PBX Asterisk điều được cài trên một máy tính, các softphone dùng chung phần cứng máy tính như micro, loạ
▪ Router wifi được kết nối đến nhà cung cấp dịch vụ Internet
▪ Máy tính kết nối đến router wifi thơng qua card wifi onboard Trong thí nghiệm trên, kết quả mong muốn đạt được là:
▪ Thiết lập được cuộc gọi giữa các softphone trong mạng LAN
▪ Gọi ra PSTN với số DID làm đại diện
2.4.2. CẤU HÌNH TỔNG ĐÀI
Phần này thực hiện cấu hình Asterisk, khởi tạo các Account cho softphone đăng ký trong file sip.conf, cấu hình định tuyến cho các softphone có thể gọi nhau trong file extension.conf, cấu hình sip trunk để các softphone có thể gọi ra mạng PSTN trong file sip.conf.
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 26
2.4.2.1. CẤU HÌNH FILE SIP.CONF
Mở file sip.conf như sau : vi /etc/asterisk/sip.conf Mục general: [general] context=public udpbindađr=0.0.0.0:5060 tcpenable=no tcpbindađr=0.0.0.0:5060 transport=udp srvlookup=yes callcounter=yes directmedia=yes derectrtpsetup=yes register =>2663059143:3240552995@sip.tel4vn.com:50061/0873020777 Account 201: [201] username=201 secret=123qwe type=friend host=dynamic context=tongdai qualify=yes directmedia=no disallow=all allow=gsm allow=ulaw allow=alaw Account 202: [202] username=202 secret=123qwe type=friend host=dynamic context=tongdai qualify=yes directmedia=no
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 27 disallow=all
allow=gsm allow=ulaw allow=alaw Account Sip Trunk:
[trunk] username=2663059143 type=friend fromuser=2663059143 secret=3240552995 host=sip.tel4vn.com nat=force_rport,comedia dtmfmode=RFC2833 qualify=yes disallow=all allow=ulaw,alaw context=tongdai port=50061 insecure=port,invite
2.4.2.2. CẤU HÌNH FILE EXTENSIONS.CONF
Mục [general]: [general] static=yes writeprotect=no clearglobalvars=no
Cấu hình dialplan cho extension 2XX gọi local và outboud PSTN [tongdai]
exten => _2XX,1,Log(NOTICE, Call local in tongdai context) exten => _2XX,n,Dial(SIP/${EXTEN},60)
exten => _2XX,n,Hangup()
exten => _0Z.,1,Dial(SIP/trunk/${EXTEN},60) exten => _0Z.,n,Hangup()
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 28
2.4.2.3. THIẾT LẬP CÁC SOFTPHONE VÀ KIỂM TRA CUỘC GỌI
Để kiểm tra cuộc gọi nội bộ dùng softphone, ta thiết lập đăng ký các tài khoản sip đã tạo trước đó ( 201, 202) cho softphone như sau:
▪ Cài đặt và khởi động các chương trình softphone : X-Lite, Zoiper
▪ Vào mục Account settings (X-Lite), preferences (Zoiper)
▪ Thiết lập các thông số của số nộ bộ để kết nối với tổng đài như: - Account name: tên đại diện của số nội bộ
- User ID: là số nội bộ
- Domain: là IP của server Asterisk
- Passwork: là mật khẩu của số nội bộ (secret)
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 29 Kiểm tra cuộc gọi từ 201 đến 202:
Hình 2.9: Account 201 call Account 202
Kiểm tra cuộc gọi từ 202 đến PSTN 0981030095:
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 30
2.5. PHÂN TÍCH BẢN TIN SIP
Dùng tool Sngrep để bắt các bản tin, tool này cài trực tiếp trên CentOS thơng qua các gói cài đặt, có giao diện đồ họa trực quan.
Cách cài tham khảo theo link sau:
https://wikị4psạcom/display/KB/How+tơinstall+sngrep+on+your+VoipNow+server
2.5.1. QUÁ TRÌNH REGISTER
Khởi chạy Sngrep bằng lệnh #sngrep
Hình 2.11: Giao diện Sngrep
Tiến hành đăng ký một softphone với tổng đài Asterisk
Hình 2.12: Bản tin Register
Mở bản tin bằng cách nhấn Enter bản tin đó
Hình 2.13: Bên trong bản tin Register
192.168.100.4:49747 : là IP của user 201 có port 49747
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 31 Quá trình đăng ký như sau:
- User gửi bản tin REGISTER lên server
- Server gửi lại bản tin 401 Unauthorized yêu cầu chứng thực, với kèm thuật toán MD5 và chuỗi ký tư ngẫu nhiên noncẹ
- User gửi lên lại bản tin REGISTER với chuỗi chứng thực nằm trong phần Authorization.
- Server kiểm tra và gửi về 200 OK để báo cho user biết đã đăng ký thành công.
2.5.2. THIẾT LẬP CUỘC GỌI
Thực hiện cuộc gọi từ 201 đến 202
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 32 INV (192.168.100.4:8000) 401 Unauthorized ACK INV (192.168.100.4:8000) 100 trying INV (192.168.100.4:17276) 100 trying 180 ringing 180 ringing 200OK(192.168.100.4:56846) ACK 200OK(192.168.100.8:17414) ACK 8000 17414 17276 56846 BYE BYE 200 OK 200 OK RTP RTP
Q trình thiết lập và giải phóng cuộc gọi nội bộ (201 gọi 202) được mơ tả trong hình sau:
User 201 Asterisk User 202 192.168.100.4:49747 192.168.100.8:5060 192.168.100.4:62299
SVTH: NGUYỄN VĂN CHIẾN LỚP: L14CQVT01-N Page | 33
1) User 201 gửi bản tin INVITE đến server yêu cầu thiết lập cuộc gọi đến 202, trong bản tin INVITE chứa phần SDP là các thông số địa chỉ ip, port, codecs,... mà 201 sử dụng trong quá trình truyền và nhận RTP
2) Server gửi lại bản tin 401 Unauthorized yêu cầu 201 chứng thực với thuật toán MD5 và chuỗi ký tự ngẫu nhiên noncẹ
3) 201 gửi bản tin ACK thông báo cho server biết là đã nhận được yêu cầu chứng thực từ server
4) 201 gửi lại bản tin INVITE với chuỗi chứng thực nằm trong phần Authorization
5) Server kiểm tra và xác định 201 đã chứng thực thành cơng, do đó server gửi bản tin 100 Trying để báo cho 201 chờ đợi trong khi server kết nối với 202
6) Server gửi bản tin INVITE đến 202. Chú ý phần SDP đã được server thay đổi với ip, port,codec,... của server. Với kết quả như thế này ta có thể suy ra rằng server sẽ tham gia vào quá trình truyền RTP giữa 201 và 202
7) 202 gửi 100 Trying báo cho server biết là đang xử lý