本文是”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文件系统的工作原理。