随着网络规模不断加大,设备类型越来越多,网络中各种实体间的关系越来越复杂,对网络管理系统的要求也越来越高。在ISO/IEC7498-4文档中定义了网络管理的五大功能:故障管理、配置管理、性能管理、计费管理和安全管理,配置管理是五大功能的基础。目前大多数配置管理系统只能获取网络配置信息,监控网络运行状况,而无法有效地对网络进行配置。基于此,我们设计和实现了一个新的网络配置管理系统,不仅能监控网络,还能配置网络。
在本文实现的网络配置管理系统中,主要包括配置信息管理和远程配置模块。配置信息管理获取路由器、主机、端口等网络设备以及它们之间的逻辑关系等配置信息,并维护这些信息,包括查询、修改、删除等。远程配置模块可以把管理员对系统中配置信息的修改在网络设备上实现。两者互为辅助,真正实现了ISO对配置管理的定义和要求。此外,本系统对外还可以与拓扑发现系统衔接,自动获取批量设备的配置信息;还可以以晴雨表的方式显示网络运行状况,实现了可视化互动式的网络配置信息展现。
设计思想
为适应实际网络管理工作的需求,我们在设计配置管理系统时,应至少考虑以下几点:
第一,应该具有自动初始化的功能。实际网络中被管设备数量巨大,通常能达到百位量级,如果初始化时需要管理员手动输入所有被管设备的基本信息(如IP地址,共同体名等),这是一个相当枯燥漫长的过程,会大大降低系统的实用性。
第二,在长时间的运行过程中,系统数据要与实际设备配置保持一致。实际网络中变化是经常发生的,包括网络的拓扑、设备的配置等都会为了运行的需求而经常变化。那么,最好能让系统中的数据能自动更新,而不需要每次改变实际网络配置后,还需要管理员手动更新。
第三,操作简单直观,不依赖于太多的专业知识。无论是信息的展示,还是可以进行的操作,希望都能以简单的页面元素来表达,管理员通过简单的点击、选择等操作就能完成大部分管理任务,而不需要对复杂的SNMP MIB或者繁琐的路由器的操作命令等有十分深刻的了解。
系统框架与实现
基于以上几点考虑,我们设计的配置管理系统的架构。其中,节点Agent是SNMP协议中的网络管理代理,通常对应于网络的路由器、交换机等网络设备自身;终端设备是指网络设备出于远程管理目的,对外提供的命令行访问入口,通常为Telnet或者SSH登录方式。
系统核心功能部分采用功能强大的脚本语言Perl及其模块进行开发,底层数据由MySQL数据库进行管理,外部交互由基于Web Service技术的Web框架实现。在开发过程中,我们借鉴了一般Web应用开发过程中的分层思想。其中,Perl程序负责完成业务逻辑控制,之所以采用Perl进行开发,主要是因为Perl可以很方便地与网络设备、数据库、Web界面、系统shell等进行交互,而且Perl具有大量实用模块可以很方便地用于网络管理开发。
系统中,拓扑发现是配置管理系统的一个辅助模块,可以发现并向配置管理系统提供管理域内大部分管理对象的基本信息及其连接关系;配置信息管理模块有选择地从拓扑发现模块获取管理对象的基本信息,辅以管理员的人工输入,就能覆盖到管理域的全部对象,再自动通过SNMP协议获取监控节点的配置信息并写入数据库;远程配置模块可以把管理员对被管对象的操作转换成对设备进行配置需要的命令,并通过Telnet或者SSH方式在设备上执行,达到远程修改配置的目的;此外,晴雨表也能从配置数据库读取设备信息,并以图形化的方式显示给用户。
1.配置信息管理模块
一个有效的配置管理系统应该存储管理域内所有网络配置信息,以便管理员可以快速有效地访问配置数据。关系数据库管理系统可以使用户将各种类型的数据关联起来,使得系统服务器能够有效、快速地存取、关联、查询数据和建立设备清单。我们采用MySQL数据库存储配置信息,事实上,我们的系统也能很方便地迁移到其他的数据库管理系统。
配置信息可以通过多种方式获得:一种可以通过拓扑发现的结果得到,可以从中有选择地导入配置信息数据库;一种可以通过SNMP 协议直接从设备上取得。我们采用了这两种方法互补的方案,系统中拓扑发现的结果可以有选择地导入配置信息数据库,同时对于无法发现的系统,可以调用snmpRouter程序(这是一个通过SNMP协议获取路由器等网络设备的配置信息和运行状态的程序)直接从设备读取,这样保证了配置信息的完整性。
配置信息变化的管理方式有:第一,手动更新:当某个设备配置发生变化时,可以启动snmpRouter 程序从设备获取配置信息,然后与配置数据库中的数据进行比较,经过管理员确认后,进行配置数据库更新等操作。第二,自动更新:通过设置snmpRouter 程序的运行周期,系统可以定期读取设备当前配置信息,然后提供配置变化列表,管理员确认后,更新配置数据库;也可以不通过管理员确认,系统直接更新,管理员可以通过日志查看配置更改情况。此外,配置管理工具还可以产生必要的报告以使管理者及时了解整个网络的配置情况。
2. 远程配置模块
IP网络中设备的配置信息以配置文件的形式存在于网络设备中,对配置文件进行修改就能实现对设备的配置,有多种方式可以达到这一目的。有些厂商通过特定的命令行接口(CLI,Command Line Interface)读取配置文件或对其进行修改,管理员通过Telnet或者SSH方式登录到远程设备上,通过CLI输入一系列命令对配置文件的模块进行增加、删除和修改操作以次实现对路由器的不同功能模块进行配置;有些厂商使用FTP来下载或者上传配置文件,达到管理设备的目的;其他一些厂商使用SNMP协议,但是一方面因为协议在安全方面存在缺陷,大多数设备都禁止了SNMP SET的功能,另一方面MIB也没有完全实现(例如不允许创建和删除行)。
因此,在实际网管工作中,SNMP协议更适合于获取配置信息和监视网络设备的运行状况,对设备的配置管理一般都是手动对路由器配置文件进行修改。
我们的配置管理系统作为基于Web的网络管理系统,采用Perl的Net::Telnet::Cisco模块实现Telnet登录远程Cisco路由器或交换机,执行配置命令,解析设备应答等功能。Net::Telnet::Cisco是Perl的一个扩展模块,它把对Cisco路由器或交换机的操作包装成方法,十分便利于编写与设备交互的程序。
管理员可以从设备的管理页面上选择要对设备进行的配置操作,这些操作都是比较简单的,或者是对所有设备都可用的命令;而对于某些较复杂或者定制性较强的管理操作,则需要管理员输入想要在远端设备上执行的命令。
命令生成器根据这两类输入生成远端设备可执行的配置命令。例如,管理员选择了修改路由器本地标识的操作,则会产生一条“hostname thurouter\n”的命令;选择了修改MOTD(登录上路由器之后看到的信息)的操作则会生成一条“banner motd #\nhello, welcome!\n#\n”命令;系统也提供了配置接口的操作,比如设置接口本地描述的命令就是“int e0\ndesc toMainBuilding”。随后,系统会把由操作生成的命令和直接输入的命令组合在一起。
另外,如果管理员只是执行几条命令获取一些运行状态信息,那么这时候生成的命令就是最终的了。而如果管理员想对配置进行修改,那么还需要在所有命令之前加上“conf t\n”,在所有命令最后加上“end\nwrite mem\n”语句,这样才是设备可执行的命令。
命令全部产生后并不是立刻发送到设备上执行,管理员可以对其进行检查,如果不符合自己的意图就重新在页面上进行修改,再次检查并确认之后才通过Telnet协议发送到设备上执行。
出于对安全的考虑,对是否具有配置权限的判断方式和实际网管中一致,采用设备登录密码和特权密码相结合的二级认证方式,只有事先配置了正确的两个密码,才能执行远程配置功能。但是,为了实现的方便,我们采用Telnet协议来登录并执行命令,这样数据包可能被监听甚至篡改,这不能不说是一个安全隐患。我们考虑在今后的版本中,使用SSH协议来进行通信,可以杜绝这一安全问题。
远端设备接收到我们发送过去的命令之后,执行命令更新配置文件。配置过程中,远端设备的应答也会被记录下来并进行分析,供管理员查看结果和日后回溯处理。
以上就是一次对设备配置操作的过程,事实上,我们的系统也具有对批量设备执行相同操作的功能。管理员只需在以上所有操作之前设置好要操作的所有设备的选择条件,系统会自动对所有满足条件的设备执行相同的配置命令,并把结果全部展示出来。在大规模网络的管理工作中,这是一个非常实用的功能。
本小节是我们设计的远程配置模块的技术方案和实现细节。总的来说,是基于基本的Telnet协议实现,对被管设备和系统运行环境都没有特殊的要求。另外,核心功能全部由Perl编写,而且功能独立,与被管设备和界面都没有很深的耦合关系,因此,具有良好的可扩展性和可二次开发性,既可以被其他网管功能模块调用,丰富各自的功能;还能用于桌面程序开发,实现Web上难以展现的功能。
相关工作比较
与现有其他网络管理系统中的配置管理相比,我们的系统具有以下优点:
第一,不仅能监控网络中的设备,还能对被管设备进行远程配置,是一个功能完整的配置管理系统;第二,对设备的远程配置不依赖于SNMP协议,而基本上所有的网络设备都提供了基于Telnet或者SSH协议的管理接口,因此远程配置功能对目前几乎所有网络设备都适用;第三,支持Cisco几乎全系列的设备,包括较老的Catalyst 1900系统,使用较少的CatOS以及目前大部分设备使用的IOS等网络操作系统。同时,对其他厂商的设备也能很方便地加上。
但是,这只是一个原型系统,虽然证明了这种远程配置技术方案的可行性,但是在适用性和完整性方面还有一些欠缺:
第一, 目前只适用于Cisco网络设备,对其他厂商的设备用Net::Telnet模块同样能实现;
第二, 系统使用的是Telnet协议登录到远程网络设备,安全性方面存在不足,不过使用Net::SSH模块来实现SSH协议登录能够很好地改善这一点。
本文详细介绍了我们设计并实现的一个不仅能监控网络,还能配置网络的配置管理系统,贴近大规模网络管理的实际需求。目前该系统已经应用在CERNET2主干网和一些其他大规模网络的实际网络管理中,效果良好。
不过,目前系统的配置信息管理只能采集基于SNMP协议设备的配置信息,而远程配置也只能对Cisco设备进行,因此,对不支持SNMP协议,或者其他厂家设备的管理还需要做进一步工作。
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。