OpenWrt开发必备软件模块——网络管理(CWMP、SSH、QoS、SMTP、NTP、uHTTPd)

一、CWMP简介

  • CWMP(CPE WAN Management Protocol)是一个面向终端设备的网管技术规范。这个技术规范提供了对下一代网络中家庭网络设备进行管理配置的通用框架、消息规范、管理方法和数据模型。
  • 它由宽带(Broadband)论坛管理和发布,于2004年发布第一版,文件编号为TR-069。
  • CWMP 中定义了以下两种基本网络元素:
    • ACS:自动配置服务器(Auto Configuration Server),网络中的管理服务器。
    • CPE:客户端设备(Customer premises equipment),网络中的被管理设备。
  • CWMP作为一个双向的SOAP/ HTTP的协议它定义了客户端设备和自动配置服务器之间的通信协议。它包括一个安全的自动配置和其他CPE管理功能控制整体框架。协议支持了不同的互联网接入设备,如调制解调器、路由器、机顶盒和VoIP电话等。标准TR-069 协议的自动配置服务器对这些设备进行自动配置和管理。
  • CWMP是一个基于文本的协议,在设备和自动配置服务器之间传输 HTTP文本。在HTTP层面上CPE是客户端,ACS起到HTTP服务器的作用。这意味着控制配置数据的流动是客户端设备的职责。
  • 会话的概念:所有的通信和操作都在配置会话的范围内进行。会话是由设备从一个通知(Inform)消息的传输开始的。ACS 服务器在收到通知消息时,开始对 CPE 调用接口方法进行状态查 询和配置。认证对于 CPE 来说是必不可少的,一般采用摘要认证算法来对 CPE 进行认证
  • 配置数据模型:大多数的配置和诊断是通过设置和检索设备参数的值来实现的。这些配置都是组织为 一个定义良好的层次结构,包括常见或不太常见的所有设备模型。宽带论坛发布的数据模型标准有两种格式:(TR181包含了大多数设备类型的数据模型定义,设备所支持的管理模型用设备节点Device.DeviceInfo.SupportedDataModel来表示)
    • XML包含每一个子元素的详细规范。
    • 可读细节的PDF文件格式。
  • 每一个定义的对象节点都需要标识出是可修改的还是只读的。这些是通过GetParameter Names方法来获取设备支持配置对象节点报告。设备不应允许标记为只读的任何参数的修 改。TR181 数据模型的规格和扩展清楚地标识了大多数设备参数的规格。参数的类型和含 义在标准 TR181 中有详细定义。
  • 应用场景与优点:CWMP主要应用于电话、有线电视、宽带等家庭接入网络环境。在这些接入网络中, 由于用户设备数量很多,并且用户分散,不容易进行设备的管理和维护。采用CWMP协议,可以实现ACS对CPE设备的远程集中管理,解决了CPE设备的管理维护问题,提高了网络的运维效率。

二、提供的方法

  • 设备的整个管理过程是建立在定义好的一组简单的操作方法上,每个方法都是原子操作。如果设备不能执行一个配置命令那就返回给 ACS适当的错误值。设备不应当因为错误中止会话。
  • 常用支持的方法见下表:
方 法含 义
SetParameterValues服务器用来修改 CPE 的参数。
GetParameterValues用于服务器获取 CPE 的参数配置值。一次可以获取一个或多个参数。
GetParameterNames用于服务器来发现客户端可以访问的配置参数。
InformCPE 调用服务器的 Inform 方法来建立和服务器之间的传输会话。
AddObject用于服务器来针对多实例对象来创建新的实例。
DeleteObject服务器删除客户端多实例中的一个实例。

