RFC7599 MAP-T

本文介绍了一种解决无状态的IPv6-IPv4转换的解决方案,提供给共享和非共享的IPv4和IPv6网络互通的连接。

1、介绍:

最初的IPv6网络服务提供商,如RFC6219的部署所得到的经验,表明可以成功过度到IPv6,并且依然支持对于没有点对点双栈的残留IPv4用户。

本文介绍的地址+端口映射转换,缩写为(MAP-T)架构就是一种双重无状态,基于NAT64的解决方案。其建立在现有的[RFC6145]有状态NAT64的技术,还有[RFC7597]定义的有状态地址和传输层端口映射的MAP-E技术。MAP-T和MAP-E的区别是,MAP-T是IPv4-IPv6装换,而不是封装。

4、架构:

图1展示的是MAP-T的整体架构图。

  • 一个MAP的CE,需要支持NAT44,将指定IPv4地址的特定TCP/UDP端口做NAT44的转换。
  • 一个无状态的NAT64转换,允许将IPv4和一段端口范围映射到IPv6地址。
    RFC7599 MAP-T_第1张图片
    每一个MAP-T的CE都被分配了一个常见的IPv6前缀,与之相结合的是MAP域的设定,及MAP程序,允许IPv4和IPv6的计算。CE还需要配置一个PSID,用于标识特定端口范围。
    每个CE负责将报文从私有IPv4地址空间转发到MAP域的IPv6网络。IPv4和IPv6的转换使用的是无状态的NAT64,通过MAP算法做地址转换。

MAP-T架构基于如下关键特性:
1、IPv4和IPv6地址映射编码为MAP rule,在第5节详述
2、MAP IPv6地址标识符,在第6节详述
3、MAP-T转发行为,在第8节详述

5、MAP 规则

MAP-T地址映射算法规则和MAP-ERFC7597 第5章节中的一致。区别是,本文定义了和MAP-T域外的IPv4地址进行转发的行为,而不是MAP-E规范中的章节5.4

5.1 目的地址在MAP域外

MAP节点发送出的IPv4数据流,源IPv4地址基于BMR算法转换成MAP域内的IPv6地址,目的地址是基于FMR规则得到。
MAP域外的IPv4地址,通过将IPv4嵌入IPv6地址,使用BR的前缀而得到。CE发送到这些地址的任何报文,源IP都需要改为CE在MAP域的地址,目的IP都改为嵌入入IPv4的IPv6地址。这个地址映射是基于DMR,定义为依据一个或多个BR的前缀得到,用于外部连接。一个典型的MAP-T CE会将上述规则配置为默认路由规则。一个BR会用该规则将外部IPv4地址翻译到IPv6域内。
DMR IPv6前缀长度默认必须为64bit,不能超过96bit。IPv4的映射默認情況下,IPv6前綴後面的目標將遵循/ 64 [RFC6052]的規則。IPv4后面的内容都填0。

摘自华为文档1
DMR(可选规则)
BMR规则和FMR规则对于MAP-E和MAP-T均适用,但在DMR规则上,MAP-E和MAP-T是不同的:
MAP-T:DMR(Default Mapping Rule)代表报文的目的IPv4地址为MAP Domain域外的地址,通过BR进行转发到域外。DMR含有两个参数Rule-IPv6-prefix和Rule-IPv4-prefix。Rule-IPv6-prefix的值是MAP BR的IPv6前缀,Rule-IPv4-prefix值是0.0.0.0/0,即在MAP-CE上匹配IPv4路由时作为默认路由适用的映射规则。如下图所示,在使用这条规则后,目的IPv6地址将通过DMR配置的Rule-IPv6-prefix+目的IPv4地址组成目的IPv6地址。
图5-5 目的IPv6地址格式示意图
在这里插入图片描述
MAP-E:DMR(Destinations outside the MAP domain),更加明确的表征了规则的意义。由于MAP-E中是IPv6报头嵌套IPv4地址,因此对于报文中目的IPv4地址是MAP域外的地址,只需要再封装一层BR的IPv6地址即可,到达BR是直接剥掉IPv6报头就可以还原目的IPv4地址。因此在MAP-E中Destinations outside the MAP domain就是配置MAP-BR的IPv6地址。

