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 6

6. 路由配置

配置文件中的以下各节可用于配置呼叫的路由方式。

对于GnuGk,“路由”表示网守必须为每个新呼叫找到目标IP。

例如,GnuGk可能需要确定给定特定E.164目的地的语音呼叫的发送位置,可能有多个IP到ISDN网关可供选择,用于该E.164地址。

路由决策通常是通过检查被叫方的别名或号码来实现的,但是GnuGk在评估内容方面具有灵活性,可以成功路由呼叫。

每路呼叫都沿路由策略传输。每个策略可以路由呼叫并终止链路或对其进行修改并继续。使用以下各节中的设置来指定要使用的策略并修改其行为。

6.1 [RoutingPolicy]

本节说明如何 配置 GnuGk 路由策略。

可以使用以下方法路由呼叫来电:

  • explicit

    在要路由的呼叫中明确指定了目的地。通过IP地址拨号需要此策略。您可以在 Routing::Explicit 部分中定义目标IP的映射。

  • internal

    典型规则;在RegistrationTable中搜索目的地

  • parent

    使用父级网守发送路由呼叫的信息,以回复网守将发送的ARQ(只有发给子级的LRQ才会作为LRQ转发)。您可以使用 Endpoint 部分定义父级网守。

  • neighbor

    通过交换LRQ消息,使用邻域路由呼叫。

  • dns

    使用DNS A记录或被叫别名中的IP地址来解析目标。可以在 Routing::DNS 部分中配置此策略。

  • sql

    通过使用数据库查询重写被叫别名来路由呼叫,或将其直接发送到目标IP。数据库参数在 Routing::Sql 部分中指定。

  • http

    通过使用HTTP查询改写被叫别名来路由呼叫。HTTP参数在 Routing::Http 部分中指定。

  • ldap

    通过在LDAP服务器中查找被叫别名(搜索H323ID和TelephoneNo属性)来路由呼叫,并将呼叫发送到CallDestination属性中的IP。

    LDAP服务器在 GkLDAP::Settings 部分中配置,属性在 GkLDAP::LDAPAttributeNames 部分中定义。

  • vqueue

    使用虚拟队列机制并生成RouteRequest事件,以允许外部应用程序做出路由决策。

  • numberanalysis

    提供对ARQ消息重复号码发送的支持。这也部分支持安装程序消息(没有重叠的发送-仅数字长度验证)。

  • enum

    ENUM(RFC3761)是一种使用DNS查找将真实的国际直拨E.164号码转换为H.323拨号信息的方法。默认服务器是 e164.arpa。 要指定服务器列表,则使用 ENUMservers 中 RoutedMode 部分中的开关。

    枚举策略用ENUM服务器返回的信息替换目标,因此,必须具有适当的路由策略才能在枚举策略之后继续处理呼叫。 应该在枚举策略之后添加srv和dns策略,因为新位置通常以“number@gatekeeper”的形式返回,并且需要srv和dns策略来解决此问题。

    最后,请记住,使用枚举策略进行的每个路由检查都需要进行DNS查找。为了加快路由速度,请确保在应用枚举策略之前先解析内部目标。

    可以在 Routing::ENUM 部分中配置此策略。

    除了默认的“E2U + h323”外,还可以通过“enum::id”路由策略来支持网关的其他ENUM模式,请参阅 Routing::ENUM 部分。

  • srv

    DNS SRV或H.323 Annex O 允许使用H.323 URI路由呼叫。可以将地址配置为用户(所在)域。H.323 URI存储在域的SRV DNS记录中,并被查询以查找目的地。

    可以在 Routing::SRV 部分中配置此策略。

    除默认的 "h323ls._udp." 外,网关的其他SRV模式。和 "h323cs._tcp." 可以通过 Routing::SRV 路由策略获得支持, 请参阅 Routing::SRV 部分。

  • rds

    RDS解析器发现服务或DDDS动态委托发现服务(RFC3404 第 5.2/5.3 节点的示例)此策略是一种机制,通过该机制,域名SRV记录托管在中央DNS服务器中。 服务器由[RoutedMode] RDSServers设置,并被查询以便解析H323+D2U NAPTR记录,其中包含域的H.323附件O SRV记录。这可用于虚拟托管URL域或集中控制SRV记录。

    可以在 Routing::RDS 部分中配置此策略。

  • forwarding

    若应该转发对此目标的呼叫,则此策略将执行数据库查找。此策略的配置必须在 Routing::Forwarding 部分。

  • catchall

    此策略会将路由到达它的所有呼叫在 Routing::CatchAll 部分中指定的一个端点。您可以将其用作策略链末尾的后备,以路由所有否则会失败的呼叫。

  • lua

    该策略运行在 Routing::Lua 部分中定义的LUA脚本来设置呼叫目的地。

  • neighborsql

    除了从数据库检索LRQ消息的目标外,其余与邻域策略相同。数据库参数与sql路由策略相同。

  • uriservice

    根据URI模式应用路由策略,例如xmpp:[email protected]或xmpp:192.168.1.1。该架构在 Routing::URIService 部分中定义。 若架构是IP地址,则将返回[Routing::URIService]网关设置。 可以与 [Routing::ENUM::schema] 和 [Routing::SRV::schema] 链接在一起使用,以完全解析地址。

