Skip to content
您位于: home » 信息技术 » The GNU Gatekeeper 使用手冊
  您没有登录 登录 注册

导航
 
 

The GNU Gatekeeper 使用手冊

這是 OpenH323 Gatekeeper - The GNU Gatekeeper 的中文版使用手冊。說明如何編譯、安裝、設定與監看 OpenH323 Gatekeeper - The GNU Gatekeeper。

1. 介紹

1.1 關於此計畫

OpenH323 Gatekeeper - The GNU Gatekeeper 是一個自由軟體(或稱開放原始碼)計劃,目的在實作一個 H.323 gatekeeper。 H.323 gatekeeper 為 H.323 端點(endpoint)提供通話控制的服務,它是 H.323 標準的一部份。

根據 H.323 規格書的標準,gatekeeper 應提供下列服務:

  • 位址轉換
  • 通話許可管制
  • 頻寬控制
  • 區域管理
  • 信號管制
  • 通話認證
  • 頻寬管理
  • 通話管理

GNU Gatekeeper 依據 OpenH323 實作出以上大部份的功能。

H.323 規格書是由 ITU 公佈的國際標準,做為網際網路上語音、影像及資料的通訊標準。詳細的說明見 Paul Jones' primer on H.323

關於 gatekeeper 功能的詳細描述,可見 這裡

1.2 版權聲明

GNU Gatekeeper 是自由軟體計劃,受 GNU 通用公共許可證 (GNU GPL) 所保護及規範。此外,我們特別允許執行檔可與 OpenH323 及 OpenSSL 的函式庫連接。

簡單的說,GNU 通用公共許可證允許你可以自由的複製、散佈、出售或者修改本軟體。但是要求所有的衍生作品也必須以 GNU 通用公共許可證的規範釋出。這表示,你必須公開所有你修改本軟體的程式碼,以及任何你加進本軟體的程式(如果有的話)。細節請見 COPYING 這個檔案的說明。GNU 通用公共許可證的中文翻譯可在 CLDP 取得。

關於自由軟體的概念或理想,可參考 軟體自由基金會 網站的說明。

如果你不願這樣做,你必須透過狀態介面以 TCP 連線的方式與 Gatekeeper 溝通。利用此方式你可以只將最基本的功能加入 Gatekeeper 中,而不公開你程式的其它部份。

1.3 名稱

本計劃的正式名稱是 OpenH323 Gatekeeper - The GNU Gatekeeper, 簡稱 OpenH323GKGnuGK。請不要將本計劃與其它類似計劃搞混了!

目前有好幾個使用 OpenH323 的開放原始碼的 gatekeeper 計劃:

  • OpenGatekeeper - by Egoboo
    一個功能完整的 gatekeeper 計劃,以 MPL 釋出。不過此計劃已經滿長一段時間沒有進展了。另有一個以 OpenGatekeeper 為基礎實作的 H.323 proxy,叫 OpenH323Proxy.
  • OpenGK - by Equivalence
    功能還很陽春,也是以 MPL 釋出。
  • OpenH323 Gatekeeper - 本計劃。

這幾個 gatekeeper 的計劃都使用非常類似的名稱,的確困擾了大多數的使用者。然而我們的 "OpenH323 Gatekeeper" 是其中最早開始的,因此選擇如此類似的名稱並不是我們的錯。然而為了讓人們能與其它計劃做出更清楚的區別,我們決定加上 "The GNU Gatekeeper" 的子標題,並且使用 gnugk 做為執行檔的名稱。

因此請記得,當你向我們回報問題或提供建議時,請使用本計劃正確的名字:OpenH323GKGnuGK。不要再說成是 OpenGatekeeperOpenGK 了!

1.4 特色

2.0.3 版主要修正一些錯誤,並加入少許新增功能:

  • 在收到 Q.931 Facility callForwarded 時直接轉接至指定端點。
  • 可手動指定某些端點位於 NAT 之後。
  • 加入一個簡單的來話分送機制。來話可送至一虛擬佇列,再經由外部的程式決定路由。

2.0.2 版新增的主要功能包括:

  • 加入呈祺網路資訊所研發的 Citron NAT Technology,能夠在不修改調整 NAT 伺服器的情況下,支援穿越 NAT 的雙向通話。支援多端點同時通話。
  • 允許 Gatekeeper 置於 NAT 之後,而讓 public IP 的端點來註冊。
  • 新的可擴充 fd_set 結構,可在路由模式下支援上千通電話,而不受 PWLib 的限制。
  • 在 RTP/RTCP 封包加上 TOS flag 以支援 QoS。
  • 可以名稱和密碼來登入狀態界面。

