คอนฟิก Asterisk เพื่อรองรับ SIP Client

หลังจาก ติดตั้ง Asterisk 1.8 บน CentOS 5  เสร็จเรียบร้อยแล้ว ในช่วงเริ่มต้นการทดสอบ ก่อนที่จะเชื่อมต่อเข้ากับ PSTN หรือระบบโทรศัพท์จริง เพื่อไม่ต้องเสียค่าใช้จ่ายในการโทรเข้า-ออก แนะนำให้ทดสอบ และทำความเข้าใจ ด้วย SIP  Client โดยอาจจะใช้ที่เป็น Hardware หรือเป็น Software โปรแกรมติดตั้งบนเครื่อง

หมายเหตุ เนื่องจากคอนฟิกและหลักการของ Asterisk มีเยอะมาก ในที่นี้จะแนะนำวิธีเริ่มให้ใช้งานได้ก่อน แล้วค่อยมาลงรายละเอียดอีกที

สตาร์ตเซอร์วิส Asterisk

[root@cent57-64a ~]# service asterisk start
Starting asterisk:                                         [  OK  ]

ใช้คำสั่ง ps เพื่อดูโปรเซสของ asterisk

[root@cent57-64a ~]# ps -ef | grep asterisk
root      2638     1  0 11:54 pts/0    00:00:00 /bin/sh /usr/sbin/safe_asterisk -U asterisk -G asterisk
asterisk  2641  2638 10 11:54 pts/0    00:00:01 /usr/sbin/asterisk -f -U asterisk -G asterisk -vvvg -c

ไฟล์คอนฟิกหลักของ asterisk จะอยู่ใน /etc/asterisk/ ตัวอย่างไฟล์

[root@cent57-64a ~]# ls -l /etc/asterisk/
total 1316
-rw-rw-r-- 1 asterisk asterisk   140 Oct 12 21:50 adsi.conf
-rw-rw-r-- 1 asterisk asterisk  2760 Oct 12 21:50 agents.conf
-rw-rw-r-- 1 asterisk asterisk  2904 Oct 12 21:50 ais.conf
-rw-rw-r-- 1 asterisk asterisk  2084 Oct 12 21:50 alarmreceiver.conf
-rw-rw-r-- 1 asterisk asterisk  3498 Oct 12 21:50 alsa.conf
-rw-rw-r-- 1 asterisk asterisk   767 Oct 12 21:50 amd.conf
-rw-rw-r-- 1 asterisk asterisk  1044 Oct 12 21:50 app_mysql.conf
-rw-rw-r-- 1 asterisk asterisk  3254 Oct 12 21:50 asterisk.adsi

คอนฟิก SIP Server

คอนฟิกของ SIP จะอยู่ในไฟล์ /etc/asterisk/sip.conf

[root@cent57-64a asterisk]# ls -l /etc/asterisk/sip.conf
-rw-rw-r-- 1 asterisk asterisk 77921 Nov 29 12:13 /etc/asterisk/sip.conf

ตัวอย่างการแก้ไฟล์ sip.conf เพื่ออนุญาตให้ SIP Client เข้ามาใช้งานได้ แต่ต้องระบุ user, password (secret) ที่กำหนดไว้


[user1-xp]
secret=password
type=friend
host=dynamic

[user2-iphone]
secret=password
type=friend
host=dynamic

หลังจากแก้ไขไฟล์คอนฟิกใน /etc/asterisk/ ต้องมีการรีโหลดคอนฟิก เช่นใช้คำสั่ง service

[root@cent57-64a ~]# service asterisk restart
Stopping safe_asterisk:                                    [  OK  ]
Shutting down asterisk:                                    [  OK  ]
Starting asterisk:                                         [  OK  ]
[root@cent57-64a ~]#

การใช้คำสั่ง service เพื่อรีสตาร์ตเซอร์วิสของ asterisk เป็นวิธีที่ไม่แนะนำ ถ้าแก้ไขเฉพาะส่วน เช่น เฉพาะส่วนคอนฟิก sip.conf สามารถรีโหลดคอนฟิกเฉพาะส่วนคอนฟิกได้ ทำให้ไม่กระทบกับการทำงานในส่วนอื่นๆ

