Yeti-Switch 介绍与选型指南
Yeti-Switch v1.15.42 开源电信级 Class 4 SIP Softswitch + SBC + 实时计费一体化平台选型指南:架构澄清(底层 SEMS 非 FreeSWITCH)、核心特性、与 FreeSWITCH/Asterisk/Kamailio/FusionPBX 量化对比。
Yeti-Switch 介绍与选型指南
目标:系统介绍 Yeti-Switch v1.15.42 作为开源电信级 Class 4 SIP Softswitch + SBC + 实时计费一体化平台的定位、架构与核心能力,并用量化维度(社区活跃度、版本节奏、支持协议、计费深度、部署形态)给出与 FreeSWITCH / Asterisk / Kamailio / FusionPBX / 3CX 的选型对比与场景决策建议。本文全部数据来自官网 yeti-switch.org、changelog、demo 系统与 SEMS 上游(检索日期 2026-10-27),A1 认知篇未做本地搭建实验。
一、环境信息
- 操作系统:N/A(A1 认知篇,联网溯源)
- 检索日期:2026-10-27
- 参考版本:Yeti-Switch 1.15.42(官网 changelog 1.13.29 → 1.15.42 跨度,1.15.42 为 2026-10 最新稳定)
- 下游组件版本锚定:PostgreSQL 18 / Ruby 3.4.8 / Rails 7.2.3.1 / Debian 13 (trixie) / SEMS(Yeti 分支)/ Redis
- 定位:开源电信级 Class 4 SIP Softswitch + SBC + 实时 VoIP 计费平台,基于 SEMS SIP/RTP 栈(非 FreeSWITCH,详见 §2.2 架构澄清)
- 部署形态:单服务器一体化 / 分布式集群 / Geo 多区域;官方仅提供 Debian .deb 包,无 Docker Hub 官方镜像(B2 篇基于 deb 包自建 compose 参考)
- 官方资源:官网 https://yeti-switch.org / 文档 https://yeti-switch.org/docs / Demo https://demo.yeti-switch.org / 社区 forum https://community.yeti-switch.org
二、软件概述
2.1 定位与目标用户
Yeti-Switch(官网写作「Yeti Switch」,代码仓库 yeti-switch)是一款面向电信运营商、VoIP 批发/零售服务提供商、企业统一通信(UC)服务商的Class 4 SIP Softswitch,将 SBC(会话边界控制器)、智能路由引擎、实时计费、客户门户、REST API 与运维面板整合为一套完整的电信级 VoIP 交换平台。
💡 技术拓展:Class 4 vs Class 5 Softswitch——Class 4(Yeti 所属)专注运营商间长途路由/批发,核心能力是 SBC 信令协商、LCR(least-cost routing)、容量控制、实时计费;Class 5(FreeSWITCH/Asterisk 常被归入此类)面向终端用户/企业 PBX,提供分机、IVR、会议、语音信箱等终端特性。Yeti-Switch 不做终端特性,专注信令平面与计费平面。
典型用户画像:
- 批发 VoIP 运营商:在全球供应商与本地客户之间做 SIP 中继互联、LCR 选路、实时反欺诈;
- UC 服务商:作为 Microsoft Teams Direct Routing SBC(官方支持)或自有 SBC,同时完成转售计费;
- 企业自建通信:把多个 SIP Trunk 聚合、做智能路由 + CDR 留痕,对接 CRM/计费。
2.2 架构澄清:底层是 SEMS,不是 FreeSWITCH
⚠️ 注意:部分旧资料或第三方介绍把 Yeti-Switch 称为「基于 FreeSWITCH 的 Softswitch」,这是不准确的。2026-10-27 实查 yeti-switch.org/docs/architecture 与 SEMS 上游仓库,Yeti-Switch 的 SIP/RTP 处理平面是 SEMS(SIP Express Media Server)——一个从零构建的高性能 SIP/RTP 栈,与 FreeSWITCH 无代码层关联。官方维护的 yeti 分支基于 SEMS 上游扩展 yeti 模块,负责路由、计费、鉴权与容量控制。
FreeSWITCH 在 Yeti 生态中仅作为可互操作的对端(客户侧 PBX 或供应商侧中继),Yeti-Switch 自身不依赖 FreeSWITCH 运行。这是选型时必须厘清的架构边界——否则会误以为可以复用 FreeSWITCH 的 dialplan/Event Socket 生态。
2.3 开源协议与社区
- 协议:SEMS 模块与 yeti-web 均采用AGPL-3.0(GNU Affero General Public License v3.0),yetisoftware 商业分支提供闭源企业版与技术支持;
- 上游托管:GitHub
yeti-switch组织下包含sems、yeti-web、yeti-cli、yeti-client等仓库(2026-10 shields.io 徽章抓取); - 版本节奏:Debian 大版本绑定(1.14 → Debian 13 trixie、1.13 → Debian 12 bookworm、1.12 → Debian 11 bullseye),minor 版本高频迭代(1.15.x ~2-3 周一次发布);
- Demo 系统:https://demo.yeti-switch.org(admin/111111)持续运行,用于功能预览与 API 文档生成。
三、核心架构
┌─────────────────────────────────────────────────────────────┐
│ Yeti-Switch 单节点架构 │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────── SIP Load Balancer (Kamailio/OpenSIPS) ───┐│
│ │ 可选,分布式部署时做 SIP 信令负载均衡 ││
│ └────────────────────┬───────────────────────────────────┘│
│ │ SIP UDP/TCP/TLS/WS │
│ ┌────────────────────▼───────────────────────────────────┐│
│ │ SEMS + yeti module(Switch Node) ││
│ │ SIP 信令处理 · RTP 转发/转码 · 路由查表 · 容量控制 ││
│ │ JSONRPC @ 127.0.0.1:7080 ││
│ └──┬───────────────┬───────────────┬────────────────────┘│
│ │ PostgreSQL │ Redis │ │
│ ▼ ▼ ▼ │
│ ┌────────────┐ ┌────────────┐ ┌─────────────────────────┐│
│ │ routing-db │ │ Redis │ │ yeti-web (Rails 7.2) ││
│ │ (PostgreSQL│ │ capacity/ │ │ Admin UI · Admin API ││
│ │ 18) │ │ registrat- │ │ Customer Portal API ││
│ └────────────┘ │ ions/cache │ └──────────┬──────────────┘│
│ ┌────────────┐ └────────────┘ │ │
│ │ cdr-db │ │ │
│ │ (PostgreSQL│ ┌─────────┐ ┌───────────┐ │ │
│ │ 18 + pgq) │ │ schedul-│ │ delayed- │ │ │
│ └──────┬─────┘ │ ers │ │ jobs │ │ │
│ │ └─────────┘ └───────────┘ │ │
│ │ 全部通过 Active Job 进程池执行 │
│ ▼ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ cdr-processor│ │ nginx 80/443 │ ──▶ 浏览器 │
│ │ @billing/@ │ │ (puma 反代) │ │
│ │ stats │ └──────────────┘ │
│ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
架构要点:
- SEMS + yeti module 是流量平面:独立进程处理 SIP/RTP,与 yeti-web 管理平面解耦,流量不经过 Rails;
- 双数据库:routing-db(轻量、低延迟)存路由/网关/账号;cdr-db(高写入吞吐)存 CDR,官方强烈建议分机部署;
- Redis 做分布式状态:存储容量限制、实时注册、CPS 计数器,集群多节点同步用 Redis Pub/Sub;
- 管理平面全 Rails:yeti-web 提供 Admin UI(SPA 风格 Vue 组件嵌入 Rails 渲染)、Admin API(JSONAPI 规范)、Customer Portal API;
- 后台进程 4 组:
yeti-scheduler(定时任务)、yeti-delayed-job(异步任务队列)、yeti-cdr-processor@billing(计费 CDR 处理)、yeti-cdr-processor@stats(统计 CDR 处理); - 零停机升级:所有组件可独立升级,不中断 SIP 流量。
四、功能特性
按官网 docs/ 功能清单归类:
| 功能域 | 细项 | 规格 |
|---|---|---|
| SIP 信令 | 传输层 | UDP / TCP / TLS / WebSocket,IPv4 + IPv6(可配置优先级) |
| SRTP | DTLS / SDES / ZRTP 三种密钥协商 | |
| DTMF | SIP INFO (application/dtmf & dtmf-relay) / RTP telephone-event,可任意组合转码 | |
| NAT 穿透 | symmetric RTP 多模式、RTP ping、RTP timeout 自动断连(按网关配置) | |
| 额外信令 | Session Timers / UPDATE / DNS SRV failover / R-URI domain 鉴权 / 自定义 SIP header 鉴权 | |
| Fax | T.38 | |
| RTP 媒体 | 编码 | G.711 a-law/u-law、G.722、G.723.1、G.729、iLBC、Speex、GSM、ADPCM、Opus |
| 转码 | SEMS 原生 RTP 转码、编解码协商(SDP 排序/过滤/归一化)、RTP 流归一化 | |
| 统计 | RTCP/RTP 统计按流保存、Pcap dump 按通话录制(Web 可下载) | |
| 路由 | 智能算法 | LCR(价格+质量控制)、ASR/ACD 路由、时间路由、标签路由、CPS/容量控制 |
| 策略 | 黑白名单、号码翻译(源/目的)、Caller ID/DNIS 重写、供应商网关分组负载均衡 | |
| 错误处理 | 断线码改写/透传、OPTIONS prober 动态调整路由 | |
| 计费 | 实时计费 | 实时余额扣减、连接费(connect fee)、可配置 billing interval、多币种(按账户/供应商/目的独立) |
| 反欺诈 | 实时余额耗尽自动断呼、动态价格下发(供应商费率透明化) | |
| 对外集成 | CDR 导出(外部反欺诈分析)、Lawful Interception(流量镜像)、外部 RADIUS 鉴权/计费 | |
| 管理 | Web UI | 全实体搜索、批量更新、操作审计日志、导入导出、背景任务异步执行 |
| CLI | yeti-cli 基于 JSONRPC 的集群管理(Python,命令补全) | |
| API | Admin API(JSONAPI 规范,JWT)+ Customer API(JSONAPI,JWT),全实体 CRUD | |
| 监控 | 实时容量利用率、活动呼叫监控(可 Web 一键断呼)、CDR 报表(按目的地/客户/供应商/时间) | |
| 部署 | 集群 | 多 Switch Node + Geo 分布、单管理面、网络故障重连后 CDR 正确落库 |
| MS Teams | 官方支持 Teams Direct Routing SBC(合规 FQDN / 证书 / 配对) |
五、快速开始(最小可用示例)
A1 认知篇不做本地搭建,给出最小链路演示(来自官网 docs/installation 与 changelog):
前置:Debian 13 amd64 服务器、公网 IP(用于 SIP Trunk 注册)、两张 PostgreSQL 18 实例(routing + cdr)、Redis。
步骤:
# 1. 加官方 GPG 与仓库(官方唯一安装路径,无 Dockerfile/Compose 官方镜像)
wget https://deb.yeti-switch.org/yeti.gpg -O /etc/apt/trusted.gpg.d/yeti-key.asc
wget https://www.postgresql.org/media/keys/ACCC4CF8.asc -O /etc/apt/trusted.gpg.d/pgdg-key.asc
# /etc/apt/sources.list
# deb https://deb.yeti-switch.org/debian/1.14 trixie main
# deb http://apt.postgresql.org/pub/repos/apt/ trixie-pgdg main
# 2. 数据库(routing + cdr 两个 PostgreSQL 18 实例)
apt install postgresql-18 postgresql-18-prefix postgresql-18-pgq3 \
postgresql-18-pgq-ext postgresql-18-yeti postgresql-18-pllua pgqd
su - postgres -c "psql -c \"CREATE USER yeti PASSWORD 'q1w2e3r4' SUPERUSER; CREATE DATABASE yeti OWNER yeti;\""
su - postgres -c "psql -c \"CREATE USER cdr PASSWORD 'q1w2e3r4' SUPERUSER; CREATE DATABASE cdr OWNER cdr;\""
# 3. Redis
apt install redis-server
grep -q 'notify-keyspace-events' /etc/redis/redis.conf && \
sed -i 's/notify-keyspace-events .*/notify-keyspace-events "Egx"/' /etc/redis/redis.conf || \
echo 'notify-keyspace-events "Egx"' >> /etc/redis/redis.conf
systemctl restart redis-server
# 4. 安装 yeti-web + sems + redis
apt install yeti-web nginx sems sems-modules-yeti
# 5. 数据库初始化 + systemd 启动 yeti-web 各组件
cd /opt/yeti-web && su -s /bin/bash yeti-web -c \
"RAILS_ENV=production ./bin/bundle.sh exec rake db:schema:load db:migrate db:seed"
systemctl start yeti-web yeti-delayed-job yeti-scheduler \
yeti-cdr-processor@billing yeti-cdr-processor@stats sems
# 6. 登录 Web 管理台
# http://<server-ip>/ 默认 admin / 111111
六、适用场景与限制
6.1 强适配场景
| 场景 | Yeti-Switch 优势 |
|---|---|
| VoIP 批发/零售运营商 | LCR + 实时计费一体化、多币种、供应商/客户双费率 |
| MS Teams Direct Routing SBC | 官方兼容、合规 FQDN/证书、Teams 配对 + 转售计费 |
| 企业多 SIP Trunk 聚合 | 智能路由、容量控制、CDR 留痕 + 可审计 |
| 统一通信 SBC | SRTP/DTLS/ZRTP 三种密钥协商、NAT 穿透、编解码转码 |
6.2 不适用场景
- 终端用户 PBX / IVR / 会议:Yeti-Switch 不做终端特性(分机、语音信箱、IVR),这些用 FreeSWITCH / Asterisk;
- 非 Debian 系部署:官方只给 Debian 13 的 .deb 包,RHEL/Ubuntu 部署需自行打包;
- 小型单节点 + 临时实验:SEMS + PostgreSQL 双库 + Redis + Rails 进程池,最低配置建议 ≥ 4 vCPU / 8 GB RAM / 50 GB NVMe;
- JVM 组件:Yeti-Switch 无 Java 进程(Rails + SEMS C++ + Redis C),JVM 堆约束不适用。
6.3 关键限制
| 限制 | 说明 |
|---|---|
| 仅 Debian 13 (trixie) + amd64 | 1.14 文档明确,Ubuntu/RHEL 自行移植 |
| 双 PostgreSQL 18 必选 | routing + cdr 分库,cdr 库需 pgq ticker |
| 无官方 Docker Hub 镜像 | Docker Hub 搜 yeti-switch 无官方账户,B2 篇基于 .deb 自建 |
| Nginx 默认屏蔽 Admin API | 官方 yeti-web.dist.nginx 把 /api/rest/admin/ 屏蔽,要手动开启 |
| AGPL-3.0 许可 | 商业分发需闭源企业版 yetisoftware |
| 无免费商业支持 | 社区仅 forum,付费支持 yetisoftware 提供 |
七、同类选型对比
💡 技术拓展:SIP/VoIP 生态分层——SBC/Softswitch 层(Yeti/Kamailio/FreeSWITCH)、PBX/UC 层(Asterisk/FusionPBX/3CX)、计费层(A2Billing/FreePBX Billing)。下表聚焦 SBC/Softswitch + 计费一体化 这个 Yeti-Switch 的核心定位,与最容易被拿来对比的几款做量化。
7.1 对比表(2026-10 检索数据)
| 维度 | Yeti-Switch 1.15 | FreeSWITCH 1.11 | Asterisk 22 | Kamailio 5.7 | FusionPBX 5.3 |
|---|---|---|---|---|---|
| 定位 | Class 4 SBC + 计费 | 全栈 Softswitch | PBX + Softswitch | SIP Proxy/SBC | FreeSWITCH GUI + 计费 |
| 底层 SIP 栈 | SEMS(独立 C++) | FreeSWITCH 原生 | Asterisk 原生 | Kamailio 原生 | 基于 FreeSWITCH |
| 实时计费 | 内置,多币种,LCR 计费一体化 | 需外部(FreeSWITCH CDR + AAA) | 需外部 | 无 | FreeSWITCH CDR + 收费扩展 |
| 路由能力 | LCR/ASR/ACD + CPS + 时间路由 | dialplan(灵活但原始) | dialplan(灵活但原始) | cfg 脚本 + 模块(强但陡峭) | 基于 FreeSWITCH dialplan |
| SBC 能力 | SRTP DTLS/SDES/ZRTP、NAT、Fax T.38 | SRTP、部分 NAT | SRTP、部分 NAT | SRTP、强 NAT | 继承 FreeSWITCH |
| 部署形态 | Debian .deb / 集群 / Geo 分布 | 源码 + 多发行版 / Docker | 源码 + 多发行版 / Docker | 源码 + 多发行版 / Docker | FreeSWITCH + Postgres + 可选 Docker |
| Web 管理台 | Admin UI + Customer Portal(完整) | 无官方 | 无官方 | 无官方 | 完整 GUI(商用) |
| REST API | Admin + Customer JSONAPI | Event Socket(非 REST) | AMI(非 REST) | MI/RPC + 第三方 | 基于 FreeSWITCH ESL |
| 官方 Debian 支持 | Debian 13 专属 deb | Debian 12/13 包 | Debian 12/13 包 | Debian 12/13 包 | 多发行版 |
| 集群/Geo 分布 | 原生支持(Redis 状态同步) | 需外部方案 | 需外部方案 | 原生多种 HA 模式 | 需外部方案 |
| GitHub Stars(shields.io) | yeti-switch sems ~? / yeti-web ~? | ~18k | ~23k | ~11k | ~500 |
| 协议 | AGPL-3.0 | MPL-1.1 | GPL-2.0 | GPL-2.0 | MPL/商用 |
| 最低规格(生产) | ≥4 vCPU / 8 GB RAM | ≥2 vCPU / 4 GB RAM | ≥2 vCPU / 4 GB RAM | ≥2 vCPU / 2 GB RAM | 继承 FreeSWITCH |
| 终端特性(分机/IVR/会议) | 不支持 | 完整支持 | 完整支持 | 不支持 | 完整支持 |
⚠️ 注意:上表 GitHub Stars 数值为 shields.io 徽章采样,2026-10 yeti-switch 组织下
yeti-switch/sems与yeti-switch/yeti-web两仓库合计星数明显低于 FreeSWITCH/Asterisk——Yeti 作为 niche Class 4 项目,社区规模小于 PBX 类,但在计费 + LCR + Class 4 SBC 这个垂直定位上功能密度最高。
7.2 选型决策建议
| 你的场景 | 推荐 | 理由 |
|---|---|---|
| VoIP 批发/零售运营商 | Yeti-Switch | LCR + 实时计费 + 多币种 + 集群,无其他开源软件一套搞定 |
| MS Teams Direct Routing 自建 | Yeti-Switch | 官方认证、CDR 留痕、计费透明化 |
| 企业 PBX + 少量 SBC | FusionPBX 或 FreeSWITCH + 外部 AAA | 终端特性 + GUI 更全,Yeti 在此场景过重 |
| 纯 SIP Proxy / SBC,无计费 | Kamailio | 资源占用更低、配置更轻 |
| 需要终端用户特性(分机/IVR/录音) | FreeSWITCH 或 Asterisk + 外部计费 | Yeti 不做终端特性,外部 AAA 成本高 |
| Ubuntu / RHEL 系发行版 | FreeSWITCH / Asterisk / Kamailio | Yeti 官方仅 Debian 13 deb,需移植 |
7.3 常见误区澄清
- 「Yeti-Switch = FreeSWITCH GUI」:❌ 不准确。FreeSWITCH 是终端 PBX/Softswitch,Yeti-Switch 是独立 SEMS 栈的 Class 4 SBC + 计费,两者定位不同;
- 「Yeti-Switch 需要付费」:❌ 开源核心 AGPL-3.0 免费商用,闭源企业版(yetisoftware)是商业附加;
- 「Yeti-Switch 支持 Docker Compose 一键部署」:❌ 官方无 Docker Hub 镜像,需基于 Debian 镜像自建(B2 篇给出参考);
- 「Yeti-Switch 支持 Ubuntu 22.04」:⚠️ 官方 1.14 仅 Debian 13,Ubuntu 22.04 需移植 PostgreSQL 18 / PGDG / SEMS 分支包,B1 篇给出移植路径与风险。
八、参考链接
- 官网 https://yeti-switch.org
- 文档首页 https://yeti-switch.org/docs/
- Changelog https://yeti-switch.org/docs/changelog.html(1.13.29 → 1.15.42 跨度)
- 安装指南 1.14 https://yeti-switch.org/docs/installation/installation-1.14/
- REST API https://yeti-switch.org/docs/api/
- Demo 系统 https://demo.yeti-switch.org(admin / 111111)
- SEMS 上游 https://github.com/sems-server/sems
- yeti-switch 组织 https://github.com/yeti-switch
- 社区 forum https://community.yeti-switch.org
- MS Teams Direct Routing SBC 页面 https://yeti-switch.org/ms-teams-sbc.html
- PostgreSQL 18 PGDG 仓库 https://wiki.postgresql.org/wiki/Apt