GIT – là một phần mềm tự do nguồn mở, ban đầu do Mark Spencer viết, với mục đích tạo nên một hệ thống tổng đài cá nhân (PBX – private branch exchange) kết nối đến hầu hết các mạng có sẵn như IP, PSTN, và sử dụng các chuẩn SIP, MGCP, H323. còn có giao thức riêng là IAX (Inter- eXchange).

Sau đây bài viết sẽ hướng dẫn các bạn cài đặt và cấu hình Asterisk trên

I. Cài đặt Asterisk

Có hai cách chính để cài đặt hệ thống Asterisk IP PBX system. Đó là cài đặt từ các file hay cài đặt bằng cách compile trực tiếp từ source. Tác giả bài viết recommend các bạn nên cài đặt bằng cách compile từ source, nhằm tránh các lổi môi trường thường gặp khi dùng.

Có 2 cách chính lấy source của Asterisk:

Source được đóng gói trên website của Digium tại URL http://www.asterisk.org/downloads . Source đã được test bởi người sử dụng và các developer rất kỷ, và có thể xem như là một stable version. Một lệnh WGET [URL] đơn giản sẽ giúp bạn điều này.

# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.14.1.tar.gz

Source được lấy trực tiếp từ hệ thống CVS của project Asterisk. Lấy source từ hệ thống CVS/ sẽ cho phép bạn có những tính năng mới nhất bởi nó lien tục cập nhật khi các developer commit code vào hệ thống, nhưng điều đó cũng đồng nghỉa đây là một bản unstable version. Để có thể lấy source từ CVS, bạn phải có Subversion hoặc các chương trình tương tự cài sẳn (có thể nhanh bằng lệnh “yum subversion” nếu bạn dùng CentOS / Fedora Core / ).

Dùng lệnh svn checkout để download source về đường dẩn hiện tại

# svn checkout http://svn.digium.com/svn/asterisk/trunk asterisk
# svn checkout http://svn.digium.com/svn/zaptel/trunk zaptel
# svn checkout http://svn.digium.com/svn/libpri/trunk libpri

Chi tiết có thể tham khảo trang http://www.asterisk.org/download

Cài đặt Asterisk

Bạn cần GCC (hoặc GNU GCC) để compile Asterisk. Trong trường hợp nếu server của bạn không có GCC, dùng lệnh “yum install gcc” để cài đặt GCC.

Sau khi đã download source Asterisk dưới dạng .tar.gzip, chúng ta giải nén và untar cho nó:

# tar –xzvf asterisk-1.8.14.1.tar.gz

Hoặc

#gzip –d asterisk-1.8.14.1.tar.gz

#tar –xvf asterisk-1.8.14.1.tar.gz

Folder asterisk-1.8.14.1 sẽ được tạo, duy chuyển vào trong Folder asterisk-1.18.14.1

#cd asterisk-1.18.14.1

Bạn chú ý trong thư mục asterisk-1.18.14.1 có một file đặc biệt là Makefile, khi bạn chỉ cần compile thêm module hay re-compile một module bị hỏng, bạn có thể vào đây để edit option của mình. Bạn có thể compile đè lên một asterisn instance đang chạy mà không bị ảnh hưởnh điều gì.

Compile source:

# make

# make install

Bạn có thể dùng lệnh # make samples để tạo file config mẫu

Trong cấu trúc thư mục của Asterisk, có 2 nơi cần lưu ý:

/etc/asterisk/ : chưa các file configuration dạng *.conf, bạn có thể thay đổi trực tiếp các file config bằng một editor (vi) và reload asterisk để thay đổi có hiệu lực.

/var/lib/asterisk/ : Chứa các file library, sound ..etc của Asterisk

Dùng lệnh “ # asterisk “ để start process asterisk, và dùng lệnh “ # asterisk –r “ để kết nối vào Asterisk Console

Tip : trước khi cài Asterisk, bạn nên chạy các sau để nâng cấp GCC, Kernel Core và Kernel source để tránh bị lổi:

yum update(install) gcc

yum update(install) kernel-devel

yum update kernel

Hãy kiểm tra lại Kernel core và Kernel Source có version giống nhau, vì như thể sẽ giảm thiếu rất nhiều rủi ro khi compile Asterisk.

Kiểm tra kernel và source:

uname –a

rpm -qa |grep -i kernel-devel

II. Technical Indepth

