This is the manual for GNU Gatekeeper 5.5.
An English manual for your version is in your GnuGk download archive.
Chapters:
Contents ·
Introduction ·
Installation ·
Getting started ·
Basic Config ·
Routed Mode & Proxy ·
Routing ·
RAS Config ·
Authentication ·
Accounting ·
Neighbors ·
Per Endpoint Config ·
Advanced Config ·
Monitoring ·
Advanced Topics
The GNU Gatekeeper Manual Chapter 9
配置文件中的以下部分可用于记录事务。
本节定义了可用于执行事务的列表模块。记录功能可用于记录网守事件,如,开/关事件和呼叫开始/停止/更新。每个事务模块将收到的事件会记录到模块特定的存储中。
各种存储选项包括纯文本文件,RADIUS服务器等等。该配置与网守身份验证的配置类似(请参阅
[Gatekeeper::Auth])。
所有CDR也会发送到控制端口,可由外部应用程序使用。
- Syntax:
-
acctmod=actions
<acctmod> := FileAcct | RadAcct | SQLAcct | HttpAcct | AMQPAcct | MQTTAcct | StatusAcct | SyslogAcct | LuaAcct | RequireOneNet | CapacityControl | ...
<actions> := <control>[;<event>,<event>,...]
<control> := optional | required | sufficient | alternative
<event> := start | stop | alert | connect | update | register | unregister | on | off | reject | mediafail
事件列表配置网守哪些事件应触发给定记事模块的日志记录(若模块支持事件类型):
start - 呼叫已开始并且已收到Setup消息(仅在路由模式下可用)
alert - 通话正在提醒(仅在路由模式下可用)
connect - 已连接呼叫(仅在路由模式下可用)
update - 呼叫处于活动状态,并执行定期更新以反映新的呼叫持续时间。这些更新的频率由
[CallTable]部分的AcctUpdateInterval变量确定。
register - 终端已注册
unregister - 终端未注册
stop - 呼叫已断开连接(已从GK呼叫表中删除)
reject - 在通过GnuGk的条款成为真正的呼叫之前,呼叫已被拒绝(ARJ)
mediafail - 在此通道中的端口检测失败
on - GK已经启动
off - GK已关闭
记事模块记录的事件的结果会有三个状态代码,设置其之一:ok, fail, next。
ok - 该模块已成功记录该事件
fail - 模块无法记录事件
next - 该模块尚未记录该事件,因为该模块未配置为/不支持此事件类型
记事模块可以重叠配置以记录多个模块的事件或创建故障转移setups。每个模块的控制标志以及结果代码定义了整个模块队列进行事件处理的结果状态。
若结果是失败,则可能会采取一些特殊措施。当前,若呼叫开始事件记录失败,则呼叫将立即断开连接。可识别以下控制标志:
required - 若模块不能记录事件,则结果状态将设置为“failure”(失败),并将事件向下传递给所有剩余模块
optional - 模块尝试记录事件,但结果状态不受成功或失败的影响(除非模块位于列表的最后)。该事件始终传递给任何剩余的模块。
sufficient - 模块确定结果状态。若成功记录了事件,则不会处理剩余的模块。否则,结果状态将设置为“失败”,并且事件将传递给其余所有模块。
alternative - 若模块成功记录了事件,则不会处理剩余的模块。否则,结果状态将不会被修改,并且事件将被传递给其余所有模块。
当前支持的事务模块:
FileAcct
普通的呼叫详细信息报告("CDR")文本文件记录器。它将CDR状态数据输出到指定的文本文件。该模块仅支持停止事务事件。配置设置是从
[FileAcct]部分读取的。
RadAcct
此模块执行RADIUS记录。它支持事件类型开始,停止,更新,打开,关闭。有关配置详细信息,请参见
[RadAcct]部分。
SQLAcct
此模块执行直接SQL记录。它支持(开始,连接,停止,更新,响玲,注册,注销)事件类型。有关配置详细信息,请参见
[SQLAcct]部分。
HttpAcct
此模块通过HTTP记录所有记录事件。它支持(启动,连接,停止,更新,响玲,拒绝,注册,注销,打开,关闭)。有关详细配置,请参见
[HttpAcct]部分。
AMQPAcct
该模块将所有记录事件记录到AMQP队列中,例如。RabbitMQ。它支持(启动,连接,停止,更新,响玲,拒绝,注册,注销,打开,关闭),有关配置详细信息,请参见
[AMQPAcct]部分。
MQTTAcct
此模块将所有记录事件记录到MQTT服务器。它支持(启动,连接,停止,更新,响玲,拒绝,注册,注销,打开,关闭),有关配置详细信息,请参见
[MQTTAcct]部分。
StatusAcct
此模块将所有记录事件记录在控制端口上。它可用于实时连接外部应用程序。它支持(开始,连接,停止,更新,响玲,注册,注销)事件类型。有关详细信息,请参见
[StatusAcct]部分。
SyslogAcct
此模块将所有记录事件记录到Unix syslog。它支持(开始,连接,停止,更新)事件类型。有关配置详细信息,请参见
[SyslogAcct]部分。
LuaAcct
此模块为每个记录事件运行一个LUA脚本。它支持(开始,连接,停止,更新,响玲,注册,注销)事件类型。有关配置详细信息,请参见
[LuaAcct] 部分。
RequireOneNet
从逻辑上讲,是一种验证方法,可确保所有呼叫在自己的网络中开始或终止。有关配置的详细信息,请参见
[RequireOneNet]。
CapacityControl
此模块执行入站呼叫量日志记录,这是CapacityControl 身份验证模块正常工作所必需的。有关 详细信息,请参见
[CapacityControl]部分。
default
这是一个特殊的伪模块-若其他模块尚未确定结果状态,则用于设置结果状态。格式为:
- Syntax:
-
default=<status>[;<event>,<event>,...]
<status> := accept | fail
<event> := start | stop | alert | connect | update | register | unregister | on | off
配置示例1(尝试使用RADIUS服务器记录呼叫开始/停止的日志,并始终将CDR写入文本文件):
- 示例:
-
RadAcct=optional;start,stop
FileAcct=required
配置示例2(尝试使用CDR日志文件记录RADIUS服务器的呼叫开始/停止,若失败):
- 示例:
-
RadAcct=alternative;start,stop
FileAcct=sufficient;stop
default=accept
这里需要使用默认规则,以防止由于RadAcct启动事件记录失败而导致呼叫被拒绝。
若RadAcct以失败返回码响应,则将其向下传递到FileAcct模块。
FileAcct模块不支持启动事件,因此它返回下一个代码。若没有默认规则,则结果状态将为失败,因为没有模块能够记录该事件。
配置示例3(始终使用RADIUS服务器记录呼叫开始和停止事件,如若叫停止事件失败,则使用CDR文件存储呼叫信息):
- 示例:
-
RadAcct=alternative;start,stop
FileAcct=sufficient;stop
default=fail;start
在默认的规则在这里是可选。如果RadAcct返回开始事件的失败代码,则该代码将传递到FileAcct模块。FileAcct模块不支持开始事件,因此它返回下一个返回代码。
该默认规则确保如果启动呼叫事件无法RadAcct记录的电话被挂断。但我们仍然希望将CDR存储在文本文件中,以防万一当呼叫断开时RADIUS服务器关闭,因此我们可稍后将呼叫持续时间获取到事务系统中。
大多数事务模块可自定义它们存储的CDR数据。它们使用一组通用的参数来定义CDR字符串。
参数是使用% 字符指定的,可以是一个字母(如%n )或更长的字母(如%{CallId} )。
任何不是参数名称的剩余字符都将被简单地复制到最终的CDR字符串中。在所有与呼叫相关的记录事件中都可识别以下参数:
%g - GK名称
%n - 通话号码(GK重启后不唯一)
%d - 通话时间(秒)
%t - 总通话时间 (从Setup到Release Complete)
%c - 收到最初的Q.931断开原因(十进制整数)
%{cause-translated} - 转换规则后的Q.931断开原因(十进制整数)
%r - 挂断会议者 (-1 - 未知, 0 - GK, 1 - 主叫, 2 - 被叫)
%p - PDD(拨号后延迟)以秒为单位
%s - 唯一的(对于此网守)会话标识符(Acct-Session-Id)
%u - 主叫方的H.323 ID
%{event-uuid} - 此事件的UUID
%{event-time} - 产生事件的时间
%{gkip} - GK的IP地址
%{external-ip} - GK的外部IP地址(若存在)
%{CallId} - H.323呼叫标识符(十六进制8位数字)
%{ConfId} - H.323会议标识符 (十六进制8位数字)
%{CallLink} - 链接的H.323会议标识符(用于H.450呼叫转移的事务帐户)
%{setup-time} - Q.931 Setup消息的时间戳字符串
%{alerting-time} - Q.931 Alerting消息的时间戳字符串
%{connect-time} - 呼叫连接事件的时间戳字符串
%{disconnect-time} - 呼叫断开事件的时间戳字符串
%{ring-time} - 远程电话响铃的时间 (从 Alerting till Connect 到 Release Complete)
%{caller-ip} - 呼叫者的信令IP地址(仅在路由模式下可用)
%{caller-port} - 呼叫者的信令端口(仅在路由模式下可用)
%{callee-ip} - 被叫方的信令IP地址(仅在路由模式下可用)
%{callee-port} - 被叫方的信令端口(仅在路由模式下可用)
%{src-info} - 用冒号分隔的源别名列表
%{dest-info} - 用冒号分隔的目标别名列表
%{Calling-Station-Id} - 主叫方号码
%{Called-Station-Id} - 被叫方号码(重写)
%{Dialed-Number} - 拨号号码(从主叫方收到)
%{caller-epid} - 主叫方的终端标识符
%{callee-epid} - 被叫方的终端标识符
%{call-attempts} - 建立呼叫的尝试次数(使用故障转移时,该次数可>1)
%{last-cdr} - 该呼叫是否是最后一个CDR ? (0/1)仅在使用故障转移时可为0
%{client-auth-id} - 验证呼叫时(通过SQLAuth)提供给GnuGk的64位整数ID
%{caller-vendor} - 呼叫终端的供应商和版本信息
%{callee-vendor} - 被叫终端的供应商和版本信息
%{sinfo-ip} - -来自Sorenson SInfo的IP(仅在TranslateSorensonSourceInfo=1时可用)
%{bandwidth} - 通话的带宽
%{bandwidth-kbps} - 授予此呼叫的带宽(以kbps为单位)
%{caller-audio-codec} - 主叫方用于发送的音频编解码器
%{callee-audio-codec} - 被叫方用于发送的音频编解码器
%{caller-video-codec} - 主叫方用于发送的视频编解码器
%{callee-video-codec} - 被叫方用于发送的视频编解码器
%{caller-audio-bitrate} - 主叫方用于发送的音频比特率(kbps)
%{callee-audio-bitrate} - 被叫方用于发送的音频比特率(kbps)
%{caller-video-bitrate} - 主叫方用于发送的视频比特率(kbps)
%{callee-video-bitrate} - 被叫方用于发送的视频比特率(kbps)
%{caller-media-ip} - 主叫方使用的媒体IP(音频)
%{callee-media-ip} - 被叫方使用的媒体IP(音频)
%{encryption} - 若所有音频和视频通道均已加密,则为"On",否则为"Off"
%{env1} - 环境变量GNUGK_ENV1的内容
...
%{env9} - 环境变量GNUGK_ENV9的内容
%{media-oip} - 呼叫者的RTP媒体IP(仅适用于H.245路由/隧道呼叫)已弃用
%{codec} - 呼叫期间使用的音频编解码器(仅适用于H.245路由/隧道呼叫)
对于注册和注销事件,可使用以下参数:
%g - GK名称
%{gkip} - GK的IP
%{external-ip} - GK的外部IP地址(若存在)
%u - 注册方的H.323 ID
%{event-uuid} - 此事件的UUID
%{event-time} - 产生事件的时间
%{endpoint-ip} - 终端的IP号码
%{endpoint-port} - 终端的端口号
%{endpoint-vendor} - 终端的供应商和版本信息
%{epid} - 端点ID
%{aliases} - 终端已注册的别名的逗号分隔列表
%{Calling-Station-Id} - 此终端的呼叫方号码
%{env1} - 环境变量GNUGK_ENV1的内容
...
%{env9} - 环境变量GNUGK_ENV9的内容
对于打开和关闭事件,可使用以下参数:
%g - GK的名称
%{gkip} - GK的IP
%{external-ip} - GK的外部IP地址(若存在)
%{env1} - 环境变量GNUGK_ENV1的内容
...
%{env9} - 环境变量GNUGK_ENV9的内容
此事务模块将CDR行写入指定的文本文件。CDR格式可以是标准格式(与状态界面显示的格式相同)或定制格式(使用参数化查询字符串)。
DetailFile=FULL_PATH_AND_FILENAME
默认:N/A
CDR纯文本文件的完整路径。若已经存在具有给定名称的文件,则新的CDR将附加在文件末尾。
StandardCDRFormat=0
默认:1
使用与状态界面CDR格式(1)兼容的CDR格式,或从CDRString参数化的字符串构建自定义CDR 字符串。
StandardCDRFormat等效于以下定义:
TimestampFormat=RFC822
CDRString=CDR|%n|%{CallId}|%d|%{connect-time}|%{disconnect-time}|%{caller-ip}:%{caller-port}|%{caller-epid}|%{callee-ip}:%{callee-port}|%{callee-epid}|%{dest-info}|%{src-info}|%g;
CDRString=%s|%g|%u|%{Calling-Station-Id}|%{Called-Station-Id}|%d|%c
默认:N/A
若禁用了StandardCDRFormat(0)或完全未指定,则此参数化字符串将指示网守如何构建自定义CDR。
可使用
公共CDR参数来定义要包含在CDR中的内容。
TimestampFormat=Cisco
默认:N/A
以CDR字符串打印的时间戳字符串的格式。若未指定此设置,则使用主网守部分中的全局设置。
Rotate=hourly | daily | weekly | monthly | L... | S...
默认:N/A
若设置,则CDR文件将基于此设置进行轮循。每小时轮循、每天、每周和每月一次。
实际的轮循周长由RotateDay和RotateTime的组合确定。在轮循过程中,现有文件被重命名为CURRENT_FILENAME.YYYYMMDD-HHMMSS,其中YYYYMMDD-HHMMSS被替换为当前时间戳,新的CDR被记录到一个空文件中。
此外,还支持按写入的CDR数(L ...)和按文件大小(S ...)轮循。该L 前缀指定了一些CDR行写的,S 前缀指定CDR文件大小。k 和m 后缀可用于指定数千(千字节)和数百万(兆字节)。
- 示例 1 - 不轮循:
-
[FileAcct]
DetailFile=/var/log/gk/cdr.log
- 示例 2 - 每小时轮循一次 (00:45, 01:45, ..., 23:45):
-
[FileAcct]
DetailFile=/var/log/gk/cdr.log
Rotate=hourly
RotateTime=45
- 示例 3 - 每天23:00 (11PM):
-
[FileAcct]
DetailFile=/var/log/gk/cdr.log
Rotate=daily
RotateTime=23:00
- 示例 4 - -每个星期日在 00:59:
-
[FileAcct]
DetailFile=/var/log/gk/cdr.log
Rotate=weekly
RotateDay=Sun
RotateTime=00:59
- 示例 5 - 在每个月的最后一天轮循:
-
[FileAcct]
DetailFile=/var/log/gk/cdr.log
Rotate=monthly
RotateDay=31
RotateTime=23:00
- 示例 6 - 每10000个CDR轮循一次:
-
[FileAcct]
DetailFile=/var/log/gk/cdr.log
Rotate=L10000
- 示例 7 - 每10 KB轮循一次:
-
[FileAcct]
DetailFile=/var/log/gk/cdr.log
Rotate=S10k
该事务模块将事务数据发送到RADIUS服务器。模块配置与RADIUS身份验证器几乎相同(有关参数的更多详细信息,请参见
[RadAuth] 和
[RadAliasAuth])。
Servers=SERVER1[:AUTH_PORT:ACCT_PORT[:SECRET]];SERVER2[:AUTH_PORT:ACCT_PORT[:SECRET]];...
默认:N/A
要将事务数据发送到的RADIUS服务器。若未提供端口信息,则使用端口号DefaultAcctPort 。若未设置密码,SharedSecret 则使用默认的共享密钥。
服务器名称可通过IP地址或DNS名称指定。IPv6地址必须始终写在方括号中。
- Sample
Servers lines: -
Servers=192.168.1.1
Servers=192.168.1.1:1645:1646
Servers=192.168.1.1:1645:1646:secret1
Servers=radius1.mycompany.com:1812:1813
Servers=radius1.mycompany.com;radius2.mycompany.com
Servers=radius1.mycompany.com:1812:1813:secret1;radius2.mycompany.com:1812:1813:secret2
Servers=[2501:4f3:61:2143::2]
Servers=[2501:4f3:61:2143::2]:1645
Servers=[2501:4f3:61:2143::2]:1645:1646
Servers=[2501:4f3:61:2143::2]:1645:1646:secret1
Servers=[2501:4f3:61:2143::2]:1645:1646:secret1;[2501:4f3:61:2143::3]:1645:1646:secret2
LocalInterface=IP_OR_FQDN
默认:N/A
GnuGk应该用来与RADIUS服务器通信的特定本地网络接口。
RadiusPortRange=10000-11000
默认:N/A
默认情况下(若未设置此选项),GnuGk根据操作系统的指定动态分配端口。为了限制GnuGk将使用的端口,请适当配置此参数。
DefaultAcctPort=PORT_NO
默认:1813
用于RADIUS记录请求的默认端口号。可被Servers 属性覆盖。
SharedSecret=SECRET
默认:N/A (empty string)
用于向RADIUS服务器验证此GnuGk(NAS客户端)的机密。它应该是加密强度很高的密码。若未在中设置服务器特定的机密,
则使用默认值Servers 。若EncryptAllPasswords 已启用,或者KeyFilled 在本节中定义了变量,则密码采用加密形式,应使用addpasswd 实用程序创建。
RequestTimeout=TIMEOUT_MS
默认:2000 (milliseconds)
RADIUS服务器对GnuGk发送的请求的响应的超时时间(毫秒)。若在此时间段内未收到响应,则查询下一个RADIUS服务器。
IdCacheTimeout=TIMEOUT_MS
默认:9000 (milliseconds)
RADIUS请求8位标识符的超时(毫秒)是唯一的。
SocketDeleteTimeout=TIMEOUT_MS
默认:60000 (milliseconds) - 60 s
关闭未使用的RADIUS套接字的超时。
RequestRetransmissions=NUMBER
默认:2
单个RADIUS请求发送到每个已配置的RADIUS服务器的次数(若未收到响应)。
RoundRobinServers=BOOLEAN
默认:1
RADIUS请求重传方法。
若设置为1,则以以下方式发送RADIUS请求(直到收到响应):
Server #1 Attempt #1, Server #2 Attempt #1, ..., Server #N Attempt #1
...
Server #1 Attempt #RequestRetransmissions, ..., Server #1 Attempt #RequestRetransmissions
若设置为0,则保留以下顺序:
Server #1 Attempt #1, ..., Server #1 Attempt #RequestRetransmissions
...
Server #N Attempt #1, ..., Server #N Attempt #RequestRetransmissions
AppendCiscoAttributes=BOOLEAN
默认:0
若设置,则在RADIUS请求中包括Cisco Vendor Specific RADIUS属性(h323-conf-id,h323-call-origin,h323-call-type)。
TimestampFormat=ISO8601
默认:N/A
RADIUS属性中发送的时间戳字符串的格式。若未指定此设置,则将应用来自主网守部分的全局设置。
UseDialedNumber=BOOLEAN
默认:0
在原始号码(由用户拨打)UseDialedNumber=1 和改写的号码之一之间选择被叫站ID号类型 UseDialedNumber=0 。
[RadAcct] Accounting-Request RADIUS Attributes
对于事务请求,事务请求包中包含以下RADIUS属性。每个属性后都有一个事件记录类型列表。
Acct-Status-Type (start,update,stop,on,off)
记录事件类型(开始,临时更新,停止,记录开启,记录关闭)
NAS-IP-Address (start,update,stop,on,off)
网守的IP地址。
NAS-Identifier (start,update,stop,on,off)
网守标识符(名称=GK参数)。
NAS-Port-Type (start,update,stop,on,off)
固定值虚拟。
Service-Type (start,update,stop)
固定值登录用户
Acct-Session-Id (start,update,stop)
唯一的事务会话标识符字符串。
User-Name (start,update,stop)
主叫方的帐户名。
Framed-IP-Address (start,update,stop)
主叫方的IP地址。端点呼叫信令地址或信令信道的远程套接字地址。
Acct-Session-Time (update,stop)
呼叫持续时间(秒)-对于临时更新事件,这是实际持续时间。
Calling-Station-Id (start,update,stop)
主叫方号码。
Called-Station-Id (start,update,stop)
被叫方号码。
(optional) VSA: VendorId=Cisco, h323-gw-id (start,update,stop)
与NAS-Identifier相同。
(optional) VSA: VendorId=Cisco, h323-conf-id (start,update,stop)
呼叫的H.323会议ID。
(optional) VSA: VendorId=Cisco, h323-call-origin (start,update,stop)
固定字符串“proxy”。
(optional) VSA: VendorId=Cisco, h323-call-type (start,update,stop)
固定字符串“VoIP”。
(optional) VSA: VendorId=Cisco, h323-setup-time (start,update,stop)
GK收到Q.931 Setup消息的时间戳。
(optional) VSA: VendorId=Cisco, h323-connect-time (update,stop)
呼叫已连接的时间戳(已收到Q.931 Setup消息或以直接信令模式发送了ACF)。
(optional) VSA: VendorId=Cisco, h323-disconnect-time (stop)
呼叫已断开连接的时间戳(已收到ReleaseComplete或DRQ)。
(optional) VSA: VendorId=Cisco, h323-disconnect-cause (stop)
Q.931两位十六进制断开原因。
(optional) VSA: VendorId=Cisco, h323-remote-address (start,update,stop)
被叫方的IP地址(若知道)。
(optional) VSA: VendorId=Cisco, Cisco-AVPair, h323-ivr-out (start, update, stop)
包含一个H.323呼叫标识符的h323-call-id变量。语法为:"h323-ivr-out=h323-call-id:123FDE 12348765 9abc1234 12"。
(optional) VSA: VendorId=Cisco, Cisco-AVPair, h323-ivr-out (start, update, stop)
rewriteed-e164-num包含重写的被叫方号码(与UseDialedNumber开关的设置无关)。
Acct-Delay-Time (start,update,stop)
网守尝试发送请求的时间(秒)。当前始终为0。
(optional) VSA: VendorId=Cisco, Cisco-AVPair, h323_rtp_proxy (stop)
呼叫的代理模式(0 =关闭,1 =开启)
(optional) VSA: VendorId=Cisco, Cisco-AVPair, RTP_source_IP (stop)
RTCP源报告数据
(optional) VSA: VendorId=Cisco, Cisco-AVPair, RTP_destination_IP (stop)
RTCP源报告数据
(optional) VSA: VendorId=Cisco, Cisco-AVPair, RTCP_source_packet_count (stop)
RTCP源报告数据
(optional) VSA: VendorId=Cisco, Cisco-AVPair, RTCP_source_packet_lost (stop)
RTCP源报告数据
(optional) VSA: VendorId=Cisco, Cisco-AVPair, RTCP_source_jitter (stop)
RTCP源报告数据
(optional) VSA: VendorId=Cisco, Cisco-AVPair, RTCP_source_sdes_XXX (stop)
RTCP源报告数据(针对每个源描述(sdes))
(optional) VSA: VendorId=Cisco, Cisco-AVPair, RTCP_destination_packet_count (stop)
RTCP目标报告数据
(optional) VSA: VendorId=Cisco, Cisco-AVPair, RTCP_destination_packet_lost (stop)
RTCP目标报告数据
(optional) VSA: VendorId=Cisco, Cisco-AVPair, RTCP_destination_jitter (stop)
RTCP目标报告数据
(optional) VSA: VendorId=Cisco, Cisco-AVPair, RTCP_destination_sdes_XXX (stop)
RTCP目标报告数据(针对每个源描述(sdes))
[RadAcct] Accounting-Response Radius Attributes
网守将忽略事务响应半径数据包中存在的所有属性。
该事务模块将事务信息直接存储到SQL数据库中。许多配置设置与其他SQL模块相同。
使用
公共数据库配置选项来定义此模块的数据库连接。
StartQuery=INSERT ...
默认:N/A
定义用于将新的呼叫记录插入数据库的SQL查询。
查询已参数化-这意味着在执行每个查询之前进行参数替换。可使用
公共CDR参数来定义要包含在CDR中的内容。
示例查询字符串:
INSERT INTO call (gkname, sessid, username, calling, called)
VALUES ('%g', '%s', '%u', '%{Calling-Station-Id}', '%{Called-Station-Id}')
StartQueryAlt=INSERT ...
默认:N/A
定义一个SQL查询,该查询用于在StartQuery 由于某种原因而失败的情况下(例如,该呼叫已存在)将新的呼叫记录插入数据库。语法和参数与相同StartQuery 。
UpdateQuery=UPDATE ...
默认:N/A
定义用于使用当前呼叫状态更新数据库中的呼叫记录的SQL查询。它用于连接和更新记录事件。语法和参数与相同StartQuery 。
示例查询字符串:
UPDATE call SET duration = %d WHERE gkname = '%g' AND sessid = '%s'
StopQuery=UPDATE ...
默认:N/A
定义SQL查询,该查询用于在呼叫结束(断开连接)时更新数据库中的呼叫记录。语法和参数与相同StartQuery 。
示例查询字符串:
UPDATE call SET duration = %d, dtime = '%{disconnect-time}' WHERE gkname = '%g' AND sessid = '%s'
StopQueryAlt=INSERT ...
默认:N/A
定义一个SQL查询,该查询用于在常规结束时(例如,StopQuery 因为呼叫记录尚不存在)在呼叫结束(断开连接)时更新数据库中的呼叫记录。语法和参数与相同StartQuery 。
示例查询字符串:
INSERT INTO call (gkname, sessid, username, calling, called, duration)
VALUES ('%g', '%s', '%u', '%{Calling-Station-Id}', '%{Called-Station-Id}', %d)
AlertQuery=UPDATE ...
默认:N/A
定义SQL查询,用于在发出响玲时更新数据库中的呼叫记录。
RegisterQuery=INSERT ...
默认:N/A
定义在端点注册时用于更新数据库的SQL查询。
UnregisterQuery=DELETE ...
默认:N/A
定义当端点注销时用于更新数据库的SQL查询。
OnQuery=UPDATE ...
默认:N/A
定义在网守启动时用于更新数据库中记录的SQL查询。
OffQuery=UPDATE ...
默认:N/A
定义在网守停止时用于更新数据库中记录的SQL查询。
TimestampFormat=MySQL
默认:N/A
查询中使用的时间戳字符串的格式。若未指定此设置,则使用主网守部分中的全局设置。
MinPoolSize=5
默认:1
池中的并发SQL连接数。池中的第一个可用连接用于存储事务数据。
示例 MySQL 应用
SQLAcct模块旨在适应已经拥有的任何数据库结构。可定义所有查询,以使其适合现有的表。这是这些表在MySQL中的外观示例,可将其用作起点。
创建一个新的数据库;在这里,我们使用名称'GNUGK':
create database GNUGK;
然后在此数据库中创建一个表来存储会计数据;我们将表格称为'CDR'。
create table GNUGK.CDR (
gatekeeper_name varchar(255),
call_number int zerofill,
call_duration mediumint unsigned zerofill,
index duration_idx (call_duration),
disconnect_cause smallint unsigned zerofill,
index dcc_idx (disconnect_cause),
acct_session_id varchar(255),
h323_id varchar(255),
gkip varchar(15),
CallId varchar(255),
ConfID varchar(255),
setup_time datetime,
connect_time datetime,
disconnect_time datetime,
caller_ip varchar(15),
index srcip_idx (caller_ip),
caller_port smallint unsigned zerofill,
callee_ip varchar(15),
index destip_idx (callee_ip),
callee_port smallint unsigned zerofill,
src_info varchar(255),
dest_info varchar(255),
Calling_Station_Id varchar(255),
Called_Station_Id varchar(255),
index dialednumber_idx (Called_Station_Id (20)),
Dialed_Number varchar(255)
);
然后,需要创建一个用于访问数据的用户名。
mysql> GRANT delete,insert,select,update ON GNUGK.* TO 'YourDesiredUsername'@'localhost' IDENTIFIED BY 'APassword';
mysql> flush privileges;
使用此命令,将仅允许从本地服务器访问数据。若需要从任何其他计算机访问数据,则必须设置适当的安全性选项。
例如,要允许从192.168.1.0/24网络访问:
mysql> GRANT delete,insert,select,update ON GNUGK.* TO 'YourDesiredUsername'@'192.168.1.%' IDENTIFIED BY 'APassword';
mysql> flush privileges;
然后,可将以下设置添加到gnugk.ini文件中,以将呼叫的历史记录插入并更新到数据库中。
[Gatekeeper::Acct]
SQLAcct=optional;start,stop,update
FileAcct=sufficient;stop
[FileAcct]
DetailFile=Add your desire path here something like /var/log/cdr.log
StandardCDRFormat=0
CDRString=%g|%n|%d|%c|%s|%u|%{gkip}|%{CallId}|%{ConfId}|%{setup-time}|%{connect-time}|%{disconnect-time}|%{caller-ip}|%{caller-port}|%{callee-ip}|%{callee-port}|%{src-info}|%{dest-info}|%{Calling-Station-Id}|%{Called-Station-Id}|%{Dialed-Number}
Rotate=daily
RotateTime=23:59
[SQLAcct]
Driver=MySQL
Database=GNUGK
Username=YourDesiredUsername
Password=APassword
StartQuery= insert into CDR (gatekeeper_name, call_number, call_duration, disconnect_cause, acct_session_id, h323_id, gkip, CallId, ConfId, setup_time, connect_time, disconnect_time, caller_ip, caller_port, callee_ip, callee_port, src_info, dest_info, Calling_Station_Id, Called_Station_Id, Dialed_Number) values ('%g', '%n', %d, %c, '%s', '%u', '%{gkip}', '%{CallId}', '%{ConfId}', '%{setup-time}', '%{connect-time}', '%{disconnect-time}', '%{caller-ip}', '%{caller-port}', '%{callee-ip}', '%{callee-port}', '%{src-info}', '%{dest-info}', '%{Calling-Station-Id}', '%{Called-Station-Id}', '%{Dialed-Number}')
StartQueryAlt= insert into CDR (gatekeeper_name, call_number, call_duration, disconnect_cause, acct_session_id, h323_id, gkip, CallId, ConfID, setup_time, connect_time, disconnect_time, caller_ip, caller_port, callee_ip, callee_port, src_info, dest_info, Calling_Station_Id, Called_Station_Id, Dialed_Number) values ('%g', '%n', %d, %c, '%s', '%u', '%{gkip}', '%{CallId}', '%{ConfID}', '%{setup-time}', '%{connect-time}', '%{disconnect-time}', '%{caller-ip}', '%{caller-port}', '%{callee-ip}', '%{callee-port}', '%{src-info}', '%{dest-info}', '%{Calling-Station-Id}', '%{Called-Station-Id}', '%{Dialed-Number}')
UpdateQuery= update CDR set call_duration=%d where gatekeeper_name='%g' and acct_session_id='%s'
StopQuery= update CDR set connect_time='%{connect-time}', call_duration=%d, disconnect_cause=%c, disconnect_time='%{disconnect-time}' where gatekeeper_name='%g' and acct_session_id='%s'
StopQueryAlt= insert into CDR (gatekeeper_name, call_number, call_duration, disconnect_cause, acct_session_id, h323_id, gkip, CallId, ConfID, setup_time, connect_time, disconnect_time, caller_ip, caller_port, callee_ip, callee_port, src_info, dest_info, Calling_Station_Id, Called_Station_Id, Dialed_Number) values ('%g STOP Alt', '%n', %d, %c, '%s', '%u', '%{gkip}', '%{CallId}', '%{ConfID}', '%{setup-time}', '%{connect-time}', '%{disconnect-time}', '%{caller-ip}', '%{caller-port}', '%{callee-ip}', '%{callee-port}', '%{src-info}', '%{dest-info}', '%{Calling-Station-Id}', '%{Called-Station-Id}', '%{Dialed-Number}')
TimestampFormat=MySQL
该事务模块将所有事务信息发送到控制端口,该端口可用于实时连接外部系统。
可使用
公共CDR参数来定义要包括在事件字符串中的内容。
StartEvent=CALL|Start|%{CallId}
默认:CALL|Start|%{caller-ip}:%{caller-port}|%{callee-ip}:%{callee-port}|%{CallId}
定义要为新呼叫显示的事件。使用与其他事务模块相同的变量对字符串进行参数化(请参见
[SQLAcct])。
StopEvent=CALL|Stop|%{CallId}
默认:CALL|Stop|%{caller-ip}:%{caller-port}|%{callee-ip}:%{callee-port}|%{CallId}
定义呼叫结束(disconnected)时的事件。语法和参数与相同StartEvent 。此事件等效于旧控制端口CDR事件,但更灵活。
UpdateEvent=CALL|Update|%{CallId}
默认:CALL|Update|%{caller-ip}:%{caller-port}|%{callee-ip}:%{callee-port}|%{CallId}
定义用于更新当前呼叫状态的事件。语法和参数与相同StartEvent 。
AlertEvent=CALL|Alert|%{CallId}
默认:CALL|Alert|%{caller-ip}:%{caller-port}|%{callee-ip}:%{callee-port}|%{CallId}
定义呼叫alerting时的事件。语法和参数与相同StartEvent 。
ConnectEvent=CALL|Connect|%{CallId}
默认:CALL|Connect|%{caller-ip}:%{caller-port}|%{callee-ip}:%{callee-port}|%{CallId}
定义连接呼叫时的事件。语法和参数与相同StartEvent 。
RejectEvent=CALL|Reject|%{CallId}
默认:CALL|Reject|%{caller-ip}:%{caller-port}|%{callee-ip}:%{callee-port}|%{CallId}
定义呼叫被拒绝时的事件。语法和参数与相同StartEvent 。
MediaFailEvent=CALL|MediaFail|%{CallId}
默认:CALL|MediaFail|%{caller-ip}:%{caller-port}|%{callee-ip}:%{callee-port}|%{CallId}
定义MediaFail事件的消息。语法和参数与相同StartEvent 。
RegisterEvent=EP|Register|%{endpoint-ip}
默认:EP|Register|%{endpoint-ip}:%{endpoint-port}|%{aliases}
定义端点注册时的事件。语法和参数与相同StartEvent 。
UnregisterEvent=EP|Unregister|%{endpoint-ip}
默认:EP|Unregister|%{endpoint-ip}:%{endpoint-port}|%{aliases}
定义端点注册时的事件。语法和参数与相同StartEvent 。
TimestampFormat=MySQL
默认:N/A
事件中使用的时间戳字符串的格式。若未指定此设置,则使用主网守部分中的全局设置。
该事务模块将事务信息发送到Unix syslog,在Windows上不可用。然后,本地syslog守护程序将根据其配置(通常在/etc/syslog.conf中指定)来路由消息。
可使用
公共CDR参数来定义要包括在事件字符串中的内容。
SyslogFacility=LOG_LOCAL1
默认:LOG_USER
将系统日志功能设置为LOG_USER, LOG_DAEMON, LOG_AUTH, LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7中的一个。
SyslogLevel=LOG_NOTICE
默认:LOG_INFO
将系统日志级别设置为LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO 或 LOG_DEBUG。
StartEvent=CALL|Start|%{CallId}
默认:CALL|Start|%{caller-ip}:%{caller-port}|%{callee-ip}:%{callee-port}|%{CallId}
定义要为新呼叫显示的事件。使用与其他事务模块相同的变量对字符串进行参数设置(请参见
[SQLAacct])。
StopEvent=CALL|Stop|%{CallId}
默认:CALL|Stop|%{caller-ip}:%{caller-port}|%{callee-ip}:%{callee-port}|%{CallId}
定义呼叫结束(disconnected)时的事件。语法和参数与相同StartEvent 。此事件等效于旧控制端口CDR事件,但更灵活。
UpdateEvent=CALL|Update|%{CallId}
默认:CALL|Update|%{caller-ip}:%{caller-port}|%{callee-ip}:%{callee-port}|%{CallId}
定义用于更新当前呼叫状态的事件。语法和参数与相同StartEvent 。
ConnectEvent=CALL|Connect|%{CallId}
默认:CALL|Connect|%{caller-ip}:%{caller-port}|%{callee-ip}:%{callee-port}|%{CallId}
定义连接呼叫时的事件。语法和参数与相同StartEvent 。
TimestampFormat=MySQL
默认:N/A
事件中使用的时间戳字符串的格式。若未指定此设置,则使用主网守部分中的全局设置。
该事务模块为每个事务事件运行一个LUA脚本。
在
常见的CDR参数可作为LUA变量param_g 或param_Called_Station_Id 。
参数名中的减号用下划线代替,以构造有效的LUA变量名。
变量中提供了当前正在处理的事件的名称,event 结果("OK", "Fail", "Next") 可存储在result变量中。
该事务模块通过HTTP发送事务信息。
可使用
公共CDR参数 来定义要包含在请求URL或正文中的内容。
Method=GET
默认:N/A
要使用的HTTP方法。当前支持GET和POST。
TimestampFormat=MySQL
默认:N/A
时间戳字符串的格式。若未指定此设置,则使用主网守部分中的全局设置。
StartURL=http://example.com/call-start
默认:N/A
要为呼叫开始事件获取的URL。可使用下面指定的参数来参数化URL。
StartBody=gatekeeper=%g
默认:empty
用于POST请求的呼叫开始事件的HTTP正文。可使用下面指定的参数来参数化URL。若未为POST指定任何正文,则将从URL参数(若存在)构造正文。
StopURL=http://example.com/call-stop
默认:N/A
要为通话停止事件获取的URL。
StopBody=gatekeeper=%g
默认:empty
用于POST请求的呼叫停止事件的HTTP正文。
UpdateURL=http://example.com/call-update
默认:N/A
用于获取呼叫更新事件的URL。
UpdateBody=gatekeeper=%g
默认:empty
用于POST请求的呼叫更新事件的HTTP正文。
AlertURL=http://example.com/call-alert
默认:N/A
用于获取呼叫响玲事件的URL。
AlertBody=gatekeeper=%g
默认:empty
用于POST请求的呼叫响玲事件的HTTP正文。
ConnectURL=http://example.com/call-connect
默认:N/A
要获取的呼叫连接事件的URL。
ConnectBody=gatekeeper=%g
默认:empty
用于POST请求的呼叫连接事件的HTTP正文。
RejectURL=http://example.com/call-rejected
默认:N/A
要为呼叫拒绝事件获取的URL。
RejectBody=gatekeeper=%g
默认:empty
用于POST请求的呼叫拒绝事件的HTTP正文。
MediaFailURL=http://example.com/media-fail
默认:N/A
要获取MediaFail事件的URL。
MediaFailBody=gatekeeper=%g
默认:empty
用于POST请求的MediaFail事件的HTTP正文。
RegisterURL=http://example.com/ep-register
默认:N/A
要获取端点注册事件的URL。
RegisterBody=gatekeeper=%g
默认:empty
用于POST请求的端点注册事件的HTTP正文。
UnregisterURL=http://example.com/ep-unregister
默认:N/A
端点注销事件要获取的URL。
UnregisterBody=gatekeeper=%g
默认:empty
用于POST请求的端点注销事件的HTTP正文。
OnURL=http://example.com/gatekeeper-up
默认:N/A
要获取网守启动事件的URL。
OnBody=gatekeeper=%g
默认:empty
网守启动事件的HTTP正文,用于POST请求。
OffURL=http://example.com/gatekeeper-down
默认:N/A
要获取网守停止事件的URL。
OffBody=gatekeeper=%g
默认:empty
网守停止事件的HTTP正文与POST请求一起使用。
该事务模块将事务信息发送到AMQP队列,例如RabbitMQ。
可使用
公共CDR参数来定义要包含在请求URL或正文中的内容。
在主机,Port, User, Password, UseSSL, CACert, Exchange and RoutingKey的设置中,可使用%{env1}至 %{env9}插入环境变量GNUGK_ENV1 ... GNUGK_ENV9。
该事务模块将事务信息发送到MQTT服务器。
可使用
公共CDR参数来定义要包含在请求URL或正文中的内容。
在主机,Port, User, Password, UseSSL and CACert的设置中,可使用%{env1}至%{env9}插入环境变量GNUGK_ENV1 ... GNUGK_ENV9
从技术上讲这是一个记事模块,其逻辑目的是对连接进行身份验证,并确保呼叫的一端至少在自己的网络中。
这样做的目的是为了保护穿透网守免受滥用,因为这些滥用本来就需要每个想打入你的网络的人都可以访问,但不应允许它支持外部到外部的呼叫。
Next
Previous
Contents
Chapters:
Contents ·
Introduction ·
Installation ·
Getting started ·
Basic Config ·
Routed Mode & Proxy ·
Routing ·
RAS Config ·
Authentication ·
Accounting ·
Neighbors ·
Per Endpoint Config ·
Advanced Config ·
Monitoring ·
Advanced Topics
|