跳到正文

FreeSWITCH 配置维护说明 ​

本目录是 FreeSWITCH 配置参考树,不会自动同步或部署到远端主机。机器地址、端口、 数据库连接和证书必须在应用前按现场环境校准;shared secret、密码、完整 DSN、token 及其他凭据不得写入本文档。tls/dtls-srtp.pem 与 tls/wss.pem 为保持参考树完整而原样 保留的样例证书,禁止在生产环境直接复用,部署时必须替换并限制私钥权限。

当前仓库变更 ​

以下内容是当前工作树相对 Git 基线的有效配置变更,本文只补充维护注释,不进一步 调整这些值:

  • autoload_configs/acl.conf.xml 新增 softphone-turn-relay,只允许当前 coturn 公网地址提供的 ICE candidate。修改地址后需执行 reloadacl,并用新呼叫验证;
  • autoload_configs/switch.conf.xml 将 FreeSWITCH RTP 范围固定为 30000-30199/UDP,在阿里云主机上直接收发;
  • sip_profiles/internal.xml 使用本机地址绑定 SIP/RTP,将 local-network-acl 设为 none,并应用 softphone-turn-relay candidate ACL;
  • vars.xml 将当前 FreeSWITCH 内网地址与 FRP/NAT 公网广告地址分开配置,固定 external_*,避免 STUN 自动探测到不适用的公网地址;
  • autoload_configs/modules.conf.xml 增加 mod_av / mod_rtc / mod_verto(WebRTC 音视频, 13d419b)与 mod_local_stream(会议背景音连续流,769c60b)。这四个模块缺任一项,对应能力 只会静默失效,不会在启动期报错;
  • autoload_configs/verto.conf.xml 新建 default-v4 profile:明文 8081 与加密 8082 (secure="true",证书 ${certs_dir}/wss.pem),userauth=true、blind-reg=false、 收发编解码 opus,h264,vp8。公网只经 Nginx 反代到明文 8081,8082 的自签证书不在公网 路径上,反代规则见 ../nginx/README.md 第 2.4 节;
  • autoload_configs/local_stream.conf.xml 声明 moh/8000、moh/16000 等连续流目录供会议背景音及呼叫保持使用, 完全对齐通用容器包 /data/docker_fs_server/ 标准定义。name 就是 callflow-esl backgroundAudio.profiles.office.streamUrl 里的播放地址(local_stream://moh/16000),两边必须逐字一致;素材 wav 放在 /usr/local/freeswitch/share/freeswitch/sounds/music/{8000,16000}/(预置办公室底噪素材,解压即用),独立部署时需确保存在于宿主机对应目录;
  • dialplan/default.xml 重写为四段号码平面:50xx → socket 127.0.0.1:9911 async full (交给 callflow-esl 选业务)、10xx → Local_Extension(分机互拨,附 video_passthru、 关键帧请求与 jitterbuffer_msec=60:120:20 等视频参数)、30xx → conference $1@default、 9196 → echo(回音测试);
  • vars.xml 另将视频带宽上限从 3mb 收到 800kb,用于云上链路防拥塞;
  • autoload_configs/acl.conf.xml 的 callflow-esl-inbound 从单个 /32 放宽为 114.103.0.0/16 与 117.64.0.0/16,以覆盖开发/部署节点的动态出口 IP。⚠️ inbound ESL 等同于 FreeSWITCH 的完全控制权,两个 /16 的暴露面远大于原来的单地址;出口 IP 固定或改走 FRP 回环后 应及时收回。

这些设置依赖以下配置同时成立:公网安全组和 FreeSWITCH 主机防火墙放行 30000-30199/UDP;coturn 直接使用 31000-31040/UDP 作为 relay 范围,且该范围不经过 FRP、不与 FreeSWITCH RTP 范围重叠;应用下发的 TURN 地址、 coturn 公网地址和 softphone-turn-relay ACL 保持一致。详细拓扑、变更步骤和验收方法见 5G 软电话 WebRTC ICE/TURN 指南。

与 debian12-show 的只读比对 ​

2026-07-18 对 /usr/local/freeswitch/etc/freeswitch/ 做了只读逐文件 SHA-256 比对, 未向远端写入配置:

  • 比对时本目录已有的 137 个配置文件(不含本说明)均能在远端找到同路径文件;
  • 129 个文件内容完全一致,8 个同路径文件不同;
  • 远端另有 2 个带时间戳的变更前备份文件,仓库不收录这些现场备份。

8 个差异文件及已知差异如下:

文件已知差异处理原则
autoload_configs/acl.conf.xml有效 ACL 值一致,仓库包含额外维护注释保留仓库注释;不复制远端备份文件
autoload_configs/event_socket.conf.xml仓库监听 IPv4 0.0.0.0,远端监听 IPv6/双栈 ::监听栈选择需现场确认
autoload_configs/switch.conf.xmlRTP 范围一致;机器专属数据库 DSN 存在差异DSN 不互相同步,需现场确认
dialplan/default.xml业务 socket 主机地址为 .246 与 .198服务实际部署地址需现场确认
dialplan/public/00_inbound_did.xml业务 socket 主机地址为 .246 与 .198服务实际部署地址需现场确认
sip_profiles/internal.xmlSIP/RTP 绑定变量不同;远端另有 ext-sip-port;数据库 DSN 存在差异绑定、端口和 DSN 均需现场确认
sip_profiles/internal/example.xml代理主机地址不同示例是否仍被使用需现场确认
vars.xml有效参数值一致,仅注释和空白不同保留仓库维护注释

表中的地址尾段只用于定位差异,不代表可以直接同步。无法从仓库确认的监听栈、业务服务 地址、SIP 端口、代理和数据库配置均标记为“需现场确认”,不得根据远端现状反推或臆造 调整原因。

⚠️ 该比对早于最近两次 WebRTC / 背景音变更,上述结论已不完整:13d419b(2026-08-29)与 769c60b(2026-09-04)之后,本目录新增了 autoload_configs/verto.conf.xml 与 autoload_configs/local_stream.conf.xml(配置文件数 137 → 139),并改动了 autoload_configs/modules.conf.xml、autoload_configs/acl.conf.xml、dialplan/default.xml 与 vars.xml。这 6 个文件都没有重新比对,上表的“129 一致 / 8 不同”不覆盖它们,下一次比对需要 重新统计。

变更与上线约束 ​

修改本目录时需要同步核对 FRP、coturn、安全组和主机防火墙。应用配置前至少确认 XML 可解析、RTP 与 relay 端口范围不重叠、ACL 中的公网地址与 coturn 一致,并保存现场私有 配置的独立备份。ACL 变更使用 reloadacl;Sofia profile 或全局 RTP 参数的生效方式按 现场变更窗口确认,并用新建 WebRTC 呼叫检查 ICE、DTLS 和双向 RTP。

生产 FreeSWITCH 位于 aliyun,注册域为 fs.wangijun.com,outbound socket 为 127.0.0.1:9911,inbound ESL 为 12015/TCP 并应用 callflow-esl-inbound ACL。

文档与代码在同一仓库维护,现有 Markdown 是唯一内容源。