IPv6 Ready Logo
IPv6 Ready Logo是一项国际认证计划,提供一个全球通用的规范,验证IPv6产品的可部署和应用性,为遵守这些规范的厂商颁发IPv6 Ready Logo证书,为企业采购硬件设备提供参考。
IPv6 Ready Logo共有5个分类:Core Protocols、CE Router、DHCPv6、IPSecv6、SNMP。其中Core Protocols是最通用的认证,所有厂商都会申请。
Core Protocols分为6个部分:
- IPV6基础协议(Internet Protocol Version 6(IPv6)Specification)
- IPv6邻居发现协议(Neighbor Discoveryfor IP version 6(IPv6))
- IPv6无状态地址自动配置协议(IPv6 Stateless Address Autoconfiguration)
- IPv6路径MTU发现协议(Path MTU Discovery for IP version 6)
- ICMPv6协议(Internet Control Message Protocol(ICMPv6)for the Internet Protocol)
- IPv6互通(lPv6 Interoperability)
其中,前5项被称为一致性(Conformance),考察不同厂商的产品对IPv6核心协议的应用是否一致。考察通过的设备,在和其他厂商进行IPv6通信时才不会出错。考察的标准根据RFC制定,所以是非常权威的。
Phaze指的是IPv6 Ready Logo委员会的Phaze,最初成立的时候(Phaze 1)没有那么复杂的认证内容,在2011年11月后,才建立并完善了现在的认证内容(Phaze 2)。直至现在,该认证的版本也在不断更新,最新的是2024年6月的5.1.3。
在中国大陆的认证工作由天地互连信息技术有限公司负责。
一致性(Conformance)
由于IPv6比IPv4多了巨量的特性,且许多特性的规定并不严格,会导致报文在不同厂商的设备之间传递时出现偏差,比如忽略了不该忽略的报文、不该发送报文却发送了报文、发送的报文里某一字段的值不正确等。一致性测试的目的就是消除各厂商的差距,让它们更好地协同工作。
接下来介绍测试环境与方法。
环境搭建
硬件需要一台有3个网口的PC或服务器,直接安装或者虚拟机安装freebsd 8,虚拟机要将3个网口直通/桥接,开混杂模式。
测试基于v6eval这个测试工具,测试脚本基于perl,由于freebsd 8没有pkg包管理,常用工具命令都需要编译/usr/ports里的软件(而且还不全),所以跟着官方教程手动安装是很折磨的。本文提供一个整合好的镜像下载,下载后导入最新版的Self Test工具就可以测试。
下载链接:Google Drive,freebsd用户名:root 密码:123456
测试步骤
1.拓扑
TN为测试设备,NUT为被测设备。TN和NUT通过2个网口互连。TN可选使用console连接NUT来实现自动输入命令。
从官方教程中下载最新的Self_Test_5-?-?.tar.gz,解压到/usr/local/ipv6ready/ 目录下。
2.预配置
有3个文件需要预先配置好:
/usr/local/v6eval/etc/nut.def
/usr/local/v6eval/etc/tn.def
/usr/local/ipv6ready/Self_Test_5-?-?/config.pl
nut.def:
ipv6# cat nut.def.sample # # nut.def # # Information about the Node Under Test (NUT) # # System type System cisco-system #----若手动测试此项修改为 manual # System information TargetName Cisco1812 #----被测设备 # Name HostName cisco #-----被测厂家 # Type # host, router, special Type router #-----被测设备类型,如果 NUT 为 host 类需修改为 host # Super user name and it's password # if you select manual as "System", you don't care "User" and "Password" # User root Password v6eval #linkname interface The EXACT ether source address link-local address global address Link0 fxp0 00:00:92:a7:6d:f5 fe80::7508:aaa8:e1d0:a425 3ffe:501:ffff:100:b003:5ce2:e51:aab #被测设备第一个接口,需填写地址 #Link1 fxp1 00:00:92:a7:6d:f6 fe80::7508:aaa8:e1d0:a425 3ffe:501:ffff:100:b003:5ce2:e51:aac #被测设备第二个接口,需填写地址 #Link2 de0 00:c0:f6:b0:aa:ef fe80::7508:aaa8:e1d0:a425 3ffe:501:ffff:100:b003:5ce2:e51:aac #Link3 de1 00:00:92:a7:6d:f8 fe80::7508:aaa8:e1d0:a425 3ffe:501:ffff:100:b003:5ce2:e51:aac #Link4 de2 00:90:27:14:ce:e3 fe80::7508:aaa8:e1d0:a425 3ffe:501:ffff:100:b003:5ce2:e51:aac
举例:link0 那一行的 fxp0 是设备的接口名,00:00:92:a7:6d:f5是link0的MAC地址,fe80::7508:aaa8:e1d0:a42是link-local address,3ffe:501:ffff:100:b003:5ce2:e51:aab是global unicast address。这几项需要修改为NUT的真实地址。link1同理。
tn.def# # tn.def # # Information about the Tester Node (TN) # # # Remote Controal Configuration # RemoteDevice cuad0 RemoteDebug 0 RemoteIntDebug 0 RemoteLog 1 RemoteSpeed 0 RemoteLogout 0 RemoteMethod serial #filter ipv6 #linkname interface BOGUS ether source address # name of the Tester Interface Link0 vr1 00:00:00:00:01:00 Link1 vr2 00:00:00:00:01:01 #Link2 de2 00:00:00:00:01:02 #Link3 de4 00:00:00:00:01:03
link0 那一行的 vr1是tn的网口名(用ifconfig -a可以看到),MAC可以不改,但建议改为真实MAC,有些安全设备会检查MAC真实性。
tn.def 与nut.def里的link0要互相连接,link1同理。
config.plipv6ready# vi /usr/local/ipv6ready/Self_Test_5-?-?/config.pl ######################################################################## #----------------------------------------------------------------------# # # # Configure the advanced functionalities support # # # #----------------------------------------------------------------------# # # The support of transmitting Echo Requests and configuring packet size # v6LC.2.2.25, v6LC.4.1.10, v6LC.4.1.11, v6LC.5.1.1 # zero - NUT does not support # non-zero - NUT supports # TRANSMITTING_EREQ =1 # 1 表示被测设备支持发送 Echo Request # 0 表示不支持 # # The support of multicast routing # v6LC.1.1.10 H, I, J, K # v6LC.1.2.7 G, H # v6LC.5.1.4 B # zero - NUT does not support # non-zero - NUT supports # MULTICAST_ROUTING =1 #被测设备支持多播路由 # 0 表示不支持 # # The support of link MTU configuration # v6LC.5.1.4, v6LC.5.1.11 B, v6LC.5.1.12 B, v6LC.5.1.13 B # zero - NUT does not support # non-zero - NUT supports # MTU_CONFIGURATION =1 #被测设备支持 MTU 配置 # 0 表示不支持 # # The support of Hop-by-hop option process # v6LC.1.2.7 # zero - NUT does not support # non-zero - NUT supports # $PROCESS_HBH = 1; #被测设备支持处理 hop-by-hop 选项 # # The support of sending more than three RSs # v6LC.2.2.1 # zero - NUT does not support # non-zero - NUT supports # $SENDING_MORE_RSs = 1; # # The support of sending only one RS # v6LC.2.2.2 # zero - NUT does not support # non-zero - NUT supports # $SENDING_ONE_RS = 0; # # The support of Type C host # v6LC.2.2.23 # zero - NUT does not support # non-zero - NUT supports # $TYPE_C_HOST = 1; #被测设备支持 RFC4191 # # support to process Beyond Scope of Source Address # v6LC.5.1.3.E # zero - NUT does not support # non-zero - NUT supports # $BEYOND_SCOPE_SADDR = 1; #----------------------------------------------------------------------# # # # Configure target environment # # # #----------------------------------------------------------------------# # # The support of multiple physical network interfaces # zero - one physical interface router # non-zero - generic router which has multiple interfaces # $HAS_MULTIPLE_INTERFACES = 1;
本配置文件需要根据被测产品本身的功能进行配置,如 NUT 不支持 MTU 配置,需要将MTU_CONFIGURATION 置 0,否则测试到 V6LC.5.1.4 等 cases 时会failed。
3.测试脚本编写(手动测试可跳过)
需要修改的脚本和配置如下:
/usr/local/lib/perl5/site_perl/5.10.1/V6evalRemote.pm
/usr/local/v6eval/bin/XXX/route.rmt 及其他*.rmt
因为在/usr/local/v6eval/bin/XXX/route.rmt …中都会用到 use V6evalRemote, 用户需要将V6evalRemote.pm 中的参数修改过来。若为手动测试,只需在 nut.def 文件中将 system 项修改为 manual 即可.
4.Self_Test软件说明
Self_Test_5-0-4 软件中包含 Makefile 文件,用户可以在上述配置完成之后直接在此目录下输入 make ipv6ready_p2_host 或者 make ipv6ready_p2_router(根据被测产品的测试类型选择)。
软件中也包含每个 RFC 测试目录,如 RFC8200 的测试目录 spec.p2, RFC4861 的测试目录nd.p2, RFC4862 的测试目录 addr.p2, RFC8201 的测试目录 pmtu.p2, RFC4443 的测试目录icmp.p2, 用户也可以在相对应的目录下测试如
ipv6ready # cd spec.p2/
ipv6ready # make ipv6ready_p2_host(router)
若用户仅测试某个或某些测试用例的话,可以
ipv6ready # cd spec.p2/
ipv6ready # make ipv6ready_p2_host(router) AROPT="-s 1 -e 10"
注:-s: start,开始项;-e: end,结束项
Self_Test工具里的小项,对应标准文档Core_Conformance.pdf里大项的某一Part,直接看看不出来它们的对应关系,在运行某个具体小项的时候,Log会显示该小项对应哪个大项的哪个Part。
如果是手动测试,要在途中按照脚本指示操作设备。比如提示Set AdvSendAdvertisements Flag to True,就需要操作设备的接口,变为可发送RA的接口。
5.结果分析
打开Self_Test_5-?-?/index.html可以看到测试结果的总览。
点击某个section进入测试项页面。测试结果以 html 格式显示,也可打开单独的测试结果,如 16.html,如下图所示
每个测试结果单元中包含 7 列,分别是 No.、Title、Result、Log、Script、Packet、Dump(bin)。
title 列中有具体的测试项名称,点击测试项名称进入详细的测试例用例。
Result 列为该测试项测试结果,一般黑色为通过,红色字体为测试结果有问题,需要修改;
Log 列为测试过程,点击“X”就可以进入测试 Log 页;
Script 列和 Packet 列为测试例设计的脚本和报文格式。
Dump(bin)列为测试过程中链路上的抓包,使用 wireshark 等软件打开。
点击Log下面的X可以查看项目的日志,用于排错。
也有交互的报文的详细展示。
出现NG字样代表失败,需要对照Log来检查哪一步出错了,本应收到却未收到、本不应收到却收到、收到的包内容错误等问题都会详细记录下来。