路由策略的默认配置为:

[RoutingPolicy]
default=explicit,internal,parent,neighbor

若一个策略不匹配,则尝试下一个策略。

这些策略可以应用于多种路由请求类型和路由输入数据。不同的类型是 ARQ, LRQ, Setup 和 Facility(具有callForwarded原因)。还有通用的路由策略,这是其他类型的默认策略。

例:

[RoutingPolicy]
h323_ID=dns,internal
002=neighbor,internal
Default=internal,neighbor,parent

收到需要决定路由的消息时,将使用DNS解析对h323_ID类型的别名的所有呼叫。若DNS无法解析别名,则将其与内部注册列表进行匹配。 若请求呼叫以002开头的别名,则将首先检查邻域,然后检查内部注册表。若请求的别名不是h323_ID或以002开头的别名, 则通过查询内部注册表(然后是邻域,若邻域失败,则是父级)来使用默认策略。

路由策略适用于呼叫的第一条消息:来自注册端点的呼叫的ARQ,来自未注册端点的呼叫的设置,来自邻域的呼叫的LRQ以及GnuGk使用ForwardOnFacility功能转发的呼叫的某些 Facility 消息。 您可以使用上述相同的语法,使用 [RoutingPolicy::OnARQ],[RoutingPolicy::OnLRQ],[RoutingPolicy::OnSetup]和[RoutingPolicy::OnFacility] 部分为每种呼叫类型指定不同的路由策略。

例:

[RoutingPolicy::OnARQ]
default=numberanalysis,internal,neighbor

典型的ENUM路由设置如下所示:

例:

[RoutingPolicy]
default=explicit,internal,enum,srv,dns,internal,parent,neighbor

6.2 [RasSrv::RewriteE164]

本节定义了DialedDigits(E.164号码)的改写规则。

Format:

[!]original-prefix=target-prefix

若数字以开头 original-prefix,则将其重写为 target-prefix。若`!' 标志位于之前 original-prefix, 则含义相反,并且目标前缀在所拨打的号码之前。特殊的通配符 ('.' and '%') 可用。

例:

08=18888

若您呼叫 08345718, 它将被重写为 18888345718

例:

!08=18888

若您呼叫 09345718, 它将被重写为 1888809345718

Option:

  • Fastmatch=08
    默认:N/A

    仅改写以指定前缀开头的DialDigits。

6.3 [RasSrv::RewriteAlias]

本节定义别名的改写规则,这可用于将网守分配的别名映射到注册的端点。

Format:

[!]original-alias=target-alias

若别名为 original-alias, 则将其重写为 target-alias

例:

bill=033123456

6.4 [RasSrv::GWRewriteE164]

本部分描述了根据呼叫来自或正在发送到的网关来重写DialedDigits E.164号码。这允许对DialedDigits进行路由等更灵活的操作。

尽管有本节的名称,不仅可以重写往返于网关的呼叫,还可以重写来自端点(常规端点)和领域网守的呼叫。

RasSrv::RewriteE164 结合使用, 您可以进行三阶段重写:

Call from "gw1", dialedDigits 0867822
                |
                |
                V
Input rules for "gw1", dialedDigits now 550867822
                |
                |
                V
Global rules, dialedDigits now 440867822
                |
                |
                V
Gateway selection, dialedDigits now 440867822, outbound gateway "gw2"
                |
                |
                V
Output rules for "gw2", dialedDigits now 0867822
                |
                |
                V
Call to "gw2", dialedDigits 0867822

格式:

alias=in|out=[!]original-prefix=target-prefix[;in|out...]

若呼叫与别名相符,则该方向及其开头 original-prefix 将被重写为 target-prefix。 若 `!' 标志位于之前 original-prefix, 则含义相反。 S特殊的通配符 ('.' and '%') 可用。 '.' 匹配一个字符,'%' 匹配任意多个字符,同一网关的多个规则以';'分隔。

要将拨号呼叫转换为后拨号号码,并在呼叫作为UserInputIndications连接后发送到远端,请在前缀端使用 ‘I’(用于输入), 在目标端使用 'P' (用于后拨)。请注意,通过网守的H.245路由必须处于活动状态才能发送后拨数字。

网关和终端之间的呼叫与它们的第一个别名匹配。与邻域之间的呼叫将通过GnuGk配置中的邻域ID([Neighbor::XXX]部分名称中的XXX)或邻域的网守标识符(若存在)进行匹配。

请注意,若有多宿主邻域或正在接受非邻域LRQ时,无法始终确定呼叫源,并且邻域的IN规则都将不匹配。在这些情况下,仅应使用OUT和 [RasSrv::RewriteE164] 规则。

