软件定义网络IPv6安全仿真技术与教学应用
2021-06-03胡曦明
鱼 清,胡曦明,2*,李 鹏,2
(1.陕西师范大学 计算机科学学院,陕西 西安 710119;2.现代教学技术教育部重点实验室,陕西 西安 710119)
0 引 言
软件定义网络(SDN)是从最初美国斯坦福大学Clean Slate课程组提出的学术性新概念[1],以技术创新驱动发展演变成为涵盖技术标准、设备产品、网络建设和商用运营等上下游各方的高新技术产业,受到包括互联网工程任务组(IETF)等国际标准化组织、思科等设备制造商、谷歌等互联网公司和德国电信等网络运营商的持续高度关注与高投入。SDN是基于数据层面与控制层面分离的架构,向下将基础设施虚拟化为底层服务资源的同时向上将分散而异构的管理控制功能抽象为可编程可开发的软件平台[2],使得信息网络从互联互通基础设施升级转化为业务响应服务系统。在SDN技术创新的强劲驱动下,软件定义光网络SDON[3]、Google数据中心广域网B4[4]、开放网络操作系统ONOS[5]、SDN/NFV统一编排平台ECOMP[6]等新模式新业务新系统蓬勃发展,进一步推动SDN向更广领域、更高层次和更深程度融合创新,可以说SDN已成为面向未来实施创新驱动发展的战略性热点之一。
面对SDN创新驱动要求产学研用协同实现高质量发展的内在需求进一步突显,软件定义网络仿真技术如何以高校学科发展和专业教学改革为引领,探索SDN相关仿真技术和教学应用,主动适应SDN科技创新和产业变革对复合型拔尖创新人才培养的需求,成为当前高校面向“新工科”建设开展仿真技术创新和实验教学改革富有时代性、前瞻性和教育价值性的新课题。
1 软件定义网络仿真技术发展现状与趋势
以中国知网(CNKI)收录的中文期刊为文献统计源,分别以关键词“软件定义网络”或“SDN”并含“仿真技术”或“实验教学”,在“全部期刊”中精确检索,再对检索所得文献集合进行筛选,剔除检索词条匹配但内容与学术研究无关的文献后得到27篇论文(如表1所示),通过文献调查法和主题聚类分析SDN仿真技术与教学应用发展现状与趋势。
表1 SDN仿真技术与教学应用文献调查与研究主题聚类分析(统计来源:2010~2020年中国知网CNKI收录期刊)
(1)仿真技术以基于Mininet平台成为主流路径。
从功能上讲,能够用于SDN仿真的实验平台类型多样,如美国斯坦福大学Mininet[7]、台湾思锐科技EstiNet[8]、美国华盛顿大学NS-3[9]以及美国国家航空航天局和Rackspace合作研发的OpenStack[10],但是通过对SDN仿真技术文献调查分析发现,基于Mininet的仿真技术文献占比高达80%。中南大学[11-13]、华北电力大学[14]等多所“双一流”大学和西安思源学院[15]、浙江农林大学暨阳学院[16]等地方民办院校均以Mininet作为平台开展仿真实验教学。Mininet具有轻量级的仿真环境和友好、便捷的可开发性,事实上已成为将SDN快速引入高校课堂的主流路径。
(2)仿真主题从组网类向安全类升级成为新需求。
通过对SDN仿真技术文献的研究主题聚类分析发现,现有以SDN组网为仿真主题的文献占比达75%,仿真科目聚焦SDN控制器部署、交换设备控制数据转发等SDN组网的基础配置与操作,教学模式以教师指令下的SDN组网验证性仿真实验为主,例如,广西大学叶进以OpenDayLight为SDN控制器开展控制数据转发与可视化表项方面的实验教学[17]。
网络空间安全作为重要组成部分被纳入中国特色国家安全能力建设总体布局,2015年国务院学位委员会、教育部联合发布通知,正式增设“网络空间安全”一级学科[18]。在国家战略和学科发展的双重推动下,SDN仿真主题从组网类向安全类升级成为增强学科教学服务高质量发展能力的时代性需求[19],也成为专业教学改革新的着力点。从文献调查来看,中南大学黄家玮从前期关注测试验证Mininet平台开展SDN仿真的可行性、高效性与便捷性[11]和以OpenDayLight的Web UI控制转发表项为例开展交换机控制数据转发仿真实验[12],转而聚焦SDN架构下网络空间安全的BGP路径挟持攻击和ARP攻击与防御仿真技术[13];南京邮电大学费宁构建SDN下高扩展性防火墙仿真平台,支撑网络安全实验教学新需求[20]。
(3)仿真体系从IPv4向IPv6延伸成为新热点。
随着互联网+、人工智能和大数据等国家战略的深入推进,IPv4地址资源枯竭和技术体系受制于人的格局给国家信息安全带来的隐患和威胁愈加突出,2017年11月中共中央办公厅、国务院办公厅印发《推进互联网协议第六版(IPv6)规模部署行动计划》,强调必须加快部署IPv6网络,构建高性能下一代互联网[21]。SDN作为面向未来网络空间架构的关键技术也必将加快向IPv6体系演进,由此带动SDN仿真体系从IPv4向IPv6延伸,成为近年来仿真技术研究的新热点。例如,2017年北京邮电大学陈蔚瀚提出新的IPv4/IPv6过渡技术的流量调度优化模型并基于Mininet开展SDN环境下的仿真测试[22];2018年北京工业大学李丹基于Mininet平台提出SDN下的IPv6组播机制并完成了仿真[23]。
2 “Python+Mininet”软件定义网络IPv6安全仿真技术
基于上述对国内软件定义网络仿真技术与教学应用发展现状与趋势的系统梳理,可以说以Mininet为平台聚焦软件定义网络IPv6安全仿真技术研究是高校承接国家网络安全与信息化发展战略对卓越信息安全工程师培养需求的新着力点。在此基础上,该文基于“Python+Mininet”提出轻量级和可开发的软件定义网络IPv6安全仿真技术,旨在以软件定义为核心打造个性化学习实验系统,以仿真技术创新赋能软件定义网络实验教学提质升级。
2.1 总体设计
(1)技术架构。
将SDN仿真平台Mininet与Python开发相结合,提出“Python+Mininet”的软件定义网络IPv6安全仿真技术架构,总体设计如图1所示。
图1 “Python+Mininet”软件定义网络IPv6安全仿真技术架构
从仿真技术和教学应用来看,“Python+Mininet”的模块化设计具有以下优点:模块之间相互独立,灵活而易于实现,适用于开展分组合作式实验和协作学习;支持Python开发,满足个性化和定制化的仿真需求;数据测量与可视化适用于对仿真进行过程性分析和精细化管理。
①Python开发模块。
负责仿真策略的生成,通过Python开发在数据层面生成可编程数据源与路由跟踪等网络行为,在控制层面生成实验环境配置、数据处理控制逻辑和网络服务管理,经过Python第三方开发套件API实现与实验运行模块的交互,从而起到策动仿真的作用。
②实验运行模块。
负责网络仿真的运行,基于Mininet平台输入Python开发模块生成的数据层面和控制层面的仿真策略,模拟软件定义网络架构下的网络行为与工作过程,经过Python第三方开发套件API向Python开发模块实时反馈运行状态,并通过Data Interface向测量与分析模块输出运行数据。
③测量与分析模块。
负责对仿真数据与结果进行可视化分析,通过Data Interface实时采集实验运行模块虚拟网卡输入输出的数据,使用常用协议分析工具实现对仿真过程与结果的可视化分析。
(2)仿真流程。
基于“Python+Mininet”开展软件定义网络IPv6安全仿真技术的流程,如图2所示。
2.2 关键技术
(1)数据源开发。
一方面可通过Python自主开发数据包构造和发包工具,另一方面也可采用Python第三方开发套件作为Mininet平台插件。综合考虑开发成本和教学应用需求,该文采用协议报文数据处理软件Scapy作为Python开发模块的数据源开发工具,通过Scapy可以实现网络扫描、协议报文构造与解析和数据包嗅探等多种功能,并且利用Scapy为TCP/IP协议栈提供的开发类,可以开发更加综合性的数据服务功能。
图2 “Python+Mininet”软件定义网络IPv6
(2)网络行为管理。
作为软件定义网络的核心,控制器负责在控制层面上对网络行为进行集中式控制与管理,由此也就成为开展软件定义网络IPv6安全仿真的关键。该文针对“Python+Mininet”的仿真技术架构,以基于Python的Ryu或POX作为控制器,通过充分利用其自身具有的丰富Python API,针对个性化定制化的仿真需求开发不同的网络行为管理策略,通过以可编程的模式从整体上实现网络服务和网络规则的定义、下发等网络行为管理。
(3)数据测量接口。
仿真实验在Mininet平台中运行,需要通过数据测量接口从Mininet平台中采集实验数据才能开展后续的测量与分析。该文在VMware Workstation虚拟机上安装Ubuntu作为Mininet的系统环境,通过虚拟机向Mininet平台桥接虚拟网卡,然后采用Wireshark、tcpdump等协议分析工具监听虚拟网卡从而获得实验数据。Wireshark提供良好的交互界面,可以实时捕获经过网卡的数据包;tcpdump通过系统命令对数据包及时可视化显示,操作灵活便捷。
3 软件定义网络IPv6安全仿真技术的教学应用
3.1 拓扑环境
将上述“Python+Mininet”软件定义网络IPv6安全仿真技术应用于高校课堂,首先搭建仿真拓扑环境,如图3所示。
图3 “Python+Mininet”软件定义网络IPv6安全仿真拓扑
从拓扑结构的连接关系来看,c0为SDN控制器,在控制器c0下连接交换机s1和s2;交换机s1连接主机h1,交换机s2连接主机h2和h3。
从攻击与被攻击的交互关系上,主机h3作为攻击方,主机h1或h2作为被攻击方,当h1与h2进行通信过程中,攻击方h3基于Python开发伪造报文,攻击主机h1与h2从而窃取h1与h2之间的通信信息,整个攻击过程通过测量分析模块实时进行数据采集、测量与可视化分析。
3.2 配置与操作
具体仿真实验步骤以及对应的配置与操作过程,如图4所示。
图4 配置与操作
(1)拓扑脚本。
使用Mininet提供的Python API,创建拓扑脚本。
from mininet.topo import Topo
class MyTopo(Topo):
def __init__(self):
# initialize topology
Topo.__init__(self)
# add switches and hosts
s1=self.addSwitch('s1')
s2=self.addSwitch('s2')
h1=self.addHost('h1',mac="00:00:00:00:00:01")
h2=self.addHost('h2',mac="00:00:00:00:00:02")
h3=self.addHost('h3',mac="00:00:00:00:00:03")
# add links
self.addLink(h1,s1)
self.addLink(h2,s2)
self.addLink(h3,s2)
self.addLink(s1,s2)
topos={'myTopo':(lambda:SdnTopo())}
在网络拓扑脚本中,首先导入Mininet中的Topo模块,然后创建自定义网络拓扑类MyTopo,依次添加交换机(s1和s2)、主机(h1、h2和h3)和网络链路(h1-s1、h2-s2、h3-s2以及s1-s2)。在添加主机时,自定义该主机网卡MAC地址;如未自定义MAC地址,系统会默认分配。
(2)SDN组网。
①搭建拓扑环境。
首先开启控制器Ryu,生成并下发SDN交换机流规则,以让拓扑脚本所描述的网络拓扑在Mininet平台上运行起来。通过源码方式安装Ryu,从终端进入ryu/ryu/app目录,执行ryu-manager命令运行Ryu控制器默认的simple_switch_13.py文件,从而定义交换机功能。
获取运行Mininet的虚拟机本地IP地址,作为Mininet连接控制器的IP地址,然后以超级管理员运行拓扑脚本,让Mininet在虚拟机中生成相应的网络,具体命令为:mn --custom script-directory --topo topo-name [--switch ovsk,protocol=OpenFlow13] --controller=remote,ip=ip_adderss,port=port_number 。
命令中参数的含义分别为:custom(创建的脚本文件目录);topo(拓扑脚本中定义拓扑结构的类);switch(指定交换机类型与通信协议类型);controller(指定控制器)。
Mininet运行网络拓扑脚本的过程,可以通过控制器Ryu来监视。当Mininet生成网络拓扑时,Ryu会收到由网络中交换机发往Ryu的大量packet in消息,说明Mininet与控制器Ryu连接成功并且网络拓扑搭建完成。
②配置IPv6环境。
使用拓扑脚本搭建的网络环境默认为IPv4,需在此基础上进一步配置IPv6网络环境,本次仿真需配置主机IPv6 地址。配置主机IPv6地址,首先需要通过net命令查询到主机模拟网卡的名称,本次仿真net命令查询结果为:主机h1(h1-eth0)、主机h2(h2-eth0)和主机h3(h3-eth0)。
根据查询到的主机网卡名,对拓扑中的三台主机逐个配置IPv6地址,配置命令如表2所示。
为主机配置IPv6地址之后,可以使用ping6命令依次测试IPv6环境下各主机之间的连通性,从而完成IPv6仿真环境搭建。
表2 配置主机IPv6地址
(3)协议分析。
在虚拟机中安装Scapy,然后在Mininet平台上运行的主机h1中引入Scapy,以Scapy提供的Python API构造IPv6网络ping6数据包,分析ICMPv6协议工作过程,关键开发代码如表3所示。
表3 基于Python开发构造IPv6网络ping6数据包
通过在虚拟机上运行Wireshark对流经主机h2网卡的数据包进行分析。在此次ping6报文的交互过程中,主机h1向主机h2发出ping6请求数据包,主机h2及时响应,发出ping6回复数据包给主机h1。
(4)网络攻击。
①主机h1与主机h2正常通信。
使用ping6命令模拟主机h1与h2之间的正常通信。在主机h1中以命令“h1 ping6 -c 3 fc00::2”给主机h2发送3个ping6请求数据包,同时主机h2给主机h1及时回复3个ping6回复数据包。
②攻击方h3发起攻击。
攻击方h3开启虚拟终端启动Scapy,通过Python开发伪造NS报文,欺骗主机h2。伪造报文中源IPv6地址是主机h1的IPv6地址(fc00::1),目的IPv6地址是主机h2的IPv6地址(fc00::2),而源MAC地址是攻击方h3的MAC地址(00:00:00:00:00:03)。关键步骤如表4所示。
③主机h1与主机h2通信中断。
主机h3发起攻击,此时主机h1再以命令“h1 ping6 -c 3 fc00::2”给主机h2发送3个ping6请求数据包,发现它不会再收到主机h2的响应。主机h1与h2的正常通信中断。
(5)攻击防御。
在上述攻击仿真实验中,攻击方h3通过不断发送伪造报文,欺骗主机h2更新错误的邻居列表,从而达到中断正常通信并截获主机h1与h2的通信信息的攻击效果。针对这种攻击方式,可以通过给主机h2添加静态邻居表项进行防御。
表4 攻击脚本的关键步骤
通过命令“h2 ip neighbor add fc00::1 lladdr 00:00:00:00:00:01 nud permanent dev h2-eth0”,将主机h1的IPv6地址(fc00::1)与MAC地址(00:00:00:00:00:01)绑定在主机h2的邻居列表中,可以达到防御NDP中间人攻击的效果。当添加静态邻居表项后,即使攻击方h3发出大量伪造数据包,主机h2也不会更新自己的邻居列表,攻击方h3不能截获通信信息。
3.3 可视化分析
当攻击方h3发起攻击之后,对主机h1与h2的通信过程的数据包进行可视化分析,如图5所示。
图5 NDP中间人攻击可视化分析
对于主机h2而言,收到大量由fc00::1发出的数据包,并且告诉它,IPv6地址为fc00::1的主机的网卡地址为00:00:00:00:00:03,此时它将更新自己的邻居列表。当收到来自fc00::1的ping6请求数据包时,它必须对其响应,发出回复数据包。要对fc00::1发回复数据包时,需要查看自己的邻居列表,发现fc00::1对应的网卡地址为00:00:00:00:00:03,于是对该网卡发出回复数据包。
对攻击方h3而言,在发出大量伪造报文的同时,收到来自fc00::2的ping6回复数据包,即成功截获到了主机h1与h2的通信信息。
4 结束语
面对软件定义网络以创新驱动发展加快形成战略性高技术产业的态势,以“新工科”产教融合协同创新为引领开展软件定义网络IPv6安全仿真技术探索既可有效促进软件定义网络产业链与人才链更加紧密契合,又可通过仿真技术创新赋能学科专业主动布局软件定义网络前沿发展。
该文针对软件定义网络IPv6体系下的安全仿真技术缺乏的现状,提出了基于“Python+Mininet”的软件定义网络IPv6安全仿真技术,通过IPv6邻居发现协议攻击与防御及可视化分析的教学应用表明该技术具有轻量级、可开发和一体化等优点,为高校面向未来网络空间安全教学改革提供新的技术途径。