sbc-inbound是jambonz平台会话边界控制器(SBC)功能的组成部分,主要用于处理入站SIP流量。它接收来自运营商SIP中继、SIP设备及WebRTC应用的INVITE请求,对已知运营商的流量直接允许接入,对SIP设备的请求进行认证挑战,并将通过验证的流量转发至私有子网中的jambonz应用服务器,实现安全可控的入站呼叫接入管理。
适用于jambonz VoIP平台的入站呼叫接入场景,特别是需要对入站SIP流量进行安全控制、运营商流量与设备流量区分管理的场景,如企业IP PBX系统、云通信平台的入站呼叫边界防护等。
通过以下环境变量进行配置,具体说明如下:
| 变量名 | 含义 | 是否必填 |
|---|---|---|
| DRACHTIO_HOST | drachtio服务器IP地址(通常为'127.0.0.1') | 是 |
| DRACHTIO_PORT | drachtio服务器控制连接监听端口(通常为9022) | 是 |
| DRACHTIO_SECRET | 共享密钥 | 是 |
| HTTP_PORT | HTTP监听端口 | 否 |
| JAMBONES_LOGLEVEL | 应用日志级别,可选'info'或'debug' | 否 |
| JAMBONES_MYSQL_HOST | MySQL主机地址 | 是 |
| JAMBONES_MYSQL_PORT | MySQL端口 | 否 |
| JAMBONES_MYSQL_USER | MySQL用户名 | 是 |
| JAMBONES_MYSQL_PASSWORD | MySQL密码 | 是 |
| JAMBONES_MYSQL_DATABASE | MySQL数据库名 | 是 |
| JAMBONES_MYSQL_CONNECTION_LIMIT | MySQL连接限制 | 否 |
| DTMF_LISTEN_PORT | DTMF监听端口 | 否 |
| JAMBONES_NG_PROTOCOL | rtpengine NG协议 | 否 |
| RTPENGINE_PORT | rtpengine端口 | 否 |
| JAMBONES_CLUSTER_ID | 集群ID | 否 |
| JAMBONES_NETWORK_CIDR | 功能服务器所在私有网络的CIDR(如'172.31.0.0/16') | 是 |
| JAMBONES_REDIS_HOST | Redis主机地址 | 是 |
| JAMBONES_REDIS_PORT | Redis端口 | 否 |
| JAMBONES_RTPENGINES | rtpengine的IP:ng-port逗号分隔列表(如'172.31.32.10:22222') | 否 |
| JAMBONES_TIME_SERIES_HOST | InfluxDB主机地址 | 是 |
| JAMBONES_TIME_SERIES_PORT | InfluxDB端口 | 否 |
| JAMBONES_RECORD_ALL_CALLS | 启用自动呼叫录音,可选'yes'或'no' | 否 |
| K8S | 是否作为Kubernetes服务运行 | 否 |
| K8S_RTPENGINE_SERVICE_NAME | rtpengine服务名(K8S环境必填) | 否 |
| K8S_FEATURE_SERVER_SERVICE_NAME | 功能服务器服务名(K8S环境必填) | 否 |
| JWT_SECRET | JWT令牌签名密钥 | 是 |
| ENCRYPTION_SECRET | 凭证加密密钥(JWT_SECRET已弃用) | 是 |
json{ "drachtio": { "port": 3001, "secret": "cymru" } }
drachtio对象指定用于接收来自drachtio服务器TCP连接的监听端口,以及用于服务器认证的共享密钥。
注意:根据提供的配置,可以使用入站连接或出站连接。在生产环境中,为便于应用逻辑的集中化和集群化,建议使用出站连接;入站连接通常用于自动化测试套件。
json{ "rtpengine": { "host": "127.0.0.1", "port": 22222 } }
rtpengine对象指定rtpengine的位置,通常与drachtio运行在同一服务器上。
json{ "logging": { "level": "info" } }
配置应用日志级别,可选'info'(默认)或'debug'。
内部应用服务器的SIP中继路由通过IP地址数组指定:
json{ "trunks": { "appserver": ["sip:10.10.120.1"] } }
rtpengine的转码选项在配置文件中定义,通常无需修改:
json{ "transcoding": { "rtpCharacteristics": { "transport protocol": "RTP/AVP", "DTLS": "off", "SDES": "off", "ICE": "remove", "rtcp-mux": ["demux"] }, "srtpCharacteristics": { "transport-protocol": "UDP/TLS/RTP/SAVPF", "ICE": "force", "SDES": "off", "flags": ["generate mid", "SDES-no"], "rtcp-mux": ["require"] } } }
用户认证由客户端通过暴露HTTP回调实现。系统会向配置的回调地址(即REGISTER请求中关联SIP域对应的accounts.registration_hook列的值)发送POST请求,请求体为包含以下信息的JSON payload:
json{ "method": "REGISTER", "expires": 3600, "scheme": "digest", "username": "john", "realm": "jambonz.org", "nonce": "157590482938000", "uri": "sip:172.37.0.10:5060", "response": "be641cf7951ff23ab04c57907d59f37d", "qop": "auth", "nc": "00000001", "cnonce": "6b8b4567", "algorithm": "MD5" }
客户侧逻辑需检索给定用户名的关联密码,然后按照RFC 2617描述的算法计算响应哈希值,并与HTTP请求体中的response属性进行比较,完成认证。
示例代码可参考此处,完整示例服务器可参考此处。
客户服务器应始终返回200 OK响应,响应体为JSON格式,包含status字段,值为ok(认证成功)或fail(认证失败):
json{"status": "ok"}
失败时可额外包含msg字段,描述失败原因:
json{"status": "fail", "msg": "invalid username"}
本应用作为背靠背用户代理(B2BUA)和媒体代理,将INVITE请求转发至jambonz应用服务器时,会添加以下头信息:
X-Forwarded-For:发送INVITE的客户端IP地址X-Forwarded-Carrier:入站运营商名称(如适用)运行内置测试套件需在本地/服务器安装MySQL,运行前需设置MYSQL_ROOT_PASSWORD环境变量指定MySQL root密码。测试套件会在MySQL中创建名为jambones_test的数据库用于测试,测试完成后自动删除。
bashMYSQL_ROOT_PASSWORD=foobar npm test
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429