例:

gw1=in=123=321

若收到从 "gw1" 到的呼叫 12377897,则将其重写为 32177897 在采取进一步措施之前。

拨号示例:

gw1=out=09III=09PPP

若通过 "gw1" 向发出呼叫,则该呼叫 09123 将被重写 09123 作为后拨数字发送。

邻域示例 1:

在此示例中,邻域通过其ID进行标识,来自NbGk的传入呼叫会将其01前缀替换为04前缀。拨出电话会将04替换为01。

[RasSrv::Neighbors]
NbGk=GnuGk

[Neighbor::NbGk]
GatekeeperIdentifier=GK-PW-Prox
Host=192.168.1.100
SendPrefixes=*
AcceptPrefixes=*

[RasSrv::GWRewriteE164]
NbGk=in=01=04;out=04=01

邻域示例 2:

在此示例中,邻域通过其网守标识符进行标识,并且来自GK-PW-Prox的不带有0049前缀的呼叫将获得前缀。对 "1234" 的呼叫将被重写为 "00491234", 而对 "00496789" 的呼叫将保持不变,因“若输入不以0049开头并且0049之后有任何数字,则前置非0049”(因开头已经有0049。)

[RasSrv::Neighbors]
NbGk=GnuGk

[Neighbor::NbGk]
GatekeeperIdentifier=GK-PW-Prox
Host=192.168.1.100
SendPrefixes=*
AcceptPrefixes=*

[RasSrv::GWRewriteE164]
GK-PW-Prox=in=!0049.=0049.

6.5 [Endpoint::RewriteE164]

为网守端点指定前缀后,父网守将使用以该前缀开头的 dialedDigits 路由呼叫。子网守可以根据本节中指定的规则重写目标。 相对的,由子网守发出到父网守端点的通话也会经由此节改写其来源号码。

Format:

external prefix=internal prefix

