「IPv6 Transition」- Translation / NAT64(NAT IPv6-to-IPv4)

  CREATED BY JENKINSBOT

问题描述

当 IPv4 网络的节点需要直接与 IPv6 网络的节点进行通信时,默认情况下是行不通的,因为两个协议栈无法兼容;

解决方案

但是借助一台设备,由该设备来实现 IPv6 与 IPv4 的互转,那么上述通信就可以实现。NAT64 是一种将 IPv6 网络地址转换成 IPv4 网络地址的 NAT 技术;

原理简述

要进行 NAT64 处理的报文前缀需要提前被定义。简而言之,通过在 NAT64 Router 上预先配置 NAT64 Prefix,然后 NAT64 Router 判断数据 IP-Packet.DST-IPv6-ADDR 是否匹配 NAT64 Prefix,以此决定是否进行地址转换;

针对设备接收到的 IPv6-Packet 的 Prefix 信息:
1)若为设备中定义的 NAT64 Prefix,说明报文的目的地址是 IPv4 网络,报文将经过 NAT64 处理后被转发至 IPv4 网络;
2)若非设备中定义的 NAT64 Prefix,说明报文的目的地址是 IPv6 网络,报文将不经过 NAT64 处理,直接被转发至 IPv6 网络;

特性特征

WIP

应用场景

IPv6 网络用户,访问 IPv4 网络服务器的应用场景;
1)在向 IPv6 网络演进的前期,运营商为用户提供 IPv6 单栈接入能力,而很多 Internet 服务器还是 IPv4 的,不具备双栈能力。这种情况下,运营商提供 NAT64 设备,使 IPv6 单栈用户可以访问 IPv4 服务器;
2)该场景下,运营商只为用户分配 IPv6 地址,NAT64 设备支持双栈,纯 IPv6 的访问通过 IPv6 路由来实现;而 IPv6 访问 IPv4 业务通过 NAT64 映射技术来完成;
3)当 IPv6 用户较少且 IP 地址固定时,可以通过静态 NAT64 映射实现 IPv6 访问 IPv4 业务;当网络中存在大量 IPv6 用户且 IP 地址不固定时,可以通过动态 NAT64 映射实现 IPv6 访问 IPv4 业务;

IPv4 网络用户,访问 IPv6 网络服务器的应用场景;
1)在向 IPv6 网络演进的后期,许多服务提供商已经开始提供 IPv6 服务。而 Internet 上还有很多 IPv4 单栈用户存在,为了保留住用户,服务提供商提供 NAT64 设备,使 IPv4 单栈用户可以访问服务器;
2)该场景下,服务提供商只为服务器分配 IPv6 地址,接入设备不需要升级。NAT64 设备部署在出口,必须支持双栈,其中纯 IPv6 的访问通过 IPv6 路由来实现;而 IPv4 对 IPv6 的访问通过静态 NAT64 映射技术来完成;

转换类型

NAT64 分类:

基于 PAT 方式的 NAT64 转换:
NAT64 过程中对于地址和端口同时进行转换操作,[IPv6 地址,端口]与[IPv4 地址,端口]相互映射。即,转换前后的地址是多对一的关系,多个 IPv6 地址可以转换成同一个 IPv4 地址(映射关系通过端口的不同来区分)。该方式是常用的 NAT64 转换方式;

基于 NO-PAT 方式的 NAT64 转换:
NAT64 过程中对于地址进行转换操作,不对端口进行转换操作,[IPv6 地址]与[IPv4 地址]相互映射。即,转换前后的地址是一对一的关系;

NAT64 Prefix

Router 通过判断 IPv6.DST-ADDR 是否匹配 NAT64 Prefix 来初步判断是否对该 IPv6 报文进行 NAT64 处理;

前缀分类

NAT64 前缀分为两种形式:

1)知名前缀:即 64:FF9B::/96,缺省情况下已存在,无需配置(可理解为预配);

2)自定义前缀:前缀长度为 32、40、48、56、64 或 96;

根据前缀长度不同,IPv4-ADDR 嵌入 IPv6-ADDR 时,嵌入的位置存在差异,具体差异如图所示;
1)PL(Prefix Length)表示前缀长度;
2)U:为保留位,8 bit,取值必须为 0;
3)Suffix:表示后缀,可以任意取值,设备不处理该字段;
4)v4:即内嵌到 IPv6-ADDR 中的 IPv4-ADDR;

