目录

简介

先决条件

为什么需要NAT64?

如何使IPv4和IPv6之间的通信成为可能？

NAT64转换的类型

情形 1：如果我们想从IPv6网络中的主机与IPv4服务器（位于IPv4网络中）通信

有状态NAT64时的数据包流

配置NAT64的指南

NAT 46路由器上的配置

检验NAT64详细信息

方案 2：从仅IPv4客户端发起到仅IPv6服务器的流量

配置NAT46的指南

NAT 46路由器上的配置

检验NAT46

翻译场景及其适用性

重要的故障排除命令，以防在实施NAT64时遇到任何问题

简介

NAT64是IPv4到IPv6过渡和IPv4到IPv6共存的机制。与DNS64一起，NAT64的主要用途是允许仅IPv6客户端发起与仅IPv4服务器的通信。NAT64也可用于仅IPv4客户端，这些客户端使用静态或手动绑定启动与仅IPv6服务器的通信。我已在本文档中解释了这两种场景。

先决条件

IPv6和NAT的基本知识

为什么需要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地址不足，如何为每个接口同时提供IPv4地址和IPv6地址？

- 隧道:隧道也是关于共存，而不是互操作性。它们允许一个版本的设备或站点通过另一个版本的网段（包括Internet）通信。因此，两个IPv4设备或站点可以通过IPv6网络交换IPv4数据包，或者两个IPv6设备或站点可以通过IPv4网络交换IPv6数据包。

- 翻译员：转换器通过将一个版本的数据包的报头更改为另一个版本的报头，在IPv4设备和IPv6设备之间创建互操作性。

#Like其他过渡方法，转换不是长期策略，最终目标应是本地IPv6。  但是，与隧道相比，转换具有两大优势：

- 转换为逐步无缝迁移到IPv6提供了一种方法。

- 内容提供商可以透明地为IPv6 Internet用户提供服务。

NAT64转换的类型

无状态NAT64

在无状态NAT64中，状态不会保留，这意味着对于每个IPv6用户，都需要专用的IPv4地址。由于我们处于IPv4耗尽阶段，因此采用这种NAT64模式非常困难。当IPv6地址(NAT46)数量较少时，使用无状态NAT64的唯一优势。

状态NAT64

在有状态NAT64中，状态保持不变。对于具有不同端口号的所有私有用户，都使用一个IP地址。在上图中，IPv6的所有用户使用一个IPv4地址和不同的端口号来访问公有IPv4服务器。

以下是有关有状态NAT64转换与无状态NAT64转换之间区别的更多详细信息：

无状态NAT64

状态NAT64

1:1转换

1:N转换

IPv4地址不保护

保留IPv4地址

确保端到端地址的透明性和可扩展性

使用地址过载，因此缺乏端到端地址透明性

转换时未创建状态或绑定

状态或绑定在每个唯一转换上创建

需要分配IPv4可转换的IPv6地址（必需）

无需对IPv6地址分配的性质进行要求

需要手动或基于DHCPv6的IPv6主机地址分配

可自由选择IPv6地址分配的任何模式，即手动、DHCPv6、SLAAC

- 在本文档中，我演示了IPv6主机要与IPv4服务器通信的有状态NAT64和LAB练习。此外，我演示了无状态NAT64，其中IPv4主机要连接到IPv6服务器，此场景也称为NAT46。

情形 1：如果我们想从IPv6网络中的主机与IPv4服务器（位于IPv4网络中）通信

- 在上图中，位于IPv6网络中的主机希望访问位于ipv4网络中的ip 10.1.113.2的Web服务器(www.example.com)。

- 如果我们从ipv6网络中的主机直接pingipv4地址(10.1.113.2)，设备将不理解此ipv4地址，因为它只能理解ipv6地址。因此，数据包将被丢弃到主机上。

- 同样，如果我们从ipv4网络ping ipv6地址，设备将不会理解该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服务器，但当AAA记录不可用时，还会尝试查找IPv4 A记录。如果找到A记录，DNS64会使用NAT64前缀将IPv4 A记录转换为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服务器，但当AAA记录不可用时，还会尝试查找IPv4 A记录。如果找到A记录，DNS64会使用NAT64前缀将IPv4 A记录转换为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.在仅IPv6网络中，数据包在IPv4地址十六进制值前面加上的NAT64前缀的帮助下路由到执行NAT64的设备。