三、客户端、服务端交互过程

  • 为适应终端数量巨大并且地址不固定的特性,TR069 定义的交互流程中,管理交互通常都是由 CPE 发起的,由 CPE 来“请求”ACS 进行管理(见下图)。当 ACS 希望启动对 CPE 的管理时,协议定义了一个反向触发机制。CPE 建立一个用于侦听的 HTTP 端口,这 个端口地址信息在 CPE 初始连接时上报给 ACS,当 ACS 希望对 CPE 进行管理时,ACS 向 该端口建立传输控制协议连接并发送空的 POST 请求报文,CPE 收到该请求报文后随即启 动正向的 HTTP/HTTPS 连接,请求自动配置服务器的管理。

  • 第1步:CPE和ACS建立TCP连接。
  • 第2步:SSL初始化进行双向认证。
  • 第3步:CPE发送Inform报文,开始建立 CWMP 连接。Inform 报文使用 Eventcode 字段 描述发送 Inform 报文的原因,通常为“0 BOOTSTRAP”,表示 CPE 首次启动建立连接。
  • 第4步:如果CPE通过 ACS 的认证,ACS 将返回 Inform 响应报文,连接建立完成。
  • 第5步:如果CPE没有别的请求,就会发送一个 HTTP Post 请求,内容为空,以满足 HTTP 报文请求/响应报文交互规则(CWMP 是基于 HTTP 协议的,CWMP 报文作为 HTTP 报文 的数据部分封装在 HTTP 报文中)。
  • 第6步:ACS 查询 CPE 上设置的轮询通知间隔的值等。
  • 第7步:CPE 把自身的轮询通知间隔的值返回给 ACS。
  • 第8步:ACS发现轮询通知间隔的值设置不符合服务器配置,于是发起设置请求,要求将CPE的轮询通知间隔的值设置为1800 秒。
  • 第9步:设置成功后,CPE发送响应报文。
  • 第10步:ACS 发送空报文通知CPE没有别的请求了。
  • 第11步:CPE 关闭连接。

四、配置CWMP

  • OpenWrt通过freecwmp软件包来支持CWMP,但默认并不会对该软件包进行编译,下面我们通过openwrt源码进行编译。
  • 第一步:使用feeds命令来查找和配置cwmp。
./scripts/feeds search cwmp
  • 第二步: 选择 freecwmp-curl 模块。
./scripts/feeds install freecwmp-curl
  • 第三步:然后在make menuconfig中就会有 UTilities --->freecwmp-curl的选择项,输入M 选择 并保存退出,然后进行编译,编译成功之后将所有的软件包放在服务器上,然后在OpenWrt 终端输入以下命令进行安装。
opkg install freecwmp-curl

五、OpenWrt的SSH服务

  • SSH(Secure Shell)是专为远程登录会话和其他网络服务提供安全性的协议。OpenWrt 默认采用Dropbear软件来实现 SSH协议。它是一个在小内存环境下非常高效的SSH服务器和客户端。

六、Dropbear概述

  • Dropbear 是一个开源软件包,是由马特·约翰逊撰写,并且和安全shell兼容的服务 器和客户端。它是在低内存和处理器资源情况下对标准的 OpenSSH 的一个替代品,适合 嵌入式操作系统。它是 OpenWrt 的一个核心组件。
  • Dropbear实现了SSH 协议V2版本。SSH协议是一种在不安全的网络环境中,通过加密和认证机制,实现安全的远程访问以及文件传输等业务的网络安全协议。它使用了第三方的加密算法,但嵌入到Dropbear代码中,终端的部分代码继承自OpenSSH软件。
  • Dropbear在客户端和服务器都实现了完整的SSH 协议 V2版。它不支持SSH版本V1的向后兼容性,以节省空间和资源,并避免了在 SSH 版本V1中固有的安全漏洞
  • Dropbear还提供安全远程复制功能可以在网络上的主机之间进行远程文件复制。它利用 SSH 协议来传输数据,和SSH登录采用同样的认证和安全,当需要认证时提示输入密码。文件名包含一个用户和主机地址,以表明该文件复制的源地址和目标地址。本地文件名可以明确使用绝对或相对路径名来避免处理文件名含有主机说明符。远程主机之间的复制也是可以的。将目标路由器的配置文件复制下来的命令示例如下:
scp root@192.168.6.1:/etc/config/dropbear /tmp/dropbear

七、配置文件

  • 配置文件为/etc/config/dropbear,所有的配置在唯一一个配置节dropbear中。
  • 下表列出了 SSH 服务器的主要配置选项:
名 称类 型含 义
PasswordAuth布尔值设置为0关闭密码认证。默认为 1
RootPasswordAuth布尔值设置为0关闭root用户的密码认证。默认为1
Port数字监听的端口号,默认为 22
BannerFile字符串用户认证成功后登录进去的输出内容的文件名
enable布尔值是否随系统启动该进程,默认为 1
Interface字符串指定监听的网卡接口,即只从该接口接收请求
  • 下面所示的是dropbear的默认配置:打开了密码认证功能,并且允许管理员用户登录,设置在 TCP 端口号 22 处监听。

八、QoS

  • 服务质量(Quality of Service,QoS)就是指网络通信过程中,保障用户业务在带宽、 时延、抖动和丢包率等方面获得可预期的服务水平。家庭网内部的QoS主要指保证用户实时交互的业务符合用户的要求。