此外當然還包括了下列已存在於 2.0 版的功能:

  • 重新設計過的註冊及通話管理表格,可安全的在多執行緒下執行,能有效率的管理上萬個端點的註冊及上千通電話。
  • 新的路由信號模式架構,支援轉送 H.225.0/Q.931 以及 H.245 信號,而不須產生更多的執行緒。因此執行緒的上限不會影響總通話數。
  • 支援 H.323 proxy 模式,可轉送 RTP/RTCP 媒體通道以及 T.120 資料通道。以 H.245 tunnelling 模式和快速連接(fast-connect)模式開啟的通道皆可支援。在 proxy 模式下所有資料皆經由 Gatekeeper 轉送,端點間無直接的通信量,因此非常適合在 NAT 的環境下使用。
  • 藉由交換 LRQ/LCF/LRJ 可支援 Gatekeeper 叢集,使通話可以跨越區域(zone)。如果 LRQ 的目的地未知,Gatekeeper 還可將其轉送到下一個 Gatekeeper。
  • 支援多種認證機制,包括 H.235 密碼(MD5 或 SHA-1 加密)、IP 樣式或前置碼匹配的方式。支援以 MySQL 或 LDAP 做為後端認證資料庫。
  • 支援 alternate gatekeepers 機制以達成備援或負載平衡的目的。如果 Gatekeeper 負擔過重,會將端點重導至其它的 gatekeepers 上。
  • 可註冊至上層 Gatekeeper 成為一端點(閘道器)。以此方式可輕易的建立 Gatekeeper 的階層架構。
  • 透過狀態界面可監視並控制 Gatekeeper,包括所有註冊及通話的統計。
  • 可由狀態界面輸出通話明細記錄(CDR),供後端計費系統使用。
  • 絕大部份的設定都可在執行時動態的改變。藉由狀態界面下 `reload' 指令,或送 HUP 信號給行程(僅適用於 Unix 平台)可讓 Gatekeeper 重新讀取設定檔。

1.5 下載

最新的穩定及發展中的版本都可從這個 下載網頁 取得。

若你想使用 CVS,可從 Sourceforge ( Web-GUI) 的下載網頁取得。請注意,那是最新的發展版本,很可能會不穩定。

你也可以從 Sourceforge 下載預先編譯好的執行檔,不過只有某些平台的版本而已。

1.6 通信論壇

本計劃有兩個通信論壇(mailing list),一個是給開發者用的,另一個是給一般的使用者用。

一般的使用、設定問題請寫信到 users mailing list。你可以在此找到所有的 郵件收集。欲加入此通信論壇,請點 此處

若要回報問題,或提供錯誤更正,請寫信到 developers mailing list。點選 此處 可以找到所有的郵件收集。請注意,一般的使用問題不要寄到這裡,而該寄到上述的使用者論壇。這個論壇是給開發者使用的。當然,如果你想對此計劃有所貢獻,請 加入此論壇

注意: 請不要將你的問題用私人信件寄給個別的開發者。我們通常非常忙碌。我們並不是你的私人顧問,除非你願意付錢給我們。將你的問題送到公開而適當的通信論壇,讓更多的人有機會可以幫你。

也請注意不要將 GnuGK 專屬的問題寄到 OpenH323 的通信論壇,或者相反。否則一定沒有人會理你。這是兩個不同的計劃,雖然關係密切。兩個計劃的開發者也不相同,雖然他們常以某種方式互相合作。

在你問問題之前,請先確定你已經小心地讀過了相關的文件。清楚並精確的描述你的問題。如果有任何錯誤訊息或記錄檔的話,請附上。如果你不知道怎麼在一個公共的論壇中提問題的話,請先閱讀 Eric S. Raymond 著名的文章 How To Ask Questions The Smart Way(這兒有篇略舊的 中譯)。

1.7 貢獻者

目前本計劃的主持人是 Jan Willamowius<[email protected]>

2.0 版主要的功能與特性是由台灣的 黃志偉<[email protected]>呈祺資訊網路 所實作,包括重新設計以適合在多執行緒並行仍安全無慮的註冊及通話管理表格,新的路由模式(routed mode)架構、H.323 代理器(proxy)、H.235 認證模組以及 MySQL 後端連接。

位於德國的 mediaWays 公司正在為本計劃加入 LDAP 資料庫子系統,重疊遞送(overlapped sending)以及先進路由機制。

本計劃最初是由 Xiang Ping Chen, Joe Metzger and Rajat Todi 所發展。

譯註:本使用手冊是先寫成英文版再翻譯為中文。特別感謝張崇嚴和吳恆昇協助翻譯。

2. 編譯與安裝

2.1 編譯 Gatekeeper

要編譯 Gatekeeper,你需要 PWLib 1.2 版和 OpenH323 1.8 版或以上。開發中的 Gatekeeper 版本通常需要搭配最新版的 OpenH323。

相關的函式庫可以到 OpenH323 下載網頁 取得。編譯 OpenH323 的方式,請參考 這裡 的指示。

編譯的順序:

  1. PWLib (release 版 + debug 版)
  2. OpenH323
  3. OpenH323 test application (不一定要, 只是用來確定到目前為止一切正常。)
  4. Gatekeeper

在 Unix 作業系統下,請先移至 Gatekeeper 目錄。執行 make debug 來編譯 debug 版,或執行 make opt 來編譯 release 版。執行 make both 則可同時編譯兩種版本。

注意:你必須使用 GCC 2.95.2 版或以上,舊版的 GCC 可能無法正常編譯。

在 Windows 作業系統下,需開啟 Microsoft Visual C++ 6.0 or 7.0 (Visual C++ 5.0 太舊)來編譯所提供的 project (gk.dsw) 。

從 2.0 版開始 GnuGK 支援以 MySQL 和 LDAP 做為後端資料庫。如果你不需要這些支援,可以在 make 之前加上參數:


$ NO_MYSQL=1 make both

若要取消 LDAP 的支援:

$ NO_LDAP=1 make both

或是取消兩者:

$ NO_MYSQL=1 NO_LDAP=1 make both

自 2.0.1 版起 GnuGK 實作新的 fd_set 結構,使得 GnuGK 能在路由模式下能支援上千通電話。欲使用此項功能,可在編譯時加上 LARGE_FDSET 參數,指定欲開啟的最大檔案數目。例如:

$ LARGE_FDSET=16384 make opt

2.2 安裝 Gatekeeper

安裝 Gatekeeper 不需要什麼特殊的安裝步驟,只需將編譯好的可執行檔拷貝到你想存放的目錄裡,然後再手動新增一個設定檔。

設定檔的範例放在原始程式碼的 etc/ 子目錄內。請參閱 設定檔 一節,有更詳盡的說明。

舉例:在 Linux x86 平台下,最佳化的執行檔 gnugk 會產生在 obj_linux_x86_r/ 子目錄裡。你可以把它拷貝到 /usr/sbin/ 目錄,然後再新增設定檔 /etc/gnugk.ini 。最後,輸入以下指令來啟動 Gatekeeper:


$ /usr/sbin/gnugk -c /etc/gnugk.ini -o /var/log/gnugk.log -ttt

請參閱 命令列參數 一節,有更詳盡的說明。

2.3 預先編譯好的執行檔

如果你不想下載原始程式碼來自行編譯,在 SourceForge 裡有一些已經編譯好的套件可供使用。但並非所有的版本都有預先編譯好的執行檔,下載前請先看清楚。

Red Hat packages (.rpm)

請先下載 RPMs ,再以 root 身份,輸入以下的指令來安裝 Gatekeeper:


$ rpm -Uvh gnugk-x.x.x.rpm(你下載的檔案的名稱)

Debian packages (.deb)

如果你是使用 stable (woody) 版本的 Debian,請以 root 身份,輸入以下的指令來安裝 Gatekeeper:

$ apt-get install openh323gk

3. 入門指引

3.1 第一個簡單的試驗

選兩台連上區域網路的 Linux 工作站,裡面要安裝 OpenH323 1.1 版或以上和 OhPhone。在第一台機器上開兩個主控台,分別執行 Gatekeeper 和 ohphone。

jan@machine1> gnugk -ttt

上一行指令表示:Gatekeeper 現在以直接信號模式執行。-ttt 參數指示 Gatekeeper 把除錯訊息顯示在主控台。你也可以用 "-o logfile" 把除錯訊息存到一個檔案裡。關於信號模式的說明,請參閱 下一節 的說明。

jan@machine1> ohphone -l -a -u jan

上一行指令表示:OhPhone 現在正在等候來電(-l),而且會自動接聽來電(-a)。此外,OhPhone 會自動偵測 Gatekeeper,然後用 jan 這個使用者名稱來註冊到 Gatekeeper。(在某些原因下,若 OhPhone 無法自動偵測到 Gatekeeper,可以用 "-g 1.2.3.4" 來指定運行 Gatekeeper 那一台機器的 IP 位置。)

在第二台機器上只需執行 OhPhone。

peter@machine2> ohphone -u peter jan

上一行指令表示:第二台機器上的 OhPhone 會以 peter 這個使用者名稱來註冊到成功偵測到的 Gatekeeper,然後試著打電話給使用者 jan。Gatekeeper 會把使用者名稱 jan 轉換成 jan 所在的那一台機器的 IP 位置(在這個情形下是第一台機器)。如此一來,第二台機器上的 OhPhone 就知道應該要打給第一台機器才能找到 jan。

當有來電時,第一台機器上的 OhPhone 就會自動接通,最後 Peter 和 Jan 就能開始閒聊。

3.2 用狀態界面來監控 Gatekeeper

現在我們試著來看看 Gatekeeper 處理了哪些信息。在第一台機器開一個新的主控台,然後用 telnet 來連到 Gatekeeper。


jan@machine1> telnet machine1 7000

這時,你很有可能會收到 "Access forbidden!" 這個訊息。這是因為並非所有的人都能任意監控 Gatekeeper。現在我們新增一個檔案叫 gatekeeper.ini,放到我們啟動 Gatekeeper 的那個目錄裡。gatekeeper.ini 的內容包括以下四行:

[Gatekeeper::Main]
Fourtytwo=42
[GkStatus::Auth]
rule=allow

請先用 Ctrl-C 停止 Gatekeeper,然後再重新啟動一次 Gatekeeper。當我們再次執行 telnet machine1 7000,就能與 Gatekeeper 保持連線了。

現在再重複 Peter 打給 Jan 的那個試驗,看看 Gatekeeper 在直接信號模式下處理了哪些訊息。在 telnet session 裡,有很多指令可以被執行。你可以鍵入"help" 來列出可用的指令。如果你要結束與 Gatekeeper 的 telnet session ,則先鍵入 "quit" ,再按 Enter。

3.3 以路由信號模式啟動 Gatekeeper

啟動 Gatekeeper 於路由信號模式,就是表示 Gatekeeper 會要求所有的通話信號都要經過 Gatekeeper 來轉送。由於所有的信號都會通過 Gatekeeper,因此可以讓 Gatekeeper 對通話行為有更大的控制權。


jan@machine1> gnugk -r

上一行指令表示以路由模式來執行 Gatekeeper。再一次 telnet 到埠號 7000,打一通電話看看 Gatekeeper 現在會處理哪些信息。注意:所有與多媒體相關的封包(包括聲音和影像),仍然是在兩個端點(就是試驗中那兩個 OhPhone)間直接傳送。注意:因為 Gatekeeper 路由模式更加的複雜,所以你很有可能在這個模式下遇到 Gatekeeper 程式上的錯誤。不過也無所謂,再執行一次就好囉。;-)

3.4 虛擬的交換機:中斷通話

到目前為止,Gatekeeper 所表現出來的功能只是將符號名稱轉換成 IP 位置。雖然這是一個重要的功能,但卻不足以令人感到驚奇。

事實上,Gatekeeper 能夠對通話進行多樣化的控制,例如:中斷通話。當你連接到 Gatekeeper 的狀態界面,可以鍵入 "PrintCurrentCalls" 來列出所有進行中的通話。如果你要終止兩個端點間的通話,你可以任意選擇其中一台的 IP 位置,然後鍵入 Disconnectip xxx.xxx.xxx.xxx 來中斷此通話。

你也可以寫一個簡單的程式,連線到 Gatekeeper 的狀態界面來監控所有進行中的通話。或是限制最長的通話時間為五分鐘,以免有人濫用系統資源。

Gatekeeper 也能做到來電轉接(call transfers)和來電跟隨(call forwarding)的功能。不過,目前尚未進行實作。

3.5 將通話轉送給一般電話

要是沒有用 H.323 閘道器(Gateway),網路電話的使用者只能撥打給其他網際網路上擁有網路電話的使用者。如果要撥打給傳統電話的用戶,就必須使用閘道器。

_________________          ______________
| endpoint "jan"|          |            |
| 192.168.88.35 |--------->| Gatekeeper |
|_______________|          |            |
_________________          |            |
| gateway "gw1" | outgoing |            |
| 192.168.88.37 |<---------|____________|
|_______________|


使用閘道器時, Gatekeeper 本身必須先知道哪些通話必須先被轉送到閘道器才能撥號出去,而哪些通話可以直接透過 Gatekeeper 做內部撥號。你可修改 Gatekeeper 設定檔的 [RasSrv::GWPrefixes] 小節來加以規範,告知 Gatekeeper,當撥打號碼的前幾個號碼符合設定條件時,就應該要轉送到閘道器。

[RasSrv::GWPrefixes]
gw1=0

以上的設定指示 Gatekeeper ,如果被撥打的 E.164 號碼開頭是 0 時,就將這通電話轉送給用 "gw1" H.323 alias 註冊到 Gatekeeper 的那一台閘道器,然後再由閘道器撥給目的地。這時如果沒有任何一台閘道器是用 "gw1" 這個 H.323 alias 註冊到 Gatekeeper,那電話就無法接通(注意:設定時,必須使用 Gateway 的 alias ,不能使用閘道器的 IP 位置來設定)。

3.6 改寫 E.164 號碼

若你使用了閘道器,你通常會在閘道器內部使用不同的號碼。Gatekeper 在收到被撥的號碼時,可以先將號碼改寫,然後再將改寫後的號碼轉送到閘道器,進入電話網路撥號出去。你可以使用 RasSrv::RewriteE164 這一小節來作號碼的改寫。

以下的例子中,你可以用網路電話撥打一個喜歡的號碼 12345 ,事實上,卻是接通到 "gw1" 這台 gateway 後的電話,實際號碼卻是 08765。

[RasSrv::GWPrefixes]
gw1=0
[RasSrv::RewriteE164]
12345=08765

4. 參考手冊

Gatekeeper 的行為完全取決於命令列選項和其設定檔案。一些命令列選項可能會覆蓋掉設定檔中的設定。例如: -l 選項將會覆蓋過設定檔中的 TimeToLive 設定。

4.1 命令列選項

幾乎每一個選項都有短格式及長格式,例如: -c--config 是相同的意思。

基本選項

-h --help

顯示所有可獲得的選項。

-c --config filename

指定要使用的設定檔名。

-s --section section

指定要使用設定檔中的那一節做為主要章節。預設是 [Gatekeeper::Main]。

-i --interface IP

指定 Gatekeeper 監聽的界面(IP)。你可以省略這個選項讓 Gatekeeper 自動選擇監聽的 IP,除非你想要讓 Gatekeeper 監聽特定的 IP。

-l --timetolive n

指定端點註冊後有效存在的時間,單位為秒。這個選項將會覆蓋掉設定檔中的 TimeToLive 設定。更詳細的說明請參考 下一小節

-b --bandwidth n

指定 Gatekeeper 可獲得的總頻寬。不指定這個選項的話,頻寬管理功能預設將關閉。

--pid filename

指定 pid 檔案,僅 Unix 版本有效。

信號模式

這裡所列出的選項將會覆蓋掉設定檔中 [RoutedMode] 小節的設定。

-d --direct

使用直接信號模式。

-r --routed

使用路由信號模式。

-rr --h245routed

使用路由信號模式,並且啟動 H.245 路由模式。

除錯訊息

-o --output filename

將除錯訊息寫到指定的檔案中。

-t --trace

加越多的 -t ,輸出的訊息將會越多越詳細。 例如: 使用 -ttttt 將除錯等級設成 5。

4.2 設定檔

本程式的設定檔是一標準的文字檔。基本的格式是:


[Section String]
鍵值=設定字串

一行的開頭若是井號(#)或分號(;)代表是註解。

etc/ 子目錄下的 complete.ini 包含了所有的章節及選項。一般來說你並不需要使用全部,那是沒有意義的。選擇你需要的章節使用。該目錄下還有許多有用的範例可供參考,你可以視情況修改後使用。

程式執行時也可以更改設定檔以改變 Gatekeeper 的行為。當你修改完後,記得要從狀態界面下 reload 指令,或者,在 Unix 上可以送 HUP 給 Gatekeeper 的行程。如:

kill -HUP `cat /var/run/gnugk.pid`

注意: 有人指出在 GnuGK 2.0 的設定檔中有些小節名稱是 [RasSrv::*],而有些卻是 [RasSvr::*]。這個不一致的名稱使人困惑。在 2.0.1 版中所有的名稱已修正為 [RasSrv::*]。如果你是從 2.0 或以前的版本升級的,請記得更改名稱,否則程式會拒絕啟動。

Section [Gatekeeper::Main]

  • Fourtytwo=42
    預設值:

    本設定只是用來測試設定檔是否存在。如果找不到的話,會出現警示訊息。請確定你的設定檔包含了這一行。

  • Name=OpenH323GK
    預設值:OpenH323GK

    指定 Gatekeeper 的識別字串。本 Gatekeeper 僅會回應包含此識別字串的 GRQ,同時在回應給端點的訊息中也會包含此字串。

  • Home=192.168.1.1
    預設值:0.0.0.0

    指定此 Gatekeeper 傾聽(listen)的 IP 位址。也就是說,Gatekeeper 僅會接受送到此 IP 位址的連線請求。若是指定為 0.0.0.0 則表示所有的 IP 都可接受。一般來說你並不需要指定此選項,除非你想讓 Gatekeeper 只綁在某個你指定的 IP 上。

  • NetworkInterfaces=192.168.1.1/24,10.0.0.1/0
    預設值:

    手動指定 Gatekeeper 的網路界面。一般來說 Gatekeeper 會自動偵測所有的網路界面。僅有在兩種情況下你才可能需要使用此參數。一是自動偵測結果不正確時,二是欲將 Gatekeeper 置於 NAT 伺服器之後,並讓 public IP 的端點來註冊。在這種情況下,將網路界面設定為和 NAT 伺服器相同,就好像 Gatekeeper 是在 NAT 伺服器上執行一樣。

  • EndpointIDSuffix=_gk1
    預設值:_endp

    Gatekeeper 會為每個來註冊的端點指定一個獨一無二的識別字串。本選項可用來指定要附加在識別字串後的字元。若你有好幾個 Gatekeeper 此選項就特別有用。

  • TimeToLive=300
    預設值:-1

    H.323 端點向 Gatekeeper 的註冊是有時效性的。Gatekeeper 可在 RCF 的 timeToLive 欄位中指定註冊的時間。在指定的時間過後,註冊就失效了。端點必須定期持續的更新註冊,並且設定 RRQ 中的 keepAlive 欄位。這種更新註冊的訊息稱為 lightweight RRQ,僅需包含 H.225.0 中規定的最少資訊即可。

    本選項用來指定註冊的時間,單位是秒數。不過端點可以在 RRQ 中的 timeToLive 欄位指定一個比這更短的時間。但為了避免產生大量的 RRQ 註冊訊息,若你指定比 60 秒更短的時間,Gatekeeper 會自動調整為 60 秒。

    一旦某一端點的註冊期效過了,Gatekeeper 會接連送出兩個 IRQ 訊息,詢問此端點是否仍活著。若是此端點回應 IRR,Gatekeeper 便會主動延長註冊的期效。否則,Gatekeeper 會送 URQ 通知此端點離線,理由是 ttlExpired。此時端點必須以完整的 RRQ 訊息重新註冊。

    若將此選項指定為 -1,則可關閉註冊時效的檢查。

  • TotalBandwidth=100000
    預設值:-1

    所有可用的頻寬,單位為 100 bits/s。

  • RedirectGK=Endpoints> 100 || Calls> 50
    預設值:

    當此 Gatekeeper 負擔過重時,利用此選項你可將過多的請求重導至其它的 Gatekeeper 上。例如,上述的設定表示若是註冊的端點數量到達 100 個時,更多的 RRQ 將會被拒絕,或者是同一時間的通話數量到達 50 時,再多的 ARQ 也將會被拒絕。

    此外,你還可以將此選項設為 temporarypermanent 而主動將所有的端點都重導至其它的 Gatekeeper。此 Gatekeeper 在回應的 RAS 拒絕訊息中,會包含一個定義在 AlternateGKs 中的 Gatekeeper 清單,端點可根據優先權選擇向其它的 Gatekeeper 要求服務。注意若是設為 permanent 表示你的端點將一去不回,再也不會向原來的 Gatekeeper 註冊了。另外還請注意這個功能只有對支援 H.323 version 4 的端點有效。

  • AlternateGKs=1.2.3.4:1719:false:120:OpenH323GK
    預設值:

    此選項可讓你指定其它的 Gatekeeper 做為備援使用。也就是說,可以讓某些端點向第一台 Gatekeeper 註冊,而其餘端點向第二台 Gatekeeper。你甚至可以讓兩台 Gatekeeper 輪替使用以達到負載平衡的目的。不過此功能尚未經完整的測試,請小心。我們以 "primary GK" 代表這台你正在設定的 Gatekeeper,而 "alternate GK" 表示其餘做為備援用的 Gatekeeper。Primary GK 會在 RCF 中包含一欄位,告訴端點有那些額外的 Gatekeeper 可以使用。不過因為 alternate GK 需要知道在 primary GK 所有的註冊資料,否則它會拒絕通話。因此 primary GK 必須將所有的 RRQ 轉送到 alternate GK 上。

    本選項用來指定 alternate GK 的清單,以分號區隔,每一項中再以冒號來細分。第一及第二小項指定 alternate GK 的 IP 及 port,第三小項指定端點在使用 alternate GK 通話前是否要先向其註冊。因為 primary GK 會轉送 RRQ,因此通常不需要再行註冊。第四小項指定優先權,值愈小表示優先順序愈高。通常 primary GK 的優先權是 1。最後一小項指定 alternate GK 的識別字串。

  • SendTo=1.2.3.4:1719
    預設值:

    指定要轉送 RRQ 的 IP 位垃及 port。並不需要和 AlternateGKs 相同,因此設為獨立的選項。

  • SkipForwards=1.2.3.4:5.6.7.8
    預設值:

    為避免循環轉送,你不可以將收到的轉送訊息再轉送出去(不論 primary 或 alternate GK 都一樣)。我們使用兩種機制來辨別是否為轉送訊息,第一是查看訊息是否包含某一特定欄位,再來是看訊息是否從此選項指定的 IP 送過來。

  • StatusPort=7000
    預設值:7000

    指定用來監看 Gatekeeper 之狀態界面的埠號。 細節參見 監看 一節。

大多數的使用者不需要更改以下的設定。這些主要是用來做為測試,或是非常特殊的情況下使用。

  • UseBroadcastListener=0
    預設值:1

    定義是否接受廣播的 RAS 請求。如果希望在同一台機器的不同的界面執行不同的 Gatekeeper 行程,可將此選項關閉。

  • UnicastRasPort=1719
    預設值:1719

    Gatekeeper 的 RAS 埠號。

  • MulticastPort=1718
    預設值:1718

    Gatekeeper 的 RAS 群播埠號。

  • MulticastGroup=224.0.1.41
    預設值:224.0.1.41

    Gatekeeper 的 RAS 群播通道位置。

  • EndpointSignalPort=1720
    預設值:1720

    端點的預設信號通道埠號。

  • ListenQueueLength=1024
    預設值:1024

    TCP 可接受連線的佇列長度。

  • SignalReadTimeout=1000
    預設值:1000

    狀態界面通道的逾時時間,單位為毫秒。

  • StatusReadTimeout=3000
    預設值:3000

    信號通道(Q.931)的逾時時間,單位為毫秒。

Section [RoutedMode]

當端點發出通話請求時,通話的信號傳送的方式有兩種。第一種稱為直接信號模式,這個模式下信號直接送到受話的端點。第二種稱為路由信號模式,此種模式下信號會經由 Gatekeeper 轉送到受話的端點。採用何種信號模式是由 Gatekeeper 來決定。

在路由信號模式下,Gatekeeper 還可以選擇是否再轉送 H.245 控制通道,以及語音、影像或資料的邏輯通道。因此衍生出下列模式:

情況一

不轉送。也就是,H.245 通道及邏輯通道皆由兩個端點直接建立。

情況二

轉送 H.245 控制通道,但邏輯通道仍由兩個端點直接建立。這種情況稱為 H.245 路由模式

情況三

所有通道皆由 Gatekeeper 轉送,包括語音、影像的 RTP/RTCP 資訊,以及 T.120 的資料通道。這種情況下,兩個端點之間沒有直接的通信量,因此又稱為 H.323 代理器(Proxy),可視為一種 H.323 到 H.323 的閘道器(gateway)。

本小節定義與信號路由模式相關的一些選項,包括情況一及二。情況三的選項定義在 下一小節。本節所有的設定都可在執行時期透過 reload 指令調整。

  • GKRouted=1
    預設值:0

    是否啟動路由信號模式。

  • H245Routed=1
    預設值:0

    是否啟動 H.245 路由模式。當然,只有在 GKRouted=1 時才有效。

  • CallSignalPort=0
    預設值:1721

    通話信號所使用的埠號,預設是 1721。我們不使用 H.323 規定的 1720,因此你可以在同一台機器上同時執行 Gatekeeper 及 H.323 端點程式。若設為 0 則會任選一個可用的埠號。

  • CallSignalHandlerNumber=2
    預設值:1

    指定信號處理器的數目。若你的 Gatekeeper 負擔很重,你可以試著增加此數目以改善效率。注意程式執行後此數目僅能增加不能減少。如果你不知道該設多少,就設為你機器上的 CPU 數目(也就是,雙 CPU 的機器就設為 2)。

  • AcceptNeighborsCalls=1
    預設值:1

    打開這個選項的話,Gatekeeper 會接受來自鄰近 Gatekeeper 或是上層 Gatekeeper 打進自己的區域,前題是 Setup 中的 destinationAddress 欄位符合某一已註冊的端點。此外,Gatekeeper 還會用它自己的信號位址放進回應 LRQ 的 LCF 中。這表示,在 GK-GK 的通話中信號會經由第二個 Gatekeeper 來轉送。因此第二個 Gatekeeper 可以正確的在 CDR 中記錄通話時間。

  • AcceptUnregisteredCalls=1
    預設值:0

    打開這個選項的話,Gatekeeper 會接受任意未註冊的端點打電話進來。不過,這將引起安全上的疑慮。除非你的網路是可信任的,否則不要輕易開啟這個選項。

  • RemoveH245AddressOnTunneling=1
    預設值:0

    某些端點會在 Q.931 的 UUIE 欄位中包含 h245Address,同時又設定 h245Tunneling 旗號。雖然這是合法的,然而在某些不良的實作上會導致互通性的問題。如果打開此選項,Gatekeeper 會在 h245Tunneling 旗號被設定時移除 h245Address 欄位。因此將迫使另一端點停留在 tunnelling 的模式,而避免互通性的問題。建議將此選項打開。

  • RemoveCallOnDRQ=0
    預設值:1

    關閉此選項時,Gatekeeper 不會在收到 DRQ 時移除該通話的紀錄,而僅在收到 Release Complete 時才會移除。這避免了某些可能的競速情況(race condition)。 當然此選項僅有在路由模式下才有意義,因為在直接模式下,Gatekeeper 僅會收到 DRQ。

  • DropCallsByReleaseComplete=1
    預設值:0

    根據 H.323 規格書,Gatekeeper 可以藉由送出 RAS DisengageRequest (DRQ) 的訊息通知端點切斷一個通話。然而,某些不良的端點會忽略此訊息。若是打開此選項,Gatekeeper 會改送 Q.931 Release Complete 來強迫切斷通話。如果你發現從 Gatekeeper 無法強迫切斷通話,可以嘗試打開此選項。

  • SendReleaseCompleteOnDRQ=1
    預設值:0

    在通話結束時,端點會同時透過 Q.931 送出 Release Complete,以及透過 RAS 送出 DRQ。有可能因為 DRQ 先被收到處理,導致 Gatekeeper 關閉信號通道,而使得 Release Complete 無法被送到另一端點。某些端點(例如 Cisco CallManager)即使當信號通道關閉時也不會自動切斷通話,而導致問題,例如假使發話端掛斷了,受話端仍持續響鈐。將此選項打開可讓 Gatekeeper 在收到 DRQ 而關閉信號通道前主動送出 Release Complete。

  • SupportNATedEndpoints=1
    預設值:0

    是否允許端點從 NAT 伺服器後面來註冊。如果打開的話,Gatekeeper 會將 Q.931 及 H.245 通道中的 IP 位址轉換為 NAT 伺服器的 IP 位址。

    GnuGK 2.0.2 對 NAT 的支援已大幅改善。你無需再修改或調整 NAT 伺服器,只需將端點註冊到 Gatekeeper 上,即可打電話出去。

  • ScreenDisplayIE=MyID
    預設值:

    更改 Q.931 中的 DisplayIE 為指定值。

  • ScreenCallingPartyNumberIE=0965123456
    預設值:

    更改 Q.931 中的 CallingPartyNumberIE 為指定值。

  • ForwardOnFacility=1
    預設值:1

    若打開本選項,當收到理由為 callForwarded 的 Q.931 Facility 訊息時,Gatekeeper 將會直接將 Setup 訊號轉送給被轉接的端點,而非將訊息回傳給呼叫端。由於某些實作不完整的端點無法處理 Q.931 Facility callForwarded,打開本選項可解決此問題。

  • ShowForwarderNumber=0
    預設值:0

    是否將來話號碼改成轉接者的號碼。通常是為了計費的目的。僅有在 ForwardOnFacility=1 才有意義。

  • Q931PortRange=20000-20999
    預設值:0 (任意)

    指定 Q.931 信號通道使用的 TCP 埠號範圍。注意此範圍將限制可同時通話的數量。

  • H245PortRange=30000-30999
    預設值:0 (任意)

    指定 H.245 控制通道使用的 TCP 埠號範圍。注意此範圍將限制可同時通話的數量。

Section [Proxy]

本節定義 Gatekeeper 作為 H.323 proxy 的一些特性。在 proxy 模式下,Gatekeeper 將轉送所有從發話端到受話端的所有資料,因此兩個端點之間沒有直接的通信。如果你有一些端點位於 NAT 伺服器之後使用私有 IP,而有些端點在 NAT 外使用公用 IP 的話,proxy 模式將對你非常有用。

GNU Gatekeeper 支援轉送傳送聲音及影像的 RTP/RTCP 通道,以及傳送資料的 T.120 通道。不論是透過快速連接(fast-connect)程序或是 H.245 tunnelling 模式開啟的邏輯通道都能夠支援。

請注意,要讓 proxy 模式順利運作,Gatekeeper 對發話端和受話端兩邊的網路必須要有直接的連線

  • Enable=1
    預設值:0

    是否開啟 proxy 模式。當然你必須先使用 前一節介紹的路由信號模式。你不須指定使用 H.245 路由,Gatekeeper 會在必要時自動使用。

  • InternalNetwork=10.0.1.0/24
    預設值:

    定義內部網路區段。可指定多個網段,以分號或逗號區隔。僅有在發話端及受話端其中之一位於這裡所定義的內部網路區段,而另一個位於內部網路之外時,proxy 模式才會開啟。如果未指定,所有的通話都會使用 proxy 模式。

    格式:

    InternalNetwork=network address/netmask[,network address/netmask,...]

    其中 netmask 部份可用 . 記號或 CIDR 表示法,如下例所示:

    範例:

    InternalNetwork=10.0.0.0/255.0.0.0,192.168.0.0/24

  • T120PortRange=40000-40999
    預設值:0 (random)

    指定 T.120 通道的 TCP 埠號範圍。注意此範圍將限制可同時通話的數量。

  • RTPPortRange=50000-59999
    預設值:10000-59999

    指定 RTP/RTCP 通道的 UDP 埠號範圍。注意此範圍將限制可同時通話的數量。

  • ProxyForNAT=1
    預設值:1

    若是通話的其中一個端點位於 NAT 之後,是否使用 proxy 模式。在此情況下使用 proxy 模式將確保 RTP/RTCP 通道可穿過 NAT 而不需修改之。然而,位於 NAT 之後的端點必須使用同一個 port 來傳送及接收 RTP/RTCP。某些實作有問題的端點不符合這個前提,這時你只能關閉這項功能,而讓 NAT 為你轉送 RTP/RTCP。

  • ProxyForSameNAT=0
    預設值:1

    如果通話雙方端點位於同一個 NAT 之後,是否使用 proxy 模式。一般來說你無需開啟這項功能,因為通常在同一個 NAT 之後的端點可以直接通訊。

Section [GkStatus::Auth]

定義狀態界面的存取權限。

  • rule=allow
    預設值:forbid

    可用值有

    • forbid - 不允許任何連線。
    • allow - 允許任何連線。
    • explicit - 透過 ip=value 的方式明確指定那些 IP 可以連線,那些不行。其中 ip 就是欲監聽端的 IP,而 value 可為 1,0allow,forbid 或是 yes,no。如果找不到對應的 ip 則使用 default
    • regex - 監聽端的 IP 須符合此處指定的正規表示式。

      範例:

      若欲允許 195.71.129.0/24 及 195.71.131.0/24 網段的 IP 可以連線,可設定

      regex=^195\.71\.(129|131)\.[0-9]+$

    • password - 使用者須以適當的名稱和密碼來登入。名稱和密碼的格式與 [Password] 一節相同。

    此外,這些規則還能以 "|" (或) 及 "&" (且) 相互組合。例如:

    • rule=explicit | regex
      客戶端 IP 須符合 explicit regex 的規則。
    • rule=regex & password
      客戶端 IP 須符合 regex 的規則,並且以名稱和密碼來登入。

  • default=allow
    預設值:forbid

    僅在 rule=explicit 時採用。

Section [RasSrv::GWPrefixes]

本節指定那些 E.164 號碼應轉送到指定的閘道器。

格式:

gw-alias=prefix[,prefix,...]

表示將所有以此處指定之前置碼開頭的號碼轉送至某一擁有此 alias 的閘道器,請注意你必須以閘道器的 alias 來指定,不可用 IP。

範例:

test-gw=02,03

Section [RasSrv::RewriteE164]

本節定義 dialedDigits (E.164 號碼)的改寫規則。

格式:

[!]original-prefix=target-prefix[,target-prefix,...]

若所撥的號碼以 original-prefix 開頭,將被改寫為 target-prefix。可指定多種改寫方式,Gatekeeper 會任選其中一種。如果在 original-prefix 之前加 `!',則意義剛好相反。

