Yeti-Switch 介绍与选型指南

Yeti-Switch v1.15.42 开源电信级 Class 4 SIP Softswitch + SBC + 实时计费一体化平台选型指南:架构澄清(底层 SEMS 非 FreeSWITCH)、核心特性、与 FreeSWITCH/Asterisk/Kamailio/FusionPBX 量化对比。

Yeti-SwitchYeti-SwitchSIP 协议VoIP 语音SBC电信软交换REST2026/10/27

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        │  └──────────────┘                         │
│  └──────────────┘                                            │
└─────────────────────────────────────────────────────────────┘

架构要点:

  1. SEMS + yeti module 是流量平面:独立进程处理 SIP/RTP,与 yeti-web 管理平面解耦,流量不经过 Rails;
  2. 双数据库:routing-db(轻量、低延迟)存路由/网关/账号;cdr-db(高写入吞吐)存 CDR,官方强烈建议分机部署;
  3. Redis 做分布式状态:存储容量限制、实时注册、CPS 计数器,集群多节点同步用 Redis Pub/Sub;
  4. 管理平面全 Rails:yeti-web 提供 Admin UI(SPA 风格 Vue 组件嵌入 Rails 渲染)、Admin API(JSONAPI 规范)、Customer Portal API;
  5. 后台进程 4 组:yeti-scheduler(定时任务)、yeti-delayed-job(异步任务队列)、yeti-cdr-processor@billing(计费 CDR 处理)、yeti-cdr-processor@stats(统计 CDR 处理);
  6. 零停机升级:所有组件可独立升级,不中断 SIP 流量。

四、功能特性

按官网 docs/ 功能清单归类:

功能域细项规格
SIP 信令传输层UDP / TCP / TLS / WebSocket,IPv4 + IPv6(可配置优先级)
SRTPDTLS / SDES / ZRTP 三种密钥协商
DTMFSIP 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 鉴权
FaxT.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全实体搜索、批量更新、操作审计日志、导入导出、背景任务异步执行
CLIyeti-cli 基于 JSONRPC 的集群管理(Python,命令补全)
APIAdmin 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 留痕 + 可审计
统一通信 SBCSRTP/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) + amd641.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.15FreeSWITCH 1.11Asterisk 22Kamailio 5.7FusionPBX 5.3
定位Class 4 SBC + 计费全栈 SoftswitchPBX + SoftswitchSIP Proxy/SBCFreeSWITCH 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.38SRTP、部分 NATSRTP、部分 NATSRTP、强 NAT继承 FreeSWITCH
部署形态Debian .deb / 集群 / Geo 分布源码 + 多发行版 / Docker源码 + 多发行版 / Docker源码 + 多发行版 / DockerFreeSWITCH + Postgres + 可选 Docker
Web 管理台Admin UI + Customer Portal(完整)无官方无官方无官方完整 GUI(商用)
REST APIAdmin + Customer JSONAPIEvent Socket(非 REST)AMI(非 REST)MI/RPC + 第三方基于 FreeSWITCH ESL
官方 Debian 支持Debian 13 专属 debDebian 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.0MPL-1.1GPL-2.0GPL-2.0MPL/商用
最低规格(生产)≥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-SwitchLCR + 实时计费 + 多币种 + 集群,无其他开源软件一套搞定
MS Teams Direct Routing 自建Yeti-Switch官方认证、CDR 留痕、计费透明化
企业 PBX + 少量 SBCFusionPBX 或 FreeSWITCH + 外部 AAA终端特性 + GUI 更全,Yeti 在此场景过重
纯 SIP Proxy / SBC,无计费Kamailio资源占用更低、配置更轻
需要终端用户特性(分机/IVR/录音)FreeSWITCH 或 Asterisk + 外部计费Yeti 不做终端特性,外部 AAA 成本高
Ubuntu / RHEL 系发行版FreeSWITCH / Asterisk / KamailioYeti 官方仅 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 篇给出移植路径与风险。

八、参考链接