2021年5月3日 星期一

Opensync 管理器 (Managers) 簡介

Opensync 管理器 (Managers) 簡介

OpenSync由十九個獨立的程式組成,每個程式有其獨立的功能。由於功能上的相關性,可以分為以下四組,並且依照順序啟動。當然如果熟悉了之後,可以有選擇地不要啟動列為”Optional”的管理程式。這取決於完整系統定義的功能。

下面就是這些程式的簡單說明,之後每一個Manager會有專章進行討論:

1. OpenSync 的基礎程式

1-a. Diagnostics Manager (DM)

DM (診斷經理)是第一個需要啟動的程式。它負責啟動其餘的OpenSync管理器,並有選擇性監控它們。這裡說的選擇性是DM有兩個程式介面,可以在啟動與停機時,呼叫廠商掛上的監控程式。

DM除了啟動其他管理程式外,如果這些管理程式掛了,他還會產生 Crash Report,裡面會記錄當機時間、程式的PID、當掉的理由等等;這些報告會透過MQTT送到雲端的系統中。除了本機之外,DM也可以收集網路節點的當機資訊(例如何時當機、當機頻率等等)。

1-b. Connection Manager (CM(2))

CM2負責建立主幹(Backhaul)連接,並通過IPv4或IPv6保持與雲端管理系統的連接。CM使用以下步驟來與雲端管理系統連接:

1. 上行網路(Uplink)的選擇,依照設備類型(Gateway or Extender)有不同的方法):

Gateway: 對於網關設備,上行鏈路始終是電纜端口(以太網,光纖,同軸電纜等)。在這種情況下,不使用特殊邏輯,僅監視與控制器的連接。

Extender: 在這種情況下,CM要選擇適當的上行鏈路端口,也許是有線端口(RJ45)或Wi-Fi Backhaul。

2.從AWLAN_Node OVS表中的redirector_addr得到 host name的IP地址。

3.建立與 redirector的連接。

4.通過 redirector 得到雲端管理系統的IP地址。

5.將CM連接到雲端管理系統。

6.監視鏈路穩定性 (會不會一直重複發生斷線的狀況)。

c. Captive Portal Manager (CPM)

這個功能叫做Guest Network,就是家裡面如果有客人來,例如客人、佣人、褓姆臨時要上網,你不想把家裡密碼給客人使用,就可以用這個功能。

Captive Portal是一個啟動頁面,會在訪客用戶設備上自動打開,提示他們通過開放的訪客Wi-Fi登錄,登錄成功之後就可以上網。由於此功能在應用程程層次上執行,因此節點(Node)和控制器(Controller)必須包括在較低層上建立適當連接方法。此節點獲得用戶憑據後,即可使用AAA Server來做客戶端管理。

CPM在OpenSync設備上扮演代理服務的角色,該服務可對在Wi-Fi網路切割獨立的部分,對第三方(來賓)的客戶端裝置上進行身份驗證。來賓客戶端設備通過外部Captive Portal服務器進行身份驗證。

CPM具有以下角色:

− 識別需要進行身份驗證的流量。

− 將流量路由到代理服務。

− 將代理服務從收到的HTTP port 80流量傳遞到雲端系統中運行的UAM (Universal Access Method) / NAS服務。

如果對於這裡運作有疑問,下面連接有不錯的範例與解釋:

https://help.keenetic.com/hc/en-us/articles/360000501439-Captive-portal

CPM 預設是關閉的。

1-d. WAN Orchestrator (WANO)

WAN Orchestrator(WANO)負責裝置的Internet連線。WANO啟用設備WAN Port,並啟動必要的服務以啟用Internet連接。

以下是WANO連接網路的步驟:

(1). 建立連接界面:WANO支持以下接口:以太網、VLAN和PPPoE。

(2). 端口角色檢測和WAN探測:

a. WANO自動配置Ethernet Port,並設定Port角色,這裡會啟用自動檢測功能,找出以下三種角色的其中之一:WAN 連接、Ethernet 主幹、Ethernet的延伸。

b. 在WAN設置之前,啟動保全機制,並啟用防火牆規則。

C. 在可用的WAN接口上,啟動的WANO probing (探針):

-  在設備上沒有對WAN進行的設定的話,WANO會預設為DHCP探測。
-  如果裝置設定為靜態IP地址,WANO探測已知的互聯網主機。
-  WAN設定為PPPoE或VLAN。

(3).網路配置:WANO負責在設備上進行WAN後續設定。

2.基本的網路架構設定

2-a. Wireless Manager (WM2)

WM2負責Wi-Fi子系統(例如VAP (Virtual Access Point)、SSID /密碼、主幹(Backhaul)、Channel等)的設置和配置。WM2還負責監視Wi-Fi狀態和客戶端連接/斷開連接。