範例:

08=18888

若撥 08345718 將被改寫為 18888345718

選項:

  • Fastmatch=08
    預設值:

    僅改寫以此開頭的號碼。

Section [RasSrv::PermanentEndpoints]

本節你可以放入不支援 RAS 的端點,或是放入你不希望會過期被踢掉的端點。這裡指定的端點記錄將會一直保持在 Gatekeeper 的註冊表格中。不過,你仍可透過狀態界面手動移除之。

格式:

IP[:port]=alias[,alias,...;prefix,prefix,...]

範例:

閘道器:

10.0.1.5=Citron;009,008
終端機:
10.0.1.10:1720=700

Section [RasSrv::Neighbors]

如果 ARQ 中的目的地不存在於此 Gatekeeper 所管理的區域,Gatekeeper 會嘗試送 LocationRequest (LRQ) 到鄰近的 gatekeeper 詢問,這些鄰近的 gatekeeper 稱為此 Gatekeeper 的 neighbors。Gatekeeper 會詢問那些 neighbors 取決於號碼是否符合該 neighbor 的前置碼。若前置碼為 ``*'' 表示都符合。目前一個 neighbor 只能指定一個前置碼。

另一方面,Gatekeeper 僅會回應從本節定義的 neighbors 送來的 LRQ。你可以指定空的前置碼,這種情況下 Gatekeeper 不會送 LRQ 到那個 neighbor,但會接受那個 neighbor 送來的 LRQ。

