H.323 คืออะไร มันคือ VoIP Signaling Protocol อีกแบบครับ นอกเหนือจาก SIP, IAX2, SCCP, MGCP แต่เก่ามากแล้ว มีใช้งานน้อยลงเรื่อยๆ และกำลังจะจากไปในอนาคตอันใกล้นี้ ตู้สาขายี่ห้อดังๆ แพงๆ ยังใช้มี H.323 อยู่ครับ (คาดว่าเป็นรุ่นแรกๆที่พัฒนามาให้รองรับ VoIP ส่วนรุ่นหลังๆก็พัฒนาเป็นแบบผสมระหว่าง SIP + H.323 แล้ว) ถ้าบังเอิญว่าเราต้องเอา Elastix ไปเชื่อมต่อ IP กับตู้สาขาที่มีแต่ H.323 เราก็ต้องคอนฟิก H.323 บน Elastix ไม่งั้นก็จะคุยกันไม่รู้เรื่อง
** บางท่านอาจจะหาทางแก้ปัญหาโดยเอา SIP VoIP Gateway (FXS/FXO/E1) มาคั่นกลางระหว่างตู้สาขากับ Elastix แล้วให้ Elastix คุยกับ VoIP Gateway แบบ SIP แทน แบบนี้ก็ได้เหมือนกันครับ แต่มันก็จะสิ้นเปลืองอุปกรณ์โดยใช่เหตุ **
ใน Elastix ดูเหมือนว่าจะมี H.323 อยู่นะครับ สังเกตุจาก
- มีโมดูลชื่อ chan_ooh323.so อยู่ในโฟลเดอร์ /usr/lib/asterisk/modules หรือ /usr/lib64/asterisk/modules
- มีไฟล์ h323.conf อยู่ในโฟลเดอร์ /etc/asterisk
แต่ว่ามันไม่สตาร์ท ผมเช็คแบบนี้ครับถึงรู้ว่า H.323 มันไม่สตาร์ท
- รันคำสั่ง netstat -ln | grep 1720 ดูก็ไม่เห็น
** ไฟล์ /etc/asterisk/ooh323.conf มีบรรทัด port=1720 อยู่ แสดงว่าถ้า H.323 ทำงานมันต้อง Listen ที่พอร์ต 1720 นี้
- รันคำสั่ง asterisk -rx "core show channeltypes"
- โค้ด: เลือกทั้งหมด
Type Description Devicestate Indications Transfer
---------- ----------- ----------- ----------- --------
Phone Standard Linux Telephony API Driver no yes no
EXTRA GSM/CDMA Telephony Driver FOR Asterisk w no yes no
USTM UNISTIM Channel Driver no yes no
Bridge Bridge Interaction Channel no no no
MGCP Media Gateway Control Protocol (MGCP) yes yes no
Agent Call Agent Proxy Channel yes yes no
MulticastR Multicast RTP Paging Channel Driver no no no
SIP Session Initiation Protocol (SIP) yes yes yes
Jingle Jingle Channel Driver no yes no
IAX2 Inter Asterisk eXchange Driver (Ver 2) yes yes yes
DAHDI DAHDI Telephony Driver w/PRI & MFC/R2 & yes yes no
Skinny Skinny Client Control Protocol (Skinny) yes yes no
Gtalk Gtalk Channel Driver no yes no
Local Local Proxy Channel Driver yes yes no
----------
14 channel drivers registered.
ไม่มี H.323 ครับ มันหายไปไหน มันไม่สตาร์ท
วิธีแก้ไขให้ H.323 รัน
1. ไฟล์คอนฟิกของโมดูล chan_ooh323.so
ไฟล์คอนฟิกของ chan_ooh323.so ในโฟลเดอร์ /etc/asterisk ชื่อไฟล์มันผิดครับ ไฟล์คอนฟิกมันต้องชื่อ ooh323.conf ครับ ไม่ใช่ h323.conf แล้วจะหาไฟล์ ooh323.conf ได้จากที่ไหนหล่ะ ก็เอามาจาก Source Code ของ Asterisk ยังไงหล่ะครับ เวอร์ชั่นไหนก็ได้ครับไม่จำเป็นต้องเวอร์ชั่นเดียวกันกับที่รันอยู่
ดาวน์โหลด Source Code ของ Asterisk จากเว็บนี้ครับ http://downloads.asterisk.org/pub/telep ... k/releases
เลือกดาวน์โหลด Asterisk Source Code เวอร์ชั่นที่ใช้อยู่หรือเวอร์ชั่นใกล้เคียงก็ได้ตามสะดวกครับ
- โค้ด: เลือกทั้งหมด
wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.18.0.tar.gz
เสร็จแล้วแตกไฟล์
- โค้ด: เลือกทั้งหมด
tar xzvf asterisk-1.8.18.0.tar.gz /usr/src
แล้วก๊อปไฟล์คอนฟิกของ H.323 ครับ เปลี่ยนโหมด เปลี่ยน Owner ให้เรียบร้อย
- โค้ด: เลือกทั้งหมด
cp /usr/src/asterisk-1.8.18.0/configs/chan_ooh323.conf.sample /etc/asterisk/ooh323.conf
chmod +x /etc/asterisk/ooh323.conf
chown asterisk:asterisk /etc/asterisk/ooh323.conf
สำหรับท่านที่ไม่อยากดาวน์โหลด Source Code ขนาด 20+ M เพื่อเอาไฟล์แค่ไฟล์เดียว ผมเตรียมไว้ให้ท่านเรียบร้อยแล้วครับ เป็นไฟล์ต้นฉบับเลยนะครับไม่ได้แก้ไขอะไรเลย
- โค้ด: เลือกทั้งหมด
cd /etc/asterisk
wget http://www.voip4share.com/sources/ooh323.conf
chmod +x /etc/asterisk/ooh323.conf
chown asterisk:asterisk /etc/asterisk/ooh323.conf
2. โหลดโมดูล chan_ooh323.so
เข้า Asterisk Console แล้วรันคำสั่งเพื่อโหลดโมดูล
- โค้ด: เลือกทั้งหมด
asterisk -r
Unload ก่อนครับ รันคำสั่งนี้
- โค้ด: เลือกทั้งหมด
module unload chan_ooh323.so
ผลลัพธ์
Unloaded chan_ooh323.so
คราวนี้โหลด รันคำสั่งนี้
- โค้ด: เลือกทั้งหมด
module load chan_ooh323.so
ผลลัพธ์
- โค้ด: เลือกทั้งหมด
Loaded chan_ooh323.so
[Dec 2 10:13:36] == Parsing '/etc/asterisk/ooh323.conf': [Dec 2 10:13:36] == Found
[Dec 2 10:13:36] -- == Setting default context to default
[Dec 2 10:13:36] == Registered channel type 'OOH323' (Objective Systems H323 Channel Driver)
[Dec 2 10:13:36] == Registered RTP glue 'OOH323'
[Dec 2 10:13:36] Loaded chan_ooh323.so => (Objective Systems H323 Channel)
โหลดได้สำเร็จครับ
จริงๆแล้วเราสามารถสั่ง Unload/Load โมดูล โดยไม่ต้องเข้า Asterisk Console ได้นะครับ คือสั่งจาก Linux Prompt เลย แต่ไม่ค่อยจะเห็น Messages อะไรมากเท่าไหร่
- โค้ด: เลือกทั้งหมด
asterisk -rx "module unload chan_ooh323.so"
และ
- โค้ด: เลือกทั้งหมด
asterisk -rx "module load chan_ooh323.so"
3. เช็คว่า H.323 รันจริงๆ
3.1 เช็คพอร์ต 1720
- โค้ด: เลือกทั้งหมด
netstat -ln | grep 1720
ผลลัพธ์
- โค้ด: เลือกทั้งหมด
tcp 0 0 0.0.0.0:1720 0.0.0.0:* LISTEN
มีพอร์ต TCP 1720 รันแล้วครับ ซึ่งเป็น Listen Port ของ H.323 ครับ
3.2 เช็คอีกวิธีนึง
รันคำสั่งนี้ครับ
- โค้ด: เลือกทั้งหมด
asterisk -rx "core show channeltypes"
ผลลัพธ์
- โค้ด: เลือกทั้งหมด
Type Description Devicestate Indications Transfer
---------- ----------- ----------- ----------- --------
OOH323 Objective Systems H323 Channel Driver no yes no
Phone Standard Linux Telephony API Driver no yes no
EXTRA GSM/CDMA Telephony Driver FOR Asterisk w no yes no
USTM UNISTIM Channel Driver no yes no
Bridge Bridge Interaction Channel no no no
MGCP Media Gateway Control Protocol (MGCP) yes yes no
Agent Call Agent Proxy Channel yes yes no
MulticastR Multicast RTP Paging Channel Driver no no no
SIP Session Initiation Protocol (SIP) yes yes yes
Jingle Jingle Channel Driver no yes no
IAX2 Inter Asterisk eXchange Driver (Ver 2) yes yes yes
DAHDI DAHDI Telephony Driver w/PRI & MFC/R2 & yes yes no
Skinny Skinny Client Control Protocol (Skinny) yes yes no
Gtalk Gtalk Channel Driver no yes no
Local Local Proxy Channel Driver yes yes no
----------
15 channel drivers registered.
จะเห็นว่ามี H.323 (OOH323) รันแล้ว
4. คำสั่ง ooh323 ใน Asterisk Console
ตอนเราเข้า Asterisk Console จะมีคำสั่ง ooh323 เพิ่มขึ้นมา
- โค้ด: เลือกทั้งหมด
ooh323 reload reload ooh323 config
ooh323 set debug [off] Enable/Disable OOH323 debugging
ooh323 show config Show details on global configuration of H.323 channel driver
ooh323 show peer Show details on specific OOH323 peer
ooh323 show peers Show defined OOH323 peers
ooh323 show user Show details on specific OOH323 user
ooh323 show users Show defined OOH323 users
5. คอนฟิก Trunks แบบ H.323
เวลาจะโทรออกด้วย H.323 Trunk ต้องระบุชื่อ Channel Type เป็น OOH323 นะครับ ไม่อย่างนั้น Asterisk จะไม่รู้ว่าจะส่งคอลออกทางช่องทางไหน วิธีการเขียน Dialplan มีระบุไว้ในไฟล์ /etc/asterisk/ooh323.conf ครับ อยู่ต้นๆไฟล์ ผมก๊อบมาให้ดู
- โค้ด: เลือกทั้งหมด
; Syntax for specifying a H323 device in extensions.conf is
; For Registered peers/friends profiles:
; OOH323/name where name is the name of the peer/friend profile.
;
; For unregistered H.323 phones:
; OOH323/ip[:port] OR if gk is used OOH323/alias where alias can be any H323
; alias
;
; For dialing into another asterisk peer at a specific exten
; OOH323/exten/peer OR OOH323/exten@ip
6. จำนวน Channels ที่จะโทรได้พร้อมๆกันและความเสถียร
อันนี้ไม่ทราบจริงๆครับ คงต้องลองใช้งานกันดู
ส่วนว่าจะคอนฟิกไฟล์ /etc/asterisk/ooh323.conf รวมทั้งคอนฟิก Trunks บน Elastix ยังไงเพื่อให้มันโทรออกไปด้วย H.323 นั้น ผมขอยกไว้เป็นโอกาสหน้าครับ ตอนนี้ยังหาอุปกรณ์ที่จะมาเทสไม่ได้