简介
本文档介绍如何了解和配置网络地址转换(NAT)。
先决条件
要求
Cisco 建议您了解以下主题:
使用的组件
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
NAT64 是 IPv4 到 IPv6 过渡和 IPv4 与 IPv6 共存的机制。与DNS64一起,NAT64的主要用途是允许仅IPv6客户端发起与仅IPv4服务器的通信。NAT64还可用于使用静态或手动绑定发起与仅IPv6服务器通信的仅IPv4客户端。本文档对这两种情况都进行了说明。
为什么需要NAT64
- 几乎所有现代 IP 设备都支持 IPv6,但仍有许多较旧设备仅支持 IPv4。我们需要一种方法通过 IPv6 网络连接这些设备。
- 一些较旧应用将 IPv4 地址合并到了上层,这些应用预计仍会存续一段时间,但最终也必须过渡到 IPv6。
- 由于IPv4地址不可用,IPv6地址被分配给新设备;但是,Internet上的大多数可访问内容仍是IPv4。这些新设备必须能够访问这些内容。
- 几年后,情况正好相反:大多数内容可以是IPv6,但仅支持IPv4的少数设备仍必须访问它。
- 纯 IPv4 设备必须能与纯 IPv6 设备通信,同时最大限度减少或消除对用户的影响。
如何实现IPv4和IPv6之间的通信
由于IPv6不能向后兼容IPv4,因此您需要转换机制,这分为以下三类:
- 双协议栈接口:IPv4和IPv6共存的最简单解决方案(非互通性)是使接口双语化,这样它们可以说IPv4到IPv4设备以及IPv6到IPv6设备。接口使用哪个协议版本取决于它们从设备接收的数据包版本,或它们在查询设备地址时,DNS 提供的地址类型。双协议栈是从 IPv4 过渡到 IPv6 的预期方式,但前提是在 IPv4 耗尽之前完成过渡。这种情况还没有发生,因此双协议栈就变得更加复杂:当没有足够的可用地址时,如何为每个接口同时提供IPv4地址和IPv6地址?
- 隧道:隧道也是关于共存而不是互操作性的。该方法允许一个版本的设备或站点通过另一个版本的网段(包括互联网)进行通信。因此,两个 IPv4 设备或站点可以通过 IPv6 网络交换 IPv4 数据包,或者两个 IPv6 设备或站点可以通过 IPv4 网络交换 IPv6 数据包。
- 转换器:转换器通过将一个版本的数据包的报头更改为另一个版本的报头,来创建IPv4设备和IPv6设备之间的互操作性。
#Like其他过渡方法中,转换不是长期策略,最终目标可能是本地IPv6。 但与隧道相比,转换具有两大主要优势:
- 转换提供了一种逐步、无缝迁移到 IPv6 的方法。
- 内容提供商可以向 IPv6 互联网用户透明地提供服务。
NAT64转换的类型
无状态 NAT64
在无状态 NAT64 中,由于状态不会保留,因此每个 IPv6 用户都需要一个专用的 IPv4 地址。由于我们处于IPv4耗尽阶段,因此很难采用NAT64的这种模式。当IPv6地址数量较少时(NAT46),使用无状态NAT64的唯一优点。
有状态 NAT64
在有状态 NAT64 中,状态将会保留。单个 IP 地址将用于使用不同端口号的所有专用用户。在上图中,一个IPv4地址与该LAN中用于访问公共IPv4服务器的IPv6的所有用户使用不同的端口号。
以下是关于有状态和无状态 NAT64 转换差异的更多详细信息:
无状态 NAT64 |
有状态 NAT64 |
一对一转换 |
一对多转换 |
不保留 IPv4 地址 |
保留 IPv4 地址 |
确保端到端地址透明度和可扩展性 |
由于使用地址过载,因此缺少端到端地址透明度 |
转换时不会创建状态或绑定 |
每次转换时都会创建状态或绑定 |
需要分配支持 IPv4 转换的 IPv6 地址(强制要求) |
对分配的 IPv6 地址的特性无任何要求 |
需要为 IPv6 主机手动分配地址,或分配基于 DHCPv6 的地址 |
可自由选择任何分配 IPv6 地址的模式,包括手动、DHCPv6 和 SLAAC |
- 在本文档中,演示了带实验练习的有状态NAT64,其中IPv6主机希望与IPv4服务器通信。此外,它还演示了无状态NAT64,其中IPv4主机希望连接到IPv6服务器。此场景也称为NAT46。
场景1:如何从IPv6网络中的主机与IPv4服务器(位于IPv4网络中)通信
- 如果可以从ipv6网络中的主机直接ping通ipv4地址(10.1.113.2),则设备无法理解此ipv4地址,因为它只理解ipv6地址。因此数据包可以在主机上丢弃。
- 同样,如果从ipv4网络对ipv6地址执行ping操作,设备将无法理解该ip,并且可能会引发错误,因为默认情况下它仅配置用于ipv4网络。
- 此外,ipv4数据包无法通过仅ipv6网络路由,反之亦然。因此,需要进行转换,以便您可以根据需要将边缘设备上的数据包转换为ipv4或ipv6。
NAT64有三个主要组件。
- NAT64前缀:任何/32、/40、/48、/56、/64或/96前缀,与转换后的IPv4地址配合使用,通过仅IPv6网络传输数据包。NAT64 前缀可以是网络特定前缀 (NSP) ,也可以是已知前缀 (WKP)。NSP 由组织分配,通常是组织 IPv6 前缀的子网。NAT64的WKP为64:ff9b::/96。如果未指定或配置NSP,NAT64可以使用WKP预置转换后的IPv4地址。NAT64 前缀也称为 Pref64::/n。
- DNS64服务器:DNS64服务器用作IPv6 AAAA记录的普通DNS服务器,但也可以尝试在AAAA记录不可用时查找IPv4 A记录。如果找到 A 记录,DNS64 会将 IPv4 A 记录转换为使用 NAT64 前缀的 IPv6 AAAA 记录。这可以让纯 IPv6 主机认定,它可以使用 IPv6 与服务器通信。
- NAT64路由器:NAT64路由器将NAT64前缀通告到仅IPv6网络,同时执行仅IPv6网络和仅IPv4网络之间的转换。
有状态NAT64情况下的数据包流
1.假设在上图中,IPv6网络中的主机希望与Web服务器www.example.com(10.1.113.2)通信,该服务器是纯IPv4服务器。
2.要使此通信成为可能,您必须在IPv6网络中安装DNS64服务器,以便了解并解析DNS以处理ipv4请求。
3. DNS64服务器用作IPv6 AAAA记录的普通DNS服务器,但是当AAAA记录不可用时,也可以尝试查找IPv4 A记录。如果找到 A 记录,DNS64 会将 IPv4 A 记录转换为使用 NAT64 前缀的 IPv6 AAAA 记录。这可以让纯 IPv6 主机认定,它可以使用 IPv6 与服务器通信。
4. 现在,针对 www.example.com 的 DNS 解析请求已发送到 DNS64 服务器。它首先在 IPv6 AAAA 记录表中查找,但未找到任何 IPv6 AAAA 记录,因为此网站服务器属于 Ipv4 地址。之后,它会在其IPv4数据库中查找与此网站匹配的IPv4地址。现在,DNS64服务器可以将此IPv4地址转换为IPv6地址,方法是将此IPv4地址转换为十六进制并预置NAT64前缀。这样做可以给仅IPv6主机留下使用IPv6与Web服务器进行通信的印象。
5. 在十六进制的 IPv4 地址前面添加 NAT64 前缀后,数据包通过纯 IPv6 网络路由到执行 NAT64 的设备。
6. NAT64 路由器将 NAT64 前缀通告给纯 IPv6 网络,同时在纯 IPv6 网络和纯 IPv4 网络之间执行转换。
7.数据包到达执行NAT64转换的设备后,即可将数据包与您为Nat64配置的ACL进行匹配。如果数据包与此ACL匹配,则可以进一步使用NAT64转换数据包。如果数据包与配置的ACL不匹配,则可以使用常规IPv6路由将其路由到目的地。
8. 有状态 NAT64 利用配置的访问控制列表 (ACL) 和前缀列表来过滤 IPv6 发起的流量,这些流量可用于创建 NAT64 状态。IPv6 数据包的过滤是在 IPv6 到 IPv4 方向完成的,因为 IPv6 主机和 IPv4 地址之间的映射动态分配只能在此方向完成。有状态 NAT64 通过 PAT 配置支持 IPv4 到 IPv6 数据包流的终端依赖过滤。
9. 在有状态 NAT64 PAT 配置中,数据包流必须源自 IPv6 一端,并在 NAT64 状态表中创建了状态信息。源自 IPv4 一端且之前没有创建状态信息的数据包将被丢弃。静态网络地址转换 (NAT) 和非 PAT 配置支持终端独立过滤。
根据为有状态前缀配置的自动路由设置,第一个 IPv6 数据包将路由到 NAT 虚拟接口 (NVI)。有状态 NAT64 将执行一系列查找操作,以根据访问控制列表 (ACL) 查找,确定 IPv6 数据包是否与任何配置的映射匹配。根据映射,IPv4 地址(和端口)与 IPv6 目的地址相关联。
使用以下方法转换IPv6数据包并形成IPv4数据包:
- 通过从 IPv6 地址中剥离前缀来提取目的 IPv4 地址。源地址将被替换为分配的 IPv4 地址(和端口)。
- 其余字段从 IPv6 转换为 IPv4,以形成有效的 IPv4 数据包。
10. 在会话数据库和绑定数据库中创建新的 NAT64 转换。池和端口数据库根据配置进行更新。
11.IPv6数据包流的返回流量和后续流量可使用此会话数据库条目进行转换。
- 要使NAT64工作,可以从ipv6到达ipv6网络中的接口的ipv6地址,也可以从NAT64路由器到达服务器的ipv4地址。
配置NAT64指南
步骤1:主机A是只使用IPv6的主机,它想与服务器www.example.com通信。这会触发到DNS64服务器的DNS查询(AAAA: www.example.com)。DNS64 是此过程的关键组成部分。DNS64服务器既是IPv6的DNS服务器,也是IPv4的DNS服务器。它为客户端造成了一种错觉,即可以使用IPv6地址访问IPv4服务器。
主机A向DNS64服务器发送DNS查询(AAAA: www.example.com)。就主机 A 而言,这是对 IPv6 服务器的普通 DNS AAAA 查询。
第二步:DNS64服务器从主机A接收DNS AAAA查询。在尝试解析域名时,DNS64服务器会向DNS AAAA授权服务器发送查询www.example.com。
第三步:IPv6 DNS AAAA授权服务器返回响应,指示它没有www.example.com的AAAA资源记录。
第四步:收到对AAAA查询的空应答(名称错误)响应时,会触发DNS64服务器向IPv4 DNS A授权服务器发送A查询(A: www.example.com)。
第五步:IPv4 DNS A授权服务器具有www.example.com的A资源记录,并返回带有服务器IPv4地址的响应(A: www.example.com 10.1.113.2)。
第六步:DNS64服务器从DNS A权威服务器接收IPv4地址,并通过在地址前面加上其NAT64前缀2800:1503:2000:1:1::/96来合成AAAA记录,并将IPv4地址转换为十六进制0a01:7102。主机A可以使用此地址作为目的IPv6地址来访问www.example.com服务器。
步骤 7.合成的AAAA记录对主机A完全透明。对于主机A,它看起来好像可以通过IPv6网络和互联网访问www.example.com。主机A现在具有将IPv6数据包传输到www.example.com所需的编址信息,如下所示:
- IPv6目的地址:2800:1503:2000:1:1::0a01:7102
- IPv6源地址:2001:DB8:3001::9
步骤 8NAT64路由器在其启用NAT64的接口上接收主机A发送的IPv6数据包。它将传入的数据包与配置的ACL匹配。如果未找到匹配项,则使用普通 IPv6 路由转发未转换的数据包。如果找到匹配项,则数据包将经历此转换:
- IPv6 报头转换为 IPv4 报头。
- IPv6 目的地址转换为 IPv4 地址,方法是删除 IPv6 有状态 NAT64 前缀 2800:1503:2000:1:1::/96。IPv6 地址 0a01:7102 的低 32 位表示为点分十进制 IPv4 地址 10.1.113.2。
- 使用配置的 IPv4 地址池,将 IPv6 源地址转换为 IPv4 地址。根据 NAT64 配置,可以是 1:1 地址转换,也可以使用 IPv4 地址过载。这类似于IPv4的NAT。在这种情况下,主机A的源IPv6地址将转换为IPv4地址。
- 为源地址和目的地址创建有状态 NAT64 IP 地址转换状态。这些状态是在第一次对数据包执行转换时创建的。该状态将保留,供流中的后续数据包使用。在流量和状态保留计时器到期后,该状态结束。
步骤 9在NAT64转换之后,将使用正常的IPv4路由查找过程转发转换后的IPv4数据包。在此场景中,IPv4 目的地址 10.1.113.2 用于转发数据包。
步骤 10位于10.1.113.2的www.example.com服务器应答,最终由NAT64路由器接收。
步骤 11NAT64路由器在其一个启用NAT64的接口上接收来自www.example.com服务器的IPv4数据包。路由器检查 IPv4 数据包,以确定 IPv4 目的地址是否存在 NAT64 转换状态。如果转换状态不存在,数据包将被丢弃。如果IPv4目的地址确实存在转换状态,NAT64路由器将执行以下任务:
- IPv4 报头转换为 IPv6 报头。
- 使用现有 NAT64 转换状态,将 IPv4 源地址转换为 IPv6 源地址。在此场景中,源地址从 IPv4 地址 10.1.113.2 转换为 IPv6 地址 2800:1503:2000:1:1::0a01:7102。目的地址从IPv4地址转换为2001:DB8:3001::9。
步骤 12转换后,将使用正常的IPv6路由查找过程转发IPv6数据包。
NAT46 路由器上的配置
1.面向IPv6的接口:
2.面向IPv4的接口:
3.创建匹配ipv6流量的ACL。
4.启用NAT64 IPv6到IPv4地址映射:
#nat64 prefix stateful 2800:1503:2000:1:1::/96 --------------->服务器IP可以映射到此ipv6 ip地址。您可以在此处配置任何ipv6网络地址,但此ipv6网络地址可从您的ipv6网络访问。此外,DNS64 服务器必须将此 ipv6 网络地址映射到服务器 ipv4 地址。
- #nat64 v4池池1 10.50.50.50 --------------->原始ipv6源地址可以转换为此池的ip,而数据包可以进入ipv4网络。
- #nat64 v6v4 list nat64acl pool pool1 overload --------------->这可以将与nat64acl匹配的ipv6地址转换为池中的ipv4地址
- 10.1.113.2 的十六进制值为 0a01:7102。完成此配置后,从 PC A 向 2800:1503:2000:1:1::0a01:7102 地址发出 ping 命令。
#ping 2800:1503:2000:1:1::0a01:7102
检验NAT64详细信息
#show nat64 translation
#show nat64 statistics
场景2:从仅IPv4客户端发起到仅IPv6服务器的流量
- 上图显示了一个场景,在纯IPv4网络中,客户端使用NAT64与纯IPv6服务器进行通信。目标是提供对IPv4客户端透明的IPv6服务访问。在此场景中,不需要使用 DNS64 服务器。在 NAT64 路由器上配置 IPv6 和 IPv4 地址间的静态映射。
- 在可预见的将来,这种情况不太可能出现。大多数启用IPv6的服务器也可以支持IPv4。IPv6服务器运行双堆栈较长时间的可能性更大。仅IPv6服务器最终会变得更加常见,但不会很快出现。
配置NAT46指南
步骤1:第一步是在NAT46路由器上配置IPv6到IPv4静态映射,以便从IPv4地址10.1.113.2访问IPv6服务器2001:DB8:3001::9/64。此外,IPv4地址10.50.50.50需要注册为DNS服务器上的www.examplev6.com的DNS资源记录。使用以下命令创建静态 NAT64 映射:
NAT64-Router(config)# nat64 v6v4 static 2001:DB8:3001::9 10.50.50.50
第二步:PC A是只使用IPv4的主机,它希望与服务器www.examplev6.com通信。这会触发对其IPv4 DNS授权服务器的DNS查询(A: www.examplev6.com)。
第三步:DNS服务器使用www.examplev6.com(10.50.50.50)的A资源记录进行响应。
第四步:主机A现在具有将IPv4数据包发送到www.examplev6.com所必需的地址信息
- IPv4目的地址:10.50.50.50
- IPv4源地址:10.1.113.2
第五步:NAT64路由器在启用NAT64的接口上接收IPv4数据包,并执行下列任务:
- IPv4 报头转换为 IPv6 报头。
- 使用步骤1中的静态配置创建的现有NAT64转换状态,将IPv4目标地址转换为IPv6地址。目的IPv4地址10.50.50.50被转换为IPv6目的地址2001:DB8:3001::9。
- IPv4 源地址转换为 IPv6 地址,方法是将有状态 NAT64 前缀 2800:1503:2000:1:1::/96 添加到 IPv4 地址。这将生成 IPv6 源地址 2800:1503:2000:1:1::0a01:7102。 (0a01:7102 是 10.1.113.2 的十六进制值。)
第六步:转换后,将使用正常的IPv6路由过程路由IPv6数据包。数据包最终路由到 www.examplev6.com 服务器,地址为 2001:DB8:3001::9。
步骤 7.服务器www.examplev6.com回复一个发往主机A的数据包。
步骤 8NAT64路由器在其启用NAT64的接口上接收IPv6服务器发送的IPv6数据包,并执行下列任务:
- IPv6 报头转换为 IPv4 报头。
- IPv6源地址使用状态转换表转换为10.50.50.50。
- 通过删除IPv6有状态NAT64前缀2800:1503:2000:1:1::/96,将IPv6目标地址转换为IPv4地址。IPv6 地址 0a01:7102 的低 32 位表示为点分十进制 IPv4 地址 10.1.113.2。
步骤 9转换后,NAT64路由器使用正常的IPv4路由过程将数据包转发到10.1.113.2。
- 与上一个场景类似,使用有状态NAT64在仅IPv4客户端和仅IPv6服务器之间建立透明通信。除步骤1中讨论的static mapping命令外,配置是类似的。
NAT46 路由器上的配置
- 面向 IPv4 的接口:
- 面向 IPv6 的接口:
- 将流量从 IPv4 成功转换为 IPv6 所需的其他路由器配置:
配置成功后,从IPv4主机ping 10.50.50.50。
#ping 10.50.50.50
验证 NAT46
#show nat64 translations
#show nat46 statistics
转换场景及其适用范围
IPv6/IPv4 转换场景 |
适用范围 |
示例 |
场景1:IPv6网络连接到IPv4 Internet |
·仅支持IPv6的网络,希望透明地访问IPv6和现有IPv4内容。 ·从IPv6主机和网络发起。 |
· ISP为仅支持IPv6的智能手机(第三代[3G]、长期演进[LTE]等)推出新的服务和网络。 ·部署纯IPv6网络的企业。 |
场景2:IPv4 Internet连接到IPv6网络 |
·在仅支持IPv6的网络中,希望透明地同时为IPv4和IPv6用户提供服务的服务器。 ·从IPv4主机和网络发起。 |
即将推出或现有的内容提供商在仅支持IPv6的环境中推出服务。 |
场景3:IPv6 Internet连接到IPv4网络 |
·现有仅支持IPv4的网络中的服务器,需要为IPV6 Internet用户提供服务。 ·从IPv6主机和网络发起。 |
现有内容提供商迁移到IPv6,因此希望为IPv6 Internet用户提供服务,作为共存战略的一部分。 |
场景4:IPv4网络连接到IPv6 Internet |
在不久的将来,这种情况不可行;此情况可能只在IPv6/IPv4过渡早期阶段之后发生。 |
无 |
场景5:IPv6网络到IPv4网络 |
IPv4网络和IPv6网络都位于同一组织中。 |
与场景 1 类似,面向内联网,而非互联网. |
场景6:IPv4网络到IPv6网络 |
IPv4网络和IPv6网络都位于同一组织中。 |
类似于场景 2,面向内联网,而非互联网. |
场景7:IPv6 Internet到IPv4 Internet |
吞吐量不佳. |
无 |
场景8:IPv4 Internet到IPv6 Internet |
没有可行的转换技术来处理无限制的IPv6地址转换。 |
无 |
重要故障排除命令,以防NAT64实施期间出现问题
#show platform hardware qfp active statistics drop(查看是否有任何NAT64丢弃)
#show running-config | 包括nat64(查看是否在Cisco IOS®上配置了所有内容)
#show台硬件qfp活动功能nat64数据路径统计信息(用于检查丢弃计数器的原因)
#show platform hardware qfp active feature nat64 datapath pool(用于检查池是否配置正确)
#show platform hardware qfp active feature nat64 datapath map(检查池映射配置是否正确)
#show platform software object-manager F0 pending-ack-update(检查是否有任何待处理对象)