外观
软电话 WebRTC ICE/TURN 指南
本文描述 FreeSWITCH 迁移到 aliyun 后的生产拓扑。旧的“FRPS/FRPC 转发 SIP WebSocket 和 30000-30199/UDP RTP 到 debian12-show”拓扑已停用,不得再按旧方式增加代理。
1. 当前拓扑
| 组件 | 地址或端口 | 说明 |
|---|---|---|
| 浏览器 WSS | wss://fs.wangijun.com | Nginx TLS 终止后重新加密到本机 FreeSWITCH 172.21.38.245:7443 |
| SIP realm | fs.wangijun.com | FreeSWITCH 注册域 |
| FreeSWITCH RTP | 123.57.205.60:30000-30199/UDP | 公网主机直接收发,不经过 FRP |
| TURN control | 123.57.205.60:3478/TCP+UDP | coturn 与 FreeSWITCH 同机 |
| TURN relay | 123.57.205.60:31000-31040/UDP | 不经过 FRP,与 RTP 范围隔离 |
| Apps/ONNX 上游 | 127.0.0.1:12005-12013 | FRPS 仅绑定回环 |
浏览器从 callflow/callout 后端取得 TURN REST 短期凭据,向 coturn 创建 allocation。FreeSWITCH 只允许 softphone-turn-relay ACL 中的 123.57.205.60/32 candidate,避免选择移动网络 srflx 后 DTLS 长时间停在 HANDSHAKE。
2. 必须一致的配置
vars.xml:domain=fs.wangijun.com,default_password=myfs213(软电话 SIP 分机1000~1019密码),本机 SIP/RTP 绑定私网地址,external_sip_ip/external_rtp_ip广告123.57.205.60。switch.conf.xml:RTP 范围为30000-30199。sip_profiles/internal.xml:local-network-acl=none,apply-candidate-acl=softphone-turn-relay,WSS 监听7443;5066/WS只用于本机诊断。acl.conf.xml:domains允许同机 Nginx 私网源172.21.38.245/32,softphone-turn-relay只允许123.57.205.60/32,callflow-esl-inbound允许回环与 WSL/开发机公网出口网段。- coturn:
external-ip=123.57.205.60/172.21.38.245,relay 为31000-31040,static-auth-secret与 callflow/callout 私有配置完全一致。 - Nginx:
fs.wangijun.com必须传递Upgrade/Connection与X-Real-IP/X-Forwarded-*,上游为https://172.21.38.245:7443,配置proxy_ssl_verify off。不能把浏览器 WSS 降级代理到5066/WS;JsSIP 的Via: WSS与 Sofia 实际传输不一致时,REGISTER 不会收到认证响应。 - 业务号码映射:
callflow.call_business_number_mappings必须全量预置5000~5020、5090,Dialplan 拦截^50转入callflow-esl。 - 前端软电话:
use-sip-softphone.ts监听icecandidate事件并在 600ms 触发快速就绪保护,避免慢速节点探测导致INVITE发送延迟。
3. 端口边界
现有安全组继续使用 12000-12999/TCP+UDP 与 16384-32768/UDP。本次不新增规则。 12015/TCP 是唯一直接开放的业务管理端口,并由 FreeSWITCH callflow-esl-inbound ACL 只允许 回环与开发/运维出口网段。FRP 的 12000-12013 通过 proxyBindAddr=127.0.0.1 仅供 阿里云本机进程访问。
4. 验收与拨打指南
- 软电话注册:
- 地址:
https://callflow.wangijun.com/softphone或https://callout.wangijun.com/softphone - SIP WebSocket:
wss://fs.wangijun.com - Realm:
fs.wangijun.com - 分机 / 用户名:
1000 - SIP 密码:
myfs213 - 点击注册,状态变为绿色 已在线。
- 地址:
- 业务呼叫测试:
- 拨打
5001(默认语音回显)、5010(大模型实时对话)、5000(平台能力演示)、5020(软电话坐席辅助)。
- 拨打
- 媒体与信令核验:
- 从外网分别完成 TURN UDP 与 TCP authenticated allocation,relay 地址落在
123.57.205.60:31000-31040。 - 新建呼叫,浏览器
getStats()中 selected candidate pair 使用 relay;FreeSWITCH 日志选择同一 relay candidate。 - DTLS 完成,双方 RTP 收发计数持续增长,双向有声,A-leg 说话时 ASR partial/final、TTS 播放与录音落盘正常。
- 从外网分别完成 TURN UDP 与 TCP authenticated allocation,relay 地址落在
服务端检查:
bash
systemctl is-active freeswitch callflow-esl coturn nginx frps
ss -lntup | grep -E ':(3478|5066|7443|9911|9912|12015)\b'
ss -lunp | grep -E ':(300[0-9]{2}|301[0-9]{2}|310[0-4][0-9])\b'
journalctl -u freeswitch -u coturn --since '-10 minutes' --no-pager