例如,若具有以下配置,

                        [Parent GK]
                        ID=MasterGK
                        /         \
                       /           \
                      /             \
                     /               \
                [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'的端点,对注册在父GK的端点来说,看起来就像是直接注册在父GK且开头号码为'188886'。

该部分与 RasSrv::RewriteE164 的设定无关,而且后者会优先生效。

6.6 [Routing::DNS]

  • ResolveNonLocalLRQ=0
    默认:1

    此开关确定DNS策略是否应解析不在本地端点的LRQ中的主机名或IP。

  • RewriteARQDestination=0
    默认:1

    在ARQ中保留目标完整URL,不告诉端点在后续的Setup中仅使用URL的本地名称部分。 若呼叫目的地需要完整的URL,则为必需。

6.7 [Routing::ENUM]

  • ResolveLRQ=1
    默认:0

    此开关切换‘枚举’策略是否应解析LRQ。

其他的ENUM模式可以由 [Routing::ENUM::id] 配置

Format:

<enum schema>=<protocol gateway>

例:

[Routing::ENUM::2]
[email protected]

6.8 [Routing::SRV]

  • ResolveNonLocalLRQ=1
    默认:0

    此开关选择 'srv' 策略是否应解析不在本地端点的LRQ中的主机名。

  • ConvertURLs=1
    默认:0

    向SRV记录中找到的LS服务,在发送LRQ之前,将URL_ID转换成H323_ID。 若被呼叫的LS服务不能解析H323_ID,这是很有用的。

可以通过[Routing::SRV::id] 配置其他SRV模式。

Format:

<SRV schema>=<protocol gateway>[;default schema port]

例:

[Routing::SRV::2]
[email protected]

6.9 [Routing::RDS]

  • ResolveLRQ=1
    默认:0

    此开关选择 'rds' 策略是否应解析LRQ中的主机名。

6.10 [Routing::Explicit]

可定义一个映射,在该映射中应通过 'explicit' 策略路由对某些IP的呼叫。新目标可以是另一个IP或任何类型的别名目标。 若将目标重写为IP以外的其他地址,请确保在 'explicit' 策略后面的链中还有其他路由策略可以处理新的目标。

Format:

IP=newIP[:port] | E.164 | alias

例:

[Routing::Explicit]
192.168.1.100=10.10.1.100
192.168.1.101=10.10.1.101:1720
192.168.1.102=654251
192.168.1.103=peter
[email protected]

6.11 [Routing::Sql]

使用SQL查询重写被叫的别名。支持路由OnARQ,OnLRQ和OnSetup。

若从数据库返回的字符串是'REJECT' (大写或小写),则呼叫被拒绝。若字符串与点分IP地址匹配,则将其视为目标IP,否则将被视为新的目标别名。 若返回2列,则将第一列视为新的目标别名,将第二列视为新的目标IP。若第二列包含'IGNORE',则将数据库结果视为仅包含1个结果列。 (在某些情况下,这允许进行更简单的SQL查询。)

若返回了目标IP的多行,它们将用作故障转移的备用路由,GnuGk将按顺序尝试它们。

当至少指定一个目标IP或拒绝呼叫时,SQL策略将终止路由链接。若仅别名被更改,则链接将继续使用此更新的别名。

拒绝呼叫时,第二列可包含一个整数,表示拒绝原因(已注册呼叫的H.225 AdmissionRejectReason,邻域呼叫的H.225 LocationRejectReason,未注册呼叫的H.225断开原因)。

若数据库未返回任何内容,则呼叫将保持不变。

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

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

    定义一个SQL查询以获取新的目的地号码。查询已参数化-这意味着在执行每个查询之前都要进行参数替换。 定义了以下参数:

    • %c - 被叫别名
    • %p - 被叫IP(仅在Setup上可用,否则为空)
    • %s - 主叫IP
    • %r - 主叫别名
    • %{Calling-Station-Id} - 主叫ID(与计费和身份验证事件中使用的值相同)
    • %i - 通话ID
    • %m - 消息类型(ARQ,LRQ、Setup)
    • %{client-auth-id} - 验证呼叫时(通过SQLAuth)提供给GnuGk的64位整数ID
    • %{language} - 语言(若有)
    若其中一些未包含在ARQ,LRQ或Setup消息中,则可以为空。

    若查询不返回任何行,则使用当前别名。否则,将使用第一个结果行。

    查询字符串示例。注意,此为示例;实际的结构和模式是用户定义的,这些示例中的各个字段名称也是如此。GnuGk只是希望查询得到IP地址或别名。

    SELECT destination FROM routes WHERE called = '%c'
    SELECT concat(prefix,'%c') FROM routes WHERE prefix = LEFT('%c', 5)
    SELECT gatewayip FROM routes WHERE prefix = LEFT('%c',5)
    SELECT concat(prefix,'%c'), gatewayip FROM routes WHERE route = LEFT('%c', 5) limit 3
    

  • EnableRegexRewrite=1
    默认:0

    启用简单的正则表达式重写,其中将原称为别名的部分插入数据库查询的结果中。

    常用表达:

    • {\1} - all of the original called alias
    • {^\d(4)} - first 4 digits
    • {\d(4)$} - last 4 digits

    例子:

    假设被呼叫的别名为"12345678",并且数据库返回"{\1}@my.com",则插入所有字符,因此新的目标为"[email protected]"。

    若数据库返回"{^\d(4)}@my.com" ,则会插入前4位,因此新目的地为"[email protected]",并带有"{\d(4)$}@my.com"。 com”,则呼叫将发送到"[email protected]"。

6.12 [Routing::Http]

使用HTTP查询重写被叫的别名,支持路由OnARQ,OnLRQ和OnSetup。

若从'REJECT'返回的字符串(大写或小写),则呼叫被拒绝。若字符串与点分IP地址匹配,则将其视为目标IP,否则将被视为新的目标别名。

  • URL=http://example.com/passwords
    默认:N/A

    从中获取路由目标的URL。可使用下面指定的参数来设置URL。

  • Body=user=%u
    默认:empty

    用于POST请求的HTTP正文。您可以使用下面指定的参数来设置URL。

  • Method=GET
    默认:POST

    要使用的HTTP方法。当前支持GET和POST。

  • ResultRegex=[0-9]+
    默认:.*

    从HTTP响应中提取目标的正则表达式。

  • DeleteRegex=5544
    默认:N/A

    使用的正则表达式,从提取的目标中删除其他模式,可选的。

  • ErrorRegex=error
    默认:^$

    若HTTP响应与此正则表达式匹配,则将其视为无效。

以下参数可用于URL和Body字符串:

  • %c - 被叫别名
  • %p - 被叫IP(仅在Setup上可用,否则为空)
  • %s - 主叫IP
  • %r - 呼叫别名
  • %{Calling-Station-Id} - 呼叫ID(与计费和身份验证事件中使用的值相同)
  • %i - 通话ID
  • %m - 消息类型 (ARQ, LRQ 或 Setup)
  • %{client-auth-id} - 验证呼叫时(通过SQLAuth)提供给GnuGk的64位整数ID
  • %{language} - 语言(若有)

6.13 [Routing::NeighborSql]

选择要查询哪个邻域的查询数据库。

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

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

    定义一个SQL查询以获取新的邻域IP和端口。

6.14 [Routing::NumberAnalysis]

本部分定义 numberanalysis 路由策略的规则。该策略检查所拨号码的最小和/或最大位数, 并在必要时发送ARJ(位数超出范围),以支持重复号码的发送。它还部分支持Setup消息(没有重复的发送-仅数字长度验证)。

Format:

prefix=MIN_DIGITS[:MAX_DIGITS]

若数字与匹配 prefix,则验证它至少由 MIN_DIGITS 数字组成, 并且(若存在MAX_DIGITS)则由最多 MAX_DIGITS 数字组成。 特殊通配符(!, '.''%') 可供选择。若数字太短,则会将ARJ rejectReason设置为incompleteAddress。若数字太长, 则会将ARJ rejectReason设置为undefinedReason。前缀列表从最长到最短的前缀进行搜索以进行匹配。对于安装程序消息, 当数字的长度不正确时,将发送带有 "badFormatAddress" 的发行完成。

例:

[RoutingPolicy::OnARQ]
default=numberanalysis,internal

[Routing::NumberAnalysis]
0048=12
48=10
.=6:20

呼叫以0048开头的目的地至少需要12位数字,呼叫48则需要10位数字,而拨打所有其他目的地的电话至少需要6位数字,最多20位数字。

6.15 [Routing::Forwarding]

若对端点的呼叫应转发到另一个端点,则此路由策略执行查找数据库。 它支持路由OnARQ,OnSetup和OnLRQ。

有不同类型的转发:

  • 无条件呼叫转移 (CFU, code 1): 呼叫始终被转移。
  • 忙时呼叫转移( (CFB, code 2): 若被叫端点已经在呼叫中,则呼叫被转移。
  • 无应答呼叫转移 (CFNA, code 3): 若被叫端点未在AlertingTimeout内应答呼叫,则转移呼叫。
  • 错误时呼叫转移 (CFE, code 4): 若在呼叫路由到端点时出错,则呼叫将被转移。当前,这的行为类似于“无人接听电话转接”,只应定义其中之一。

将呼叫转发到的目的地应该是本地端点(包括固定端点)的别名或IP号码。对于本地别名,GnuGk将检查目的地是否也配置了转发并将其考虑在内。

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

针对此模块,可以指定查询以读取转发规则:

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

    定义一个SQL查询以获取转发规则。 该查询必须返回2列:1. 转发类型的代码。2. 再是新目的地。 必须确保结果通过转发代码升序排列。

    查询已参数化-这意味着在执行每个查询之前都要进行参数替换。定义了以下参数:

    • %c - 被叫别名
    • %p - 被叫IP(仅在Setup上可用,否则为空)
    • %s - 主叫IP
    • %r - 呼叫别名
    • %{Calling-Station-Id} - 呼叫协议栈上下文ID(与计费和身份验证事件中使用的值相同)
    • %i - 通话ID
    • %m - 消息类型(ARQ 或 Setup)
    • %{client-auth-id} - -验证呼叫时(通过SQLAuth)提供给GnuGk的64位整数ID
    • %{language} - 语言(若有)
    若其中一些未包含在ARQ或Setup消息中,则可以为空。在大部分情况下,只应在SQL查询中使用被叫别名,因为它们仅适用于传入呼叫,并且在查找链接的转发规则时不会更改。

例:

[RoutedMode]
GKRouted=1
AcceptUnregisteredCalls=1
; failover must be on for forward on timeout
ActivateFailover=1
FailoverCauses=1-15,17-127
DisableRetryChecks=1
; 10 sec alerting timeout (for forward on no answer)
AlertingTimeout=10000

[RoutingPolicy]
default=explicit,forwarding,internal,neighbor,explicit

[Routing::Forwarding]
Driver=MySQL
Host=localhost
Database=gnugk
Username=gnugk
Password=secret
Query=SELECT forwardtype, destination FROM forwards WHERE called = '%c' order by forwardtype asc
MinPoolSize=1

例 MySQL 模式:

create table gnugk.forwards (
    called varchar(30) not null,
    forwardtype smallint not null,
    destination varchar(30) not null default "",
    PRIMARY KEY (called, forwardtype)
);

例 转发规则:

"1234", 1, "2000"
"5678", 2, "4000"
"5678", 3, "4000"
"9876", 4, "5000"

6.16 [Routing::CatchAll]

  • CatchAllIP=1.2.3.4
    默认:(empty)

    指定将所有呼叫到路由的IP地址。这将覆盖CatchAllAlias。

  • CatchAllAlias=Frank
    默认:catchall

    若未指定CatchAllIP,则将所有呼叫到路由该别名。

6.17 [Routing::Lua]

本节配置用于LUA路由的脚本。

有关在GNUGK Lua脚本的一般信息,请参见章 LUA脚本

LUA脚本具有以下 可输入变量

  • source - 源IP
  • calledAlias - 被叫别名(仅首个别名)
  • calledIP - 若使用IP拨号,则为IP地址
  • caller - 主叫的别名
  • callingStationId -呼叫协议栈上下文ID
  • callid - 通话ID
  • messageType - 触发路由过程的消息 ('ARQ', 'LRQ', 'Setup' or 'Facility')
  • clientauthid - 客户端身份验证ID

LUA脚本可以设置以下 输出变量 以指定目标路由:

  • action - 若不想路由呼叫,请将其设置为'SKIP' 或 'REJECT',否则将呼叫路由至destAlias或destIp(请参见下文)
  • rejectCode - 拒绝与 'REJECT'原因一起使用
  • destAlias - 呼叫目标别名
  • destIP - 呼叫目标IP

要访问外部资源,LUA脚本可以使用LUA库,例如,LuaSocket。

  • Script=destAlias=string.gsub(calledAlias, "#", "*")
    默认:(empty)

    在配置文件中,定义要运行的LUA脚本。

  • ScriptFile=script.lua
    默认:(empty)

    使用LUA脚本指定一个文件来为'lua'策略运行。

6.18 [Routing::URIService]

URI服务特定的路由策略。

Format:

<schema>=<protocol gateway>

例:

[Routing::URIService]
xmpp=mygateway.mydomain.com

此开关为给定的URI模式设置服务类型和默认网关。可以在[Routing::ENUM::<schema>]和[Routing::SRV::<schema>]的链接中使用,以提供特定于服务的路由策略。

6.19 [RewriteCLI]

本节包含一组ANI ANI/CLI/H.323_ID号码(呼叫者ID)的重写规则。重写过程分为两个阶段-入站重写和出站重写。 入站重写在任何其他Q.931 Setup消息处理(例如入站GWRewrite,身份验证,计费等)之前完成,并且由于它更改了Calling-Station-Id, 因此它将在授权和计费模块中起作用。出站重写将在转发Setup消息之前进行,且其效果仅对被叫方可见。

入站重写规则可以与呼叫者的IP和拨打的号码或原始的CLI/ANI相匹配。出站重写规则可以与主叫的IP, 被叫的IP和拨打的号码或目标号码(重写后的拨号号码)或CLI/ANI(入站重写后)相匹配。

该模块还提供可为每个端点(规则)配置的CLIR(呼叫线路识别限制)功能。

  • ProcessSourceAddress=1
    默认:1

    除了重写呼叫方号码信息元素("IE")之外,还可以重写H.225.0 Setup消息的sourceAddress节点,因此两者都包含信息一致。

  • RemoveH323Id=1
    默认:1

    重写H.225.0 Setup消息的sourceInfo元素时,若禁用此选项,则可以保留H323_ID,email_ID和url_ID类型的别名。

  • CLIRPolicy=apply
    默认:N/A

    可以设置一个全局的Presentation Indicator ("PI")处理策略。该策略将应用于所有不会覆盖它的CLI重写规则。 可能的选择是 forward -仅按原样转发接收到的PI, apply 若将接收到的PI设置为“表示受限”,则检查接收的PI并隐藏CLI; 以及applyforterminals - 与之类似,apply 不同之处在于仅当呼叫发送到端点时才删除该号码,不是网关。

入站规则的格式:

in:CALLER_IP=[pi=[allow|restrict][,forward|apply|applyforterminals]] [cli:|dno:]number_prefix(=|*=|~=|^=|/=)NEW_CLI[,NEW_CLI]...

in: 前缀指定这是入站规则和 CALLER_IP 将用于匹配规则(它可以是一个单一的IP或整个子网)。您可以将IPv4或IPv6地址用于 CALLER_IP.

可选 pi= 参数控制CLIR(呼叫线路识别限制)功能。指定 allowrestrict 强制将演示指示符设置为“允许演示”或“限制演示”。 forward, applyapplyforterminals 控制网守如何处理收到的演示指示符(若有)。forward 表示按原样将其转发给被呼叫者, apply 若PI设置为“演示受限”,则用于隐藏CLI,applyforterminals 类似于apply,不同之处在于,仅在将呼叫发送给端点而不是网关时才隐藏CLI。

前缀cli:dno:(默认值)选择将用于匹配 number_prefix-呼叫方ID(CLI/ANI)或已拨号码的号码。号码匹配/重写可以通过以下五种方式完成:

  • = - 将使用前缀匹配项对cli or dno 数字进行匹配 number_prefix,若找到匹配项,则CLI将被NEW_CLI替换。
  • ~= - cli or dno 数字将使用与的身份匹配进行匹配 number_prefix,若两个数字相同,则CLI将被NEW_CLI替换。
  • *= - (VALID ONLY FOR cli). cli 将使用前缀匹配项匹配数字number_prefix,若找到匹配项,则匹配的CLI前缀(number_prefix)将替换为NEW_CLI前缀。
  • ^= - 一个clidno数将使用针对前缀匹配匹配number_prefix,若发现匹配,H.323_ID将与NEW_CLI更换,呼叫站ID将保持不变。
  • /= - 一个cli or dno号码将使用与的身份匹配进行匹配number_prefix,若两个号码相同,则将H.323_ID替换为NEW_CLI,Calling-Station=Id 将保持不变
在等号(=/ =/*=/^=//=)之后,是要使用的新CLI值的列表。若指定了多个值,则将随机选择一个。可以指定整数范围,例如49173600000-49173699999(对于数字范围,CLI应该具有固定的长度)。 有一个特殊的字符串常量"any"可以代替CALLER_IPnumber_prefix。要启用 CLIR 此规则,请使用特殊的字符串常量"hide" 而不是新的CLI值列表。请注意,CLIR对于出站规则更加有用。

例 1:

[RewriteCLI]
in:192.168.1.1=dno:5551=3003
in:192.168.1.1=cli:1001=2222
in:192.168.1.1=any=1111

这些规则说明,对于来自IP 192.168.1.1的呼叫: 1) 若用户拨打的号码以5551开头,请将CLI设置为3003, 2) 若呼叫来自具有CLI的用户以1001开头,则将CLI设置为2222, 3) 对于从该IP进行的其他呼叫,请将CLI设置为1111。

例 2:

[RewriteCLI]
in:192.168.1.0/24=any=18001111
in:192.168.2.0/24=any=18002222
in:2002:4ad0:ff00:79a::2/64=any=18003333
in:any=any=0

这些规则指出: 1) 对于来自网络192.168.1.0/24的呼叫,将CLI设置为18001111, 2) 对于来自网络192.168.2.0/24的呼叫,将CLI设置为18002222, 3) 对于来自网络2002的呼叫: 4ad0:ff00:79a::2/64,将CLI设置为18003333, 4) 对于其他呼叫,将设置为0。

例 3:

[RewriteCLI]
in:192.168.1.0/24=0048*=48
in:192.168.1.0/24=0*=48
in:any=100.~=48900900900

这些规则指出: 1) 对于来自网络192.168.1.0/24的呼叫,将0048重写为48(例如-0048900900900 => 48900900900), 2) 对于来自网络192.168.1.0/24的其他呼叫,将0重写为48(例如-0900900900 => 48900900900), 3) 对于其他呼叫,若CLI是4位数字且以100开头,则将其设置为48900900900。

例 4 (CLIR):

[RewriteCLI]
in:192.168.1.0/24=any=hide

此示例使呼叫者的号码从源192.168.1.0/24网络的Setup消息中删除。它还会导致在Setup消息中设置正确的显示和筛选指示符。

出站规则的格式:

out:CALLER_IP=CALLEE_IP [pi=[allow|restrict][,forward|apply|applyforterminals]] [cli:|dno:|cno:]number_prefix(=|~=|*=)NEW_CLI[,NEW_CLI]...

out: 前缀告诉,这是一个出站规则,则 CALLER_IPCALLEE_IP将用于匹配规则,可以是单个IP地址或子网地址。

可选pi=参数控制CLIR(限制识别呼叫线路)功能。指定allow or restrict 强制指示将演示符设置为“允许演示”或“限制演示”。 forward, apply and applyforterminals控制网守如何处理收到的演示指示符(若有)。 forward 表示仅按原样将其转发给被呼叫方, apply 表示若PI设置为“表示受限”,applyforterminals 则隐藏CLI, 类似于apply,不同之处在于,仅在将呼叫发送至端点而不是网关时才隐藏CLI。

前缀 cli:, dno:(默认值)或cno: 选择将用于匹配的number_prefix号码-呼叫者ID(CLI/ANI),已拨号码或目的地/被叫号码(重写后的已拨号码)。号码匹配/重写可以通过三种方式完成:

  • = - 将使用前缀匹配来匹配a cli或dno 数字number_prefix,若找到匹配项,则CLI将被NEW_CLI替换
  • ~= - cli或dno数字将使用针对的身份匹配进行匹配number_prefix,若两个数字相同,则CLI将被NEW_CLI替换,
  • *= - (VALID ONLY FOR cli),cli将使用前缀匹配项匹配数字number_prefix,若找到匹配项,则匹配的CLI前缀(number_prefix) 将替换为NEW_CLI前缀。
在等号(=/ =/*=)之后,将指定要使用的新CLI值的列表。若配置了多个值,则将随机选择一个。可以指定整数范围,例如49173600000-49173699999。 有一个特殊的字符串常量"any"可以代替CALLER_IP,CALLEE_IP或来使用number_prefix。要启用CLIR此规则,请使用特殊的字符串常量"hide" or "hidefromterminals" 代替新的CLI值列表。

例 1:

[RewriteCLI]
out:any=192.168.1.1 any=1001
out:any=192.168.1.2 any=1002
out:any=any cno:123=1003

这些规则为每个端点IP设置了固定的ANI/CLI: 1) 向IP 192.168.1.1发送呼叫时向我展示ANI 1001 2) 向IP 192.168.1.2发送呼叫时向我展示ANI 1002 3) 拨打123时向我展示ANI 1003

例 2:

[RewriteCLI]
out:any=192.168.1.1 any=1001-1999,3001-3999

该规则从1001-1999的3001-3999范围内随机选择ANI/CLI,以发送到192.168.1.1。

例 3 (CLIR):

[RewriteCLI]
out:any=any any=hidefromterminals
out:192.168.1.1=any any=hide

此示例中,每个用户都启用了CLIR,因此所有对终端的呼叫都将删除呼叫者的号码并设置演示/显示指示符。 到网关的呼叫会将表示指示器设置为“表示受限”,并且不会删除呼叫者的号码,以允许在目标设备上进行正确的呼叫路由和号码删除。
一个例外的规则,从192.168.1.1进行的呼叫,无论呼叫终端还是网关,该呼叫者的号码都会被删除。

例 4 (CLIP):

[RewriteCLI]
out:any=192.168.1.1 any=hide

在此示例中,用户192.168.1.1禁用了CLIP(演示呼叫线路识别)功能。

例 5 (CLIR):

[RewriteCLI]
out:192.168.1.1=any pi=restrict,apply cli:.*=.
out:any=any pi=allow cli:.*=.

这些规则不会更改CLI(.*=.),并且: 1) 为端点192.168.1.1启用CLIR。apply告诉网守不仅设置PI,还隐藏号码。 2) 强制对其他端点进行CLI演示。

规则匹配过程具有严格定义的顺序:

  1. 确定最接近的呼叫者的IP匹配(最接近意为具有最长的网络掩码-单个IP具有最高优先级,"any" 具有最低优先级),
  2. (转出规则)确定最接近的被叫方的IP匹配,
  3. 按照以下顺序搜索最长的匹配前缀/编号以查找给定的IP/IP对:
    1. dno: 搜索类型(拨号号码)规则,
    2. cno: 搜索类型(目的地/被叫号码)规则,
    3. cli: 搜索类型(呼叫者ID)规则。
找到与呼叫者/呼叫者的IP匹配之后,就不会再检查任何规则,即使这些IP的规则集中没有匹配前缀/号码。

在Windows平台上,INI文件中的配置键重复存在问题,因此GnuGk提供了解决此限制的方法。由于相同的键(in:192.168.1.1):此示例无法正常工作:

[RewriteCLI]
in:192.168.1.1=1001=2001
in:192.168.1.1=any=2000
解决方法是,可以在键之前和之后使用带百分号 (%) 的字符串。在加载规则之前,该前缀将自动从键名中删除:
[RewriteCLI]
%r1% in:192.168.1.1=1001=2001
%r2% in:192.168.1.1=any=2000

6.20 [RewriteCLI::SQL]

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

注意,选择(而不是规则) RewriteCLI部分,像 ProcessSourceAddress=, RemoveH323Id= and CLIRPolicy= 同时适用于本部分的重写规则。

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

    定义一个重写查询,在呼叫时执行。

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

    定义重写查询,在呼叫时执行。被叫号码参数重写已通过所有步骤。

查询第一个字段返回用作新的CLI。若查询不返回任何行,则CLI保持不变。 可以对查询进行参数化-这意味着在执行每个查询之前进行参数替换,定义了以下参数:

  • %{cli} - 原始CLI或第一个sourceAddress(若不存在CLI)(在出站查询中,它可以已经由入站查询重写)
  • %{callerip} - 主叫IP
  • %{called} - 被叫号码(入站查询中的拨号号码和出站查询中的重写号码)

在大部分情况下,您可能只会使用 %{cli} 参数。

6.21 [RewriteSourceAddress]

此开关,可以过滤在Setup消息中传输的sourceAddress元素。(请注意, RewriteCLIRewriteCLI::SQL 规则也会影响sourceAddress)

  • OnlyE164=1
    默认:0

    此开关,可以过滤掉非E.164类型的所有元素。

  • OnlyValid10Dand11D=1
    默认:0

    此开关,您可以过滤掉所有无效的10位或11位US数字的元素。可以是任何别名类型(除非设置了OnlyE164),但是不允许使用格式字符。11位数字必须以1开头,区号必须以2..9开头。

  • MatchSourceTypeToDestination=1
    默认:0

    使用此开关,您可以筛选出与目标类型(E.164或URI)不匹配的所有元素。若呼叫E.164号码(Q931 IE:存在被叫方号码),则除拨号外的所有其他内容。 若呼叫URI(目标AliasAddress类型),则会过滤URI源以外的所有其他内容。此开关对任何其他目标类型均无效。例如,H323ID或TransportID AliasTypes。

  • ForceAliasType=1
    默认:-1

    值 0-dialedDigits 1-h323_ID 2-URI-ID使用此开关,您可以将源和目标AliasAddress强制设置为提供的类型。与MatchSourceTypeToDestination结合使用以更改AliasType。 例如,将url_ID更改为h323_ID,以便远程网关可以处理该消息。

  • ReplaceChar=+,0;#,*
    默认:N/A

    此开关,可以删除/替换呼叫者源地址上的字符,例如 +。

  • Rules=01,18001234567
    默认:N/A

    若存在前缀匹配项,则可以使用此开关替换CallSourceAddress。 可使用此功能将通用有效的E.164号码分配给非E.164号码,以用于callerID。

  • TreatNumberURIDialedDigits=1
    默认:0

    在设置MatchSourceTypeToDestination且目标为URI且主机部分为数字的情况下,通过采用DialedDigits源地址并将其与URI地址(若存在)混合,以确保源地址也是数字URI,因此源和目的地址。


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