九、服务模型

  • QoS 服务模型是指一组实现端到端服务质量保证的方式,QoS 服务模型主要有如下3种:

尽力而为服务模型(Best-Effort service)

  • 尽力而为服务模型是一个单一的服务模型,也是最简单的服务模型。
  • 对尽力而为服务模型,网络尽最大的可能性来发送报文,但对时延、可靠性等性能不提供任何保证
  • 尽力而为服务模型是Linux网络的缺省服务模型,通过先进先出队列来实现。
  • 它适用于绝大多数网络应用,如HTTP、FTP和 E-Mail等。

综合服务模型型(Integrated service)

  • 综合服务模型,它可以满足多种QoS需求。
  • 该模型使用资源预留协议(RSVP),RSVP 运行在从源端到目的端的每个设备上,可以监视每个流,以防止其消耗资源过多。
  • 这种体系能够明确区分并保证每一个业务流的服务质量,为网络提供最细粒度化的服务质量区分。
  • 但是综合服务模型对设备的要求很高,当网络中的数据流数量很大时,设备的存储和处理能力会遇到很大的压力。
  • 综合服务模型可扩展性很差,难以在互联网的核心网络实施。它仅适合在专用网络上实施。

区分服务模型(Differentiated service)

  • 区分服务模型如下图所示,是IETF工作组为了克服综合服务模型的可扩展性差而在1998年提出的另一个服务模型,目的是制定一个可扩展性相对较强的方法来保证 IP的服务质量。
  • 在区分服务模型中,根据服务要求对不同业务的数据进行分类,对报文按类进行优先级标记,然后有差别地提供服务。

十、OpenWrt的服务模型

  • OpenWrt采用区分服务模型来提供QoS。区分服务模型是一个多服务模型,它可以满足不同的QoS需求,例如优先保证通过HTTP上网流量。
  • 它采用流量分类、流量整形、拥塞管理和拥塞避免机制来进行QoS。
    • 流量分类:采用一定的规则识别符合某类特征的报文,它是对网络业务进行区分服务 的前提和基础。一般使用 Iptables 来根据端口和报文特征进行分类。
    • 流量整形:当流量被整形时,其传输速率是受到控制。整形可以大大降低使用的带宽,这样是为了更好的网络效应。它也被用来平滑流量的突发大流量。流量整形发生在出口处。
    • 调度:通过调度数据包的传输,可以在提高流量的交互性的同时,仍然保证大容量传 输的带宽。重新排序也被称为划分优先顺序,并且只发生在出口处。
  • 带宽控制用于QoS时,一般用于保障某一类用户的服务质量,在家庭网内部常用于保 障主人的带宽,限制访客的带宽。

十一、工具

  • OpenWrt采用qos-Script来实现QoS,内部使用Iptables和Tc工具来实现QoS。
    • Iptables工具实现数据报文的分类。
    • Tc工具来实现配置Linux内核中优先级队列。Tc工具在iproute2代码包中。Tc的一个关键的概念是QDISC。QDISC 是“queueing discipline”的缩写,是指报文的排队规则,这是理解流量控制的基础。

报文排队规则

  • 当内核需要发送一个数据包到一个接口时,它被排入到配置该接口的队列中。紧接着, 内核试图从队列获得尽可能多的数据包,把它们交由网络适配器驱动程序来处理。一个最 简单的 QDISC 队列是“PFIFO”,它根本没有特别处理,是一个纯粹的先进先出队列。当 网络接口不能瞬间处理完成时,它能存储部分流量。
  • 类别:一些排队规则可以包含类,这些类又进一步包含了另外的排队规 则——流量可以在任何类内部排队规则。当内核试图取出一个数据包时,就可以来自任 何一个类的分类排队规则。排队规则可以在特定类别的队列中优先处理某些特定类型的 流量。
  • 过滤器用于数据包分类,以确定哪一类数据包将加入队列中。当流量到达带有子类的 类时,数据包需要进行分类。各种方法都可以这样做,其中一个是过滤器。附着在类中的 所有过滤器被调用,直到其中一个返回一个决定。如果没有判决做出,其他标准可能是可 用的。每一个排队规则都是不同的处理。需要注意,过滤器位于排队规则内部,它们不能 独立存在。详细内容请参考Tc手册。

十二、配置Qos软件包

qos-scripts软件包

  • 在make menuconfig时,选择qos-scripts软件包:“Base system” ==> "qos-scripts"。
  • 编译后生成的软件包为qos-scripts。