一開始啟動的時候,WM2會讀取當前設備的配置,並更新相關的Config和State表。雲端管理系統使用型號名稱的無線頻率與介面接口,來正確設置無線裝置的參數。WM2具有以下角色:

  • 在以下表中的資訊不匹配時,呼叫Target API來進行設備設定:
    • Wifi_Radio_Config與Wifi_Radio_State
    • Wifi_VIF_Config與Wifi_VIF_State

  • 通過Wifi_Associated_Clients Table,報告已連接的Client與其Metadata。
  • 每當STA VIF 連接狀態改變的時候,更新Wifi_Master_State表中的port_active欄位,並通知CM。這功能用於Wi-Fi Extender的啟動和上行網路連接設定。

2-b. Network Manager (NM)

NM負責管理所有與網路相關的配置和網路狀態報告,這是功能比較多的Manager。主要功能包含:

    • 管理IPv4 / IPv6地址(Static、DHCP)
    • 創建和終結網絡接口(Wi-Fi接口除外,請參閱WM(Wireless Manager))
    • 配置網路接口的參數(MTU、Up / Down State)
    • 管理DNS和DNSMASQ服務
    • 管理防火牆規則(filtering, port forwarding)
    • 啟動/停止各種網路服務 (UPnP、DHCP Server and Client)
    • 管理GRE隧道(GRE Tunnels)
    • 管理橋接的接口(Bridge Interface)
    • 關聯Client端的DHCP fingerprint reporting
    • 管理DHCP保留的IP

NM可以管理OVS 橋接器、傳統橋接器 (缺少HomePass™之類的功能)、網絡接口及其配置、Wi-Fi接口 (Access Point 和 Station)。

Cloud schema是使用擴充的OVSDB schema,該schema已經提供了配置OVS橋接器的所有必要方法。但有時Bridge裝置的上傳介面是Wi-Fi,但如果不與Wi-Fi層進行互動,則無法完全配置Wi-Fi接口。NM在Wi-Fi管理部分必須要與WM偕同一致以提供完整的功能。

2-c. Netfilter Manager (NFM)

Netfilter 一個User Space的Linux公用程式,使用iptable來控制封包與流向(Data Flow)。NFM藉由 Netfilter 提供以下功能:

− 封包過濾(Packet filtering),防火牆功能(Firewalling)
− 封包的紀錄(Packet logging)
− 封包的排隊(Packet queueing)
− 封包的處理)Packets mangling) (例如依照封包的標頭和標記做一些特別的處理)。
− 網路和端口地址轉換(Network and port address translation)
− 讀取、解析NFLOG數據包,然後用JSON格式,透過MQTT發送給雲端系統。

2-d. QoS Manager - QoSM

QoS 設定網路封包的處理先後順序,例如語音、視訊要有優先通過,以維持比較好的用戶體驗。這些設定包含:

− Queue的先後順序(Queue priorities)。
− 保留給Queue的最大頻寬(Maximum queue bandwidth)。
− 封包的優先順序(Packet prioritization)。 

3. Optional, needed for additional features

3-a. Queue Manager (QM)

QM負責緩衝來自SM、BM和FCM的MQTT訊息。即使Up Link連接斷開(例如主幹網路瞬時故障、ISP服務中斷等等),也嘗試不丟棄任何訊息。訊息使用Google的protocol buffers進行編碼。報告內的多條訊息將合併為一條訊息。 其他管理器使用Unix Socket與QM進行通信。
Google的protocol buffers 請參考一下連結:
https://developers.google.com/protocol-buffers/docs/proto

3-b. Statistics Manager (SM)

統計管理器(SM)負責處理所有有關於無線網路的統計請求(Request),並將結果發送到雲端管理系統。當MQTT用於數據平面時,配置通過OVSDB完成。
以下用一個收集客戶端的頻率為例,來說明說明收集和發送統計信息的過程(不是真實的統計數據,僅是用來舉例說明用的):
雲端管理系統可以設置了一個計時器,以10秒的頻率,收集一次客戶端的頻率信息,另一個計時器用於每120秒發送一次客戶端報告。如果發生Timeout,便呼叫Target Layer(API) 測量客戶端裝置的頻率。
Target Layer(API) 也許會呼叫Kernel API讀取相關數值。Target Layer(API)還負責將其測量的數據資料結構轉換為SM期望的格式(格式定義於OpenSync的Data Pipeline(簡寫為DPP) Library中)。
各種量測值會存儲到報告中,也會與其他量測的數據合併在一起,並可進行進一步處理和操作。當報告的計時器timeout時,該報告被發送到QM (Queue Manager),QM 將來自不同管理器的報告合併為一個報告,透過MQTT發送到雲端管理平台。

3-c. Band steering Manager (BM)