6. NAT64路由器将NAT64前缀通告到仅IPv6网络，并执行仅IPv6网络和仅IPv4网络之间的转换。

7.一旦数据包到达执行NAT64转换的设备，数据包将与我们为Nat64配置的ACL匹配。如果数据包与此ACL匹配，则数据包将进一步使用NAT64进行转换，如果数据包与已配置的ACL不匹配，则使用正常IPv6路由将其路由到其目的地。

8.有状态NAT64利用已配置的访问控制列表(ACL)和前缀列表过滤允许创建NAT64状态的IPv6启动的流量。IPv6数据包的过滤是在IPv6到IPv4的方向进行的，因为IPv6主机和IPv4地址之间的映射的动态分配只能在此方向上进行。有状态NAT64支持对IPv4到IPv6数据包流进行与终端相关的过滤，并配置PAT。

9.在有状态NAT64 PAT配置中，数据包流必须源自IPv6领域，并在NAT64状态表中创建了状态信息。来自IPv4端且没有先前创建状态的数据包将被丢弃。静态网络地址转换(NAT)和非PAT配置支持与终端无关的过滤。

第一个IPv6数据包根据为状态前缀配置的自动路由设置路由到NAT虚拟接口(NVI)。有状态NAT64执行一系列查找，以根据访问控制列表(ACL)查找确定IPv6数据包是否匹配任何已配置的映射。根据映射，IPv4地址（和端口）与IPv6目的地址相关联。

转换IPv6数据包，并使用以下方法形成IPv4数据包：

1. 通过从IPv6地址中删除前缀来提取目的IPv4地址。源地址被分配的IPv4地址（和端口）替换。

2. 其余字段从IPv6转换为IPv4，形成有效的IPv4数据包。

10.会在会话数据库和绑定数据库中创建新的NAT64转换。池和端口数据库会根据配置进行更新。

11.IPv6数据包流的返回流量和后续流量将使用此会话数据库条目进行转换。

- 要使NAT64正常工作，应从IPv6到IPv6网络中接口的IPv6地址具有可达性，而从NAT64路由器到服务器的IPv4地址也应具有可达性。

配置NAT64的指南

步骤1.主机A是仅IPv6的主机，要与服务器www.example.com通信。这会触发DNS查询(AAAA:www.example.com)连接到DNS64服务器。DNS64是此过程的关键组件。DNS64服务器既是IPv6的DNS服务器，也是IPv4的DNS服务器。它给客户端造成了一种假象，即IPv4服务器可以使用IPv6地址到达。

主机A发送DNS查询(AAAA:www.example.com)连接到DNS64服务器。对于主机A，这是IPv6服务器的普通DNS AAAA查询。

步骤2. DNS64服务器从主机A接收DNS AAAA查询。为了解析域名，DNS64服务器向www.example.com的DNS AAAA授权服务器发送查询。

步骤3. IPv6 DNS AAAA授权服务器返回响应，指示它没有www.example.com的AAA资源记录。

步骤4.在收到对AAAA查询的空应答（名称错误）响应时，会触发DNS64服务器发送A查询(A:www.example.com)到IPv4 DNS A授权服务器。

步骤5. IPv4 DNS A authoritative server确实有www.example.com的A资源记录，并返回具有该服务器IPv4地址的响应(A:www.example.com 10.1.113.2)。

步骤6. DNS64服务器从DNS A授权服务器接收IPv4地址，并通过前缀NAT64地址2800:1503:2000:1:1::/96来合成AAA记录，并将IPv4地址转换为十六进制0a01:7102。此地址将主机A用作到达www.example.com服务器的目的IPv6地址。

步骤8.合成的AAAA记录对主机A完全透明。对于主机A，它似乎像www.example.com可以通过IPv6网络和Internet访问。主机A现在具有将IPv6数据包传输到www.example.com所需的编址信息，具有以下内容：

