มีอยู่ 2 ฝั่ง ด้าน Huamak และ Bangkapi แต่ละฝั่งมี Asterisk (IAX2) server อยู่ทั้งคู่ ด้าน Huamak มีเบอร์ Extension 1xxx ส่วนด้าน Bangkapi มีเบอร์ extension 2xxx แต่ละเบอร์สามารถโทรหากันภายในและข้าม Server โดยกดเบอร์ Extension ที่ต้องการได้เลย ไม่ต้องกด Code อะไรก่อน
มาดูวิธีการคอนฟิกและทดสอบกันครับ
1. ไซต์ Huamak
IAX2 Server IP = 192.168.1.18 ติดตั้ง Asterisk 1.4.39.2
IAX2 Cleint = Zoiper 2.37, Extension 1000, Codec = gsm, ulaw, alaw
1.1 ไฟล์ /etc/asterisk/iax.conf
;this is an iax configuration for huamak headoffice
[general]
bindaddress=0.0.0.0:4569
iaxcompact=yes
delayreject=yes
amaflags=default
bandwidth=high
autokill = yes
codecpriority=host
minregexpire=60
maxregexpire=3600
authdebug=no
autokill=yes
trunktimestamps=no
trunkfreq=20
;register=> from_huamak:3333@192.168.1.30
[guest]
type=friend
context=default
callerid="Guest IAX User"
[1000]
type=friend
host=dynamic
context=phones
auth=md5
secret=pass1000
callerid="Client 1000" <1000>
qualify=yes
disallow=all
allow=gsm
allow=ulaw
allow=alaw
[from_bangkapi]
;for receiving inbound calls from bangkapi office - 192.168.1.30
type=friend
auth=md5
context=inbound
secret=8888
disallow=all
allow=gsm
allow=ulaw
allow=alaw
[to_bangkapi]
;for making outbound calls to bangkapi office - 192.168.1.30
type=peer
auth=md5
secret=3333
host=192.168.1.30
username=from_huamak
qualify=yes
disallow=all
allow=gsm
allow=ulaw
allow=alaw
1.2 ไฟล์ /etc/asterisk/extensions.conf
[general]
static=yes
writeprotect=no
clearglobalvars=no
[globals]
CONSOLE=Console/dsp
;TRUNK=DAHDI/g0
TRY=3
[inbound]
include => phones
[phones]
include => outbound
exten => _1XXX,1,Dial(IAX2/${EXTEN},60,tT)
exten => _1XXX,n,Hangup
[outbound]
exten => _2XXX,1,Dial(IAX2/to_bangkapi/${EXTEN},60,tT)
exten => _2XXX,n,Hangup
2. ไซต์ Bangkapi
IAX2 Server IP = 192.168.1.30 ติดตั้ง Asterisk 1.4.39.2
IAX2 Cleint = Zoiper 2.37, Extension 2000, Codec = gsm, ulaw, alaw
2.1 ไฟล์ /etc/asterisk/iax.conf
;this is an iax configuration for bangkapi branch office
[general]
bindaddress=0.0.0.0:4569
iaxcompact=yes
delayreject=yes
amaflags=default
bandwidth=high
autokill = yes
codecpriority=host
minregexpire=60
maxregexpire=3600
authdebug=no
autokill=yes
trunktimestamps=no
trunkfreq=20
;register => from_bangkapi:8888@192.168.1.18
[guest]
type=friend
context=default
callerid="Guest IAX User"
[2000]
type=friend
host=dynamic
context=phones
auth=md5
secret=pass2000
qualify=yes
disallow=all
allow=gsm
allow=ulaw
allow=alaw
[from_huamak]
;for inbound from huamak headoffice - 192.168.1.18
type=friend
auth=md5
context=inbound
secret=3333
disall=all
allow=gsm
allow=ulaw
allow=alaw
[to_huamak]
;for outbound call to huamak headoffice - 192.168.1.18
type=peer
auth=md5
secret=8888
host=192.168.1.18
username=from_bangkapi
qualify=yes
disallow=all
allow=gsm
allow=ulaw
allow=alaw
2.2 ไฟล์ /etc/asterisk/extensions.conf
[general]
static=yes
writeprotect=no
clearglobalvars=no
[globals]
CONSOLE=Console/dsp
;TRUNK=DAHDI/g0
TRY=3
[inbound]
include => phones
[phones]
include => outbound
exten => _2XXX,1,Dial(IAX2/${EXTEN},60,tT)
exten => _2XXX,n,Hangup
[outbound]
exten => _1XXX,1,Dial(IAX2/to_huamak/${EXTEN},60,tT)
exten => _1XXX,n,Hangup
3. คอนฟิก Zoiper IAX Softphone
3.1 ด้าน Huamak คอนฟิกเป็นเบอร์ 1000 รีจิสเตอร์กับ Server IP 192.168.1.18
3.2 ด้าน Bangkpai คอนฟิกเป็นเบอร์ 2000 รีจิสเตอร์กับ Server IP 192.168.1.30
4. โทรทดสอบ
4.1 โทรจากเบอร์ Extension 1000 ฝั่ง Huamak ไปเบอร์ Extension 2000 ฝั่ง Bangkpai
ด้านเบอร์ Extension 2000 มีแจ้งว่าโทรเข้ามาจาก Extension 1000
4.2 โทรจากเบอร์ Extension 2000 ฝั่ง Bangkapi ไปเบอร์ Extension 1000 ฝั่ง Huamak
5. Messages บน Asterisk Console
5.1 บน Huamak server ขณะโทรจากเบอร์ Extension 1000 ไปยังเบอร์ Extensions 2000 ที่ Bangkapi
- โค้ด: เลือกทั้งหมด
[2011-03-10 15:07:42] -- Accepting AUTHENTICATED call from 192.168.1.48:
> requested format = gsm,
> requested prefs = (),
> actual format = gsm,
> host prefs = (gsm|ulaw|alaw),
> priority = mine
[2011-03-10 15:07:42] -- Executing [2000@phones:1] Dial("IAX2/1000-777", "IAX2/to_bangkapi/2000|60|tT") in new stack
[2011-03-10 15:07:42] -- Called to_bangkapi/2000
[2011-03-10 15:07:42] -- Call accepted by 192.168.1.30 (format gsm)
[2011-03-10 15:07:42] -- Format for call is gsm
[2011-03-10 15:07:43] -- IAX2/to_bangkapi-1866 is ringing
[2011-03-10 15:07:45] -- IAX2/to_bangkapi-1866 stopped sounds
[2011-03-10 15:07:45] -- IAX2/to_bangkapi-1866 answered IAX2/1000-777
[2011-03-10 15:07:54] -- Hungup 'IAX2/to_bangkapi-1866'
[2011-03-10 15:07:54] == Spawn extension (phones, 2000, 1) exited non-zero on 'IAX2/1000-777'
[2011-03-10 15:07:54] -- Hungup 'IAX2/1000-777'
ไอพี 192.168.1.48 เป็น IP Address ของ Zoiper IAX Softphone นะครับ
5.2 (ต่อจาก 5.1) เป็น Message บน Bangkapi เมื่อเบอร์ Extension 1000 ที่ Huamak โทรมาหาเบอร์ Extension 2000 ที่ฝั่งของมัน
- โค้ด: เลือกทั้งหมด
[2011-03-10 15:05:26] -- Accepting AUTHENTICATED call from 192.168.1.18:
> requested format = gsm,
> requested prefs = (gsm|ulaw|alaw),
> actual format = gsm,
> host prefs = (gsm|ulaw|alaw),
> priority = mine
[2011-03-10 15:05:26] -- Executing [2000@inbound:1] Dial("IAX2/from_huamak-1680", "IAX2/2000|60|tT") in new stack
[2011-03-10 15:05:26] -- Called 2000
[2011-03-10 15:05:26] -- Call accepted by 192.168.1.48 (format gsm)
[2011-03-10 15:05:26] -- Format for call is gsm
[2011-03-10 15:05:27] -- IAX2/2000-4627 is ringing
[2011-03-10 15:05:29] -- IAX2/2000-4627 answered IAX2/from_huamak-1680
[2011-03-10 15:05:38] -- Hungup 'IAX2/2000-4627'
[2011-03-10 15:05:38] == Spawn extension (inbound, 2000, 1) exited non-zero on 'IAX2/from_huamak-1680'
[2011-03-10 15:05:38] -- Hungup 'IAX2/from_huamak-1680'
6. การแก้ปัญหาการใช้งาน
แรกๆที่ทดสอบผมเจอปัญหาการโทรข้าม Server กันหน่ะครับ เพราะตอนแรกผมไม่เข้าใจการทำงานของ IAX (ปกติใช้แต่ SIP) คือเวลามันจะคุยกับ Server อีกตัวนึง มันต้องมี Authentication ทั้งตอนโทรเข้าและโทรออก ยกตัวอย่างเช่น
จะโทรจาก Huamak ไป Bangkapi ทางด้าน Bangkapi จะต้องเซ็ตไว้ในไฟล์ iax.conf ให้มีรายละเอียดของ inbound จาก Huamak ซึ่งผมใช้ชื่อว่า [from_huamak] และรายละเอียดของ outbound ที่จะโทรไป Huamak ซึ่งผมใช้ชื่อว่า [to_huamak]
เมื่อ Huamak ส่ง Call เข้ามายัง Bangkapi ทางด้าน Bangkapi ก็จะเช็คข้อมูลที่ Huamak ส่งมาว่าตรงตามที่ระบุไว้ในส่วน [from_huamak] หรือไม่ เช่น username ต้องเป็น from_huamak และ secret ต้องเป็น 3333 ถ้าไม่ก็จะ Reject
อ่านเฉยๆอาจจะยังไม่เข้าใจ ยกตัวอย่างเลยหล่ะกันครับ
ตอนโทรจาก Huamak ไปบางกะปิ
ที่ Huamak Server มันจะใช้อันนี้
[to_bangkapi]
;for making outbound calls to bangkapi office - 192.168.1.30
type=peer
auth=md5
secret=3333
host=192.168.1.30
username=from_huamak
qualify=yes
disallow=all
allow=gsm
allow=ulaw
allow=alaw
และเมื่อ Call มาถึง Bangkapi Server มันจะตรวจสอบ Call กับข้อมูลอันนี้
[from_huamak]
;for inbound from huamak headoffice - 192.168.1.18
type=friend
auth=md5
context=inbound
secret=3333
disall=all
allow=gsm
allow=ulaw
allow=alaw
ดูสีนะครับ สีแดง-สีแดง ต้องตรงกัน สีน้ำเงิน-สีน้ำเงิน ต้องตรงกัน ไม่งั้นโทรไม่เข้า
ประมาณนี้ครับ ลองปรับเปลี่ยนให้เหมาะกับการใช้งานจริงๆของแต่ละท่านครับ ติดปัญหาตรงไหนก็โพสต์มาได้ จะได้ช่วยกันแก้ไขอ่ะครับ