jambonz/sbc-inboundsbc-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




manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务