- IPv6目的地址：2800:1503:2000:1:1::0a01:7102

- IPv6源地址：2001:DB8:3001::9

步骤9. NAT64路由器在其启用NAT64的接口上接收主机A发送的IPv6数据包。它将传入数据包与已配置的ACL相匹配。如果未找到匹配项，则使用普通IPv6路由将数据包转发为未转换的数据包。如果找到匹配项，则数据包将执行以下转换：

- IPv6报头被转换为IPv4报头。

- 通过删除IPv6有状态NAT64前缀2800:1503:2000:1:1::/96,IPv6目的地址被转换为IPv4地址。IPv6地址的下32位0a01:7102表示为点分十进制IPv4地址10.1.113.2。

- IPv6源地址使用已配置的IPv4地址池转换为IPv4地址。根据NAT64配置，这可以是1:1地址转换或使用IPv4地址过载。这类似于IPv4的NAT。在此场景中，主机A的源IPv6地址被转换为50.50.50.50 IPv4地址。

- 为源地址和目标地址创建状态NAT64 IP地址转换状态。这些状态是在首次对数据包执行转换时创建的。流中后续数据包将保持此状态。当流量和状态维护计时器到期时，状态结束。

步骤10.在NAT64转换后，转换后的IPv4数据包使用正常的IPv4路由查找过程进行转发。在本场景中，IPv4目的地址10.1.113.2用于转发数据包。

步骤11. www.example.com服务器(10.1.113.2)回复，NAT64路由器最终会收到该回复。

步骤12. NAT64路由器在其一个启用NAT64的接口上从www.example.com服务器接收IPv4数据包。路由器检查IPv4数据包以确定IPv4目的地址是否存在NAT64转换状态。如果转换状态不存在，则丢弃数据包。如果IPv4目标地址确实存在转换状态，则NAT64路由器将执行以下任务：

- IPv4报头被转换为IPv6报头。

- IPv4源地址使用现有NAT64转换状态转换为IPv6源地址。在本场景中，源地址从IPv4地址10.1.113.2转换为IPv6地址2800:1503:2000:1:1::0a01:7102。目的地址从IPv4地址50.50.50.50转换为2001:DB8:3001::9。

步骤13.转换后，使用普通IPv6路由查找过程转发IPv6数据包。

NAT 46路由器上的配置

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地址。

5. #nat64 v4 pool pool1 50.50.50.50 50.50.50.50 —>原始ipv6源地址将转换为此池的ips，而数据包将进入ipv4网络。

6. #nat64 v6v4 list nat64acl pool pool1 overload —>这会将匹配nat64acl的ipv6地址从池转换为ipv4地址

7. 十六进制值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转换

#show nat64统计信息

方案 2：从仅IPv4客户端发起到仅IPv6服务器的流量

- 上图显示了仅IPv4网络中的客户端使用NAT64与仅IPv6服务器通信的场景。目标是提供对IPv4客户端透明的IPv6服务访问。在此场景中，不需要DNS64服务器。IPv6和IPv4地址之间的静态映射在NAT64路由器上配置。

- 请注意，在可预见的将来，这种情况不太可能发生。启用IPv6的大多数服务器也支持IPv4。IPv6服务器运行双堆栈的可能性更大。仅IPv6服务器最终将变得更加常见，但不会很快。

配置NAT46的指南

步骤1.第一步是在NAT46路由器上配置IPv6到IPv4的静态映射，以便从IPv4地址10.1.113.1访问IPv6服务器2001:DB8:3001::9/64。2.此外，IPv4地址50.50.50.50需要注册为DNS服务器上www.examplev6.com的DNS资源记录。静态NAT64映射使用以下命令创建：

NAT64-Router(config)# nat64 v6v4 static 2001:DB8:3001::9 50.50.50.50

步骤2.PC A是仅IPv4的主机，希望与服务器www.examplev6.com通信。这会触发DNS查询(A:www.examplev6.com)到其IPv4 DNS授权服务器。

步骤3. DNS服务器以www.examplev6.com 50.50.50.50的A资源记录作出响应。

