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

Download GnuGk    Get support

The GNU Gatekeeper Manual Chapter 12

12. 高级配置

12.1 [CallTable]

  • GenerateNBCDR=0
    默认:1

    为来自控制端口上相邻区域的呼叫生成CDR。主叫方的IP和端点ID被打印为空。 通常用于调试目的。计费模块将始终获取所有呼叫的CDR数据。

  • GenerateUCCDR=0
    默认:0

    为未连接的呼叫生成CDR。通常用于调试目的。请注意,只有当网守使用路由模式并且网守未收到 Q.931 "Connect" 消息时,呼叫才被视为未连接。在直接模式下,始终将呼叫视为已连接。

  • DefaultCallDurationLimit=3600
    默认:0

    默认最大通话时间限制(秒)。设置0为禁用此功能而不限制通话时间。

  • AcctUpdateInterval=60
    默认:0

    一个时间间隔(秒),用于记录正在进行的每个呼叫的计费更新。记录更新的详细信息取决于所选的记事模块(请参阅 [Gatekeeper::Acct]部分)。 通常,计费更新将为后端服务提供增加的已连接呼叫持续时间。 默认值"0"禁用记录更新。请注意,将其设置为较短的时间间隔可能会降低网守的性能。

  • TimestampFormat=Cisco
    默认:RFC822

    CDR内打印的时间戳字符串的格式。可使用 [Gatekeeper::Main]部分中指定的相同格式列表。

  • IRRFrequency=60
    默认:120

    在ACF消息中设置irrFrequency。0将其关闭。

  • IRRCheck=0
    默认:1

    检查通话中的两个端点是否都发送了所请求的IRR。若2 * irrFrequency之后端点之一未发送IRR,则呼叫将终止。

  • SingleFailoverCDR=0
    默认:1

    故障转移处于活动状态时,可以尝试多个网关建立呼叫。此开关定义是否为此类呼叫生成一个或多个CDR。

  • UseDestCallSignalIPAsDialedNumber=1
    默认:0

    若ARQ或Setup中没有可用的拨号别名,请对%{DialedNumber}中的CDR使用destCallSignalIP。

  • SetCalledStationIdToDialedIP=1
    默认:0

    若%{called_station_id}包含IP地址,请务必在CDR中将 %{DialedNumber}设置为已拨IP。

  • DisabledCodecs=g711Alaw64k;g711Ulaw64k;h263VideoCapability;genericVideoCapability;basicString;
    默认:N/A

    过滤掉某些编解码器。必须对呼叫进行H.245路由或代理,才能使编解码器过滤正常工作。还可以过滤掉整个功能集, 例如。"nonStandard"的"receiveVideoCapability", "receiveAndTransmitDataApplicationCapability"。 通过使用Radius属性'disable-codec'或 [EP::...] 部分中的每个端点,可以按呼叫覆盖此设置。

12.2 [H225toQ931]

在H.225原因和Q.931原因代码之间进行转换时,GnuGk使用转换表。使用此部分,可更改此映射。

[H225toQ931]
;0=34 # noBandwidth
;1=47 # gatekeeperResources
2=34 # unreachableDestination => NoCircuitChannelAvailable (default 3)
;3=16 # destinationRejection
;4=88 # invalidRevision
;5=111 # noPermission
;6=38 # unreachableGatekeeper
;7=42 # gatewayResources
;8=28 # badFormatAddress
;9=41 # adaptiveBusy
;10=17 # inConf
;11=31 # undefinedReason
;12=16 # facilityCallDeflection
;13=31 # securityDenied
14=34 # calledPartyNotRegistered => NoCircuitChannelAvailable (default 20)
;15=31 # callerNotRegistered
;16=47 # newConnectionNeeded
;17=127 # nonStandardReason
;18=31 # replaceWithConferenceInvite
;19=31 # genericDataReason
;20=31 # neededFeatureNotSupported
;21=127 # tunnelledSignallingRejected

12.3 [GkQoSMonitor]

使用H.460.9收集来自端点的服务质量信息。端点必须支持H.460.9,此服务才能正常运行。

  • Enable=1
    默认:0

    定义是启用还是禁用该功能。若启用,此功能将响应客户端支持的功能请求,因此客户端知道将QoS统计信息发送到网守。

  • CallEndOnly=0
    默认:1

    定义是通过IRR消息收集信息还是仅在呼叫结束时收集QoS信息。

  • DetailFile=qos.txt
    默认:N/A

    定义QoS日志的输出文件。若未定义文件,则在跟踪级别4的跟踪文件中将QoS信息作为一项输出。

12.4 [GkQoSMonitor::SQL]