Asterick có thể được cấu hình với nhiều mục đích khác nhau, nhưng mô hình thông thường nhất là Client/Server. Mô hình này cho phép các client – hay còn gọi là UAC – user agent client kết nối vào server là Asterisk – hay còn gọi là UAS – User Agent Server. Các UAC là nơi sinh ra các session trong khi UAS thì xử lý thụ động các session nhận được dựa trên tập hợp rule có sẳn. Phần IV sẽ đi rỏ hơn về các dạng ứng dụng này.

Ta có thể cấu hình Asterisk trong console mode, hoặc có một cách tiện lợi hơn là edit trực tiếp các file cấu hình trong /etc/asterisk. Mổi ứng dụng riêng của Asterisk như voicemail, zaptel, music-on-hold, meetme, conference, iax … đều có configuration riêng của mình, tuy nhiên có 2 file cấu hình quan trọng nhất là sip.conf và extension.conf:

 Sip.conf : file cấu hình về các thông tin của các UAC như username, password, IP, type, security, codec, là thành phần căn bản nhất lưu giử thông tin trong Asterisk.

 Extension.conf: file cấu hình về các luật định tuyến cuộc gọi, luật quay số, các extension trong ngoài và những tính năng đặc biệt khác. Extensions.conf là file quan trọng nhất trong bất kỳ cấu hình Asterisk nào.

Các file cấu hình khác

 Voicemail.conf: file cấu hình cho hệ thống voice-mail của asterisk. Asterisk có thể dùng lệnh Sendmail trên CentOS để gởi mail đến cho các địa chỉ được lưu trong file cấu hình này.

 Zaptel.conf: File này nằm ngoài /etc, là file chứa thông số index, driver dành cho Linux khi kích hoạt các thiết bị Telephony cắm trực tiếp vào Asterisk thông qua cổng PCI

 Zapata.conf: Cũng thuộc module zaptel, nhưng là file kết nối các thiết bị Telephony đã được khai báo vào hệ thống chính của Asterisk

 Iax(2).conf: Các thông số về IAX (inter-asterisk protocol) dùng khi kết nối 2 asterisk box với nhau

 MeetMe.conf: Một chức năng tạo room conference căn bản.

Sau đây chúng ta thử xem qua một cấu hình căn bản với 1 server Asterisk và 2 Client dùng X-Lite . Chúng ta cần làm 2 việc:

  1. Định nghĩa trên sip.conf 2 hạng mục tương ứng với 2 client
  2. Định nghỉa trên extension.con dial-plan và extension tương ứng

Trên File sip.conf:

[101]

Type=friends

Username=gocit

Secret=gocit@

Disallow=all

Allow=ulaw

Host=dynamic

Context=test-dialplan

[102]

Type=friends

Username= hautp

Secret= hautp@

Disallow=all

Allow=ulaw

Context=test-dialplan

Host=dynamic

Chú ý: Trường Context trong file sip.conf phải đúng với một context – được định nghỉa bởi ký hiểu [ ] trong file extensions.conf, như thế SIP Entry đó có thể gọi được các dial-plan bên trong một context.

Trên File extensions.conf

[test-dialplan]

Exten => 101,1,Dial(SIP/101)

Exten => 102,2,Dial(SIP/102)

Config trên sẽ cho phép 2 end-point dùng X-lite softphone, tương tự bạn có thể thêm vào nhiều ID hơn trong file SIP.conf và tạo dial-plan tương ứng với extensions.conf. Nếu Asterisk Server được đặt trên một địa chỉ IP public, và các client (softphone, phone) nằm ở địa chỉ Private, bạn phải thêm vào dòng NAT=1 trong các SIP ID được định nghỉa tại file sip.conf. Host=Dynamic cho phép các client có IP động bất kỳ, tuy nhiên chỉ áp dụng được trong trường hợp các UAC có khả năng register vào hệ thống.

Chi tiết về các thông số của sip.conf và exntesion.conf có thể được tìm thấy tại đây:

http://www.voip-info.org/wiki-Asterisk+config+sip.conf

http://www.voip-info.org/wiki-Asterisk+config+extension.conf

III. Chi tiết đằng sau một cuộc gọi SIP

Bản thân Asterisk có thể chạy nhiều protocol khác nhau như H323, Skinny (SCCP) và MGCP … nhưng khi nhắc đến *, người ta nghĩ ngay đến SIP. Ngoài Asterisk, cấu trúc rất linh động của SIP cũng là engine cho rất nhiều ứng dụng khác nhau: Instant Messaging (MSN, Jabber), Online Game, Session Control, WholeSale VoIP và các ứng dụng tùy biến khác vốn đòi hỏi sự kết nối linh hoạt giữa các bên tham gia.