password 欄位用來認證 LRQ 是否確從 neighbors 送來。見 [Gatekeeper::Auth] 的詳細說明。

格式:

GKID=ip[:port;prefix;password;dynamic]

範例:

GK1=192.168.0.5;*
GK2=10.0.1.1:1719;035;gk2
GK3=gk.citron.com.tw;;gk3;1

Section [RasSrv::LRQFeatures]

定義 LRQ 及 LCF 的一些特性。

  • NeighborTimeout=1
    預設值:2

    等待 neighbors 回應的逾時時間,以秒為單位。如果超過時間仍等不到回應,Gatekeeper 會回應 ARJ 給原提出請求的端點。

  • ForwardHopCount=2
    預設值:

    如果 Gatekeeper 收到的 LRQ 目的地也不在此區域中,它可將其再轉送至其它的 neighbors。在轉送前,Gatekeeper 會將 LRQ 中的 hopCount 減一。若是 hopCount 已到達 0,則不會再轉送。如此才不會造成 LRQ 被無限制的轉送下去。本選項定義 LRQ 的轉送次數。注意它影響的是 LRQ 的發送端而非轉送端。

  • AlwaysForwardLRQ=1
    Default: 0

    強迫 Gatekeeper 轉送 LRQ,即使該 LRQ 中不含 hopCount 的欄位。使用此選項時請小心,否則可能導至 LRQ 循環迴圈。

  • AcceptForwardedLRQ=1
    預設值:1

    是否接受從 neighbors 轉送來的 LRQ。

  • IncludeDestinationInfoInLCF=0
    預設值:1

    Gatekeeper 會在回應的 LCF 中包含 destinationInfodestinationType 欄位,讓 neighbor gatekeeper 可以儲存下來。如此下次就不用再用 LRQ 來詢問了。然而,某些其它廠牌的 gatekeeper 會誤用此資訊,而造成互通性的問題。如果你與其它廠牌的 gatekeeper 互通時遭遇問題,可試著關閉此選項。

  • CiscoGKCompatible=1
    預設值:0

    要求 Gatekeeper 在 LRQ 中包含與 Cisco gatekeepers 相容的 NonStandardParameter 資訊。