sqm-scripts、wshaper软件包

  • 在OpenWrt中至少还有其他两个QoS软件包分别为sqm-scripts和wshaper。
  • 不能同时安装两个QoS软件包,因为它们均使用了Tc和iptables,并且按照不同的标准进行报文分类。

十三、配置文件(/etc/config/qos)

  • QoS的UCI配置文件为/etc/config/qos,如何进行报文分类才能得到好的性能,这取决于应用程序。
  • 通常有两个处理原则:
    • 优先处理小包。例如 TCP-ACKs 和 DNS 等。
    • 优先处理用户交互的报文。例如 SSH 等协议。
  • QoS-script的默认配置将域名请求和SSH访问作为优先规则。通常域名请求负载非常小,并且用户在上网时的第一步请求动作,用户通常会等待上网请求页面,因此设置为最 高优先级。SSH也是同样的原因,用户和服务器之间交互,用户等待服务器的响应。这样将对用户非常友好。QoS配置非常复杂,此处不再讲述。

十四、SMTP介绍

  • SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是用于由源地址到目 的地址传送邮件的传输协议,由它来控制电子邮件的传输方式。
  • SMTP协议建立在TCP协议之上,它帮助每台计算机在发送或中转信件时找到目的地址。
  • 路由器通过SMTP协议所指定的服务器就可以把电子邮件寄到收信人的服务器上。

十五、邮件的格式

  • 邮件的内容格式:包含邮件消息头和消息体,消息头和消息体之间由一个空行分隔。

十六、ssmtp软件包

  • OpenWrt使用sSMTP 软件包来支持邮件发送。sSMTP是一个简单的邮件发送客户端, 它不需要一个后台进程,不能接收邮件仅可以发送邮件。

①在系统中安装

  • 通过以下命令进行安装:
opkg update

opkg install ssmtp
  • 在安装完成后 sSMTP 会链接到 sendmail,配置文件会安装到以下位置。
/etc/ssmtp/ssmtp.conf

/etc/ssmtp/revaliases

②在编译源码时安装

  • sSMTP 并不会默认选择编译,首先将 sSMTP 软件包从可选仓库中加入到选择列表中。
./scripts/feeds install ssmtp
  • 然后在make nenuconfig时,通过“Mail→ssmtp”进行选择。

  • sSMTP编译脚本位于package/feeds/packages/ssmtp目录下,编译完成后的软件包名称为ssmtp。

十七、ssmtp命令格式

  • 发送命令接口格式如下:
ssmtp [ flags ] 目的地址 < file
  • 选项如下:
    • -t:从消息内容中读取目的接收者。
    • -v:详细输出程序执行步骤。
    • -au username:指定 SMTP 认证用户名。
    • -ap password:指定 SMTP 认证密码。
    • -Cfile:不读取默认配置,使用指定配置文件。

十八、演示案例

  • 如下所示的是一个示例邮件内容(msg.txt),包含收件人和抄送收件人,邮件主题为“Hello OpenWrt route”,邮件消息头和邮件内容之间有一个空行,最后是邮件正文。
To:zyz323@163.com
CC:zyz323@sohu.com
Subject: Hello OpenWrt route

test. Hello Openwrt bjbook.net
  • 在发送邮件之前,我们需要配置邮件账户和服务器信息:
echo "mainhub=smtp.163.com" >> /etc/ssmtp/ssmtp.conf

echo "rewriteDomain=163.com" >> /etc/ssmtp/ssmtp.conf

echo "root:zyz323@163.com:smtp.163.com" >> /etc/ssmtp/revaliases
  • 写好邮件之后我们使用命令来发送邮件,发送命令接口格式如下:(请替换为实际的账号和密码)
ssmtp -f username au username@163.com -ap password -s zyz323@163.com -v <msg.txt

十九、NTP简介

  • NTP(Net Time Protocol)是用于互联网上计算机时间同步的协议。其中有NTP服务器来提供网络时间服务,客户端从服务器获取时间。

二十、OpenWrt的NTP服务

  • OpenWrt 路由器中内置了一些常用的NTP 时间服务器地址,一旦与因特网连接后,路由器可以自动从时间服务器获取当前时间, 然后设置到路由器系统当中。
  • OpenWrt默认支持内置的网络时间服务器,在配置文件/etc/config/system中设置。该选项用来设置NTP时间服务器的IP地址,可以设置多个网络时间服务器。

  • 注意:
    • 关闭路由器电源后,没有电池的路由器时间信息会丢失,只有再次开机连上因特 网后,路由器才会自动获取 GMT 时间。
    • 必须先设置系统时间后,路由器的防火墙的时间限定才能生效。
    • 另外可以不采用NTP时间,通过date命令来手动设置系统时间。