6、IPv6接口标识符

接口标识符结构定义如下:
在这里插入图片描述
如果是用IPv4前缀,则从右填0补齐到32bit,PSID则从左填0补齐到16bit。
如果分配了IPv4-prefix或者独享的IPv4-address时,则没有Port-Set ID值可以提取,则此处的Port-Set ID字段填写“0x0000”。
如果终端用于的IPv6前缀长度超过64,接口标识符的高位被前缀覆盖。

7、MAP-T设定

对于特定的MAP域,CE和BR都必须配置如下参数,同一个MAP-T域内的参数都是一致的。

  • BMR必须配置,FMR是可选的,包括规则的IPv6前缀,IPv4前缀,及嵌入地址的长度
  • BR的IPv6前缀
7.1、MAP CE

同一个MAP-T域内的CE的MAP配置参数都一样,可以通过DHCPv6,或TR069,NETCONF,或手动配置。
除了MAP配置参数,CE还需要通过标准方式获取IPv6前缀,用于访问互联网。

8、MAP-T报文转发

8.1、CE端的IPv4 到IPv6

MAP-T CE收到IPv4报文后,应该执行NAPT44,并建立需要的NAT44的绑定。IPv4数据包以最长的IPv4目标地址为准+端口匹配MAP规则选择,然后确定参数用于后续的NAT64操作。
所有数据流默认都匹配DMR,并使用DMR参数做无状态的NAT64操作。
数据流匹配上FMR,则使用FMR参数做NAT64的操作。在所有的情况,CE的MAP ipv6地址做为源地址。

8.2、CE端的IPv6 到IPv4

MAP-T CE收到IPv6报文后,先执行常规的IPv6操作(过滤,路由等)。只有当报文地址是CE的MAP-T的IPv6地址,并且报文源地址能匹配上DMR或FMR的IPv6 MAP规则前缀,则使用最长匹配进行处理。
CE必须检查每个报文的传输层目的端口,是处在CE BMR配置范围内的白名单。
当收到的报文的源地址,匹配上了FMR中的前缀,CE还需要对源端口做检查,确认是否在配置的范围内。如果报文的源端口发现在允许的范围外,CE需要丢弃该报文,并发送ICMPv6(目的不可达)。CE NAT64函数需要计算IPv4源地址和目的地址。IPv4目的地址是从IPv6地址及BMR中存储的信息计算得到。
得到的IPv4报文随后经过CE做NAPT44的转发。比如路由表, 或nf_conntrack等。

10. 分片和路径发现

附录:MAP-T转换的例子

例子1、
BMR:
终端IPv6前缀:2001:db8:0012:3400::/56
BMR规则: {2001:db8:0000/40 (规则IPv6前缀 )192.0.2.0/24 (规则IPv4前缀)16 (规则EA bit长度)}
PSID长度: (16-(32-24))=8,EA-bit长度 - Pv4后缀长度
PSID偏移:6
一个MAP节点,通过BMR,确定IPv4地址和端口如下:
EA bit偏移:40(前面是IPv6前缀)
IPv4后缀长度p:8
IPv4地址:192.0.2.18
PSID起始:40 + p = 40 + 8 = 48
PSID:0x34
可选的端口范围:6bit 0000 01 8bit 0011 0100 2bitM 00
1232-1235,2256-2259
BMR得到的源IPv6地址为:
2001:db80:0012:3400:0000:C000:0212:0034.
下图中的DEST-MAP-IPv6-addr有误。其他部分的计算是正确的。
RFC7599 MAP-T_第2张图片

例子2、BR:

例子3、
FMR(RFC上怀疑是写错了,应该是DMR):
一台在MAP-T CE后面的IPv4主机,IPv4地址为10.2.3.4,会通过DMR将报文转换成IPv6:
DMR规则:{2001:db8:ffff::/64(IPv6规则前缀), 0.0.0.0/0(IPv4规则前缀)}
IPv4源地址:192.0.2.18
IPv4目的地址:10.2.3.4
IPv4源端口:1232
IPv4目的端口:80
MAP-CE IPv6地址:2001:db8:0012:3400:0000:C000:0212:0034
IPv6目的地址为:2001:db8:ffff:0:000a:0203:0400:: 参考图5-5