負責根據每個客戶端的配置、Wi-Fi信號/雜訊的強度和雲端管理系統提供的觸發條件(Trigger),將Wi-Fi裝置引導到不同的頻段(2.4GHz or 5GHz稱之為band steering)或不同的AP(稱之為Client Steering)。這是Smart Mesh之中最基本的功能。

3-d. Log Manager (LM – deprecated, included as a part of PM plugin)

Log Manager負責根據Cloud請求(logpull)收集和上載裝置的日誌和系統信息,並依照日誌的嚴重性設定處理的模組。

3-e. Platform Manager (PM)

PM負責:
- 設備GUI和雲端管理系統之間的暱稱同步。
- 雲端管理系統通知設備凍結(Parental Control功能)(OpenFlow must disabled)
- 通過調節風扇轉速來進行設備的熱度管理
- 設備的LED管理。

3-f. Exchange Manager (XM)

Exchange manager 主要執行OVSDB 與其他管理系統之中交換資料(例如與 TR-069/369 之間)。基本上這是一個雙向的同步功能(e.g., OVSDB <-> TR-181)。

3-g. Upgrade Manager (UM)


收到來自雲端管理系統的觸發後,UM確保設備韌體升級過程完成。 雲端管理系統為所選客戶位置上的所有節點精心安排了韌體升級過程。
雲端管理系統使用以下命令啟動更新:
  • - 可用的韌體image URL
  • - 雲端管理系統期望韌體下載的下載時間(例如半夜三點開始下載升級)。
  • - 韌體密碼(如果韌體image已加密) (可選)
每次韌體image下載成功之後,設備都會通過OVSDB AWLAN_Node Table的upgrade_status欄位報告成功。此時,雲端管理系統將更新升級計時器。計時器更新之後,設備開始升級韌體過程。
如果升級成功,則設備將通過upgrade_status 欄位再次報告成功。雲端管理系統隨即進行設備重啟。

3-h. LTE Manager (LTEM)

LTE管理器(LTEM)負責在檢測到Internet中斷後,將網路流量從WAN切換到LTE備份。LTEM會監視WAN Link是否發生L2或L3中斷,並在發生WAN中斷時向LTE接口添加預設路由。當WAN接口恢復聯機時,LTEM刪除LTE路由,網路流量再次回到WAN接口。
LTEM還負責在網路切換的時候,為LTE接口添加和刪除DNS Entry。

4. OpenFlow management and configuration

4-a. FlowService Manager (FSM)


4-b. OpenFlow Manager (OM)


4-c. FlowCollection Manager (FCM) 

2021年5月1日 星期六

Open vSwitch簡介

由於想做Opensync,所以決定由基本的核心開始研讀,這核心就是Open vSwitch (簡寫為OVS)。

如果說硬體的Ethernet Switch大家都懂,OVS就是軟體的交換器(switch),所以所有硬體交換器的功能,OVS都有支援。

那有甚麼好處? 那就是說Switch功能可以不斷更新。因為硬體買了就買了,如果有新的功能出來,就只能丟掉,買新的硬體。但是軟體Switch只要更新軟體,便有新功能了。

此外目前在雲端的環境之中,VM的使用是常見的,雖然作業系統早就可以虛擬化了,但是實體網路介面還是有許多介面,因此OVS也可以輕易地提供許多有彈性地應用。下面這張由Wiki抄過來的圖,可以極大化的說明OVS的功能。


但雖然OVS是設計給分散式網路使用,但是更多的應用是利用OVS來在一個機器上建立一堆虛擬機器,然後便可以透過OVS這虛擬的交換器,用標準的網路協定來進行溝通。

下面列一下OVS的功能:

  • 使用通用路由封裝(GRE: Generic Routing Encapsulation)協定,在虛擬機之中的端口之間,建立通道,支援NetFlow、sFlow、IP流信息導出(IPFIX: IP Flow Information Export)、交換端口分析器(SPAN: Switched Port Analyzer )、遠程交換端口分析器(RSPAN: Remote Switched Port Analyzer )等功能。
  • 支援LACP( Link Aggregation Control Protocol, IEEE 802.1AX -2008):就是Switch可以把兩個Ethernet Port與電腦的兩片網卡,分別連接起來,當成一條Ethernet來使用。
  • 支援802.1q VLAN網路,同時支援穿透功能(Trucking)。
  • 支持IGMP 1、2和3,進行multicast snooping。
  • 支援  Shortest Path Bridging Media Access Control (SPBM)及Link Layer Discovery Protocol (LLDP)的相關基本支援。
  • 支持Bidirectional Forwarding Detection (BFD)和802.1ag Link監視。
  • 支持Spanning Tree Protocol(STP, IEEE 802.1D -1998) 和 Rapid Spanning Tree Protocol (RSTP,IEEE 802.1D-2004)。
  • 針對不同應用程序、使用者或數據流的QoS Control。
  • 支援分層公平服務曲線(HFSC: hierarchical fair-service curve)的排隊規則(qdisc )
  • 虛擬機接口上提供流量監管(Traffic policing)。
  • 網卡(NIC)的綁定,通過MAC地址、活動備份和Layer 4 Hash進行負載平衡。Layer 4 Hash也許有些同事沒有聽說過,基本上負載平衡是用兩條網路一起送封包,來加快速度。但是如何決定哪個封包走哪條路? 就有下面的方法:


上圖當中,利用網路封包之中的 Ethernet Header + IP + L4 (Port #)來做出Hash Key,Switch便用Hash結果來決定封包要走哪一條網路介面。


  • 支援OpenFlow通信協議,包括各種與虛擬化相關的擴充。
  • 支援IPv6。
  • 支持多種隧道協議,包括GRE、虛擬可擴展LAN (VXLAN)、無狀態傳輸隧道(STT)和Geneve,並額外支持IPsec上的分層
  • 遠程配置協議,具有針對C和Python編程語言的現有綁定
  • 數據包轉發引擎在內核空間或用戶空間中的實現,通過在不離開內核空間的情況下處理大多數轉發數據包以及使用多線程內核空間和用戶空間組件,提供了更大的靈活性並提供了性能改進。
  • 具有流緩存引擎的多表轉發管道
  • 轉發層抽象化界面(Forwarding layer abstraction),使其更容易將Open vSwitch移植到新的軟件和硬件平台。

下面是 OVS 的系統架構圖,接下來會逐一說明圖中各模組的功能。在此架構圖中,我們看到三個主要的橘色的方塊,這是主要的三個元件: Datapath、vswitchd、ovsdb。分別說明如下:

  • Vswitchd: 這是一隻Linux daemon (常駐程式),他是OVS的主要模組,用以實現交換器的功能。由這架構可以了解,想要好好執行OVS,必須要有比較強力的CPU。
  • Datapath:這是一個以Driver方式存在的Linux Kernel模組,主要用以接收來自網卡的封包。這是因為Switch原先的在網路協定堆疊之中,層次比較低。所以如果要拿出來處理,需要放一個Kernel Module到網卡的上層,才方便將封包送到User Space中的ovs-vswitchd 來處理。上圖中有一個有趣詞 promiscuous mode,大家也許沒有聽過,他中文可以直譯為”混雜模式”。這是指一台電腦的網卡接收所有經過它的封包,而不論其目的地址是否是本機。一般而言,網卡都工作在非混雜模式下,此時網卡只接受來自網路卡的目的地址指向自己的封包。當網卡工作在混雜模式下時,網卡將來自Etehrnet網路中的所有封包,全部接收下來,並交給上面的Datapath Module。有一個著名的封包分析程式 sniffer,就是典型使用”混雜模式”來工作的程式。
  • Ovsdb: 這是一個Local Database,用以搭配 vswitchd,提供資料的暫存與設定。Ovsdb 也提供許多擴充的功能,可以存放系統的資料。

下面依照圖中數字,說明一下資料流程:

(1) 網路卡在混雜模式下,讀取所有來自Etehrnet的封包,送給 Datapath Module。

(2) Datapath Module檢查封包,將需要處理的封包送交 vswicthd deamon處理。

(3) OpenFlow 是數據鏈路層協定(Data Link Layer Protocol),主要控制Switch或Router的轉發原則(forwarding plane),藉此設定網路封包所走的網路路徑。OVS做為一個軟體Switch,vswitchd 同樣支援OpenFlow Protocol,用來設定路由。

(4) 發現需要處理的封包,vswitchd 會更新Flow table。

(5) 如果封包不需要處理,vswitchd 通知 Datapath。

(6) 考慮到如果每一次封包的傳導都要詢問一次 OpenFlow 將導致網路的延遲與沒有效率,已經得知的規則將記錄在 flow table 中,供之後的封包使用。Flow Table每次更新都會通知 Datapath Module。

(7) Datapath 可以根據更新的 flow table來傳導封包。

其他還有一些ovs的管理介面,有以下幾隻程式:

ovs-dpctl: 用來配置 Datapath (OVS Kernel 模組)。

ovs-ofctl: 查詢和控制 OpenFlow 的規則 (policy)。

ovsdb-tool: ovsdb 的設定工具。

ovs-vsctl: 查詢和更新 vswitchd 的配置。

上圖之中,還有一個方塊是sFlow,這是一個網路常常使用的流量分析工具,通常在L2 Switch上面會有SFlow Agent,就可以讓sFlow collectors 讀取資料,然後來做一些分析。OVS上面也有支援 sFlow agent的功能。詳細資料可以參考一下的連結:

https://docs.openvswitch.org/en/latest/howto/sflow/