Bây giờ chúng ta sẽ phân tích cấu hình tại phần II,

Tuần tự các bước diển ra như sau:

  1. Asterisk Server UP, hautp có địa chỉ IP là 2.2.2.2 và đã / đang register vào Asterisk. Asterisk sẽ lưu một Entry trong location table (peer table) của mình là hautp@2.2.2.2
  2. Máy tính gocit vừa bootup, chương trình X-lite tự động kích hoạt kết nối vào Asterisk (vì X-lite đã được cấu hình sẳn). X-lite sẽ gởi 1 SIP Message Method REGISTER vào Asterisk với SIP ID là gocit@1.1.1.1 và location là 1.1.1.1
  3. Asterisk sẽ gởi lại cho gocit 403 Unauthorized Message, thực chất là một dạng Challenge Message.
  4. Gocit’s X-lite khi nhận được Message 403 sẽ tiến hành MD5 hash cái secret mà gocit đã cấu hình trong X-lite, sau đó nó gởi một SIP REGISTER MESSAGE với một header đặc biệt: www_authorization hoặc proxy_authorization (tùy loại UA, trong trường hợp này là www_authorization), trong đó chứa giá trị Hash mà nó mới có được. Asterisk khi nhận REGISTER message thứ nhì của gocit , kiểm tra và thấy có header www_authorization có giá trị hash. Asterisk sẽ check trong bộ nhớ của mình xem SIP ID là gocit có secret không, nếu có, nó sẽ hash cái secret trong bộ nhớ và so sánh với hash string được gởi từ gocit lên. Nếu giống nhau, thì tiếp tục sang bước 5, còn fail thì lập lại bước 2. Khi Asterisk start, nó sẽ lấy đọc thông số trong các File .conf một lần duy nhất, do đó khi thay đổi trong các file config của Asterisk, phải restart asterisk bằng cách kết nối vào Asterisk CLI và dùng lệnh “reload”. 
  5. Khi hash-check pass, Asterisk gởi về cho gocit một SIP MESSAGE 200 OK (giống http) báo rằng anh đã registered. Đồng thời nó cũng cập nhật location-table của mình là : gocit@1.1.1.1
  6. Khi gocit tiến hành gọi hautp (với SIP, người ta có thể gọi bằng số, hoặc bằng tên cũng được), X-lite của gocit sẽ gởi một INVITE MESSAGE vào Asterisk. Asterisk sẽ look up trong Location Table của mình và tìm thấy hautp tại địa chỉ 2.2.2.2 (bước 5.5), trong trường hợp tìm không thấy, Asterisk có thể gởi về cho gocit một SIP MESSAGE 404 NOT FOUND
  7. Asterisk forward SIP INVITE MESSAGE đến hautp@2.2.2.2 , tất nhiên cũng đã add vào trong INVITE đấy địa chỉ của mình. *
  8. Đồng thời, Asterisk cũng gởi về cho gocit một SIP MESSAGE 180 RINGBACK, báo hiệu là phone của hautp@2.2.2.2 đã reng, chờ đợi bắt máy. 
  9. hautp bắt máy, và gởi về cho Asterisk một SIP MESSAGE 200 OK với đầy đủ thông số Voice của phone của hautp như Codec, Timing .v.v. nằm trong SIP Body (Session Description Protocol – SDP)
  10. Asterisk chuyển Message 200 OK về cho gocit, và hoàn tất quá trình kiểm soát tín hiệu SIP giửa 2 UAC. Đồng thời cập nhật các thông tin về Billing nếu có cấu hình.

Lúc này, gocit@1.1.1.1 và hautp@2.2.2.2 mở một RTP session trực tiếp đến nhau hoặc thông qua Asterisk tùy thuộc vào NAT setting giửa 2 người. SIP nằm ở thượng tầng của Transport Layer, dùng UDP 5060, trong khi RTP thường dùng các private port > 1024. Do SIP và RTP cùng chạy trên một ứng dụng nhưng lại khác port, nên đôi khi chúng ta gặp tình huống UAC sẽ reng nhưng RTP bị block, giới chuyên môn gọi là One-Way-Audio.