Section [RasSrv::RRQFeatures]

  • AcceptEndpointIdentifier=1
    預設值:1

    是否接受端點自行於 RRQ 中指定的 endpointIdentifier

  • AcceptGatewayPrefixes=1
    預設值:1

    閘道器可透過 terminalType 裡的 supportedPrefixes 向 Gatekeeper 註冊前置碼。本選項指定 Gatekeeper 是否要接受閘道器自行註冊的前置碼。

Section [RasSrv::ARQFeatures]

  • ArjReasonRouteCallToSCN=0
    預設值:1

    若打開的話,Gatekeeper 將拒絕從閘道器打來再打回去的通話,理由是 routeCallToSCN

  • ArjReasonRouteCallToGatekeeper=1
    預設值:1

    若打開的話,在路由模式下 Gatekeeper 在收到回電 ARQ 時若在通話表格中沒有對應的記錄,此通話將被拒絕,理由是 routeCallToGatekeeper。端點在收到後應立刻結束通話,並重新送通話請求至 Gatekeeper。這就是說,發話端不能繞過 Gatekeeper 而直接連至受話端。

  • CallUnregisteredEndpoints=0
    預設值:1

    若打開本選項的話,Gatekeeper 會接受端點於 ARQ 中透過 destCallSignalAddress 自行指定受話端位址,不論此位址是否屬於某一已註冊的端點。這表示說,你可以明白的指定受話端的 IP 位址。

  • RemoveTrailingChar=#
    預設值:

    若 ARQ 中 destinationInfo 的最後一個字元與本選項指定的相同,則移除之。例如,某些端點會錯誤的將結束字元如 `#' 放進 destinationInfo,你可以透過此選項拿掉它。

Section [CallTable]

  • GenerateNBCDR=0
    預設值:1

    產生從 neighbor 區域打來的通話明細。由於發話端不屬於此區域,其 endpoint ID 會顯示為空的。

  • GenerateUCCDR=0
    預設值:0

    產生未接通電話的通話明細。通常僅使用於偵錯的目的。請注意通話接通的定義為,在路由模式下,以 Gatekeeper 收到 Q.931 Connect 訊息為準。在直接模式下,通話總是認為已接通。

  • DefaultCallTimeout=3600
    預設值:0

    預設的通話斷線時間,以秒為單位。若設為 0 表示取消此功能。

Section [Endpoint]

GNU Gatekeeper 可以註冊至其它的 Gatekeeper 成為一個端點。利用此一特性,你可以輕易的建立 Gatekeeper 的階層架構。

  • Gatekeeper=10.0.1.1
    預設值:no

    定義上層的 Gatekeeper 位置。不要註冊到你自己喲,除非你瘋了。若設為 no 可取消此一功能。

  • Type=Gateway
    預設值:Gateway

    定義端點的類型。可設為 GatewayTerminal

  • H323ID=CitronProxy
    預設值:<Name>

    指定端點的 H.323 ID。可指定數個,以逗號隔開。

  • E164=18888600000,18888700000
    預設值:

    指定端點的 E.164 (dialedDigits) aliases。也可指定數個,以逗號隔開。

  • Password=123456
    預設值:

    指定送給上層 Gatekeeper 的密碼。所有送到上層 Gatekeeper 的 RAS 請求都會將密碼包含在 cryptoTokens 欄位中。若未指定,則不會加上 cryptoTokens 欄位。

    另外,此密碼也用於送給 neighbors 的 LRQ 中。

  • Prefix=188886,188887
    預設值:

    註冊到上層 Gatekeeper 的前置碼。僅有在類型為 Gateway 時才有效。

  • TimeToLive=900
    預設值:

    建議註冊的時效。不過真正的時效是由上層 Gatekeeper 在 RCF 中指定的。見 前面的說明。

  • RRQRetryInterval=10
    預設值:10

    如果送出的 RRQ 未得到回應,隔多久再重送一次,以秒為單位。

  • ARQTimeout=2
    預設值:2

    定義 ARQ 請求的逾時時間。

  • UnregisterOnReload=1
    預設值:0

    定義子 Gatekeeper 在收到 reload 指令時是否先取消再重新註冊至上層 Gatekeeper。

  • NATRetryInterval=60
    預設值:60

    定義 NAT socket 的重試時間,單位為秒。如果你不明白,用預設值就好。

  • NATKeepaliveInterval=86400
    預設值:86400

    定義 NAT socket 的重傳時間,單位為秒。如果你不明白,用預設值就好。

Section [Endpoint::RewriteE164]

一旦你指定註冊到上層 Gatekeeper 的前置碼後,上層 Gatekeeper 會將以此前置碼開頭的撥號送到下層 Gatekeeper。下層 Gatekeeper 可以據此節定義的規則來改寫目的地號碼。相對的,由下層 Gatekeeper 發出到上層的通話也會經由此節改寫其來源號碼。

格式:

external prefix=internal prefix

例如,你有如下的系統:

 [Parent GK]
 ID=CitronGK
 /         \
 /           \
 /             \
 /               \
 [Child GK]          [EP3]
 ID=ProxyGK          E164=18888200
 Prefix=188886
 /       \
 /         \
 /           \
 [EP1]         [EP2]
 E164=601      E164=602


定義這樣的改寫規則:

188886=6

若 EP1 打 18888200 呼叫 EP3,在 Q.931 Setup 中的 CallingPartyNumber 欄位會被改寫為 18888601。相反的,EP3 可打 1888860118888602 來呼叫 EP1 或 EP2。換句話說,每一個註冊在 Child GK 上開頭號碼為 '6' 的端點,對註冊在 Parent GK 的端點來說,看起來就像是直接註冊在 Parent GK 且開頭號碼為'188886'。

本小節與 RasSrv::RewriteE164 的設定無關,而且後者會優先生效。

Section [Gatekeeper::Auth]

本節定義 Gatekeeper 的認證機制。

語法:

authrule=actions
 <authrule> := SimplePasswordAuth | AliasAuth | PrefixAuth | ...
 <actions>  := <control>[;<ras>,<ras>,...]
 <control>  := optional | required | sufficient
 <ras>      := GRQ | RRQ | URQ | ARQ | BRQ | DRQ | LRQ | IRQ

每一條規則都有三個結果:okfailnext
  • ok - 此模組認可某個請求。
  • fail - 認證失敗應予回拒。
  • next - 此模組無法決定是否可接受某個請求。
每一規則也有三種方式可以控制:
  • optional - 如果此模組無法決定是否可接受某個請求,它將被送到下一模組。
  • required - 所有請求必須通過此模組的認證,否則將被回拒。通過請求的認證將被送到下一模組。
  • sufficient - 如果某個請求被認可,則它將被接受,否則將被回拒。這表示,這個模組決定請求的最後命運。在此模組之後不應再放其它模組,因為那將不會用到。

目前支援的模組有:

  • SimplePasswordAuth/MySQLPasswordAuth/LDAPPasswordAuth/ExternalPasswordAuth

    此系列的模組檢查 RAS 訊息中的 tokenscryptoTokens 欄位,其中至少要包含 generalID 及 password 兩個欄位。若是 cryptoTokens 欄位,目前僅支援 MD5 編碼的 cryptoEPPwdHash 標記,以及由 HMAC-SHA1-96 編碼的 nestedcryptoToken 標記(必須安裝 libssl)。

    SimplePasswordAuthMySQLPasswordAuthLDAPPasswordAuthExternalPasswordAuth 模組而言,ID 及 password 分別存於 [Password] 一節,MySQL 資料庫、LDAP 資料庫以及從外部程式取得。要加上其它後端資料庫的支援也很容易。

  • NeighborPasswordAuth

    僅使用於認證 [RasSrv::Neighbors] 裡定義的 neighbors 而已。

  • AliasAuth/MySQLAliasAuth/LDAPAliasAuth

    本模組僅能用來做 RegistrationRequest (RRQ) 的認證。端點的 IP 必須符合某一指定的樣式。AliasAuth 模組的樣式定義於 [RasSrv::RRQAuth] 一節,MySQLAliasAuth 模組定義於 [MySQLAliasAuth],而對 LDAPAliasAuth 模組而言,alias 及 IP 必須定義於 LDAP 項目中。

  • PrefixAuth

    原先叫 GkAuthorize。具有某一前置碼的 RAS 請求而言,其 IP 或 aliases 必須符合某一指定的樣式。見 [PrefixAuth] 的詳細說明。目前本模組僅能做 AdmissionRequest (ARQ) 及 LocationRequest (LRQ) 的認證。

另外,你可以設定某一模組只針對某些 RAS 訊息做檢查。例如下例中,SimplePasswordAuth 被定為 optional,僅針對 RRQ 及 ARQ 做檢查。若某個 RRQ 未被 SimplePasswordAuth 認可,再交由 AliasAuth 模組檢查。預設是接受所有的請求。

範例:

SimplePasswordAuth=optional;RRQ,ARQ
AliasAuth=sufficient;RRQ
default=allow

Section [Password]

本節定義 SimplePasswordAuth 模組的使用者 ID 及密碼。請使用 `make addpasswd' 產生 addpasswd 工具程式來加入 ID 及密碼。