本部分允许将QoS信息存储在数据库中,可以使用 [SQLPasswordAuth]中定义的相同数据库参数。

  • Query=INSERT ...
    默认:N/A

    定义用于存储QoS信息的SQL查询。

    定义了以下参数:

    • %g - GK ID
    • %{ConfId} - 会议ID
    • %{session} - 会话
    • %{caller-ip} - 来电者IP
    • %{caller-port} - 呼叫者端口
    • %{caller-nat} - 呼叫者是否已NAT (0 or 1)
    • %{callee-ip} - 被叫IP
    • %{callee-port} - 被叫端口
    • %{avgdelay} - 平均延迟
    • %{packetloss} - 数据包丢失
    • %{packetloss-percent} - 丢包率
    • %{avgjitter} - 平均抖动
    • %{bandwidth} - 带宽(以每秒100位为单位)
    • %t - timestamp

    示例查询字符串:

    INSERT INTO qos SET caller_ip="%{caller-ip}", bandwidth="%{bandwidth}, timestamp=%t
    

12.5 [Endpoint]

通过向其他网守注册,网守可以充当端点,从而允许您构建网守层次结构。本节定义了网守的端点功能。

  • Gatekeeper=10.0.1.1
    默认:no

    GnuGk定义要注册的父网守。当路由过程中的呼叫到达'parent'路由策略时,它将所有呼叫路由到该网守。若将其设置为auto,则GnuGk将发送IPv4广播GRQ。

    确保不向自己注册,结果可能会非常令人困惑。

  • Type=Gateway
    默认:Gateway

    定义GnuGk注册时将使用的终端类型。有效选项为GatewayTerminal

  • Vendor=Cisco | GnuGk | Generic
    默认:GnuGk

    选择父网守类型,以启用供应商特定的扩展。也可以通过为供应商指定T.35 ID(<country>,<manufacturer>,<extension>) 的三元组来配置供应商ID,而不启用任何扩展名,从而配置此设置。

    示例:

    Vendor=GnuGk
    ; Aculab ID
    Vendor=222,173,0
    

  • HideGk=1
    默认:0

    隐藏网守正在注册的事实,例如,不要在终端类型中设置网守标志。

  • ProductId=Any Product Name
    默认:GnuGk's name

    此设置将允许配置注册请求中使用的"product ID" 字符串。此设置的主要用途是解决互通性问题。

  • ProductVersion=1.2.3
    默认:GnuGk version

    此设置允许您在注册请求中配置产品版本字符串,以解决兼容性问题。

  • H323ID=ProxyGK
    默认:<Name>

    指定端点的H.323 ID别名。多个别名可以用逗号分隔。

  • E164=18888600000,18888700000
    默认:N/A

    定义端点的E.164(dialedDigits)别名。多个别名可以用逗号分隔。

  • Password=123456
    默认:N/A

    指定要发送给父网守的密码。

    所有RAS请求都将在cryptoTokens字段(MD5&HMAC-SHA1-96)和tokens(CAT)中包含密码。要发送不带有cryptoTokens和令牌字段的RAS请求,请配置一个空密码。 若EncryptAllPasswords 已启用,或者KeyFilled在本节中定义了变量,则密码采用加密形式,应使用addpasswd实用程序创建。

    该密码将在发送给邻域网守的LRQ中使用。

  • Authenticators=H.235.1,CAT
    默认:H.235.1,MD5,CAT

    选择要发送给GRQ中的父网守的身份验证器。默认选项为:H.235.1(HMAC SHA1/旧的H235AnnexD),MD5(摘要式身份验证)和CAT(Cisco访问令牌,即RADIUS)。 设置值为NONE将禁用所有身份验证。若省略此设置,则默认情况下将启用所有身份验证。注意:H.235.1需要将OpenSSL支持编译到GnuGk中。

  • Prefix=188886,188887
    默认:N/A

    向父网守注册指定的前缀。仅在Type为时生效Gateway

  • TimeToLive=900
    默认:60

    建议注册的生存时间值(以秒为单位)。请注意,实时生存计时器是由父网守指定的,RCF是回复RRQ消息。

  • RRQRetryInterval=10
    默认:3

    若未收到父网守的响应,请定义重试间隔(以秒为单位),以重新发送RRQ。每次失败,此间隔都会加倍,最大RRQRetryInterval * 128超时。

  • UnregisterOnReload=1
    默认:0

    定义子网守在从控制端口接收到“重载”命令后是否注销并向其父级重新注册。

  • NATRetryInterval=60
    默认:60

    尝试重新连接TCP NAT信令套接字之前等待的时间(秒)。当无法建立连接或连接断开时,可能会发生这种情况。

  • NATKeepaliveInterval=86400
    默认:86400

    定义刷新与父网守的TCP NAT信令连接的频率。由于NAT服务器通常会将TCP映射保留一定的时间,因此强烈建议将其设置为比NAT服务器映射超时稍短的值。 通过发送特殊的Q.931 IncomingCallProceeding消息来完成刷新。若NAT执行TCP端口转换,则可能需要将其设置为缩短至60秒的值。

  • Discovery=0
    默认:1

    配置GnuGk尝试通过首先发送GRQ来发现父网守。

  • UseAlternateGK=0
    默认:1

    启用备用网守功能。若从父网守收到的GRJ/GCF/RCF消息包含备用网守列表,则此信息将被存储,并在发生故障时可用于向其他网守重新注册。若您不想使用此功能,请将此变量设置为0

  • GatekeeperIdentifier=ParentGK
    默认:Not set

    若只想接受与该网守标识符匹配的父网守,则定义此参数。对GRQ发现很有用,可以防止意外的网守匹配。若不关心网守标识符,或者使用具有不同网守标识符的备用网守,请不要设置此变量。

  • EndpointIdentifier=ChildGK
    默认:Not set

    若要为此子网守使用特定的端点标识符,请设置此选项。若未设置此选项(默认),则标识符由父网守在GCF/RCF消息中分配。

  • ForwardDestIp=0
    默认:1

    将ARQ中的destCallSignalAddress转发给父网守。

  • EnableAdditiveRegistration=1
    默认:0

    子网守是否支持将注册信息传递给父级。若您希望在父网守而不是子网守中管理包括身份验证在内的注册,请使用此选项。

  • EnableGnuGkNATTraversal=1
    默认:0

    启用对GnuGk的旧NAT穿透方法的支持。对于新安装,应使用H.460.18/.19。

  • EnableH46018=1
    默认:0

    子节点应答是否向父节点提供H.460.18/.19支持。

  • EnableH46023=1
    默认:0

    子节点应答是否向父节点提供H.460.23/.24支持。

  • UseTLS=1
    默认:0

    通过此网守使用TLS(传输层安全性)。另请参阅 [TLS] section部分。