步骤4.主机A现在具有将IPv4数据包传输到www.examplev6.com所需的编址信息。

- IPv4目的地址：50.50.50.50

- IPv4源地址：10.1.113.2

步骤5. NAT64路由器在启用NAT64的接口上接收IPv4数据包并执行以下任务：

- IPv4报头被转换为IPv6报头。

- 使用步骤1中静态配置创建的现有NAT64转换状态，IPv4目标地址被转换为IPv6地址。目标IPv4地址50.50.50.50被转换为IPv6目标地址2001:DB8:3001::9

- 通过将有状态NAT64前缀2800:1503:2000:1:1::/96添加到IPv4地址，IPv4源地址被转换为IPv6地址。这将导致IPv6源地址2800:1503:2000:1:1::0a01:7102。（0a01:7102是十六进制等价10.1.113.2。）

步骤6.转换后，使用正常的IPv6路由进程路由IPv6数据包。数据包最终路由到地址为2001:DB8:3001::9的www.examplev6.com服务器。

步骤7.服务器www.examplev6.com回复发往主机A的数据包。

步骤8. NAT64路由器在其启用NAT64的接口上接收IPv6服务器发送的IPv6数据包，并执行以下任务：

- IPv6报头被转换为IPv4报头。

- 使用状态转换表将IPv6源地址转换为50.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。

- 与上述场景类似，仅IPv4客户端和仅IPv6服务器之间使用有状态NAT64建立透明通信。除步骤1中讨论的静态映射命令外，这些配置相似。

NAT 46路由器上的配置

1. 面向IPv4的接口：

2. 面向IPv6的接口：

3. 路由器上成功将流量从IPv4转换为IPv6所需的其他配置：

配置成功后，从IPv4主机ping 50.50.50.50。

#ping 50.50.50.50

检验NAT46

#show nat64转换

#show nat46统计信息

翻译场景及其适用性

IPv6/IPv4转换方案

适用性

示例

情形 1：到IPv4 Internet的IPv6网络

·仅IPv6网络，希望透明地访问IPv6和现有IPv4内容

·从IPv6主机和网络发起

· ISP为纯IPv6智能手机（第三代[3G]、长期演进[LTE]等）推出新服务和网络

·部署仅IPv6网络的企业

方案 2：IPv4 Internet到IPv6网络

·仅IPv6网络中希望透明地为IPv4和IPv6用户提供服务的服务器

·从IPv4主机和网络发起

即将推出或现有的内容提供商在仅IPv6环境中推出服务

情形 3：IPv6 Internet到IPv4网络

·现有仅IPv4网络中的服务器，希望为IPv6互联网用户提供服务

·从IPv6主机和网络发起

现有内容提供商迁移到IPv6，因此希望向IPv6 Internet用户提供服务，作为共存战略的一部分

场景 4：到IPv6 Internet的IPv4网络

在不久的将来，这不是一个可行的案例；此场景可能仅在IPv6/IPv4过渡早期阶段后一段时间才会发生

无

场景 5：IPv6网络到IPv4网络

IPv4网络和IPv6网络都位于同一组织内

与场景1类似，适用于内联网而非互联网

场景 6：IPv4网络到IPv6网络

与上文相同

与场景2类似，以内联网而非互联网为目标

场景 7：IPv6 Internet到IPv4 Internet

会因吞吐量低而受损

无

场景 8：IPv4 Internet到IPv6 Internet

没有可行的转换技术来处理无限IPv6地址转换

无

重要的故障排除命令，以防在实施NAT64时遇到任何问题

#show平台硬件qfp活动统计数据丢弃（以查看是否有nat64丢弃）

#show running-config |包括nat64（查看IOS上是否配置了所有内容）

#show平台硬件qfp主用功能nat64数据路径统计（检查丢弃计数器的原因）

#show平台硬件qfp主用功能nat64数据路径池（检查池配置是否正确）

#show平台硬件qfp主用功能nat64数据路径映射（检查并查看池到映射配置是否正确完成）

#show平台软件对象管理器F0 pending-ack-update（检查是否有挂起对象）