1、 ICS 33.040.40 M32 中 华 人 民 共 和 国 通 信 行 业 标 准 YD YD/T 以太网接入方式下源地址验证技术要求 SLAAC 场景 Technical requirements of ethernet source address validation improvement for SLAAC (报批稿) -发布 - 实施中 华 人 民 共 和 国 工 业 和 信 息 化 部 发布 YD/T i 目 次 前 言 .III 1 范围 .1 2 规范性引用文件 .1 3 术语、定义和缩略语 .1 3.1 术语和定义 .1 3.2 缩略语 .2 4 简介 .3 5 原理
2、概述 .3 6 地址所有权仲裁的基本原理 .4 7 背景及相关协议 .4 8 概念数据结构 .5 8.1 绑定状态表( BINDING STATE TABLE, BST) .5 8.2 过滤表 ( FILTERING TABLE, FT) .6 9 绑定状态描述 .6 10 无状态地址分配源地址验证场景 .6 11 绑定锚属性 .6 11.1 “SAVI验证 ”属性 .7 11.2 “SAVI-RA-信任 ”属性 .7 11.3 “SAVI-SAVI”属性 .7 12 前缀配置 .7 13 绑定建立 .8 13.1 控制报文监听过程 .8 13.1.1 初始化 .8 13.1.2 从 DETE
3、CTION 状态的状态转移 .9 13.1.3 BOUND 状态之后 .9 13.2 “DAD监听 ”的状态机 .10 14 辅助绑定过程 .10 14.1 速率限定的数据触发绑定过程 .11 YD/T ii 14.1.1 “SAVI 数据触发 ”属性 .11 14.1.2 数据触发的绑定过程 .11 14.2 计数器触发的过程 .11 14.2.1 “SAVI 计数器触发 ”属性 .11 14.2.2 计数器触发的绑定过程 .12 14.3 扩展控制包监听过程 .12 14.3.1 “SAVI-扩展监听 ”属性 .12 14.3.2 扩展控制包监听过程 .12 15 过滤过程 .13 15.
4、1 数据包过滤 .13 15.2 控制包过滤 .13 16 地址冲突检测消息的格式及发送 .14 16.1 地址冲突检测 .14 17 绑定删除 .14 18 处理绑定锚断链事件 .14 19 地址检测的冲突处理 .15 20 检测中过滤 .15 21 绑定数限制 .15 22 组播侦听发现 MLD 的相关考虑 .16 23 对链路本地源地址绑定更宽容 .16 24 处理二层路径变化 .16 25 状态恢复 .16 26 相关常量 .17 27 安全考虑 .17 YD/T iii 前 言 本标准是以太网接入方式下源地址验证技术要求系列标准之一,本系列标准的名称和结构 预计如下: IP源地址验证
5、技术要求框架 以太网接入方式下源地址验证技术要求 框架 以太网接入方式下源地址验证技术要求 DHCPv4场景 以太网接入方式下源地址验证技术要求 DHCPv6场景 以太网接入方式下源地址验证技术要求 SLAAC场景 以太网接入方式下源地址验证技术要求 多种地址分配方式共存场景 公众无线局域网接入方式下源地址验证技术要求 以太网接入方式下源地址验证技术要求 管理信息库 本标准 按照 GB/T 1.1-2009给出的规则起草。 请注意本文件的某些内容可能涉及专利。本文件的发布机构不承担识别这些专利的责任。 本标准由中国通信标准化协会提出并归口。 本标准起草单位: 清华大学 。 本标准主要起草人:
6、毕军、姚广、吴建平、胡虹雨、徐天然、李丹等。 YD/T 1 以太网接入方式下源地址验证技术要求 SLAAC 场景 1 范围 本标准规定了以太网接入方式下无状态地址分配场景的源地址验证技术要求,主要包括 无状态 IP 地址和绑定锚之间建立绑定锚的过程、其他辅助的绑定过程、绑定表用于报文过滤的过程等。 本标准适用于以太网接入方式下无状态地址分配场景的源地址验证。 2 规范性引用 文件 下列文件对于本文件的应用是必不可少的 。 凡是注日期的引用文件 , 仅所注日期的版本适用于本文 件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。 IETF RFC3307 IPv6 组播地址分
7、配 指导 Allocation Guidelines for IPv6 Multicast Addresses IETF RFC4429 IPv6 乐观重复地址 检测 Optimistic Duplicate Address Detection ( DAD) for IPv6 IETF RFC4861 IPv6 邻居发现协议 Neighbor Discovery for IP version 6 ( IPv6) IETF RFC4862 IPv6无状态地址自 动分配协议 IPv6 Stateless Address Autoconfiguration, SLAAC IETF RFC5227 I
8、Pv4 地址冲突检测 IPv4 Address Conflict Detection IETF RFC6620 本地 IPv6 地址的先 到先服务源地址验 证改进方法 FCFS SAVI : First-Come, First-Served Source Address Validation Improvement for Locally Assigned IPv6 Addresses IETF RFC7039 源地址验证改进框 架 Source Address Validation Improvement ( SAVI ) Framework IETF RFC7113 IPv6路由器广播保
9、护( RA-Guard)的 Implementation Advice for IPv6 Router Advertisement YD/T 2 实现建议 Guard 3 术语 、 定义和缩略语 3.1 术语和定义 下列术语和定义适用于本文件。 3.1.1 源地址验证 Source address validation 在 IP报文路由寻址过程中,对其携带的源地址的有效性进行验证。 3.1.2 接入网源地址验证 /源地址验证增强 Source address validation improvement 在主机所在接入网执行的源地址验证技术 , 将不允许主机假冒任意非合法分配或配置的地址 。
10、是源 地址验证的第一步关卡,因此谓之源地址验证增强。 3.1.3 绑定表 Bindings 监听地址分配过程,形成的合法 IP地址与对应绑定锚的组合信息。 3.1.4 绑定锚 Binding anchor 主机的网络连接部件的链路层属性 , 是不容易被假冒的属性 , 可以是多个属性的组合 , 如主机 MAC地址 +交换机端口 。 3.2 缩略语 下列缩略语适用于本标准。 ARP Address Resolution Protocol 地址解析协议 ARP RES ARP Response ARP响应 BST Binding State Table 绑定状态表 YD/T 3 DHCP Dynam
11、ic Host Configuration Protocol 动态主机配置协议 FCFS First-Come, First-Served 先到先服务 Gra ARP REQ Gratuitous ARP Request 免费 ARP请求 MLD Multicast Listener Discover 组播侦听发现 NA Neighbor Advertisement 邻居通告消息 ND Neighbor Discovery 邻居发现 NDP Neighbor Discovery Protocol 邻居发现协议 RA Router Advertisement 路由通告消息 SAVI Source
12、 Address Validation Improvement 源地址验证增强 SLAAC Stateless Address Autoconfiguration 无状态地址分配协议 STP Spanning-Tree Protocol 生成树协议 RSTP Rapid Spanning Tree Protocol 快速生成树协议 TRILL Transparent Interconnection of Lots of Links 多链接透明互联 4 简介 本标准描述了在无状态地址和绑定锚之间建立绑定关系的过程(参考 RFC7039( SAVI 技术框 架 ) ) 。关于此过程的其他相关细节也
13、在本标准中指定。 这种绑定关系可以用来过滤带有假冒 IP 地址的数据包。在 RFC7039( SAVI 技术框架)中定义了 如何根据其环境和配置使用这种绑定关系,同时也指定了锚点的定义和示例。 这种绑定 方法一部分是受到了 SAVI-FCFSRFC6620工作的启发。 与 SAVI-FCFS 中基于数据触发过 程有所不同的是,此规范主要集中于控制平面触发过程。辅助绑定过程是为了弥补控制包监听的不足 。 5 原理概述 YD/T 4 设计 本机制 (本标准详细定义的 ) 是为了提供一种主机 级别粒度的 IP 源地址验证 , 用以作为 BCP38 的补充 。 该 机制部署在接入设备上 (包括接入交换
14、机 、 无线接入点 /控制器等 ) , 主要执行 NDP/ARP 监听 以建立无状态 IP地址和对应锚点之间的绑定关系。这种绑定关系可以用来验证数据包中的源地址。 6 地址所有权仲裁的基本原理 在无状态场景中 , 节点可以给自己 “分配 ”地址 , 并且执行不可靠的重复地址检测来检查地址是否 正在被使用。 对于 IPv6 地址而言,由于其庞大的地址空间,冲突发生的几率非常小, 因此 DAD 不可靠 性在现实中并不严重。然而 , (一旦发生 , ) 则 DAD 的不可靠性使得源地址验证很麻烦。 对于 SAVI 设备 来说,当冲突发生时确定哪个节点可以使用该地址是非常困难的、甚至是不可能的。 目前
15、, SAVI-FCFS使用 “先到先服务 ”的原则来确定地址的所有权。这个原则是正确的,但存在的 问题是如何确定哪个节点是最先使用地址的节点。 由于 DAD的不可靠性,最先给自己分配地址的节点 , 可能不是最先使用该地址发送流量( 被 SAVI 设备探测到)的节点。 SAVI-FCFS 要求设备发送探测消息 来确定地址是否正在被其他节点使用 。 然而 , 这一工作可能是徒劳的 , 因为假冒节点可以应答任何探测 消息,而且探测信息仍然不一定能可靠地到达预期目标节点。 经过长时间的尝试,最终发现, 由于 DAD 和 ND 的不可靠性,最佳仲裁策略并不存在。因为一套完 美仲裁策略必须依赖 一个可靠的
16、 DAD。可以通过 简单的推论来证明这一点 : 最佳仲裁方案 =最先给自己 分配地址获得该地址的所有权 =最先 执行 DAD 的节点得到此地址 =仲裁者必须知道谁最先执行 DAD=DAD必须可靠地 被 SAVI设备监测到 。 (此证明也可逆推 。 ) 最终 , 本标准发现寻找最佳仲裁方案都是徒劳的 。 它与选择根据数据触发还是控制包触发无关 。 除 非无状态分配变为可靠的,否则没有解决方案是安全的。 在本标准中,为解决地址所有权冲突问题,本标准决定遵循 RFC4862-无状态地址分配的唯一标 准。这意味着,只要 一个节点成功地完成了 DAD 操作( 包括在数据触发情况下 SAVI 设备执行的
17、DAD 操 作 ) ,此地址就必须与其绑定。即允许一个地址与多个锚点进行绑定,解决了地址所有权的冲突问题。 绑定只有在生存周期到期时才会被删除,该生存周期即为 从 RA 中学到的前缀生存时间。于是本标准实 现了一个简单的解决方案,其安全性依赖于 RFC4862的可靠性。 7 背景及相关协议 YD/T 5 此 机制是 SAVI 解决方案 RFC7039( SAVI 技术框架)的一个实例,专门用于无状态的地址情况, 包括 IPv6无状态自动配置地址、 手动配置的非静态 IPv6及 IPv4地址。 在 IPv6 中, IPv6 无状态自动配置 RFC4862是一种广泛部署的地址分配机制。节点可以自主
18、生成 一个地址,并使用重复地址检测( RFC4862)来自动配置该地址。 RFC4862明确要求任何 IPv6 地址 都必须执行重复地址检测, 包括 DHCPv6地址。 这是基于控制包监听的 SAVI解决方案的基础。 RFC4861中定义了邻居发现协议, 这是 IPv6地址分配的一个必要组成部分。 IPv4没有无状态的自动配置机制, 因为 IPv4自动生成地址的冲突几率比较大。但是,在某些场景 下 , 允许接口在指定前缀范围内配置地址 , 而不是为每个接口都分配一个静态地址 。 这些场景下的地址 分配方法,本标准也认为其是无状态分配方法。 RFC5227中定义检测 IPv4 地址冲突的过程。目
19、前还不需要实现。但该 特性对于判定链路上 IPv4 地址的唯一性非常有用。考虑到并不是所有的操作系统都支持 RFC5227,本标准设计的解决方案会兼 容不支持 RFC5227的操作系统。 8 概念 数据结构 本章对此机制中涉及的概念数据结构进行描述。 两个主要的数据结构分别用来记录绑定关系和它们的状态。考虑到数据平面和控制平面的分离,两 个数据结构之间存在冗余。 8.1 绑定状态表( BINDING STATE TABLE, BST) 这张表包含源地址和绑定锚之间的绑定状态, 下表 1 为一个 BST 实例。条目以绑定锚 和源 IP 地址 为键 。 每个条目都有一个使用期限域来记录该条目余下的
20、使用期限 , 以及一个状态域来记录该绑定关系 的状态。 表 1 BST实例 绑定锚 地址 状态 使用期限 A IP_1 BOUND 65535 YD/T 6 A IP_2 BOUND 10000 B IP_1 BOUND 1 8.2 过滤表 ( FILTERING TABLE, FT) 这张表包含绑定锚和地址之间的绑定关系,绑定锚为键, 下表 2 为 FT 的一个实例。这张表不包含 绑定关系的任何状态。这张表只用于过滤报文。 “访问控制列表 ”可以被视为这张表的一个实例。 表 2 FT实例 绑定锚 地址 A IP_1 B IP_2 9 绑定状态描述 本章对此机制涉及的绑定状态进行描述。 a)
21、DETECTION 主机( 或 SAVI 设备)发送了一条 “免费 ARP 请求 ”或 “重复地址检测邻居请求 ”等 待对绑定地址的副本检测结果; b) BOUND 地址已通过副本检测,并与绑定锚绑定; 10 无状态 地址分配 源地址验证 场景 下图 1展示了允许使用无状态地址分配网络中的主要元素。节点无需任何其他服务器的帮助就可以 自己生成地址。其他地址分配机制也可以在该网络中使用。 YD/T 7 图 1 无状态场景 11 绑定锚 属性 本章对此机制中涉及的绑定锚属性进行详细说明。 RFC7039( SAVI技术要求框架)对绑定锚进行了定义。每个绑定锚的属性都是可配置的。缺省状 态下 , 绑
22、定锚没有属性 。 可以给一个绑定锚配置一个或多个兼容的属性 。 不过 , 绑定锚也可以没有属性 。 在本方案中,如果一个绑定锚没有属性,则来自该绑定锚的 “路由器广播 ”消息必须被丢弃。但是 , 其他数据包不应该被丢弃。 11.1 “SAVI验证 ”属性 当且仅当来自一个绑定锚的流量必须执行源地址验证时,必须为该绑定锚设置 “SAVI验证 ”属性。 带有该属性的绑定锚上的报文过滤方法将在“ 第 15章“中进行描述。 11.2 “SAVI-RA-信任 ”属性 当且仅当一个绑定锚与一台可信路由器相关联时,应该为其设置此属性。 在一台启用了本 方案的 SAVI 设备上,可能不存在带有该属性的绑定锚。
23、这就说明只允许本地链路 地址 , 或前缀验证没有启用 , 或只允许手动配置前缀 。 不是来自这些绑定锚 的 “路由器广播 ”消息必须 被丢弃。 11.3 “SAVI-SAVI”属性 当且仅当一个绑定锚 与另一台 SAVI 设备相关联时,应该为其设置此属性。所有来自带有此属性绑 定锚的流量不用检查将直接转发。 也可以给其他绑定锚设置此属性,如果管理员不打算验证来自它们的流量。提示:设置此属性后, DHCP服务器的消息和 “路由器广播 ”消息也是受信任的。 此属性与 “SAVI验证 ”存在互斥关系。 12 前缀 配置 由于 “重复地址检测( DAD) ”没有检查地址前缀有效性的功能,因此在本套解决
24、方案中,建议给 本地链路配置正确的地址前缀。如果没有配置正确的前缀, SAVI 设备可能会把绑定锚和使用虚假前缀 YD/T 8 的地址进行绑定 。 即使在网络的三层设备上可以部署前缀级别的过滤机制 , 例如入口过滤 , 本地链路上 的假冒还是不能避免的。 本标准建议 设置 3个前缀范围: a) IPv4前缀:合法的各种类型 的 IPv4地址范围。可以手动设置。 b) IPv6前缀 : 合法的 SLAAC和手动配置 的 IPv6地址范围。可以通过监听来自带有 “SAVI-RA-信 任 ”属性端口的 RA消息、 DHCP-PD、或手动配置来设置。 c) FE80: /64 必须被设为可用前缀 :没
25、有必要特意展示这些前缀范围。但在建立绑定时应该用 这些约束作初步检查。 对安全的考虑,参考其他论述。 13 绑定建立 本章定义基于控制报文监听建立绑定关系的过程。此绑定过程仅为带有 “SAVI 验证 ”属性的绑定 锚而设计。 13.1 控制报文监听过程 13.1.1 初始化 13.1.1.1 触发事件 从绑定锚接收到 “免费 ARP请求 ”或 “重复地址检测邻居请求 ”。 13.1.1.2 事件验证 SAVI设备检查 BST的如下情况: 如果建立一个新的绑定条目,绑定条目数是否会超出限制。 13.1.1.3 对应动作 如果检查通过 , 则该数据包必须被转发 。 同时生成一个新的条目 , 状态设为 DETECTION, 使用期限 分别设为 MAX_ARP_DELAY或 MAX_DAD_DELAY, 具体如下表 3所示。 表 3 检测时 BST中的绑定条目 YD/T 9 绑定锚 地址 状态 使用期限 A Addr DETECTION MAX_ARP_DELAY MAX_DAD_DELAY 同时在 FT表中插入一个新条目。 13.1.2 从 DETECTION 状态 的状态 转移 13.1.2.1 触发事件