天天看點

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 用于伺服器來發現用戶端可以通路的配置參數。
Inform CPE 調用伺服器的 Inform 方法來建立和伺服器之間的傳輸會話。
AddObject 用于伺服器來針對多執行個體對象來建立新的執行個體。
DeleteObject 伺服器删除用戶端多執行個體中的一個執行個體。

三、用戶端、服務端互動過程

  • 為适應終端數量巨大并且位址不固定的特性,TR069 定義的互動流程中,管理互動通常都是由 CPE 發起的,由 CPE 來“請求”ACS 進行管理(見下圖)。當 ACS 希望啟動對 CPE 的管理時,協定定義了一個反向觸發機制。CPE 建立一個用于偵聽的 HTTP 端口,這 個端口位址資訊在 CPE 初始連接配接時上報給 ACS,當 ACS 希望對 CPE 進行管理時,ACS 向 該端口建立傳輸控制協定連接配接并發送空的 POST 請求封包,CPE 收到該請求封包後随即啟 動正向的 HTTP/HTTPS 連接配接,請求自動配置伺服器的管理。
OpenWrt開發必備軟體子產品——網絡管理(CWMP、SSH、QoS、SMTP、NTP、uHTTPd)
  • 第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 [email protected]:/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 處監聽。
OpenWrt開發必備軟體子產品——網絡管理(CWMP、SSH、QoS、SMTP、NTP、uHTTPd)

八、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開發必備軟體子產品——網絡管理(CWMP、SSH、QoS、SMTP、NTP、uHTTPd)

十、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。
OpenWrt開發必備軟體子產品——網絡管理(CWMP、SSH、QoS、SMTP、NTP、uHTTPd)
OpenWrt開發必備軟體子產品——網絡管理(CWMP、SSH、QoS、SMTP、NTP、uHTTPd)

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”進行選擇。
OpenWrt開發必備軟體子產品——網絡管理(CWMP、SSH、QoS、SMTP、NTP、uHTTPd)
OpenWrt開發必備軟體子產品——網絡管理(CWMP、SSH、QoS、SMTP、NTP、uHTTPd)
  • sSMTP編譯腳本位于package/feeds/packages/ssmtp目錄下,編譯完成後的軟體包名稱為ssmtp。
OpenWrt開發必備軟體子產品——網絡管理(CWMP、SSH、QoS、SMTP、NTP、uHTTPd)

十七、ssmtp指令格式

  • 發送指令接口格式如下:
ssmtp [ flags ] 目的位址 < file           
  • 選項如下:
    • -t:從消息内容中讀取目的接收者。
    • -v:詳細輸出程式執行步驟。
    • -au username:指定 SMTP 認證使用者名。
    • -ap password:指定 SMTP 認證密碼。
    • -Cfile:不讀取預設配置,使用指定配置檔案。

十八、示範案例

  • 如下所示的是一個示例郵件内容(msg.txt),包含收件人和抄送收件人,郵件主題為“Hello OpenWrt route”,郵件消息頭和郵件内容之間有一個空行,最後是郵件正文。
To:[email protected]
CC:[email protected]
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:[email protected]:smtp.163.com" >> /etc/ssmtp/revaliases           
  • 寫好郵件之後我們使用指令來發送郵件,發送指令接口格式如下:(請替換為實際的賬号和密碼)
ssmtp -f username au [email protected] -ap password -s [email protected] -v <msg.txt           

十九、NTP簡介

  • NTP(Net Time Protocol)是用于網際網路上計算機時間同步的協定。其中有NTP伺服器來提供網絡時間服務,用戶端從伺服器擷取時間。

二十、OpenWrt的NTP服務

  • OpenWrt 路由器中内置了一些常用的NTP 時間伺服器位址,一旦與網際網路連接配接後,路由器可以自動從時間伺服器擷取目前時間, 然後設定到路由器系統當中。
  • OpenWrt預設支援内置的網絡時間伺服器,在配置檔案/etc/config/system中設定。該選項用來設定NTP時間伺服器的IP位址,可以設定多個網絡時間伺服器。
OpenWrt開發必備軟體子產品——網絡管理(CWMP、SSH、QoS、SMTP、NTP、uHTTPd)
  • 注意:
    • 關閉路由器電源後,沒有電池的路由器時間資訊會丢失,隻有再次開機連上因特 網後,路由器才會自動擷取 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伺服器,系統重新開機後生效。
OpenWrt開發必備軟體子產品——網絡管理(CWMP、SSH、QoS、SMTP、NTP、uHTTPd)
  • 也可以通過調用/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來啟動或停止服務,或者在系統啟動時自動啟動
OpenWrt開發必備軟體子產品——網絡管理(CWMP、SSH、QoS、SMTP、NTP、uHTTPd)

二十七、配置檔案(/etc/config/uhttpd)

  • uHTTPd的配置和OpenWrt使用者接口系統UCI完全內建在一起。UCI配置檔案是/ etc/config/uhttpd
  • 由于uHTTPd直接依賴這檔案,是以當UCI設定送出時沒有第二個配置檔案需要重新生成。uHTTPd是UCI系統配置的一部分

配置檔案内容

  • uHTTPd有兩個配置節定義,類型uHTTPd包含了通用的伺服器設定
  • cert部分:定義了加密連接配接SSL證書的預設值,在區域網路中一般不使用,是以不再介紹
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資料内容。

繼續閱讀