พิมพ์คำสั่ง asterisk ตามด้วยออปชั่น ‘-r’ เพื่อเข้าสู่โหมดคอนโซลของ asterisk ซึ่งในโหมดนี้ สามารถเพิ่ม แก้ไข ลบ ตรวจสอบคอนฟิก รีโหลดคอนฟิกหลังการแก้ไข หรือดูการทำงานของ asterisk ได้

[root@cent57-64a ~]# asterisk -r
Asterisk 1.8.7.0, Copyright (C) 1999 - 2011 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 1.8.7.0 currently running on cent57-64a (pid = 3409)
Verbosity is at least 3
cent57-64a*CLI>

พิมพ์คำสั่ง sip reload เพื่อรีโหลดคอนฟิกเฉพาะส่วนของ sip

cent57-64a*CLI> sip reload
Reloading SIP
cent57-64a*CLI>

ในโหมดนี้สามารถใช้คำสั่ง sip show users เพื่อตรวจสอบ user ของ sip ที่เราเพิ่มไว้ได้

cent57-64a*CLI> sip show users
Username                   Secret           Accountcode      Def.Context      ACL  ForcerPort
user1-xp                   password                          default          No   No
user2-iphone               password                          default          No   No

คอนฟิก SIP Client

คอนฟิกบน SIP Client เพื่อชี้มายัง IP ของ Asterisk (SIP Server) แล้วระุบุ user, password ที่ตั้งไว้ ทดลอง call แบบระบุตัวเลขมั่วๆ ดู จะยัง call ไม่ได้ เพราะยังไม่มีการกำหนด dial plan

เช่นทดลอง call เบอร์ 6000 จะขึ้น error ในคอนโซล

cent57-64a*CLI>
== Using SIP RTP CoS mark 5
[Nov 29 12:36:21] NOTICE[3851]: chan_sip.c:22081 handle_request_invite: Call from 'user1-xp' (192.168.1.2:168) to extension '6000' rejected because extension not found in context 'default'.
cent57-64a*CLI>

แก้ไข dialplan (extensions.conf)

การกำหนด dial plan ต้องแก้ไขไฟล์ /etc/asterisk/extensions.conf

[root@cent57-64a ~]# ls -l /etc/asterisk/extensions.conf
-rw-rw-r-- 1 asterisk asterisk 30823 Oct 12 21:50 /etc/asterisk/extensions.conf

แก้ไขไฟล์ /etc/asterisk/extensions.conf โดยแก้ไขภายใต้ context ที่ชื่อ [default] ด้วยการ comment (ใส่เครื่องหมาย ; นำหน้า include) แล้วเติม เบอร์ exten ของแต่ละ SIP Client

[default]
;
; By default we include the demo.  In a production system, you
; probably don't want to have the demo there.
;

;include => demo 
exten => 6001,1,Dial(SIP/user1-xp)

exten => 6002,1,Dial(SIP/user2-iphone)

ในที่นี้หมายความว่า ถ้า call เบอร์ 6001 จะเป็นการโทรไปที่ SIP Client “user1-xp” แต่ถ้า call เบอร์ 6002 จะส่งไปที่ SIP Client “user2-iphone”

หลังแก้ไขไฟล์ extensions.con ต้องรีโหลดคอนฟิกในส่วน dialplan

cent57-64a*CLI> dialplan reload
Dialplan reloaded.
== Parsing '/etc/asterisk/extensions.conf':   == Found

..

ใช้คำสั่ง dialplan show default เพื่อดู dialplan ในส่วน context ชื่อ default

cent57-64a*CLI> dialplan show default
[ Context 'default' created by 'pbx_config' ]
'6001' =>         1. Dial(SIP/user1-xp)                         [pbx_config]
'6002' =>         1. Dial(SIP/user2-iphone)                     [pbx_config]

-= 2 extensions (2 priorities) in 1 context. =-
cent57-64a*CLI>

ทดลอง call ดู  เช่น SIP Client “user1-xp” โทรเบอร์ 6002 จะมีข้อความขึ้นบนคอนโซลของ asterisk ประมาณนี้

cent57-64a*CLI>
== Using SIP RTP CoS mark 5
-- Executing [6002@default:1] Dial("SIP/user1-xp-00000000", "SIP/user2-iphone") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/user2-iphone
-- SIP/user2-iphone-00000001 is ringing
-- SIP/user2-iphone-00000001 is ringing
cent57-64a*CLI>

ข้อมูลอ้างอิง

 

Leave a Reply

Your email address will not be published.