
参加免费公开课,请您说是由【攻城狮论坛】推荐的。报名收费培训的论坛会员,可享受优惠价格+赠送攻城狮论坛VIP会员。本文转自 三旗培训 http://www.37vi.com/,版权归原作者所有。························································
Task 15.1 在HQ CUCM和SBCUCM上面都创建一个SIP trunk来连通CUBE,CUBE应该配置在R1上面。
Cisco UnifiedBorder Element (CUBE)是网络边界元素,可以终止和发起信令(H.323/SIP),和媒体流(RTP/RTCP)。
Session Bordercontroller (会话边界控制器SBC)被serviceproviders(服务供应商SP)使用,在VoIP网络里来开启完整的计费功能。CUBE提供互联VoIP网络的扩展功能,尤其是企业级的站点。
CUBE是为了实现设备使用一个特殊的IOS特性,允许CUBE从路由器VoIPdial peer呼叫到另一个设备。所以VoIP dialpeer可以被SIP或者H.323处理,CUBE可以使用不同的信令协议与VoIP网络互联。VoIP网络互联是由连接中的一个入站dial peer和一个出站dial peer来完成的。一个标准的思科IOS网关如果没有CUBE功能,将不能允许VoIP-to-VoIP连接。
下面组合的协议网络互联是可行的:
·H.323-to-SIP网络互连
·H.323-to-H.323网络互连
·SIP-to-SIP网络互连
CUBE是被企业和小型的媒体运营组织使用,用来连接SIP PSTN通过SIP和H.323企业级通信网络。
一个CUBE与不同的网络元素互联,包括语音网关,IP电话和呼叫控制服务器。在各种不同的应用环境中,从CUCM或者CUCME的高级企业级语音或者视频服务,也是简单的长途和语Voip传输应用。CUBE供应组织机构所有的边界控制功能是集中在网络层,来互联语音统一通信,和企业级服务供应商的视频运营。
这个任务是要求我们在HQCUCM和SB CUCM上面都创建一个SIPtrunk来连通CUBE,按照这个规定,我们应该在R1上首先配置CUBE。
开始在R1上面配置,我们必须告诉这个路由器被作为了一个CUBE。这可以在全局VoIP配置(voice servicevoip)下面使用mode border-element命令来实现。这个命令使各种不同的媒体可用。注意这个命令必须reload路由器才能生效。
R1&
R1(config)#voice service voip
R1(conf-voi-serv)#mode border-element
You need to save and reload the router for this configurationchange to be effective.
接下来,我们必须在全局SIP进程(voice servicevoip)SIP下面绑定一个接口,为了允许R1在一个特殊的接口接纳SIP连接。在注册SIP电话和SIP网关时有同样的进程。当然,我们必须在这里选择一个接口。因为这里没有明确说明选择哪个接口,我们选择G0/0.100接口。
R1&
R1(config)#voice service voip
R1(conf-voi-serv)#sip
R1(conf-serv-sip)#bind controlsource-interface GigabitEthernet0/0.100
R1(conf-serv-sip)#bind mediasource-interface GigabitEthernet0/0.100
这里R1上面的配置已经完成了,开始CUCM集群上面的配置了。登陆HQ CUCM,Device-->Trunk,点击Add New按钮。选择Trunk类型为“SIP Trunk”,“Device Protocol”为“SIP”,并且“Trunk Service Type”为“None(Default)”。点击Save按钮。
clip_image001
接下来,输入一个描述性的“Device Name”(“CUBE_SIP_TRUNK”)。一如既往,分配一个最大灵活性的“Device Pool”(“CUBE_SIP_DP”)。
clip_image002
接着,在“InboundCalls”下面,确保一个“Calling SearchSpace”被配置。通常这个CSS是要允许通过系统内部DNs分配的Partitions(“GW_TRUNK_CSS”)。
clip_image003
接着,在“SIPInformation”下面,必须定义“Destination Address”。这个地址必须符合在R1(G0/0.100)bind的地址。我们可以选择系统默认的“SIP TrunkSecurity Profile”和“SIP Profile”。
clip_image004
点击Save和Reset按钮。确保SBCUCM集群上面也做好以上同样的配置。
························································
Task 15.2 如果用户失效,确保HQ集群上的pub将接管呼叫处理职务。
当然,我们知道选择CUCM服务器是由CUCM group控制的,被分配给Device Pool相关的设备。在这个任务,设备在每个CUCM集群都是SIPtrunks,因此我们必须确保分配给每个SIP trunk的Device Pool中的CUCMgroup都同时包含了sub和pub服务器。
Device-->Trunk,点击Find按钮。找到前面创建的SIP trunk(“CUBE_SIP_TRUNK”),并且点击列表中的“DevicePool”(“CUBE_SIP_DP”)。
clip_image005
来到DevicePool配置页面,注意它的CUCMGroup为“SUB_PUB_CMG”。
clip_image006
System-->Cisco Unified CMGroup,点击Find按钮。点击进入“SUB_PUB_CMG”查看配置。在这里,我们看到配置是正确的。sub(142.100.64.12)和pub(142.100.64.11)都是在列表里,并且pub是次要的。
clip_image007
这个配置,当sub服务器失效,pub服务器将接管。当在CUBE上面配置dial-peers,我们的冗余性将增强。
························································
Task 15.3 确保HQ和SBCUCM都使用语音接口(G0/0.100)从CUBE发送数据和媒体流量到R1。
这个任务时要求我们在全局SIP进程(voice servicevoip)SIP下面绑定一个接口,为了允许R1在一个特殊的接口接纳SIP连接。这个配置在前面的任务早已配置,但是我们是自由的选择R1上面的接口,如果你正好用的也是G0/0.100接口,恭喜你!你将不用去改变前面绑定的接口。如果你前面没有使用此接口,那么你将要改为这个接口。
R1&
R1(config)#voice service voip
R1(conf-voi-serv)#sip
R1(conf-serv-sip)#bind controlsource-interface GigabitEthernet0/0.100
R1(conf-serv-sip)#bind mediasource-interface GigabitEthernet0/0.100
如果你做了接口的改变,确保在“CUBE_SIP_TRUNK”里对应的IP地址也要改过来。
clip_image008
························································
Task 15.4 R1应该允许SIP流和H.323流的协议之间都能够相互通信。
为了确保CUBE允许所有的信令互相通信,我们需要在voice servicevoip下面使用allow-connections命令来明确的允许这些类型能通信。allow-connections命令可以支持4种不同的类型之间通信:SIP to SIP,SIP to H.323, H.323to SIP, 和H.323to H.323。这将确保路由器不会拒绝VoIP之间的呼叫或者协议内部。
R3&
R1(config)#voice service voip
R1(conf-voi-serv)#allow-connections h323 to h323
R1(conf-voi-serv)#allow-connections h323 to sip
R1(conf-voi-serv)#allow-connections sip to h323
R1(conf-voi-serv)#allow-connections sip to sip
以上的配置,把他们在每个路由器上面进行复制粘贴都是必要的。除非这个实验明确表示不允许。
························································
Task 15.5 当一个用户在HQ集群上面呼叫一个SB集群上面的用户,这个用户应该首先拨一个数字5,接着再拨4位数的扩展号码(52002)。
现在这两个CUCM集群之间的通信和CUBE(R1)已经配置了,我们应该在两个集群之间创建RouteGroups/Route Lists来包含前面创建的trunk。在这个任务把Route patterns创建完成。登陆HQ CUCM集群,Call Routing-->Route/Hunt-->Route Group,点击Add New按钮。输入一个描述性的名称给Route Group(“CUBE_SIP_RG”)。“DistributionAlgorithm”选项保存默认。
clip_image009
接着,点击Add toRoute Group按钮,选择CUBE SIPTrunk添加到“Available Devices”列表里面。
clip_image010
接着,创建一个RouteList,其中要包含刚才创建的Route Group。Call Routing-->Route/Hunt-->Route List,点击AddNew按钮。输入一个描述性的名称给Route List(“CUBE_SIP_RL”),并且选择一个RouteList应该运行的CUCM group。点击Save按钮。
clip_image011
点击Add to Route Group按钮,选择前面创建的“CUBE_SIP_RG”添加。点击Save按钮。
clip_image012
此时,RouteList/Route Group结构已经被创建,所以现在可以来配置Route Pattern了。Call Routing-->Route/Hunt-->Route Pattern,点击Add New按钮。输入“Route Pattern”,按照需求拨打SB使用5位数的拨号(前缀“5”)。在这个任务中,输入“52XXX”pattern。也选择一个“Partition”分配给RoutePattern。我个人喜欢创建一个分离性的Partition。这里选“CUBE_SIP_PT”。明显,这个Partition应该存在于所有设备里面加载的CSS里,使其可以通过。
clip_image013
接着,选择一个“Gateway/Route List”来作为路由器呼叫目标。在这里,选择刚才创建的“CUBE_SIP_RL”。
clip_image014
在这里,我们有在RoutePattern里面添加任何的号码丢失。这意味着它必须在CUBE或者SBCUCM上面作为入站呼叫。
接下来的设置是,在R1上面配置一条dial-peers来接受呼叫入站,并且转发这个呼叫进行出站。
下面的规则应用到入站dial-peer,POTS和VoIP dial-peer都被选择。
1.被叫号码匹配使用DNIS来执行,incomingcalled-number命令要被使用。
2.如果没有匹配项,主叫号码匹配使用ANI来执行,answer-address命令要被使用。
3.如果仍然没有匹配,主叫号码匹配使用ANI来执行,destination-pattern命令要被使用。
4.如果没有匹配目标,dial-peer port是被使用的(POTS dial-peers only)。port要命令被使用。
5.如果没有任何匹配项,默认使用dial-peer 0。
在这里,入站dial-peer已经明确规定在R1使用dial-peer voice 2000voip。incoming called-number命令(前面的规则1)用来匹配dial-peer作为路由器里面的CUBE。注意“$”符号,这是在incoming called-number命令最后面指定拨号结束符号。此时,这里只要定义禁止VAD。
R1&
R1(config)#dial-peer voice 2000 voip
R1(config-dial-peer)#incoming called-number 52...$
R1(config-dial-peer)#no vad
接着,我们必须在R1上面定义出站dial-peer。呼叫52XXX,目标将指向SBCUCM集群。这个配置是在dial-peer下面使用destination-pattern命令。再一次,“$”符号用来作为拨号结束符号。接着,当路由这个呼叫,我们必须要定义一个会话协议和会话目标。使用sessionprotocol和sessiontarget命令来完成这个目标。最终,VAD也是被关闭的。
R1&
R1(config)#dial-peer voice 52001 voip
R1(config-dial-peer)#destination-pattern 52...$
R1(config-dial-peer)#session protocol sipv2
R1(config-dial-peer)#sessiontarget ipv4:142.100.65.11
R1(config-dial-peer)#no vad
配置完CUBE之后,我们要来考虑SB CUCM集群怎样接收呼叫入站。在前面的配置,这看起来SB集群需要接收到一个5位数的呼叫,而不是4位数。这就意味着我们需要在SB CUCM集群上面来进行号码处理。
就如前面我们再网关上面的配置一样,我们也可以在“CUBE_SIP_TRUNK”中的“InboundCalls”下面的“SignificantDigits”字段进行设置。Device-->Trunk,点击进入“CUBE_SIP_TRUNK”,我们设置“Significant Digits”字段为4。
clip_image015
记得点击Save和Reset按钮。
做完上面的配置之后,我们准备做一个测试,在HQ和SB电话之间做一个呼叫并且观察现象。你将发现这个呼叫将成功振铃,但是我们一旦接听,呼叫将立马失效并且快速忙音!为什么?我们可以检查debug ccsipmessages命令输出的信息。首先,让我们先来了解SIP呼叫的两大主要类型,并且明白呼叫流。
Delayed Offer (DO) SIP Calls(No SDP in INVITE)
clip_image016
Early Offer (EO) SIP Calls(SDP in INVITE)
clip_image017
下面的输出表示是一个DelayedOffer (DO)呼叫,这是导致它失败的因素。HQ到SB的呼叫通过CUBE,SBCUCM集群回应了一个“200 OK”的信息,包含一个SDP。如下:
R1&
R1#debug ccsip messages
SIP Call messages tracing is enabled
Received:
SIP/2.0 200OK
...
Content-Type: application/sdp
Content-Length: 232
v=0
o=CiscoSystemsCCM-SIP 109 1 INIP4 142.100.65.11
s=SIP Call
c=IN IP4 142.102.65.25
b=TIAS:8000
b=AS:8
t=0 0
m=audio 27070 RTP/AVP 18 101
a=rtpmap:18G729/8000
a=ptime:20
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
我们可以看出上将使用G.729解码,基于a=rtpmap:18行。但是什么是G.729?这里也许有解释,但是我们找不到FMTPs(formatspecific parameters格式特殊参数)在SDP描述这个解码。我寻找一个“a=”行:a=fmtp:18annexb=no。当这个“a=”行是存在的,它特别引用G.729r8解码。因为我们在这里的输出中没有看到这行,我们就知道SB CUCM相使用G.729br8解码代替它,因为annexb=yes是默认的值。这是因为解码G.729r8(IOS)和G.729br8(CUCM)之间不匹配。所以当电话接听,就会立刻听到快速忙音。
我们可以修复这种问题,使用一对不一样的方法。第一种方法是在实验最后使用配置描述----codec transparent命令。我们将工作通过选项延迟。目前,我们的其他的修复方法是改变SIP呼叫的类型,把DO改为EO。在这里,INVITE信息包含SDP替代等待远端的SDP做出相应。来配置,我们必须在voice servicevoip下面的sip全局模式下使用early offerforced命令。这意味着CUBE将发送一个EO到SIP目标。
R1&
R1(config)#voice service voip
R1(conf-voi-serv)#sip
R1(conf-serv-sip)#early-offer forced
现在,我们再运行了early offerforced命令之后,再次使用debug命令来查看信息。
R1&
R1#debug ccsip messages
SIP Call messages tracing is enabled
Sent:
INVITE sip:52001@142.100.65.11:5060SIP/2.0
Content-Type: application/sdp
Content-Disposition: session;handling=required
Content-Length: 264
v=0
o=CiscoSystemsSIP-GW-UserAgent6784 5602 IN IP4 142.102.64.254
s=SIP Call
c=IN IP4 142.102.64.254
t=0 0
m=audio 16426 RTP/AVP 18 101
c=IN IP4 142.102.64.254
a=rtpmap:18 G729/8000
a=fmtp:18annexb=no
a=rtpmap:101 telephone-event/8000 |
|