OpenH323 Gatekeeper - The GNU Gatekeeper 使用手册
作者:黄志伟 <cwhuang@linux.org.tw>
v 2.0.3 , 20 February 2003
这是 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。
1.2 版权声明
GNU Gatekeeper 是自由软件计划,受 GNU 通用公共许可证 (GNU GPL) 所保护及规范。此外,我们特别允许执行档可与 OpenH323 及 OpenSSL 的函式库连接。
简单的说,GNU 通用公共许可证允许你可以自由的复制、散布、出售或者修改本软件。但是要求所有的衍生作品也必须以 GNU 通用公共许可证的规范释出。这表示,你必须公开所有你修改本软件的程序代码,以及任何你加进本软件的程序(如果有的话)。细节请见 COPYING 这个档案的说明。GNU 通用公共许可证的中文翻译可在 GPL 取得。
关于自由软件的概念或理想,可参考 软件自由基金会 网站的说明。
如果你不愿这样做,你必须透过状态接口以 TCP 联机的方式与 Gatekeeper 沟通。利用此方式你可以只将最基本的功能加入 Gatekeeper 中,而不公开你程序的其它部份。
1.3 名称
本计划的正式名称是 OpenH323 Gatekeeper - The GNU Gatekeeper,简称 OpenH323GK 或 GnuGK。请不要将本计划与其它类似计划搞混了!
目前有好几个使用 OpenH323 的开放原始码的 gatekeeper 计划:
- OpenGatekeeper - by Egoboo
一个功能完整的 gatekeeper 计划,以 MPL 释出。不过此计划已经满长一段时间没有进展了。另有一个以 OpenGatekeeper 为基础实作的
- OpenGK - by OpenH323 project
功能还很阳春,也是以 MPL 释出。
- OpenH323 Gatekeeper - 本计划。
这几个 gatekeeper 的计划都使用非常类似的名称,的确困扰了大多数的使用者。然而我们的 "OpenH323 Gatekeeper" 是其中最早开始的,因此选择如此类似的名称并不是我们的错。然而为了让人们能与其它计划做出更清楚的区别,我们决定加上 "The GNU Gatekeeper" 的子标题,并且使用 gnugk 做为执行档的名称。
因此请记得,当你向我们回报问题或提供建议时,请使用本计划正确的名字:OpenH323GK 或 GnuGK。不要再说成是 OpenGatekeeper 或 OpenGK 了!
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 的通信论坛,或者相反。否则一定没有人会理你。这是两个不同的计划,虽然关系密切。两个计划的开发者也不相同,虽然他们常以某种方式互相合作。
1.7 贡献者
目前本计划的主持人是 Jan Willamowius <jan@willamowius.de>。
2.0 版主要的功能与特性是由台湾的黄志伟和 呈祺信息网络 所实作,包括重新设计以适合在多执行绪并行仍安全无虑的注册及通话管理表格,新的路由模式(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),网络电话的使用者只能拨打给其它因特网上拥有网络电话的使用者。如果要拨打给传统电话的用户,就必须使用网关器。
_________________ ______________