SD-WAN终端研发系列01 技术全景:从业务需求到系统架构
本文是”OpenWrt嵌入式SD-WAN终端开发”系列的第1篇。后续文章将逐步深入OpenWrt系统原理、编译体系、定制开发、4G集成、流量分流、Agent移植和OTA升级等具体技术环节。
一、问题背景:企业广域网为什么需要SD-WAN
企业的分支机构和总部之间需要通过广域网(WAN)进行互联。传统方案通常依赖运营商提供的专线(如MPLS VPN),这种方式虽然稳定可靠,但成本高、开通周期长,且难以灵活调整带宽。
与此同时,企业分支往往同时拥有多条互联网链路——有线宽带、4G/5G蜂窝网络,甚至不同运营商的多条线路。如何智能地利用这些链路,让关键业务走高质量通道,让普通业务走经济通道,就是软件定义广域网(SD-WAN)要解决的核心问题。
SD-WAN(Software-Defined WAN)的基本思路是:将网络的”控制面”和”数据面”分离——控制面由集中式的管理平台(控制器)负责,数据面由部署在各分支的终端设备(CPE)负责。控制器决定流量该怎么走,CPE负责实际转发。这种分离让网络策略的统一下发和动态调整成为可能。
二、SD-WAN终端设备的角色
在SD-WAN架构中,终端设备通常称为CPE(Customer Premises Equipment,客户侧设备)。它部署在企业分支机构的出口位置,上联总部或云端控制器,下联企业内网。CPE需要具备以下能力:
- 多链路接入:同时管理有线WAN和4G蜂窝链路,甚至多条不同运营商的线路
- 智能流量调度:根据业务类型、链路质量、策略规则,将不同流量引导到不同链路
- 隧道封装:将流量封装在安全隧道中传输,常见的有L2TP、IPSec等
- 远程管理:接受控制器的远程配置、监控和固件升级
在本文涉及的方案中,CPE的硬件载体是工业级无线路由器,运行的操作系统是OpenWrt,核心业务软件是部署在设备上的Agent程序。
三、终端的三种业务模式
一个SD-WAN终端通常需要同时支持多种业务场景。在本方案中,定义了三种隧道类型:
3.1 虚拟专线
虚拟专线的目的是让企业指定的业务流量通过加密隧道,经由运营商骨干网络到达对端。从企业分支的使用者来看,就好像存在一条专用的物理线路一样。
典型场景:企业的ERP系统、内部OA等服务部署在总部机房,分支机构的员工需要安全、稳定地访问这些服务。
技术实现上,虚拟专线使用L2TP协议建立隧道(接口名通常为tunnel0),并通过域名分流机制实现”哪些流量走隧道,哪些流量走本地”的精确控制。
3.2 海外加速
海外加速用于解决国内用户访问海外服务的网络质量问题。通过在海外节点部署加速服务器,将需要访问海外的流量引导到加速通道,绕过公共互联网的拥堵节点。
典型场景:企业需要访问海外SaaS服务(如Google Workspace、Microsoft 365等),但公共互联网到海外的延迟和丢包率较高。
技术实现上,海外加速涉及到DNS防污染(如ChinaDNS-ng、mosdns等方案)和加速隧道的结合,以及可选的深度包检测(DPI)来做应用识别。
3.3 智能组网
智能组网实现多个节点之间的任意互联,形成类似”全网状”的拓扑结构。不同于传统的星型(Hub-Spoke)结构,智能组网支持节点到节点的直接通信。
典型场景:企业在多个城市有分支机构,分支机构之间需要直接传输大文件或进行视频会议,不希望所有流量都绕经总部。
技术实现上,智能组网需要动态维护节点间的路由信息。当隧道建立或断开时,路由表需要实时更新。主备隧道的设计提供了链路冗余能力。
四、终端系统的技术栈全景
基于上述业务需求,终端系统的完整技术栈可以分层来看:
┌─────────────────────────────────────────────────┐
│ 业务应用层 │
│ Agent(远程管理 / 隧道控制 / 策略执行) │
├─────────────────────────────────────────────────┤
│ 系统服务层 │
│ procd / dnsmasq / iptables / ipset / mwan3 │
│ hotplug / sqm-qos / watchdog │
├─────────────────────────────────────────────────┤
│ 配置管理层 │
│ UCI (Unified Configuration Interface) │
│ UBUS (进程间通信) / LuCI (Web界面) │
├─────────────────────────────────────────────────┤
│ 操作系统层 │
│ Linux Kernel / squashFS / JFFS2 / overlay │
├─────────────────────────────────────────────────┤
│ 硬件平台层 │
│ MT7628 / MT7621 (MIPS) / IPQ8072A (ARM) │
│ Flash / RAM / 4G Module / WiFi / Ethernet │
└─────────────────────────────────────────────────┘
4.1 硬件平台
SD-WAN终端使用的硬件通常是工业级无线路由器,核心芯片以联发科(MediaTek)的MIPS架构SoC为主流选择:
- MT7628:单核880MHz,适合成本敏感的入门级设备
- MT7621:双核880MHz,性能更好,是中高端设备的主流选择
在更高性能需求的场景下,也可以选择高通(Qualcomm)的ARM架构SoC:
- IPQ8072A:四核2.2GHz,支持WiFi 6和更多天线
- IPQ4019:四核760MHz,性能够用但成本较高
选型时需要综合考量:CPU性能(DPI等特性对算力要求高)、OpenWrt版本兼容性(部分芯片的官方SDK基于较旧的OpenWrt版本)、Flash和RAM容量(影响可安装的软件包数量)以及4G模块支持。
4.2 操作系统:OpenWrt
OpenWrt是一个专为嵌入式设备设计的Linux发行版,具有以下特点使其成为SD-WAN终端的理想选择:
- 高度可定制:可以从源码编译,精确控制固件中包含的组件
- 包管理系统:通过opkg工具安装、更新、卸载软件包
- 统一的配置接口:UCI(Unified Configuration Interface)用统一的格式管理所有系统配置
- 丰富的网络功能:内置防火墙、QoS、多WAN负载均衡等企业级网络特性
- 活跃的社区:大量的软件包和文档资源
OpenWrt的历史可以追溯到2002年Linksys WRT54G路由器的开源固件,中间经历了LEDE分支的分出与合并,目前是嵌入式网络设备领域最活跃的开源项目之一。
4.3 配置管理系统:UCI/UBUS/LuCI
OpenWrt提供了一套完整的配置管理基础设施:
UCI(Unified Configuration Interface)是OpenWrt的统一配置系统。所有系统级配置——网络、防火墙、DHCP、系统参数等——都以文本格式存储在/etc/config/目录下。UCI提供命令行工具(uci)、C库和Lua绑定,让应用程序可以读写这些配置。
UBUS是OpenWrt的进程间通信机制。系统中的各个守护进程通过UBUS注册自己的服务,其他进程可以通过调用UBUS方法来获取状态或执行操作。例如,网络守护进程(netifd)通过UBUS暴露接口状态,Agent程序可以通过UBUS查询或修改网络配置。
LuCI是OpenWrt的Web管理界面。在19.07版本之后,LuCI从基于Lua的实现转向了基于JavaScript的客户端渲染方案(LuCI2),通过UBUS接口与后端交互。
4.4 Agent程序
Agent是部署在终端设备上的核心业务程序。它承担以下职责:
- 与控制器通信:通过WebSocket或MQTT与云端控制器保持长连接
- 接收配置指令:根据控制器下发的策略,在本地创建隧道、配置分流规则
- 上报设备状态:定期上报链路质量、流量统计、设备健康状态等信息
- 执行本地操作:通过UCI、UBUS或直接调用Shell脚本完成路由、防火墙、DNS等配置变更
在资源受限的嵌入式环境中部署Agent,需要解决运行时环境、依赖库、交叉编译、进程守护等一系列工程问题。
五、从需求到实现:一条典型的技术路径
理解了整体架构之后,我们来看将一个SD-WAN终端从零到部署需要经历哪些技术环节。这也是本系列后续文章将逐个展开的主题:
业务需求定义
↓
硬件选型(芯片平台、Flash/RAM、4G模块)
↓
OpenWrt系统移植
├── 内核适配(添加新设备型号的DTS)
├── 4G模块驱动集成(修改内核USB驱动源码、打补丁)
└── 默认配置定制(管理密码、地址、WiFi、MAC地址)
↓
固件编译与打包
├── 编译环境搭建(SDK/Toolchain配置)
├── 软件包管理(feeds源、Makefile编写、ipk打包)
└── 固件构建(menuconfig → make → 固件输出)
↓
业务软件部署
├── 运行时环境部署(交叉编译或预编译包)
├── Agent程序移植(依赖库处理、代码保护)
└── 系统服务集成(procd守护、自启动配置)
↓
核心功能实现
├── 虚拟专线隧道建立(L2TP)
├── 域名/IP分流(ipset + dnsmasq + 策略路由)
└── 多链路管理(WAN/4G切换、mwan3)
↓
运维体系建设
├── 远程OTA升级(MQTT + 阿里云IoT)
├── 看门狗监控
└── 远程调试(GDB、SSH/SFTP)
六、本系列文章索引
| 篇号 | 标题 | 核心内容 |
|---|---|---|
| 1 | SD-WAN终端技术全景(本文) | 业务需求、系统架构、技术栈全貌 |
| 2 | OpenWrt系统原理:启动、分区与文件系统 | U-Boot启动、MTD分区、overlay文件系统、网络初始化 |
| 3 | OpenWrt编译体系:从源码到固件的全链路 | 编译目录结构、编译流程、SDK与Toolchain、Makefile编写 |
| 4 | OpenWrt定制化开发:网络初始化、MAC地址与默认配置 | board_detect、config_generate、MAC地址读取、默认配置修改 |
| 5 | 在OpenWrt上集成4G模块:从内核驱动到自动拨号 | USB驱动修改、内核补丁、AT指令测试、自动拨号脚本 |
| 6 | SD-WAN虚拟专线的流量分流实现 | ipset、dnsmasq域名分流、策略路由、hotplug自动恢复 |
| 7 | 嵌入式Agent开发:从交叉编译到稳定部署 | 交叉编译、空间优化、系统集成、进程管理、远程调试 |
| 8 | OpenWrt远程OTA升级方案设计与实现 | MQTT协议、阿里云IoT SDK、OpenWrt包开发、升级流程 |
下一篇将深入OpenWrt系统内部,从设备上电开始,逐层剖析启动流程、Flash分区结构和overlay文件系统的工作原理。