以 IPv4-ADDR=192.168.0.1、NAT-Prefix=2001:DB8::/64 为例,该 IPv4-ADDR 对应的 IPv6-ADDR 为 2001:DB8:::A800:100:0;
当配置 DNS64 服务时,需要确保 NAT64 Prefix(及前缀长度)要与 NAT64 设备上的配置相同,以保证能够完成 DNS 请求;

动态 NAT64 映射

当网络中存在大量 IPv6 用户且 IP 地址不固定时,IPv6 用户访问 IPv4 Server,报文到达设备后,设备会将 IPv6 地址动态转换为地址池中的 IPv4 地址,并将 IPv6 报文转换为 IPv4 报文,发送给 IPv4 Server,实现 IPv6 用户访问 IPv4 业务;

动态 NAT64 映射流程

IPv6 单栈用户发起远端服务的 AAAA DNS 请求(example.com);

DNS64 收到请求报文后,先解析 AAAA 请求,如果解析不到 IPv6 地址,再解析 A 请求,通过解析发现此服务地址为 IPv4 地址(1.1.1.1),根据配置的 Prefix64::/n(64:FF9B::/96),合成 NAT64 地址(64:FF9B::101:101),然后发给用户,完成地址解析;

用户收到 DNS64 的回复报文后,把解析的地址作为目的地址发往远端服务器;

NAT64 设备收到用户发出的 IPv6 报文后,使用地址转换算法提取出 IPv6 报文中的 IPv4 地址(1.1.1.1),以此 IPv4 地址作为 IPv4 报文的目的地址。然后根据 NAT64 策略配置的映射关系,以 NAT 地址池中的地址为 IPv4 报文的源地址(2.1.1.10),将 IPv6 报文转换为 IPv4 报文,发送给 IPv4 网络中的服务器。并生成有地址对应关系的会话表;

IPv4 服务器收到报文后,回复响应报文;

NAT64 设备收到 IPv4 网络中服务器的响应报文后,根据会话表将 IPv4 报文转换为 IPv6 报文,然后发送至 IPv6 用户;

Session Table

在此场景中:
1)NAT64 设备通过 IPv6 到 IPv4 的流量触发创建会话表,并记录地址映射关系;
2)IPv4 到 IPv6 的流量匹配会话表后,查找地址映射关系进行反向回复;

NAT64 Firewall 的 Session Table:

静态 NAT64 映射

静态 NAT64 通过静态配置 IPv6 和 IPv4 地址的映射关系,不需要刷新也不老化,一直存在。这样 IPv6 到 IPv4 以及 IPv4 到 IPv6 的流量都能够触发创建会话表,这不仅可以实现 IPv6 用户访问 IPv4 服务器,也为 IPv4 用户访问 IPv6 服务器提供了一种方案;
IPv6 用户访问 IPv4 业务时,设备将报文的目的 IPv6 地址静态映射为 IPv4 地址;IPv4 用户访问 IPv6 业务时,设备将报文的目的 IPv4 地址静态映射为 IPv6 地址;

静态 NAT64 映射流程

IPv4 用户向 DNS 发起 A 请求(example.huawei.com)。

DNS 收到请求报文后,解析域名对应的 IPv4 地址 2.1.1.10(A 请求如果无法解析 IPv4 地址,报文将丢弃。此场景中,域名与地址关系一般已经提前在 DNS 设定好),然后发送回复报文给用户。

用户收到 DNS 的回复报文后,把解析的地址作为目的地址发往远端服务器。

NAT64 设备收到用户发出的 IPv4 报文后,根据事先设置好的静态映射关系(会生成 Server-Map 表),把报文的目的 IPv4 地址转换成对应的 IPv6 地址 2001:DB8::2,以此 IPv6 地址作为 IPv6 报文的目的地址,把 IPv4 报文的源 IPv4 地址与设置好的 NAT64 前缀合成 IPv6 报文的源地址(64:FF9B::101:101),完成 IPv4 报文到 IPv6 报文的转换,发送给 IPv6 网络中的服务器。并生成会话表。

服务器收到报文后,回复响应报文。

NAT64 设备收到 IPv6 网络中服务器的响应报文后,根据会话表将 IPv6 报文转换为 IPv4 报文,然后发送至 IPv4 用户;

Session Table

NAT64 Firewall 的 Session Table:

配置案例

TODO !!! NETWORK IPv6 Transition / NAT64