12.6 [CTI::Agents]

本部分允许配置所谓的虚拟队列,以允许外部应用程序通过控制端口分配入站呼叫。 虚拟队列具有H.323别名,可以像端点一样呼叫它,也可以回答一组别名。

呼叫到达虚拟队列后,网守将在控制端口上发出RouteRequest信号,并等待外部应用程序通过RouteReject(这将导致呼叫被拒绝) 或通过RouteToAlias/RouteToGateway进行响应,该路由将导致目的地被重写,因此呼叫将被路由到外部应用程序指定的别名(例如,呼叫中心代理)。

若超时后仍未收到应答,则通话将终止。

可通过三种方式指定虚拟队列

  • exact alias name - 给出别名列表。若请求目标别名与这些名称之一匹配,则会激活虚拟队列。
  • prefix - 给出前缀列表。若请求目标别名以这些前缀之一开头,则会激活虚拟队列。
  • regular expression - 给出正则表达式。若请求目标别名与表达式匹配,则激活虚拟队列。

要将虚拟队列应用于所有呼叫,请指定匹配所有内容的正则表达式,请参见下面的示例。

有关消息和响应的详细信息,请参见监视部分。

  • VirtualQueueAliases
    默认:none

    这为虚拟队列定义了H.323别名列表(与vqueue RoutingPolicy一起使用)。

    示例:

    VirtualQueueAliases=sales,support

  • VirtualQueuePrefixes
    默认:none

    这定义了虚拟队列的前缀列表(与vqueue RoutingPolicy一起使用)。

    示例:

    VirtualQueuePrefixes=001215,1215

  • VirtualQueueRegex
    默认:none

    这为虚拟队列定义了一个正则表达式(与vqueue RoutingPolicy一起使用)。

    示例 (以001215或1215开头的数字):

    VirtualQueueRegex=^(001|1)215[0-9]*$

    示例 匹配所有呼叫的:

    VirtualQueueRegex=^.*$

  • RequestTimeout
    默认:10
    外部应用程序回答RouteRequest的超时时间(以秒为单位)。若在此期间未收到应答,则呼叫将被拒绝。

12.7 [CTI::MakeCall]

本节包含控制端口命令 MakeCall的设置

  • EndpointAlias=DialOut
    默认:InternalMakeCallEP

    这定义了用于拨号的伪端点的别名。

  • TransferMethod=H.450.2
    默认:FacilityForward

    设置将呼叫从伪端点转移到实际目的地的方法。可能的值为:FacilityForward,FacilityRouteCallToToMC,Reroute和H.450.2。

  • UseH450=1
    默认:0

    不建议使用:改用TransferMethod开关。

    使用H.450.2转移而不是Facility消息将呼叫从伪端点转移到实际目的地。

  • Gatekeeper=192.168.1.2
    默认:127.0.0.1

    伪端点要注册的网守IP。

  • Interface=192.168.1.1:1730
    默认:*:1722

    用于伪端点的接口和端口。

  • DisableH245Tunneling=1
    默认:0

    对伪端点禁用H.245隧道。

  • Bandwidth=786
    默认:384

    呼叫带宽(以kbps为单位)。许多端点不会建立比此处指定的带宽更高的呼叫。

12.8 [SQLConfig]