* ở giửa các bước thật ra còn có một dạng Message ACK nhỏ, tuy nhiên để đơn giản hóa, người viết lược bỏ phần này. Chi tiết về SIP có thể được tìm thấy rất nhiều trên Internet, tuy nhiên để hiểu sâu, kỷ và chính xác, RFC là 1 bắt buộc.

SIP RFC: http://www.faqs.org/rfcs/rfc3261.html

IV. Các ứng dụng của Asterisk

Asterisk hổ trợ rất nhiều công nghệ khác nhau như H323, SIP, MCGP, SCCP cũng như nhiều loại giao tiếp mạng khác nhau như FXO, FXS, ISDN PRI, ISDN BRI, E3 thậm chí SS7. Bản thân cấu trúc nguồn mở cùng giao thức SIP linh hoạt, cho phép developer lẩn người sử dụng có thể customize ứng dụng Asterisk của mình đáng kể. Đặc biệt, phải kể đến giao tiếp Asterisk AGI và AsteriskRealtime cho phép Asterisk kết hợp với các ngôn ngử lập trình thông dụng như C, C++, VBB, PHP, Shell-script, Python cùng với hệ cơ sở dử liệu MySQL hoặc Oracle để phát triển những ứng dụng Voice-Application khác nhau. Sau đây người viết xin giới thiệu một vài hệ thống mà đã có kinh nghiệm làm qua:

  1. SIP Registrar / IP PBX: Ứng dụng căn bản nhất của Asterisk, nhưng cũng là mạnh nhất. Asterisk được cấu hình làm SIP proxy chính cho các Client kết nối vào. Có thể tích hợp AsteriskRealTime và một WEB GUI để tiện cho việc quản lý (tự viết hoặc dùng có sẳn). SIP Registrar có sẳn các tính năng hấp dẩn như voicemail, IVR, call-transfer, conference .v.v.
  2. Conference Hub: Tận dụng chức năng của Asterisk và biến nó trở thành một Conference Hub. Asterisk được dedicate sử dụng resource của phần cứng để mirror các dòng RTP khác nhau từ nhiều client gọi đến. Thông thường trong trường hợp này, Asterisk được sử dụng chung với một hệ thống Softswitch khác – Asterisk trở thành UAC của hệ thống đó
  3. Application Call Center: Tính năng IVR (interactive voice respond) của Asterisk có thể được customize thành nhiều lớp khác nhau (không có giới hạn), cho phép tạo ra một danh mục trả lời tự động khổng lồ. Ứng dụng này được dùng nhiều nhất trong các trung tâm hổ trợ khách hàng có trả lời tự động, tiết kiệm được rất nhiều thời gian và chi phí. Chúng ta cũng có thể tạo ra một chương trình tương tác DATA/PHONE khi dùng với Asterisk AGI và một ngôn ngử lập trình khác. 
  4. Class 5 Features box: Asterisk được sử dụng như một thiết bị cung cấp dịch vụ cộng thêm cho các softswitch khác. Rất nhiều SIP proxy (nhất là của Telco) có cấu trúc khá đơn giản và gọn nhằm tăng tốc độ xử lý, do đó thường thiếu những tính năng như voicemail, calling-card .v.v.. Asterisk lắp vào chổ trống đó một cách hoàn hảo, và được rất nhiều các start-up VoIP provider sử dụng
  5. Codec Transformer: Dân VoIP chuyên nghiệp hẳn sẽ rất đau đầu với các hệ thống Codec khác nhau của voice, đặc biệt khi kết nối đến 1 nhà cung cấp khác. Thương thì ít ai chịu thay đổi Codec mặc định của mình, nếu nói là không thể. Có nhiều giải pháp work-around như back-to-back TDM trên các Media Gateway. Asterisk có thể làm IP-to-IP codec transformation một cách hoàn hảo, đặc biệt với license của g729a. 
  6. Media (PSTN/ISDN/E3) Gateway: Bản thân Asterisk sử dụng chung với các module Zaptel ISDB PRI , FXO, FXS cho phép Asterisk gởi cuộc gọi ra ngoài các hệ thống mạng điện thoại công cộng hay ISDN, đây cũng là một giải pháp giá rẻ.

Tác giả bài viết Tan Huynh

Tham gia thảo luận bài viết tạo forum : http://forum.gocit.vn/threads/cai-dat-asterisk.222/

Xem thêm : http://forum.gocit.vn/threads/the-complete-asterisk.366/

Print Friendly

Comments

comments

Bài viết liên quan