例子4、
终端用户IPv6前缀:2001:db8:0012:3400::/56
BMR规则:{2001:db8:0012:3400::/56 IPv6前缀,192.0.2.1/32 IPv4前缀,0 EA-bit长度}
PSID长度:0 共享率为1
PSID偏移:N/A
MAP节点,根据BMR或FMR,决定IP和端口如下:
IPv6 suffix长度:32-32=0
IPv4地址:192.0.2.18
PSID起始:0
PSID长度:0
PSID:NULL
MAP CE出口的IPv6地址为:2001:db8:0012:3400:0000:C000:0201:0000

例子5、没有嵌入地址的规则,地址共享率为256
终端用户IPv6前缀:2001:db8:0012:3400::/56
BMR规则:{2001:db8:0012:3400::/56 IPv6前缀,192.0.2.18/32 IPv4前缀,0 EA-bit长度}
PSID长度:(16-(32-24))=8,共享率为256(由DHCPv6分配)
PSID偏移:6
PSID:0x20(由DHCPv6分配)
MAP节点,根据BMR或FMR,决定IP和端口如下:
IPv4后缀bit:32-32=0
IPv4地址:192.0.2.18
PSID起始:0
PSID长度:0
PSID:0x34
可用端口:1232~1235。。。
MAP CE的IPv6地址:2001:db8:0012:3400:0000:C000:0212:0034

MAT-master使用方法

ivictl -h
MAP netfilter device controller utility v1.0
Usage:  ivictl -r [rule_options]
        (used to insert a mapping rule)
        ivictl -s [start_options]
        (used to start MAP module)
        ivictl -q
        (used to stop MAP module)
        ivictl -h
        (used to display this help information)

rule_options:
        -p --prefix4 [PREFIX4/PLEN4]
                specify the ipv4 prefix and length
        -P --prefix6 [PREFIX6/PLEN6]
                specify the ipv6 prefix and length
        -z --psidoffset PSIDOFFSET
                specify the psid offset parameter in GMA
        -R --ratio RATIO
                specify the address sharing ratio in GMA
        -d --default
                specify the ipv4 prefix is '0.0.0.0/0' instead of using '-p 0.0.0.0 -l 0'
        -E --encapsulate
                specify the mapping rule is used for MAP-E
        -T --translate
                specify the mapping rule is used for MAP-T

start_options:
        -i --dev4 DEV4
                specify the name of ipv4 device
        -I --dev6 DEV6
                specify the name of ipv6 device
        -c --mssclamping MSS
                specify the reduced tcp mss value
        HGW mode:
                -H --hgw
                        specify that IVI is working as home gateway
                -N --nat44
                        specify that IVI HGW is performing NAT44
                -o --psid PSID
                        specify the local PSID of the HGW, default is 0
                -a --address [ADDRRESS/PREFIXLENGTH]
                        specify the ipv4 address and mask used by the HGW
                -A --publicaddr [PUBLICADDR/PUBLICPREFIXLENGTH]
                        specify the public ipv4 address and mask used by the HGW in NAT44 mode
                        always used with -N (--nat44)
                -P --prefix6 [PREFIX6/PLEN6]
                        specify the local IVI prefix and length used by the HGW
                -z --psidoffset PSIDOFFSET
                        specify the local psid offset parameter in GMA
                -R --ratio RATIO
                        specify the local address sharing ratio in GMA
                -X --noeabits
                        specify that the HGW doesn't use eabits to constitute the IPv6 address
                -E --encapsulate
                        specify that the HGW supports MAP-E mode
                -T --translate
                        specify that the HGW supports MAP-T

参考协议:
[RFC6145]
[RFC7597]


  1. https://support.huawei.com/enterprise/zh/doc/EDOC1100055154/4b836e27 ↩︎

你可能感兴趣的:(网络,网络)