从SQL数据库加载网守设置(除了从配置文件读取的设置外。 一个通用的ConfigQuery可以用来从数据库中读取和/或一个几乎所有的设置[RasSrv::RewriteE164], [RasSrv::PermanentEndpoints], [RasSrv::Neighbors], [RasSrv::GWPrefixes]查询可以用来加载特定设置。 从SQL数据库读取的条目优先于配置文件中的设置。

使用 公共数据库配置选项来定义此模块的数据库连接。

  • ConfigQuery=SELECT ...
    默认:N/A

    定义用于从数据库读取网守设置的SQL查询。查询已参数化-这意味着参数替换会在执行查询之前发生。 参数占位符由%1, %2, ...字符串表示。指定%%将百分号字符嵌入字符串中的数字之前(例如%%1),指定%{1}以允许在复杂表达式如%{1}123之内扩展。 对于ConfigQuery只有一个参数定义为:

    • %1 - GK标识符

    预计查询将返回零个或更多数据行,每行包含three列:

    • column at index 0 - 配置部分名称
    • column at index 1 - 配置键(选项名称)
    • column at index 2 - 配置值(选项数值)

    示例查询字符串:

    ConfigQuery=SELECT secname, seckey, secval FROM sqlconfig WHERE gk = '%1'
    ConfigQuery=SELECT 'RasSrv::RRQAuth', alias, rule FROM rrqauth WHERE gk = '%1'
    

  • RewriteE164Query=SELECT ...
    默认:N/A

    定义一个SQL查询,用于从数据库中检索该[RasSrv::RewriteE164]部分的重写规则。查询已参数化-这意味着在执行每个查询之前都会进行参数替换。 参数占位符由%1, %2, ...字符串表示。指定%%将百分号字符插入数字到字符串中(例如%1),指定%1以允许在%{1}123之类的复杂表达式内扩展。 对于RewriteE164Query只有一个参数定义为:

    • %1 - GK标识符
    预计查询将返回零个或更多数据行,每行包含两列:
    • column at index 0 - 重写规则键
    • column at index 1 - 重写规则值

    示例查询字符串:

    RewriteE164Query=SELECT rkey, rvalue FROM rewriterule WHERE gk = '%1'
    

  • RewriteAliasQuery=SELECT ...
    默认:N/A

    定义一个SQL查询,用于从数据库中检索该[RasSrv::RewriteAlias]部分的重写规则。查询已参数化-这意味着在执行每个查询之前都会进行参数替换。 参数占位符由%1, %2, ... 字符串表示。指定%%将百分号字符插入数字到字符串中(如%%1)),指定%{1}以允许在%{1}123之类的复杂表达式内扩展。 对于RewriteAliasQuery只有一个参数定义为:

    • %1 - GK标识符
    预计查询将返回零个或更多数据行,每行包含两列:
    • column at index 0 - 重写规则键
    • column at index 1 - 重写规则值

    示例查询字符串:

    RewriteAliasQuery=SELECT rkey, rvalue FROM assignedalias WHERE gk = '%1'
    

  • AssignedAliasQuery=SELECT ...
    默认:N/A

    定义一个SQL查询,用于从数据库中检索该[RasSrv::AssignedAlias] 部分的重写规则。查询已参数化-这意味着在执行每个查询之前都会进行参数替换。 参数占位符由%1, %2, ...字符串表示。指定%%将百分号字符插入数字到字符串中(如%%1)),指定%{1}以允许在%{1}123之类的复杂表达式内扩展。 对于AssignedAliasQuery只有一个参数定义为:

    • %1 - GK标识符
    预计查询将返回零个或更多数据行,每行包含两列:
    • column at index 0 - 重写规则键
    • column at index 1 - 重写规则值

    示例查询字符串:

    AssignedAliasQuery=SELECT rkey, rvalue FROM assignedalias WHERE gk = '%1'
    

  • NeighborsQuery=SELECT ...
    默认:N/A

    定义一个SQL查询,用于从该[RasSrv::Neighbors]部分的数据库中检索邻域条目。查询已参数化-这意味着在执行每个查询之前都会进行参数替换。 参数占位符由%1, %2, ...字符串表示。指定 %% 将百分号字符插入数字到字符串中(如%%1),指定%{1}以允许在%{1}123之类的复杂表达式内扩展。为NeighborsQuery一个参数定义:

    • %1 - GK标识符
    查询返回零个或更多数据行,每行包含六列:
    • column at index 0 - 邻域名称(标识符)
    • column at index 1 - 邻域IP地址
    • column at index 2 - 邻域端口号
    • column at index 3 - 可选前缀(逗号分隔)
    • column at index 4 - 可选密码
    • column at index 5 - 可选的动态IP标志

    示例查询字符串:

    NeighborsQuery=SELECT nid, nip, nport, npfx, NULL, 0 FROM neighbor WHERE gk = '%1'
    

  • NeighborsQuery2=SELECT ...
    默认:N/A

    定义一个SQL查询,用于从该[RasSrv::Neighbors]部分的数据库中检索新样式格式的邻域条目。查询已参数化-这意味着在执行每个查询之前都会进行参数替换。 参数占位符由%1, %2, ...字符串表示。指定%%将百分号字符插入数字到字符串中(例%%1),指定%{1}以允许在%{1}123之类的复杂表达式内扩展。 为NeighborsQuery一个参数定义:

    • %1 - GK标识符
    期望查询返回零个或更多数据行,每行包含六列:
    • column at index 0 - 邻域名称(标识符)
    • column at index 1 - 邻域类型 (GnuGk, Cisco, Generic)
    • column at index 2 - 邻域主机 (IP [and port])
    • column at index 3 - 可选的 SendPrefixes(逗号分隔
    • column at index 4 - 可选的 AcceptPrefixes(逗号分隔
    • column at index 5 - 可选的 ForwardHopCount
    • column at index 6 - 可选的 AcceptForwardedLRQ
    • column at index 7 - 可选的 ForwardResponse
    • column at index 8 - 可选的 H46018Type (0-none 1-server 2-client)
    • column at index 9 - 可选的 SendAuthUser (H46018)
    • column at index 10 - 可选的 SendPassword (H46018)

    示例查询字符串:

    NeighborsQuery2=SELECT id, gtype, host, sendPrefix, recvPrefix FROM neighbor WHERE gk ='%1';
    

  • PermanentEndpointsQuery=SELECT ...
    默认:N/A

    定义一个SQL查询,用于从该[RasSrv::PermanentEndpoints]部分的数据库中检索永久端点。查询已参数化-这意味着在执行每个查询之前都会进行参数替换。 参数占位符由%1, %2, ...字符串表示。指定%%将百分号字符插入数字到字符串中(例如%%1),指定%{1}以允许在%{1}123之类的复杂表达式内扩展。 对于PermanentEndpointsQuery只有一个参数定义为:

    • %1 - GK标识符
    预计查询将返回零或更多数据行,每行包含3或5列:
    • column at index 0 - 永久端点IP地址
    • column at index 1 - 永久端点端口号
    • column at index 2 - 永久端点别名
    • column at index 3 - 可选:永久端点前缀和优先级(逗号分隔)
    • column at index 4 - 可选:永久端点供应商
    • column at index 5 - 可选:永久性端点产品

    示例查询字符串:

    PermanentEndpointsQuery=SELECT peip, 1720, pealias, NULL FROM permanentep WHERE gk = '%1'
    

  • GWPrefixesQuery=SELECT ...
    默认:N/A

    定义用于从该[RasSrv::GWPrefixes]部分的数据库中检索网关前缀的SQL查询。查询已参数化-这意味着在执行每个查询之前都要进行参数替换。 参数占位符由%1, %2, ... 字符串表示。指定%%将百分号字符插入数字到字符串中(如%{1}),指定%{1}以允许在%{1}123之类的复杂表达式内扩展。 对于GWPrefixesQuery只有一个参数定义为

    • %1 - GK标识符
    预计查询将返回零个或更多数据行,每行包含两列:
    • column at index 0 - 网关别名
    • column at index 1 - 网关前缀(逗号分隔)

    示例查询字符串:

    GWPrefixesQuery=SELECT gwalias, gwpfx FROM gwprefix WHERE gk = '%1'
    

12.9 [PortNotifications]

只要打开新端口进行监听,GnuGk就可以执行系统命令。例如,这可以用于自动更新防火墙配置。

可以使用以下占位符:

  • %p - 协议 ("udp" or "tcp")
  • %n - 端口
  • %i - IP

通过将命令配置为针对某些类型的端口运行,而不针对其他类型的端口运行,可轻松选择要处理的端口和要忽略的端口。

  • Q931PortOpen=/usr/local/bin/ports.sh %p %n %i
    默认:none
  • Q931PortClose=/usr/local/bin/ports.sh %p %n %i
    默认:none
  • H245PortOpen=/usr/local/bin/ports.sh %p %n %i
    默认:none
  • H245PortClose=/usr/local/bin/ports.sh %p %n %i
    默认:none
  • RTPPortOpen=/usr/local/bin/ports.sh %p %n %i
    默认:none
  • RTPPortClose=/usr/local/bin/ports.sh %p %n %i
    默认:none
  • T120PortOpen=/usr/local/bin/ports.sh %p %n %i
    默认:none
  • T120PortClose=/usr/local/bin/ports.sh %p %n %i
    默认:none
  • RASPortOpen=/usr/local/bin/ports.sh %p %n %i
    默认:none
  • RASPortClose=/usr/local/bin/ports.sh %p %n %i
    默认:none
  • StatusPortOpen=/usr/local/bin/ports.sh %p %n %i
    默认:none
  • StatusPortClose=/usr/local/bin/ports.sh %p %n %i
    默认:none
  • RadiusPortOpen=/usr/local/bin/ports.sh %p %n %i
    默认:none
  • RadiusPortClose=/usr/local/bin/ports.sh %p %n %i
    默认:none

例:

[PortNotifications]
Q931PortOpen=/usr/local/bin/ports.sh %p %n %i
Q931PortClose=/usr/local/bin/ports.sh %p %n %i
H245PortOpen=/usr/local/bin/ports.sh %p %n %i
H245PortClose=/usr/local/bin/ports.sh %p %n %i
RTPPortOpen=/usr/local/bin/ports.sh %p %n %i
RTPPortClose=/usr/local/bin/ports.sh %p %n %i
RASPortOpen=/usr/local/bin/ports.sh %p %n %i
RASPortClose=/usr/local/bin/ports.sh %p %n %i
T120PortOpen=/usr/local/bin/ports.sh %p %n %i
T120PortClose=/usr/local/bin/ports.sh %p %n %i

12.10 [SNMP]

简单网络管理协议(SNMP)使可在操作过程中监视GNU Gatekeeper,并允许在发生错误时为通知("traps")配置目标系统。

  • EnableSNMP=1
    默认:0

    启用S​​NMP支持。GnuGk必须在SNMP支持下进行编译。

  • Implementation=Net-SNMP
    默认:PTLib

    选择要使用的SNMP实现。可能的值为Net-SNMPPTLib。PTLib实现独立运行,对于Net-SNMP实现,还必须在服务器上安装Net-SNMP,因此GnuGk可以注册为子代理。

  • EnableTraps=0
    默认:1

    启用或禁用抛出SNMP陷阱。默认情况下会引发错误陷阱。

  • EnableWarningTraps=1
    默认:0

    还会引发带有警告的陷阱。若启用警告陷阱,请确保您的管理应用程序中有适当的陷阱筛选。在GnuGk无法确定其是否为真正错误的危害情况下,可能会生成许多警告。

若GnuGk配置文件启用了SNMP,并且选择了Net-SNMP实现,则GnuGk将向Net-SNMP守护程序注册为AgentX子代理。 默认情况下,GnuGk将连接到本地主机IP地址(127.0.0.1)和TCP端口705。注册为子代理程序使可继续查询Net-SNMP有关服务器的总体运行状况,并添加GnuGk特定对象。

所有GET/SET请求和SNMP陷阱都由Net-SNMP守护程序执行,因此访问控制,陷阱目标和SNMP版本信息的配置必须在Net-SNMP .conf文件中完成。

若选择了PTLib的SNMP实现,则GnuGk将启动独立的SNMP代理。 注意:只有一个SNMP代理可以绑定到UDP/161,因此,若您在服务器上使用另一个SNMP代理,则可能必须使用非标准端口。

注意:默认情况下,PTLib在配置过程中启用SNMP,因此,若SNMP不起作用,请确保使用以下命令wasn't 编译您的PTLib --disable-snmp

使用PTLib而不是功能齐全的Net-SNMP意味着仅支持陷阱和GET/GET-NEXT请求。有关将PTLib用于SNMP所需的其他开关,请参见下文。

GnuGk企业MIB

GnuGk项目已由IANA(互联网编号分配机构)分配了企业编号27938,因此GnuGk的所有OID均在1.3.6.1.4.1.27938之内。

正式的MIB规范(SMIv2)可以在GnuGk分发的文件'gnugk.mib'中找到。您可能需要将其导入到SNMP管理软件中,以查看GnuGk的OID的符号名称。

可以使用以下OID: The following OIDs are available:

  • 1.3.6.1.4.1.27938.11.1.1 GnuGk 版本 (GET)
  • 1.3.6.1.4.1.27938.11.1.2 具有模块标志(GET)的GnuGk版本
  • 1.3.6.1.4.1.27938.11.1.3 当前端点注册(GET)的数量
  • 1.3.6.1.4.1.27938.11.1.4 正在进行的呼叫数(GET
  • 1.3.6.1.4.1.27938.11.1.5 跟踪调试级别(GET,SET)
  • 1.3.6.1.4.1.27938.11.1.6 CatchAll目标(GET,SET)
  • 1.3.6.1.4.1.27938.11.1.7 自启动以来的总呼叫数(GET)
  • 1.3.6.1.4.1.27938.11.1.8 自启动以来成功呼叫(GET)
  • 1.3.6.1.4.1.27938.11.1.9 以kbps(GET)分配给正在进行的呼叫的总带宽
所有这些OID都是标量,因此在查询它们时请记住要附加'.0',例如,与'snmpget'。

当作为独立代理运行时,PTLib SNMP代理还将回答一些通用系统OID,例如。sysUptime(OID 1.3.6.1.2.1.1.3)和sysName(OID 1.3.6.1.2.1.1.5)。

注意:通过SNMP设置CatchAll目标将更新配置文件以使更改永久生效。设置跟踪级别是一个临时设置。

有以下定义:

  • 1 GnuGk started
  • 2 GnuGk stopped
  • 3 Config Reload
  • 4 Module creation failed
  • 5 Database operation failure
  • 6 IO operation failure
  • 7 General error
  • 8 Authentication error
  • 9 Message encoding/decoding error
  • 10 Network error
  • 11 Neighbor error

可能具有3个可选数据元素:

  • Severity level (OID 1.3.6.1.4.1.27938.11.2.1): Error=1, Warning=2, Info=3
  • Group (OID 1.3.6.1.4.1.27938.11.2.2): General=1, Network=2, Database=3, Accounting=4, Authentication=5, Configuration=6
  • Display string (OID 1.3.6.1.4.1.27938.11.2.3)

配置Net-SNMP

Net-SNMP配置通常在/etc/snmp/snmpd.conf中找到。该配置文件定义了SNMP管理器的访问控制规则,并定义了诸如只读和读写团体名之类的设置,向何处发送陷阱等。

根据您使用的陷阱主机定义,Net-SNMP会将陷阱转换为适当的版本。若要发送版本1陷阱,请使用'trapsink';若要发送版本2陷阱,请使用'trap2sink';对于SNMP v3通知消息,请使用'informsink'。

请确保在Net-SNMP守护程序中启用了AgentX支持。

SNMP版本2c的snmpd.conf的简单示例:

# server location and contact
syslocation Server Room
syscontact Sysadmin ([email protected])

# read-only access only from this network, access to all MIBs
rocommunity public 192.168.1.0/24
# read-write access only from this network, restricted to the GnuGk MIB
rwcommunity mysecret 192.168.1.0/24     1.3.6.1.4.1.27938

# send traps as version 2 to this host with community string 'public'
trap2sink   192.168.1.64    public

# enable AgentX support
master agentx
agentxsocket tcp:localhost:705

对于SNMP版本3,配置文件如下所示:

# server location and contact
syslocation Server Room
syscontact Sysadmin ([email protected])

# read-only access for user 'peter'
rouser peter
# full read-write access for user 'paul'
rwuser paul
# read-write access only for the GnuGk MIB for user 'mary'
rwuser mary auth 1.3.6.1.4.1.27938

# create the user accounts and set passwords
createUser peter MD5 peterpeter DES
createUser paul MD5 paulpaul DES
createUser mary MD5 marymary DES

# send traps as version 3 Inform messages with community string 'public'
informsink   192.168.1.64    public

# enable AgentX support
master agentx
agentxsocket tcp:localhost:705

也可以将基于Net-SNMP的代理配置为在没有Net-SNMP守护程序的情况下独立运行,但是不建议这样做。

  • Standalone=1
    默认:0
    独立运行SNMP-Agent,并且不连接到AgentX主代理。

使用 PTLib's SNMP 实现

PTlib支持SNMP版本1和2 GET请求,并且将始终在版本2c消息中发送版本1陷阱。不支持GETNEXT(用于'walk')和SET请求。

使用PTLib实现时,应使用以下附加开关:

  • TrapHost=192.168.1.100
    默认:none

    定义陷阱目标主机。若未定义主机,则不会发送陷阱。可指定IP或DNS名称。

  • TrapCommunity=public
    默认:public

    定义陷阱的社区字符串。

  • AgentListenIP=192.168.1.100
    默认:127.0.0.1

    定义SNMP代理应侦听的IP。

  • AgentListenPort=11161
    默认:161

    定义SNMP代理应侦听的UDP端口。

  • AllowRequestsFrom=192.168.1.0/24
    默认:n/a

    以逗号分隔的IP或网络列表,允许向我们发送SNMP请求。

12.11 [TLS]

使用TLS(传输层安全性),可加密Q.931信令信道(例如,通过隧道传输时为H.245)。启用TLS后,GnuGk将在端口1300上侦听TLS连接。

呼叫的每个分支不能单独使用TLS。例如,一个端点可能会将其发往GNU Gatekeeper的信号加密,而发往另一端点的呼叫的第二部分可能未加密。

必须通过在[EP::...]部分中设置一个开关来手动定义哪些端点在使用TLS时使用它们。类似的,可为邻域和父网守启用TLS。 因没有很多端点支持TLS加密,因此此功能对于保护到分支机构等的“中继”连接或穿越区域非常有用。

使用TLS对于避免对H.235.6媒体加密的中间人攻击也很重要。

注意:当前,当您使用TLS时,必须使用H.245隧道,当并非所有端点都本身启用隧道时,请考虑使用H245TunnelingTranslation = 1在网守之间建立H.245隧道。

  • EnableTLS=1
    默认:0

    启用TLS支持。GnuGk必须已使用OpenSSL支持进行编译。

  • PrivateKey=server_key.pem
    默认:tls_private_key.pem

    具有此服务器私钥的文件。

  • Certificates=server_cert.pem
    默认:tls_certificate.pem

    此服务器的证书文件。

  • CAFile=root_cert.pem
    默认:n/a

    带有根CA证书的文件。

  • CADir=/etc/certs/
    默认:n/a

    搜索根CA证书的目录。

  • Passphrase=whatever
    默认:n/a

    若已设置密码,则打开上述证书文件的密码。

  • CipherList=ALL:!ADH:!LOW:!EXP:!MD5:!RC4:!SHA1:@STRENGTH
    默认:ALL:!ADH:!LOW:!EXP:!MD5:!RC4:!SHA1:@STRENGTH

    设置要用于TLS连接的OpenSSL密码列表。

  • CheckCertificateIP=1
    默认:0

    除了检查对等证书是否正确签名之外,GnuGk还可以检查X.509扩展名之一是否包含DNS名称,或者证书中的commonName是否与IP(实际来自连接)相匹配。

    并非所有证书都包含正确的DNS名称,若您的对等方位于NAT之后,则可能无法看到其真实IP。另外,DNS查找可能很慢,因此默认情况下禁用此检查。

  • RequireRemoteCertificate=1
    默认:1

    建议在双方之间通过数字证书进行身份验证的TLS之间建立TLS。但是,在某些情况下,很难或不可能将证书生成和分发到远程/远程端点。 将此开关设置为0时,它将仅验证网守发起的TLS连接,而不验证其收到的TLS连接。因此,仅应在存在其他安全性的网守环境中使用它,例如在邻域策略中定义显式邻域。 对于端点,仅应将其与受信任的端点一起使用,并与H.460.17(推荐)和.18结合使用,在端点处,端点始终会启动TLS连接并可以验证网守的证书。若是H.460。

使用OpenSSL生成密钥和证书

不必信任用于Web浏览等的相同CA(证书颁发机构)。默认情况下,GnuGk会忽略服务器上随OpenSSL一起安装的根证书,但可以通过设置CADir= 来启用它们。

要严格控制信任的人,可以使用OpenSSL生成自己的CA,并且仅允许使用由CA签名的证书进行连接。使用CAFile= 开关设置您自己的CA,而未设置CADir=。

要按照分步说明进行操作,您需要为CA定义一个文件,名为root.cnf,为服务器定义一个文件,名为server.cnf(请参见下文)。 在执行这些步骤时,系统将询问您几次生成文件的密码。您应该对所有这些都使用相同的名称,并使用Passphrase= 开关将其添加到您的GnuGk配置中。

首先,生成您的CA并对其进行自我签名:

openssl req -newkey rsa:2048 -sha256 -keyout root_key.pem -out root_req.pem -config root.cnf
openssl x509 -req -in root_req.pem -sha256 -extfile root.cnf -days 365 -extensions certificate_extensions -signkey root_key.pem -out root_cert.pem

然后为每个服务器或端点生成一个密钥,并使用CA证书对其进行签名:

openssl req -newkey rsa:2048 -sha256 -keyout server_key.pem -out server_req.pem -config server.cnf -reqexts req_extensions
openssl x509 -req -in server_req.pem -sha256 -extfile root.cnf -days 365 -extensions certificate_extensions -CA root_cert.pem -CAkey root_key.pem -CAcreateserial -out server_cert.pem
然后重复以生成所需数量的证书。

上面生成的证书有效期为365天。确保在它们到期之前将其更换,否则将无法拨打电话!

要检查生成的证书的内容(例如,查看证书是否已过期或DNS名称是否正确),可使用

openssl x509 -text -in server_cert.pem

这是可修改的示例root.cnf文件:

[ ca ]
default_ca       = gnugk_ca

[ gnugk_ca ]
dir              = /opt/gnugk-ca
certificate      = $dir/cacert.pem
database         = $dir/index.txt
new_certs_dir    = $dir/certs
private_key      = $dir/private/cakey.pem
serial           = $dir/serial
 
default_crl_days = 7
default_days     = 365
default_md       = sha256
 
policy           = gnugk_ca_policy
x509_extensions  = certificate_extensions
 
[ gnugk_ca_policy ]
commonName             = supplied
stateOrProvinceName    = supplied
countryName            = supplied
emailAddress           = supplied
organizationName       = supplied
organizationalUnitName = optional
 
[ req ]
default_bits        = 2048
default_keyfile     = privkey.pem
default_md          = sha256

prompt              = no
distinguished_name  = req_distinguished_name
x509_extensions     = req_extensions

# the following sections are specific to the request we're building

[ certificate_extensions ]
basicConstraints = CA:true
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always

[ req_distinguished_name ]
countryName         = US
stateOrProvinceName = Virginia
localityName        = Fairfax
organizationName    = Zork.org
commonName          = GnuGk Root CA

[ req_extensions ]
basicConstraints = CA:true

这是可修改的示例server.cnf文件:

[ ca ]
default_ca       = gnugk_ca

[ gnugk_ca ]
dir              = /opt/gnugk-ca
certificate      = $dir/cacert.pem
database         = $dir/index.txt
new_certs_dir    = $dir/certs
private_key      = $dir/private/cakey.pem
serial           = $dir/serial
 
default_crl_days = 7
default_days     = 365
default_md       = sha256
 
policy           = gnugk_ca_policy
x509_extensions  = certificate_extensions
 
[ gnugk_ca_policy ]
countryName            = supplied
stateOrProvinceName    = supplied
localityName           = supplied
organizationName       = supplied
organizationalUnitName = optional
commonName             = supplied
emailAddress           = optional
 
[ req ]
default_bits        = 2048
default_keyfile     = privkey.pem
default_md          = sha256

prompt              = no
distinguished_name  = req_distinguished_name
x509_extensions     = req_extensions

# the following sections are specific to the request we're building       

[ certificate_extensions ]
basicConstraints = CA:false
subjectAltName = DNS:gk1.zork.org

[ req_distinguished_name ]
countryName            = US
stateOrProvinceName    = Virginia
localityName           = Fairfax
organizationName       = Zork.org
commonName             = gatekeeper.zork.org

[ req_extensions ]
basicConstraints = CA:true
subjectAltName = DNS:gk1.zork.org


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



Last updated: 21. Jan 2025