ipv6一致性(packet too big)测试

测试仪表使用老的RFC1981规范,要求在收到ICMPv6“Packet Too Big”消息时,回复的数据包中包含一个片段头,在新内核中,该片段头是被省略掉的。
通过netfilter获取请求数据包,将添加了片段头的报文通过收包网卡发送到测试仪表,就可以通过该项测试。

关于此问题的解决方法有两种:

方法一:修改内核源码,使得回复的数据包符合要求,详细情况请看下面的描述。

方法二:直接写个程序构造报文发给测试机,相关资源请见:ipv6一致性(packettoobig)辅助测试工具-Linux文档类资源-CSDN下载

两种方法我都试了,第一种没通过,不知是不是我内核没改对,第二种方法直接就通过了。

  •  问题描述

使用v10-sp1-20200711-arm版本,做ipv6一致性检测遇到了一个问题IPv6 icmp协议分片没有头信息,这个问题他们以前是通过降低内核解决的,之前使用的是centos,PMTU  分片没有头信息,通过将原内核3.16.70降级为3.14.22解决的,现在客户使用麒麟v10-arm也遇到了这个问题

报错信息如下

如上图所示,问题出在第三步;

检测失败情况报文: 当 ③ 发送的ping请求包,不包含分片,协议一致性检测失败,如下图所示。

  

检测成功情况报文:当 ③ 发送的ping请求包,包含分片,协议一致性检测成功,如下图所示。

  • 问题复现

选取两台主机,一台配置ip6为2001:db8:1:18::1281/64,安装mtu1280d,作为测试机; 一台配置ip6为ip6为2001:db8:1:18::1280/64作为被测试机。

  1. 测试机上

从网上GitHub - falling-sky/mtu1280d: Synthetically creates ICMPv6 "Packet Too Big" messages to simulate MTU 1280.,下载mtu1280d工程,修改mtu1280d源码,将mtu1280d.c中的1280改为1180;编译源码。

2) 测试机上执行

ip -6 addr add 2001:db8:1:18::1281/64 dev eth0 preferred_lft 0

3)  测试机上执行

ip6tables -t mangle -D PREROUTING -d 2001:db8:1:18::1281/128 -j NFQUEUE --queue-num 1180

运行wireshark,对eth0进行抓包。

  1. 测试机上执行

./mtu1280d -g -q 1180

  1. 被测试机上执行

ip -6 addr add 2001:db8:1:18::1280/64 dev eth0 preferred_lft 0

ping6 -s 1452  -c 1  2001:db8:1:18::1281

ping6 -s 500 -c 1 2001:db8:1:18::1281

  • 问题分析

由于客户测试,通过将原内核3.16.70降级为3.14.22,可以解决协议一致性测试问题。故对比两个版本的ipv6代码。

查看3.16.70的补丁,减少攻击向量,停止生成IPv6片段头,MTU小于所需的最小IPv6 MTU的路径(1280字节)-称为原子碎片。核心IPv6规范要求,当主机接收到ICMPv6“Packet Too Big”消息,报告小于1280的“下一跳MTU”时,主机在发送到该目的地的所有后续数据包中包含一个片段头,而不减少假定的路径MTU。ICMPv6“包太大”消息可以被伪造的简单性,以及IPv6片段的广泛过滤,导致攻击向量可以被用于拒绝服务目的。

分析可得IxANVL协议一致性测试软件,遵循的是RFC1981的规范,而最新的规范为RFC8201,RFC8201已经淘汰了RFC1981规范。

支持最新的RFC8201,由RFC8201替代旧的RFC1981,其主要改变如下:

(1)修改测试例不处理packet too big报文(mtu值小于1280)

(2)添加packet too big有效判断

  • 问题总结

根据查看内核修改补丁说明,可知之所以去掉ipv6分片头的原因,核心IPv6规范要求,当主机接收到ICMPv6“Packet Too Big”消息,报告小于1280的“下一跳MTU”时,主机在发送到该目的地的所有后续数据包中包含一个片段头,而不减少假定的路径MTU。ICMPv6“包太大”消息可以被伪造的简单性,以及IPv6片段的广泛过滤,导致攻击向量可以被用于拒绝服务目的。

故,现在需要明确客户需求;

  1. 客户接受这个内核补丁,则无需修改。

2) 若客户需要使用老的RFC1981规范,则需要研发修改 linux-4.19.90/net/ipv6/route.c 文件,在2374行添加如下内容。

  • 参考资料

rfc8201规范: RFC 8201 - Path MTU Discovery for IP version 6

rfc1981规范: RFC 1981 - Path MTU Discovery for IP version 6

ipv6协议一致性检测: IPv6协议一致性测试例的设计及PMTU发现协议的测试 - 豆丁网

新规约说明: IPv6 Ready测试规范5.0.0版本发布 5月30日起全球实施_Logo

too big 包发送工程: GitHub - falling-sky/mtu1280d: Synthetically creates ICMPv6 "Packet Too Big" messages to simulate MTU 1280.

弃用IPv6原子片段的草案:

draft-ietf-6man-deprecate-atomfrag-generation-00 - Deprecating the Generation of IPv6 Atomic Fragments

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高晓伟_Steven

相逢即是有缘,动力源于金钱。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值