简介
本文档介绍作为CUBE(思科统一边界元素)、CME或CUCME(思科统一通信管理器快捷版)、网关和CUSP(思科统一SIP代理)的路由器中的NAT(网络地址转换)行为。
先决条件
要求
Cisco 建议您了解以下主题:
- SIP(会话初始协议)
- IP语音(Internet协议)
- 路由协议
使用的组件
本文档中的信息基于
- 任何IOS版本12.4T及更高版本。
- 任何CME版本
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。
背景信息
网络地址转换是一种常用的技术,用于在使用不同地址空间的网络之间传输的数据包上转换IP地址。本文档不复习NAT。相反,本文档旨在全面介绍NAT在思科VoIP网络中使用的情况。 此外,范围仅限于组成MS-Voice技术的组件。
- NAT基本上使用不同的IP地址替换数据包中的IP地址
- 使私有子网中的多台主机能够共享(即,类似于)单个公有IP地址,以访问Internet。
- 通常,NAT配置仅更改内部主机的IP地址
- NAT是双向的 — 如果A在内部接口上转换为B,到达外部接口的B将转换为A!
- RFC1631
图 1
注意:将NAT视为使用私有地址空间将IP数据包路由进和路由出网络的辅助手段可能有所帮助。换句话说,NAT使不可路由的地址可路由
图2显示后面图中所引用的拓扑。
图 2
本词汇表是了解和描述NAT的基础
- 内部本地地址 - 分配到内部网络上某一主机的 IP 地址。通常,地址来自私有地址空间。
- 内部全局地址 — 由NIC或服务提供商分配的可路由IP地址,代表一个或多个到外部的内部本地IP地址。
- 外部本地地址 - 外部主机显示给内部网络的 IP 地址。它不一定是合法地址,是从内部可路由地址空间中分配的。
- 外部全局地址 - 由主机所有者为外部网络上的主机分配的 IP 地址。此类地址是从全局可路由地址或网络空间分配的。
注意:熟悉这些术语。有关NAT的任何备注或文档务必参考它们
静态 NAT
这是最简单的NAT形式,其中每个内部地址被静态转换为外部地址(反之亦然)。
图 3
上述转换配置的CLI如下
以太网接口0/0
ip address 10.1.1.3 255.255.255.0
ip nat inside
!
interface Serial0/0
ip address 200.1.1.251 255.255.255.252
ip nat outside < — 必需![2]
ip nat inside source static 10.1.1.2 200.1.1.2
ip nat inside source static 10.1.1.1 200.1.1.1
动态 NAT
在动态NAT中,每个内部主机都映射到一个地址池中的地址。
- 从内部全局地址池中分配IP地址。
- 如果新数据包从另一台内部主机到达,并且需要NAT条目,但所有池化IP地址都在使用中,则路由器只会丢弃该数据包。
- 实质上,内部全局地址池需要与同时需要使用Internet的最大并发主机数量一样大
以下CLI说明配置动态NAT
NAT过载(PAT)
当IP地址池小于需要转换的地址集时,此功能非常有用。
- 多个内部地址NAT仅转换为一个或几个外部地址
- PAT(端口地址转换)使用内部全局IP地址上的唯一源端口号来区分转换。由于端口号采用16位编码,因此理论上,每个IP地址的总端口数可能高达65,536。如果该源端口已分配,PAT将尝试保留原始源端口,PAT将尝试查找第一个可用端口号
- NAT过载可使用超过65,000个端口,使其无需多个注册IP地址即可很好地扩展,在许多情况下,只需要一个外部全局IP地址。
图4显示了PAT。
图 4
NAT命令选项
Cisco NAT实施功能非常全面,有许多选项。下面列出了一些增强功能,但请参阅http://www.cisco.com/en/US/partner/technologies/tk648/tk361/tk438/technologies_white_paper09186a0080091cb9.html以了解有关增强功能的完整列表的详细信息。
- 带有端口的静态转换 — 发送到特定端口(例如, 端口25(用于SMTP服务器)。
- 支持路由映射 — 配置过滤器/ACL的灵活性
- 更灵活的池配置 — 允许地址范围不连续。
- 主机号保留 — 转换“网络”部分,保留“主机”部分。
NAT针孔
NAT术语中的针孔是指元组之间的映射。 它允许NAT设备使用传入消息的目标端口号(即global端口)将目标映射回发起会话的主机IP和端口。请注意,针孔在未使用一段时间后超时,公有地址将返回到NAT池。
VoIP中的NAT
那么,VoIP网络中的NAT有哪些问题和疑虑?好的,请回想一下,到目前为止我们讨论过的NAT(更准确地说是基本NAT)只转换IP数据包报头中的IP地址并重新计算校验和,当然,VoIP信令携带嵌入在信令消息正文中的地址。换句话说,在第5层
图5显示了不转换嵌入式IP地址的效果。呼叫信令成功完成,但服务提供商的SIP代理无法尝试将媒体(RTP)数据包路由到呼叫代理发送的媒体地址!
图 5
另一个示例是SIP终端使用Contact:字段,用于传达终端希望接收新请求的信令消息的地址。
这些问题通过称为应用层网关(ALG)的功能得到解决。
ALG
ALG了解其支持的特定应用(例如SIP)使用的协议,并对通过该协议的流量执行协议数据包检测和“修复”。有关如何为SIP呼叫信令修复各种字段的详细说明,请参阅http://www.voip-info.org/wiki/view/Routers+SIP+ALG。
在Cisco路由器上,在标准TCP端口5060上默认启用对ALG SIP的支持。可以将ALG配置为支持SIP信令的非标准端口。请参阅http://www.cisco.com/en/US/docs/ios-xml/ios/ipaddr_nat/configuration/15-mt/nat-tcp-sip-alg.html。
注意:小心!没有RFC或其他标准规定应该为各种VoIP协议转换哪些嵌入式字段。因此,实施因设备供应商而异,导致互操作问题(和TAC案例)。
网关
由于根据定义,网关不是ip到ip设备,因此NAT不适用。
CME
本文档的此部分使用CME查看呼叫方案,以了解为什么必须使用NAT。
场景1.本地电话
场景2.远程电话(使用公有IP地址)
场景3.远程工作人员
注:在所有情况下,为了让音频流通,CME IP地址需要可路由
本地
在此场景(图6)中,呼叫中涉及的两部电话是具有私有IP地址的小型电话。
图 6
注意:请记住,在呼叫中连接到同一CME系统中另一部瘦电话的瘦电话会将其媒体数据包直接发送到另一部电话;即本地电话到本地电话的RTP不通过CME。
因此,在这种情况下,NAT不适用或不需要。
注意:CME根据呼叫中涉及的两部电话是否都处于同一个网段中,确定是否应该直接使用介质(RTP)。否则,CME会将自身插入RTP路径中。
本地到远程
在此场景(图7)中,CME会将自身插入RTP流中,这样来自电话的RTP将在CME上终止。CME会向另一部电话重新发起数据流。由于CME位于内部(专用)网络和外部网络上,并且将其内部地址发送到内部电话,将外部(公共)地址发送到外部电话,因此此处也不需要NAT。
但请注意,远程IP电话和CME源IP地址之间的UDP/TCP端口(信令以及RTP)必须开放。这意味着防火墙或其他过滤设备配置为允许有问题的端口。
图 7
注意:请注意,信令[消息]始终在CM上终止
远程工作人员
这是指通过WAN连接到CME以支持远程工作人员的IP电话,这些远程工作人员设有远离CME路由器的办公室。最常见的设计涉及具有可路由IP地址的电话和具有私有IP地址的电话。
带有公共设备的远程电话(读:可路由)IP地址
如果呼叫中涉及的两部电话都配置了公有、可路由的IP地址,则媒体可以直接在电话之间流动(图8)。 因此,再次说明,无需NAT!
图 8
具有私有IP地址的远程电话
在这种情况下,呼叫会在配置有专用IP地址的小型电话之间发出信号。 一般而言,家庭办公室(SOHO)路由器往往不是“SCCP感知”。即无法转换SCCP消息中嵌入的IP地址。这意味着,在呼叫建立完成后,电话会使用彼此的私有IP地址。 由于两个电话都是专用的,CME将发出它们之间的呼叫信号,以便音频直接在电话之间传输。但是,这将导致单向或单向音频(因为根据定义,私有IP地址不能路由到Internet!),除非实施以下解决方法之一-
·在SOHO路由器上配置静态路由
·建立到电话的IPsec VPN连接
解决此问题的更好方法是配置“mtp”。mtp命令可确保来自远程电话的媒体(RTP)数据包通过CME路由器传输(图9)。
图 9
“mtp”解决方案更好,因为打开防火墙端口非常复杂。流经WAN的媒体数据包可能会被防火墙阻止。这意味着您需要在防火墙上打开端口,但需要打开哪些端口?通过CME中继音频,可以轻松配置防火墙以传递RTP数据包。 CME路由器对媒体数据包使用特定UDP端口(2000!)。因此,通过仅允许数据包进出端口2000,可以传输所有RTP流量。
图10说明如何配置mtp。
ephone 1
mac 1111.2222.3333
类型7965
mtp
按钮1:1
图 10
MTP并非一切美好。在某些情况下,mtp可能并不理想
- MTP对CPU利用率不温和
- 组播MOH通常无法通过WAN转发 — 组播MOH功能检查电话是否启用了MTP,如果启用,则不会将MOH发送到该电话L。
因此,如果您有可以转发组播数据包的WAN配置,并且您可以允许RTP数据包通过防火墙,则可以决定不使用MTP。
远程SIP电话
请注意,上述场景中未提及SIP电话。这是因为如果其中一个电话是SIP电话,CME会将自身插入音频路径。这便成为前面所述的本地到远程场景,其中不需要NAT。
CUBE
CUBE在终止和重新发起所有会话时,会固有地执行NAT和PAT功能。CUBE将其自身的地址替换为其通信的任何终端的地址,从而有效地隐藏(转换)该终端的地址。
因此,CUBE函数不需要NAT。在VoIP服务场景中,CUBE上需要NAT,如下一节所述。
托管NAT穿越
有关托管电话服务的简要背景资料将有助于了解此功能的理论依据。
托管电话服务是一种新形式的VoIP服务,其中大多数设备位于服务提供商所在位置。它们与仅实施基本NAT(即L3/L4上的NAT)的家庭网关(HGW)配合工作。例如,Verizon安装了光纤网络终端(ONT),可在家中提供FiOS服务;语音呼叫使用ONT中内置的SIP进程发出信号。SIP信令通过Verizon的私有IP网络发送到新的软交换机,这些软交换机提供服务和控制,以便与其他FiOS数字语音客户或传统电话客户建立语音通信。
托管电话服务的关键提供商要求包括:
- 远程NAT穿越:能够使用NAT(只能使用NAT第3层!)和防火墙设备(通过远程执行“ALG”!)向终端提供5类服务
- 联合媒体支持:在位于同一位置的设备之间发送介质的功能,在这种情况下将介质路由回IP网络毫无意义
- 无需添加设备,无需添加任何CPE。
鉴于上述情况,实施此类服务有哪些选择?
- 用昂贵的ALG替换HGW,
- 使用会话边界控制器(SBC)修改数据包的嵌入式SIP报头。这涉及网络托管、运营商级产品,它以非常安全、容错的配置支持SIP。此解决方案称为NAT SBC。
NAT SBC选项满足上述提供商要求。
NAT SBC
NAT SBC的工作原理如下(图11)
- 接入路由器仅转换L3/L4 IP地址
- SIP消息中的IP地址未转换
- SBC NAT拦截并转换嵌入式IP地址。 当SBC看到发往200.200.200.10的SIP数据包时,它会输入nat-sbc代码。
- 媒体未转换,直接在电话之间传输[5]
图 11
设计注释
- IP地址200.200.200.10(图12)未分配给NAT SBC上的任何接口。它配置为SIP电话A和SIP电话B向其发送信令消息的“代理”的地址。
- 家庭设备不转换某些SIP/SDP address-only字段(例如Call-Id:,O= ,警告:headers & branch=参数。maddr=和received=参数仅在某些情况下处理。) 这些字段由NAT SBC处理,代理授权和授权转换除外,因为这些字段将中断身份验证。
- 如果家庭设备配置为执行PAT,则用户代理(电话和代理)必须支持对称信令[6]以及对称和早期媒体。您必须在NAT SBC路由器上配置覆盖端口。
- 如果不支持对称信令以及对称和早期介质,必须配置中间路由器而不使用PAT,并且应在NAT SBC中配置覆盖地址。
配置
典型NAT SBC的示例配置如下。
ip nat sip-sbc
proxy 200.200.200.10 5060 15.3.33.22 5060 protocol udp
call-id-pool call-id-pool
session-timeout 300
mode allow-flow-around
覆盖端口
!
ip nat pool sbc1 15.3.33.61 15.3.33.69 netmask 255.255.0.0
ip nat pool sbc2 15.3.33.91 15.3.33.99 netmask 255.255.0.0
ip nat pool call-id-pool 1.1.1.1 1.1.1.255.254 netmask 255.255.0.0
ip nat pool outside-pool 200.200.200.100 200.200.200.200 netmask 255.255.255.0
ip nat inside source list 1 pool sbc1 overload
ip nat inside source list 2 pool sbc2
ip nat outside source list 3 pool outside-pool add-route
ip nat inside source list 4 pool call-id-pool
!
access-list 1 permit 10.1.1.0 0.0.0.255
access-list 1 permit 171.1.1.0 0.0.0.255
access-list 2 permit 20.1.1.0 0.0.0.255
access-list 2 permit 172.1.1.0 0.0.0.255
access-list 3 permit 15.4.0.0 0.0.255.255
access-list 3 permit 15.5.0.0 0.0.255.255
access-list 4 permit 10.1.0.0 0.0.255.255
access-list 4 permit 20.1.0.0 0.0.255.255
使用SBC NAT的呼叫流
图13和图14说明了转换方面的呼叫流程。应注意到以下几点 —
— SIP电话A - 15.3.33.62 2001
— SIP电话B - 15.3.33.62 2002
- 在此呼叫流程中,SBC NAT有效地使媒体IP地址未转换。
图 13
图 14
SIP注册
在早期版本(SBC NAT)中,SIP终端必须发送keep-alive数据包,以使SIP注册针孔保持打开(以允许out->in流量流,例如入站呼叫)。keep-alive数据包可以是终端或注册器(软交换机)发送的任何SIP数据包。 最新版本不再需要此功能,因为NAT-SBC本身(与软交换机相对)强制终端频繁重新注册以保持针孔打开。
注意:过期的注册针孔故障症状可能不明确,并伴有随机呼叫信令故障。
CUSP
CUSP具有逻辑网络的概念,即指对本地接口进行类似处理的集合(例如, 接口、端口、用于侦听的传输)路由目的。在CUSP上配置逻辑网络时,可以将其配置为使用NAT。配置后,SIP ALG将自动启用。这在特定逻辑网络时非常有用。
故障排除
症状
一个明显的症状可能是呼叫在一个或两个方向都失败。不太明显的症状可能包括,
- 单向音频
- 转接时的单向音频
- 无向音频
- 丢失SIP注册
Show 与 debug 命令
- deb ip nat [sip | skinny]
- show ip nat statistics
- show ip nat translations
要检查的事项
- 确保配置包括ip nat inside 或ip nat outside 接口子命令。这些命令在接口上启用NAT,而内部/外部指定非常重要。
- 对于静态NAT,请确保ip nat source static命令首先列出内部本地地址,然后列出内部全局IP地址。
- 对于动态NAT,请确保在进行NAT转换之前,配置用于匹配内部主机发送的数据包的ACL与该主机的数据包匹配。例如,如果内部本地地址10.1.1.1应转换为200.1.1.1,请确保ACL匹配源地址10.1.1.1,而不是200.1.1.1。
- 对于没有PAT的动态NAT,请确保池具有足够的IP地址。地址不足的症状包括show ip nat statistics命令输出中第二个未命中计数器的值不断增大,以及在动态转换列表中看到NAT池中定义范围内的所有地址。
- 对于PAT,很容易忘记在ip nat inside source list命令上添加overload选项。如果没有它,NAT可以工作,但PAT不起作用,通常会导致用户的数据包无法转换,主机无法访问Internet。
- NAT可能配置正确,但其中一个接口上存在ACL,丢弃数据包。请注意,对于进入接口的数据包,IOS会在NAT之前处理ACL,对于从接口离开的数据包,IOS会在转换地址后处理ACL。
- 不要忘记在面向WAN的接口上配置“ip nat outside”(即使不转换外部地址)!
- 配置NAT后,show ip nat translations不会显示任何内容。Ping一次,然后再次检查。
- 在NAT-SBC的内部和外部接口上获取wireshark跟踪
场景
下面显示了几个方案的调试输出。它们基本上不言自明!
基本 NAT
基本NAT的配置和调试行如下所示。
SIP ALG
显示debug ip nat sip的输出行。在这种情况下,将转换传出数据包上的嵌入式IP地址。
参考
概述:
VoiP和NAT
NAT功能矩阵
托管NAT穿越:
NAT SBC
ALG:
CME