二十一、date命令

  • 可以不采用NTP时间,通过date命令来手动设置系统时间。
  • 在调试时我们可以使用date命令手动设置路由器的时间,然后等待路由器进行时间更新。
  • date命令如果没有指定选项,则默认输出当前时间。
  • 设置时间需要传递一个-s选项,后面再以引号传递时间字符串。推荐使用 “YYYY-MM-DD hh:mm:ss”的格式进行时间设置:
date –s '2019-10-18 00:00:00'

二十二、openwrt的NTP服务器(/etc/init.d/sysntpd)

  • OpenWrt 也支持提供NTP服务器,可以控制配置文件来打开和关闭NTP服务器,系统重启后生效。

  • 也可以通过调用/etc/init.d/sysntpd restart命令生效,然后再重新设置配置文件。
uci set system.ntp.enable=1

uci commit system 

二十三、uHTTPd概念

  • uHTTPd 是 OpenWrt/LuCI 开发者从零开始编写的 Web 服务器,目的是成为优秀稳定 的、适合嵌入式设备的轻量级任务的 HTTP 服务器,并且和 OpenWrt 配置框架非常好地 集成在一起。它是管理 OpenWrt 的默认的 Web 服务器,还提供了现代 Web 服务器所有的 功能

二十四、uHTTPd支持的技术

  • uHTTPd支持TSL(SSL)、CGI和 Lua,是单线程运行但支持多个实例,例如多个监听端口,每一个都有自己的根目录和其他特性
  • 使用TLS(HTTPS 支持)时需要安装uhttpd-mod-tls模块
  • 和许多其他的Web服务器一样,它也支持在进程内运行Lua,这样可以加速Lua CGI脚本。注意这依赖于Lua,默认情况下没有这样配置

二十五、安装

  • uHTTPd是OpenWrt 的标准HTTP服务器,但是它默认并不会安装在OpenWrt发行版的系统文件中。因为默认的发行版并不包含 Web 用户管理界面,通常 uHTTPd 会作为 Web 接口 LuCI 的依赖模块自动安装
  • 如果需要单独安装,可以通过以下命令来实现:
opkg update

opkg install uhttpd

二十六、启动脚本

  • uHTTPd也提供一个初始化脚本/etc/init.d/uhttpd来启动或停止服务,或者在系统启动时自动启动

二十七、配置文件(/etc/config/uhttpd)

  • uHTTPd的配置和OpenWrt用户接口系统UCI完全集成在一起。UCI配置文件是/ etc/config/uhttpd
  • 由于uHTTPd直接依赖这文件,因此当UCI设置提交时没有第二个配置文件需要重新生成。uHTTPd是UCI系统配置的一部分

配置文件内容

  • uHTTPd有两个配置节定义,类型uHTTPd包含了通用的服务器设置

  • cert部分:定义了加密连接SSL证书的默认值,在局域网中一般不使用,因此不再介绍

  • 配置文件中必须包含文档根目录(home)和HTTP监听端口

名 称类 型含 义
listen_http字符串定义服务器的 IP 和端口。指所监听的非加密的地址和端口。如 果仅给出端口号,将同时服务于 IPv4 和 IPv6 请求。使用 0.0.0.0:80 仅绑定在 IPv4 接口,使用[::]:80 仅绑定 IPv6
home目录路径定义服务器的文档根目录
max_requests整型数字最大的并行请求数,如果大于这个值,后续的请求将进入排队队 列中
cert文件路径用于 HTTPS 连接的 ASN.1/DER 证书。在提供 HTTS 连接时必须 提供
key文件路径用于 HTTPS 连接的 ASN.1/DER 私钥。在提供 HTTPS 连接时必 须提供
cgi_prefix字符串定义 CGI 脚本的相对于根目录的前缀。如果没有该选项,CGI 功能将不支持
script_timeout整型数字Lua 或 CGI 请求的最大等待时间秒值。如果没有输出产生,则超 时后执行就结束了
network_timeout整型数字网络活动的最大等待时间,如果指定的秒数内没有网络活动发 生,则程序终止,连接关闭
tcp_keepalive整型数字tcp 心跳检测时间间隔,发现对端已不存在时则关闭连接。设置 为 0 则关闭 tcp 心跳检测
realm字符串基本认证的域值,默认为主机名,是当客户端进行基本认证的提 示内容
config文件路径用于基本认证的配置文件


  • 我是小董,V公众点击"笔记白嫖"解锁更多OpenWrt资料内容。

相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页