预配置检查清单
在开始配置SIP trunk之前,请确保以下条件已满足:
| 检查项 | 要求 | 验证方法 |
|---|---|---|
| 网络带宽 | G.711: 87kbps/路, G.729: 31kbps/路 | 带宽计算: 路数 × 单路带宽 × 1.3冗余 |
| SIP信令端口 | 5060 UDP/TCP 或 5061 TLS | telnet/traceroute测试端口可达性 |
| RTP媒体端口 | 10000-65535 UDP(按需开放子范围) | 防火墙规则确认 |
| DNS解析 | SIP域名可正常解析 | nslookup/dig验证 |
| 静态IP | 推荐使用静态公网IP | curl ifconfig.me确认 |
| 时间同步 | NTP同步,误差<1秒 | ntpstat检查 |
Asterisk 配置
sip.conf 配置示例
; /etc/asterisk/sip.conf
[cainiao-trunk]
type=peer
host=sip.cainiaovoice.com
port=5060
transport=udp
context=from-cainiao
disallow=all
allow=g711
allow=g729
allow=g722
dtmfmode=rfc2833
insecure=port,invite
qualify=yes
qualifyfreq=60
nat=force_rport,comedia
canreinvite=no
; SIP注册(如需要)
register => username:password@sip.cainiaovoice.com:5060/100
extensions.conf 拨号计划
; /etc/asterisk/extensions.conf
[from-cainiao]
; 入站呼叫处理
exten => _X.,1,NoOp(入站呼叫来自 ${CALLERID(num)})
exten => _X.,n,Dial(SIP/1001,30)
exten => _X.,n,Hangup()
[outbound-cainiao]
; 出站呼叫 - 国内
exten => _0XXXXXXXXXX,1,NoOp(拨打 ${EXTEN})
exten => _0XXXXXXXXXX,n,Dial(SIP/cainiao-trunk/${EXTEN})
exten => _0XXXXXXXXXX,n,Hangup()
; 出站呼叫 - 国际
exten => _00X.,1,NoOp(国际拨打 ${EXTEN})
exten => _00X.,n,Dial(SIP/cainiao-trunk/${EXTEN:2})
exten => _00X.,n,Hangup()
关键配置说明
- dtmfmode=rfc2833:推荐使用RFC2833传输DTMF,兼容性最好
- nat=force_rport,comedia:NAT穿透配置,解决单向音频问题
- qualify=yes:启用心跳检测,实时监控网关连通性
- canreinvite=no:禁止直接RTP连接,确保媒体流经过Asterisk
FreeSWITCH 配置
网关配置
<!-- /etc/freeswitch/sip_profiles/external/cainiao.xml -->
<include>
<gateway name="cainiao-trunk">
<param name="realm" value="sip.cainiaovoice.com"/>
<param name="username" value="your_username"/>
<param name="password" value="your_password"/>
<param name="register" value="true"/>
<param name="caller-id-in-from" value="true"/>
<param name="ping-interval" value="30"/>
<param name="extension" value="100"/>
</gateway>
</include>
拨号计划
<!-- /etc/freeswitch/conf/dialplan/default.xml -->
<extension name="outbound-cainiao">
<condition field="destination_number" expression="^(.+)$">
<action application="set" data="effective_caller_id_number=your_did"/>
<action application="bridge" data="sofia/gateway/cainiao-trunk/$1"/>
</condition>
</extension>
3CX 快速配置
- 进入3CX管理后台 → SIP Trunks → Add SIP Trunk
- 选择"Generic SIP Trunk"模板
- 填写:主服务器=sip.cainiaovoice.com, 端口=5060
- 认证ID=your_username, 密码=your_password
- 选择Bridge模式,配置STUN服务器(stun.3cx.com)
- 编解码器选择G.711和G.729
- 创建入站/出站路由规则
Cisco CUCM 配置
- 创建SIP Trunk Security Profile: Device → Device Settings → SIP Trunk Security Profile
- 创建SIP Profile: 选择标准SIP Profile,启用SIP OPTIONS Ping
- 创建SIP Trunk: Device → Trunk,选择上方创建的Security Profile和SIP Profile
- 配置Destination Address: sip.cainiaovoice.com:5060
- 创建Route Pattern: Call Routing → Route/Hunt → Route Pattern
- 设置Calling Search Space和Partition权限
故障排查清单
| 问题 | 可能原因 | 排查步骤 |
|---|---|---|
| 单向音频 | NAT问题,RTP端口未开放 | 1)检查防火墙RTP端口 2)配置nat参数 3)确认SDP中IP可达 4)使用rtp debug排查 |
| 注册失败 | 密码错误,端口不通,防火墙拦截 | 1)sip debug查看401/403响应 2)telnet测试5060端口 3)检查用户名密码 |
| DTMF无效 | DTMF模式不匹配 | 1)确认两端dtmfmode一致 2)推荐rfc2833 3)避免使用SIP INFO |
| 编解码协商失败 | 两端无共同编解码器 | 1)sip debug查看488响应 2)检查disallow/allow配置 3)确保G.711启用 |
| 通话中断 | SIP超时,路由不稳定 | 1)检查qualify心跳 2)查看BYE原因值 3)检查网络抖动和丢包 |
| SIP 503错误 | 服务不可用,并发超限 | 1)检查并发通道数 2)联系服务商确认容量 3)配置failover路由 |
安全加固清单
- IP白名单:防火墙只允许SIP服务商IP访问5060/5061和RTP端口
- SIP TLS加密:使用TLS(端口5061)加密SIP信令
- SRTP加密:启用SRTP加密RTP媒体流
- 强密码:使用16位以上随机密码,定期更换
- fail2ban:配置fail2ban自动封禁恶意IP
- 国际呼叫权限:设置国际呼叫白名单,防止toll fraud
- 消费上限:配置每日/每月消费上限和异常告警
- 禁用外网AMI/HTTP:不要将管理接口暴露到公网
菜鸟语音安全提示:菜鸟语音SIP trunk服务默认支持IP白名单认证,可选SIP TLS + SRTP加密,并提供实时流量监控和异常告警,帮助企业防范通信安全风险。
常见问题
Q: Asterisk对接SIP trunk需要开放哪些端口?
A: 需要开放SIP信令端口5060(UDP/TCP)或5061(TLS),以及RTP媒体端口范围(通常10000-20000 UDP)。建议在防火墙配置IP白名单,只允许SIP服务商的IP地址访问。
Q: FreeSWITCH如何配置SIP trunk网关?
A: 在/etc/freeswitch/sip_profiles/external/目录下创建XML网关配置文件,设置realm(服务器地址)、username、password、register(是否注册)等参数。然后在dialplan中通过sofia/gateway/网关名/号码格式进行呼叫。
Q: 出现单向音频怎么排查?
A: 单向音频通常由NAT问题导致。排查步骤:1)检查RTP端口是否正确开放;2)在Asterisk中配置nat=force_rport,comedia;3)在FreeSWITCH中配置ext-rtp-ip和ext-sip-ip;4)确认SDP中的IP地址可达。
Q: 如何选择DTMF传输模式?
A: 推荐使用RFC2833(在Asterisk中配置dtmfmode=rfc2833)。SIP INFO模式兼容性较差,INBAND模式需要G.711编解码器。大多数SIP trunk服务商支持RFC2833。
Q: 如何防止SIP toll fraud?
A: 防护措施包括:1)配置IP白名单只允许服务商IP;2)设置国际呼叫权限白名单;3)配置每日消费上限;4)启用fail2ban防止暴力破解;5)使用强密码(16位以上随机字符);6)监控异常呼叫模式。