用法:

addpasswd config userid password

選項:

  • KeyFilled=123
    預設值:0

    定義加密的鍵值。注意如果你重設此值的話,所有的密碼都必須重新產生。

  • CheckID=1
    預設值:0

    要不要檢查 aliases 和 ID 是否相同。

  • PasswordTimeout=120
    預設值:-1

    SimplePasswordAuth 系統的模組會將查驗過的密碼暫存下來以加快下次的檢查。本選項定義暫存的時間長短,以秒為單位。若設為 0 表示關閉密碼暫存功能,設為負值的話表示不清除暫存的密碼。

Section [MySQLAuth]

定義 MySQLPasswordAuth 模組使用的資料庫、表格和欄位以取得的使用者 ID 和密碼。

  • Host=localhost
    預設值:localhost

    MySQL 伺服器的主機名稱或 IP。

  • Database=billing
    預設值:billing

    欲連接的資料庫。

  • User=cwhuang
  • Password=123456

    使用此名稱和密碼來連接資料庫。

  • Table=customer

    放置使用者 ID 和密碼的表格。

  • IDField=IPN

    使用者 ID 的欄位名稱。

  • PasswordField=Password

    密碼的欄位名稱。

  • ExtraCriterion=Kind> 0
    預設值:

    指定額外的查詢條件。

上面的設定將產生如下的 SQL 查詢指令:

SELECT $PasswordField FROM $Table WHERE $IDField = %id [AND $ExtraCriterion]

Section [ExternalPasswordAuth]

指定一外部程式以取得密碼做為認證。此程式應從 stdin 輸入 ID 並從 stdout 輸出密碼。

  • PasswordProgram=/usr/local/bin/getpasswd
    Default: N/A

    外部程式的執行檔名。

Section [RasSrv::RRQAuth]

指定 AliasAuth 模式認證用的樣式。首先以 RRQ 中的 alias 為鍵值來查詢,若找到的話則應用該規則決定是否接受此 RRQ。規則可以包含以 `&' 隔開的多個條件。

語法:


<authrules> :=  empty  |  <authrule> "&" <authrules>
 <authrule>  := <authtype> ":" <authparams>

 <authtype>  := "sigaddr" | "sigip"
 <autparams> := [!&]*

<authparams> 記號的意義依 <authtype> 而定:

  • sigaddr - 由 ``PrintOn(ostream)'' 顯示的位置須符合正規表示式。

    範例:

    sigaddr:.*ipAddress .* ip = .* c0 a8 e2 a5 .*port = 1720.*
    

  • sigip - 特殊的 `sigaddr',以一般的 IP 表示法來表示: ``byteA.byteB.byteC.byteD:port''.

    範例:

    sigip:192.168.242.165:1720
    

  • allow - 允許此 alias 註冊,不論 IP 為何。
  • deny - 拒絕此 alias 註冊,不論 IP 為何。

Section [MySQLAliasAuth]

定義 MySQLAliasAuth 模組使用的資料庫、表格和欄位以取得某一 alias 的認證樣式。

  • Host=localhost
    預設值:localhost

    MySQL 伺服器的主機名稱或 IP。

  • Database=billing
    預設值:billing

    欲連接的資料庫。

  • User=cwhuang
  • Password=123456

    使用此名稱和密碼來連接資料庫。

  • Table=customer

    查詢的表格。

  • IDField=IPN

    使用者 ID 的欄位名稱。

  • IPField=Address

    IP 樣式的欄位名稱。

  • ExtraCriterion=Kind> 0
    預設值:

    指定額外的查詢條件。

上面的設定將產生如下的 SQL 查詢指令:

SELECT $IPField FROM $Table WHERE $IDField = %alias [AND $ExtraCriterion]

Section [PrefixAuth]

本節定義 PrefixAuth 模組的認證規則。目前,本模組僅能用來認證 ARQ 及 LRQ。

首先,依據 RAS 請求中的 destinationInfo 選擇最長的前置碼,然後根據以最符合的網段決定是否接受該請求。如果找不到適當的前置碼規則,而有指定 default 選項,則依據 default 來決定,否則的話就根據模組的設定決定將請求轉給下一模組或是直接拒絕。

格式:


prefix=authrule[|authrule|...]

語法:

<authrule> :=  <result> <authrule>
 <result>    := deny | allow
 <authrule>  := [!]ipv4:<iprule> | [!]alias:<aliasrule>

其中 <iprule> 可用點表示法或 CIDR 表示法,而 <aliasrule> 須為正規表示法。如果前面加 `!' 旗號表示意義相反。

範例:

555=deny ipv4:10.0.0.0/27|allow ipv4:0/0
5555=allow ipv4:192.168.1.1|deny ipv4:192.168.1.0/255.255.255.0
86=deny !ipv4:172.16.0.0/24
09=deny alias:^188884.*
ALL=allow ipv4:ALL

在此設定中,除了 10.0.0.0/27 網段外所有的端點都可以打 555 但非 5555 開頭的號碼。除了 192.168.1.1192.168.1.0/24 網段來的端點都不能撥 5555 開頭的號碼。除了 172.16.0.0/24 網段外的端點都不能撥 86 開頭的號碼。而 alias 開頭為 188884 的端點不能撥 09。此外所有的情形都是允許的。

Section [GkLDAP::LDAPAttributeNames]

本節定義 LDAP 資料庫使用的屬性名稱。

  • H323ID

    端點的 H.323 ID。在 LDAP 資料庫中須為唯一(這是為何我們選擇 email 做為預設值)。

  • TelephonNo

    端點的 E.164 alias。

  • voIPIpAddress

    LDAPAliasAuth 模組用以比對的 IP 位置。目前只能指定一個值。

  • H235PassWord

    LDAPPasswordAuth 模組用以比對的密碼欄位。目前只能指定一個值。

Section [GkLDAP::Settings]

本節定義 LDAP 伺服器及客戶端的一些參數。

  • ServerName
    預設值:ldap

    LDAP 伺服器的網域名稱。

  • ServerPort
    預設值:389

    LDAP 伺服器的 TCP 埠號(通常是 389)。

  • SearchBaseDN
    預設值:o=University of Michigan, c=US

    LDAP 伺服器樹狀結構的入口點。僅會從此節點之下開始搜尋。

  • BindUserDN
    預設值:cn=Babs Jensen,o=University of Michigan, c=US

    Gatekeeper 用以連接 LDAP 伺服器的唯一名稱。若不指定則使用匿名查詢。

  • BindUserPW
    預設值:ReallySecretPassword

    若指定 BindUserDN,須在此指定對應的密碼。

  • sizelimit
    預設值:0

    單一查詢可能回傳的最多結果。因為 Gatekeeper 預期每次查詢應該只有零個或一個結果,所以此參數很少用到。

  • timelimit
    預設值:0

    查詢的逾時秒數。

Section [NATedEndpoints]

理論上 Gatekeeper 會自動偵測端點是否位於 NAT 之後,而做適當的處置。但若自動偵測失效時,可以從本節來手動指定。

格式:

alias=true,yes,1,...

範例:

指定號碼為 601 的端點位於 NAT 之後。

601=true

Section [CTI::Agents]

本節用來設定虛擬佇列,將來話送至外部程式決定路由。所謂的虛擬佇列就像一個端點一樣可用 H.323 的別名來呼叫。

當收到屬於虛擬佇列的 ARQ 時,Gatekeeper 會透過 status port 送出 RouteRequest,並且等待外部程式的回應。可能的結果有 RouteReject,表示拒絕此一通話,或是 RouteToAlias,將此通話導到由外部程式指定的號碼。

如果指定的時間內未收到回應,通話將結束。

目前每一 Gatekeeper 上僅能指定一個虛擬佇列。

相關的訊息及回應請見 監看 一節。

  • VirtualQueue
    預設值:

    定義虛擬佇列的 H.323 別名。

  • CTI_Timeout
    預設值:10

    等待 RouteRequest 回應的逾時時間。若超過這個時間的話,會送出 ARJ 給原呼叫端。

5. 狀態監控

5.1 狀態界面

狀態界面是一個用來監視和控制 gatekeeper 的外部界面。Gatekeeper 將會傳送關於撥打出去之電話的訊息給所有有接通的用戶端,並且可以透過這個界面接受指令。

這個界面是一個簡單的 TCP port (預設是 7000),你可以使用 telnet 或是其他相關程式來連線。另一個不同的用戶端程式範例即是 Java GUI,亦稱為 GkGUI。

應用程式

你要利用狀態界面來做些什麼事取決於你自己,但這裡有一些建議:

  • 監視通話狀況
  • 監視已註冊的端點
  • 圖形化使用者界面
    參考 GkGUI。
  • 計費應用程式
    分析通話明細記錄的訊息並轉送給計費應用程式。
  • 界面外部擴充
    若你不想發佈某額外功能的原始碼,那就僅發佈通過狀態界面主要的核心機能和界面並保留外在私密部份即可。

範例

假設你對通話明細記錄有興趣並且想要在固定間隔內批次執行它們。

這裡有個簡單的 Perl script (gnugk_cdr.pl),它啟動 gatekeeper 並且產生一個狀態界面的簡單用戶端子程式,並且把 CDRs 寫入到一個記錄檔中。


#!/usr/bin/perl
# sample program that demonstrates how to write the CDRs to a log file
use strict;
use IO::Socket;
use IO::Handle;
my $logfile = "/home/jan/cdr.log";
my $gk_host = "localhost";
my $gk_port = 7000;
my $gk_pid;
if ($gk_pid = fork()) {
 # parent will listen to gatekeeper status
 sleep(1);       # wait for gk to start
 my $sock = IO::Socket::INET->new(PeerAddr => $gk_host, PeerPort => $gk_port, Proto => 'tcp');
 if (!defined $sock) {
 die "Can't connect to gatekeeper at $gk_host:$gk_port";
 }
 $SIG{HUP} = sub { kill 1, $gk_pid; };   # pass HUP to gatekeeper
 $SIG{INT} = sub { close (CDRFILE); kill 2, $gk_pid; };  # close file when terminated
 open (CDRFILE, ">>$logfile");
 CDRFILE->autoflush(1);  # don't buffer output
 while (!$sock->eof()) {
 my $msg = $sock->getline();
 $msg = (split(/;/, $msg))[0];   # remove junk at end of line
 my $msgtype = (split(/\|/, $msg))[0];
 if ($msgtype eq "CDR") {
 print CDRFILE "$msg\n";
 }
 }
 close (CDRFILE);
} else {
 # child starts gatekeeper
 exec("gnugk");
}

圖形化使用者界面

目前有數個圖形化使用者前端界面,分別由不同的人們或單位所開發。

  • Java GUI

    由 Jan Willamowius 所開發。你可以監控通過 gatekeeper 的註冊者和通話狀況。對 endpoint 按下滑鼠右鍵時將會彈出一個選單。

    這個圖形化使用者界面能夠在內建 Java 1.0 的大部份網頁瀏覽器上執行。基於安全因素,圖形化使用者界面必須是單獨執行(standalone)的方式,或是附掛在 web 伺服器上,但是此 web 伺服器必須和 gatekeeper 的 IP 相同(也就是你無法以本地端檔案的 applet 形式來執行)。

    此程式可從下列網址取得 http://www.gnugk.org/h323gui.html

  • GkGUI

    這是由 呈祺資訊網路公司 所開發的新 Java 程式,以單獨的方式執行,需要 Java 1.4。新功能包括:

    • 同時可監控多個 gatekeepers。
    • 兩種檢視模式:Button List 和 Tree List。
    • 詳細通話記錄(CDR)和統計資料。
    • 可產生狀態記錄檔。
    • 不同的類型的端點使用不同的顏色來區別。
    • 可調整 gatekeeper 設定檔。
    • 可強制取消端點的註冊。
    • 儲存和列印狀態記錄檔及通話明細記錄。

    GkGUI 是以 GNU 通用公共許可證的版權形式發佈,可從下列網址取得 http://www.gnugk.org/h323develop.html#java

5.2 命令

helph 命令將會顯示出所有可獲得的命令清單。

  • Reload

    重新載入設定檔。

  • Version, v

    顯示版本及 gatekeeper 的作業系統資訊。

  • Statistics, s

    顯示 gatekeeper 的統計資訊。

    範例:

    Statistics
    -- Endpoint Statistics --
    Total Endpoints: 21  Terminals: 17  Gateways: 4  NATed: 2
    Cached Endpoints: 1  Terminals: 1  Gateways: 0
    -- Call Statistics --
    Current Calls: 1 Active: 1 From Neighbor: 0 From Parent: 0
    Total Calls: 1539  Successful: 1076  From Neighbor: 60  From Parent: 5
    Startup: Fri, 21 Jun 2002 10:50:22 +0800   Running: 11 days 04:22:59
    ;
    

  • PrintAllRegistrations, r, ?

    顯示所有已註冊的端點。

    格式:

    AllRegistrations
    RCF|IP:Port|Aliases|Terminal_Type|EndpointID
    ...
    Number of Endpoints: n
    ;
    

    範例:

    AllRegistrations
    RCF|10.1.1.10:1720|800:dialedDigits=Wei:h323_ID|terminal|1289_endp
    RCF|10.0.1.43:1720|613:dialedDigits=Jacky Tsai:h323_ID|terminal|1328_endp
    RCF|10.0.1.55:1720|705:dialedDigits=Sherry Liu:h323_ID|terminal|1333_endp
    Number of Endpoints: 3
    ;
    

  • PrintAllRegistrationsVerbose, rv, ??

    顯示所有已註冊端點的詳細資訊。

    格式:

    AllRegistrations
    RCF|IP:Port|Aliases|Terminal_Type|EndpointID
    Registration_Time C(Active_Call/Connected_Call/Total_Call) <r>
    [Prefixes: ##] (gateway only)
    ...
    Number of Endpoints: n
    ;
    

    範例:

    AllRegistrations
    RCF|10.0.1.8:1720|Accel-GW2:h323_ID|gateway|1322_endp
    Wed, 26 Jun 2002 16:40:03 +0800 C(1/5/33) <1>
    Prefixes: 09,002
    RCF|10.1.1.10:1720|800:dialedDigits=Wei:h323_ID|terminal|1289_endp
    Wed, 26 Jun 2002 16:40:55 +0800 C(0/32/39) <1>
    RCF|10.0.1.66:1720|716:dialedDigits=Vicky:h323_ID|terminal|1425_endp
    Wed, 26 Jun 2002 16:40:58 +0800 C(1/47/53) <1>
    
    Number of Endpoints: 2
    ;
    

  • PrintCurrentCalls, c, !

    顯示目前所有的通話。

    格式:

    CurrentCalls
    Call No. # | CallID | Call_Duration | Left_Time
    Dialed_Number
    ACF|Caller_IP:Port|Caller_EPID|CRV
    ACF|Callee_IP:Port|Callee_EPID|CRV
    ...
    Number of Calls: Current_Call Active: Active_Call From Neighbor: Call_From_Neighbor \
    From Parent: Call_From_Parent
    ;
    

    範例:

    CurrentCalls
    Call No. 29 | CallID bd c6 17 ff aa ea 18 10 85 95 44 45 53 54 77 77 | 109 | 491
    Dial 0953378875:dialedDigits
    ACF|10.0.1.49:1720|4048_CGK1|25263
    ACF|10.1.1.1:1720|4037_CGK1|25263
    Call No. 30 | CallID 70 0e dd c0 9a cf 11 5e 00 01 00 05 5d f9 28 4d | 37 | 563
    Dial 0938736860:dialedDigits
    ACF|10.0.1.48:1032|4041_CGK1|11896
    ACF|10.1.1.1:1720|4037_CGK1|11896
    Number of Calls: 2 Active: 2 From Neighbor: 0 From Parent: 0
    ;
    

  • PrintCurrentCallsVerbose, cv, !!

    顯示目前所有通話的詳細資料。

    格式:

    CurrentCalls
    Call No. # | CallID | Call_Duration | Left_Time
    Dialed_Number
    ACF|Caller_IP:Port|Caller_EPID|CRV
    ACF|Callee_IP:Port|Callee_EPID|CRV
    # Caller_Aliases|Callee_Aliases|Bandwidth|Connected_Time <r>
    ...
    Number of Calls: Current_Call Active: Active_Call From NB: Call_From_Neighbor
    ;
    

    範例:

    CurrentCalls
    Call No. 48 | CallID 7d 5a f1 0a ad ea 18 10 89 16 00 50 fc 3f 0c f5 | 30 | 570
    Dial 0225067272:dialedDigits
    ACF|10.0.1.200:1720|1448_endp|19618
    ACF|10.0.1.7:1720|1325_endp|19618
    # Sherry:h323_ID|Accel-GW1:h323_ID|200000|Wed, 26 Jun 2002 17:29:55 +0800 <2>
    Number of Calls: 1 Active: 1 From NB: 0
    ;
    

  • Find, f

    以 alias 或 prefix 的方式來搜尋已註冊的端點。

    格式:

    
    Find Alias
    RCF|IP:Port|Aliases|Terminal_Type|EndpointID
    ;
    

    範例:

    f 800
    RCF|10.1.1.10:1720|800:dialedDigits=Wei:h323_ID|terminal|1289_endp
    ;
    f 801
    SoftPBX: alias 801 not found!
    

  • FindVerbose, fv

    以 alias 或 prefix 的方式來搜尋已註冊端點的詳細資訊。

    格式:

    FindVerbose Alias
    RCF|IP:Port|Aliases|Terminal_Type|EndpointID
    Registration_Time C(Active_Call/Connected_Call/Total_Call) <r>
    [Prefixes: ##] (gateway only)
    ;
    

    範例:

    
    fv 02
    RCF|10.0.1.100:1720|TFN:h323_ID|gateway|4037_CGK1
    Wed, 26 Jun 2002 17:47:29 +0800 C(0/84/120) <1>
    
    Prefixes: 02,09
    ;
    

  • UnregisterIP

    強制取消某一特定 IP 及埠號端點的註冊。

    格式:

    UnregisterIP IP[:Port]
    

    範例:

    UnregisterIP 10.0.1.31:1720
    URQ|10.0.1.31:1032|1326_endp|maintenance;
    SoftPBX: Endpoint 10.0.1.31:1720 unregistered!
    

  • UnregisterAlias

    強制取消擁有某一 aliases 端點的註冊。

    格式:

    
    UnregisterAlias Alias
    

    範例:

    UnregisterAlias 601
    URQ|10.0.1.31:1032|1326_endp|maintenance;
    SoftPBX: Endpoint 601 unregistered!
    
    

  • UnregisterAllEndpoints

    強制取消所有端點的註冊。

    格式:

    範例:

    UnregisterAllEndpoints
    URQ|10.0.1.7:1024|1325_endp|maintenance;
    URQ|10.0.1.8:1024|1322_endp|maintenance;
    URQ|10.0.1.32:1032|1324_endp|maintenance;
    URQ|10.0.1.36:1032|1323_endp|maintenance;
    URQ|10.0.1.42:1032|1318_endp|maintenance;
    Done
    ;
    

  • DisconnectCall

    強制切斷某一特定號碼的通話。

    格式:

    DisconnectCall Number
    

    範例:

    
    DisconnectCall 1533
    

  • DisconnectIP

    強制切斷某一特定 IP 及埠號端點的所有通話。

    格式:

    
    DisconnectIP IP[:Port]
    

    範例:

    DisconnectIP 10.0.1.31:1720
    

  • DisconnectAlias

    強制切斷擁有某一 aliases 端點的所有通話。

    格式:

    DisconnectAlias Alias
    

    範例:

    
    DisconnectAlias 601
    

  • ClearCalls

    強制切斷所有的通話。

  • GK

    顯示是否註冊到上層的 Gatekeeper。

  • Debug

    僅用在除錯目的。選項:

    • trc [+|-|n]

      顯示/調整除錯等級。

    • cfg SEC PAR

      讀取並列出一個章節中的設定參數。

    • set SEC PAR VAL

      寫入一個章節中的參數設定值。

    • remove SEC PAR

      移除一個章節中的參數設定值。

    • remove SEC

      移除一個章節。

    • printrm VERBOSE

      列出已取消註冊但尚未移除的端點記錄。

    範例:

    
    debug trc 3
    debug set RoutedMode H245Routed 1
    

  • Who

    顯示所有監看狀態界面的人。

  • RouteReject

    拒絕某一虛擬佇列中的來話。

    格式:

    RouteReject CallingEndpointID CallRef
    

    範例:

    RouteReject endp_4711 1234
    

  • RouteToAlias, rta

    將虛擬佇列中的通話送到指定的端點。

    格式:

    
    RouteToAlias Alias CallingEndpointID CallRef
    

    範例:

    RouteToAlias Suzi endp_4711 1234
    

  • Exit, q

    離開狀態界面。

5.3 訊息

本節說明輸出至狀態界面的所有訊息及其格式。

  • GCF|IP|Aliases|Endpoint_Type;

    Gatekeeper 收到一個 GatekeeperRequest (GRQ) 並且回應一個 GatekeeperConfirm (GCF)。

  • GRJ|IP|Aliases|Endpoint_Type|RejectReason;

    Gatekeeper 收到一個 GatekeeperRequest (GRQ) 並且回應一個 GatekeeperReject (GRJ)。

  • RCF|IP:Port|Aliases|Endpoint_Type|EndpointID;

    Gatekeeper 收到一個 RegistrationRequest (RRQ) 並且回應一個 RegistrationConfirm (RCF)。

  • RRJ|IP|Aliases|Endpoint_Type|RejectReason;

    Gatekeeper 收到一個 RegistrationRequest (RRQ) 並且回應一個 RegistrationReject (RRJ)。

  • ACF|Caller_IP:Port|Caller_EndpointID|CRV|DestinationInfo|SrcInfo|IsAnswered;

    Gatekeeper 收到一個 AdmissionRequest (ARQ) 並且回應一個 AdmissionConfirm (ACF)。

  • ARJ|Caller_IP:Port|DestinationInfo|SrcInfo|IsAnswered|RejectReason;

    Gatekeeper 收到一個 AdmissionRequest (ARQ) 並且回應一個 AdmissionReject (ARJ)。

  • DCF|IP|EndpointID|CRV|DisengageReason;

    Gatekeeper 收到一個 DisengageRequest (DRQ) 並且回應一個 DisengageConfirm (DCF)。

  • DRJ|IP|EndpointID|CRV|RejectReason;

    Gatekeeper 收到一個 DisengageRequest (DRQ) 並且回應一個 DisengageReject (DRJ)。

  • LCF|IP|EndpointID|DestinationInfo|SrcInfo;

    Gatekeeper 收到一個 LocationRequest (LRQ) 並且回應一個 LocationConfirm (LCF)。

  • LRJ|IP|DestinationInfo|SrcInfo|RejectReason;

    Gatekeeper 收到一個 LocationRequest (LRQ) 並且回應一個 LocationReject (LRJ)。

  • BCF|IP|EndpointID|Bandwidth;

    Gatekeeper 收到一個 BandwidthRequest (BRQ) 並且回應一個 BandwidthConfirm (BCF)。

  • BRJ|IP|EndpointID|Bandwidth|RejectReason;

    Gatekeeper 收到一個 BandwidthRequest (BRQ) 並且回應一個 BandwidthReject (BRJ)。

  • UCF|IP|EndpointID;

    Gatekeeper 收到一個 UnregistrationRequest (URQ) 並且回應一個 UnregistrationConfirm (UCF)。

  • URJ|IP|EndpointID|RejectReason;

    Gatekeeper 收到一個 UnregistrationRequest (URQ) 並且回應一個 UnregistrationReject (URJ)。

  • IRQ|IP:Port|EndpointID;

    Gatekeeper 送出一個 InfoRequest (IRQ) 詢問某一端點是否仍存活著。如果該端點仍活著的話,應立即回應一個 InfoRequestResponse (IRR)。

  • URQ|IP:Port|EndpointID|Reason;

    Gatekeeper 送出一個 UnregistrationRequest (URQ) 以強制取消某一端點的註冊。該端點應回應 UnregistrationConfirm (UCF)。

  • CDR|CallNo|CallId|Duration|Starttime|Endtime|CallerIP|CallerEndId| \
    CalledIP|CalledEndId|DestinationInfo|SrcInfo|GatekeeperID;

    當某一通話結束後,會顯示所有的通話明細,包括發話端及受話端的 IP、起始和結束時間,以及通話時間等。

  • RouteRequest|VirtualQueue|CallerEndId|CallRef|CallerAlias|SrcInfo;

    要求外部程式決定虛擬佇列來話的路由。