以下是关于FreeSWITCH中 mod_sofia
模块的详细教学讲解,以分步方式展开:
1. mod_sofia 模块简介
- 作用:
mod_sofia
是 FreeSWITCH 的核心模块之一,负责处理 SIP 协议栈(基于 RFC 3261),实现 SIP 注册、呼叫路由、媒体协商等功能。 - 关键功能:
- 管理 SIP 用户代理(User Agent)的注册和会话。
- 处理 SIP 消息(INVITE, ACK, BYE, REGISTER 等)。
- 与媒体引擎(如
mod_opus
、mod_pcm
)协作完成媒体流传输。 - 支持 TLS/SRTP 加密、NAT 穿透等高级功能。
2. 基础配置
2.1 配置文件结构
- 主要配置文件:
sofia.conf.xml
(位于/usr/local/freeswitch/conf/autoload_configs/
)。 - 核心配置段:
<configuration name="sofia.conf" description="Sofia Configuration"> <global_settings> <!-- 全局参数,如日志级别、超时时间等 --> <param name="log-level" value="debug"/> </global_settings> <profiles> <!-- 定义 SIP 监听配置文件(Profiles) --> <profile name="internal"> <!-- SIP 协议参数 --> <param name="sip-ip" value="$${local_ip_v4}"/> <param name="sip-port" value="5060"/> <param name="dialplan" value="XML"/> <param name="context" value="public"/> <!-- TLS 配置 --> <param name="tls" value="true"/> <param name="tls-cert-dir" value="/path/to/certs"/> </profile> </profiles> </configuration>
2.2 启动与加载
- 加载模块:
# 在 FreeSWITCH 控制台 freeswitch> load mod_sofia
- 启动 SIP Profile:
freeswitch> sofia profile internal start
3. 核心功能详解
3.1 SIP 注册管理
- 用户注册流程:
- SIP 终端发送
REGISTER
请求到 FreeSWITCH。 mod_sofia
验证用户凭证(通过mod_auth
)。- 注册成功后会话信息存储在内存中。
- SIP 终端发送
- 查看注册用户:
freeswitch> sofia status profile internal reg
3.2 呼叫路由
- INVITE 处理:
mod_sofia
接收INVITE
请求后,触发 Dialplan(如 XML Dialplan)进行路由。- 示例 Dialplan 匹配规则:
<extension name="internal_calls"> <condition field="destination_number" expression="^(10\d+)$"> <action application="bridge" data="user/$1@internal"/> </condition> </extension>
3.3 媒体协商
- SDP 交换:
mod_sofia
解析 SIP 消息中的 SDP 字段,协商媒体参数(如编解码、IP/端口)。- 支持动态选择编解码(通过
global_codec_prefs
配置优先级)。
4. 高级功能
4.1 NAT 穿透
- 配置 STUN 服务器:
<param name="stun-server" value="stun.freeswitch.org"/> <param name="ext-rtp-ip" value="auto-nat"/> <param name="ext-sip-ip" value="auto-nat"/>
4.2 TLS 加密
- 启用 TLS:
<param name="tls" value="true"/> <param name="tls-cert-dir" value="/path/to/certs"/> <param name="tls-only" value="false"/>
4.3 多租户支持
- 多 Profile 配置:
<profiles> <profile name="internal">...</profile> <profile name="external"> <param name="sip-port" value="5080"/> <param name="context" value="external_calls"/> </profile> </profiles>
5. 调试与故障排除
5.1 日志分析
- 设置日志级别:
freeswitch> sofia loglevel all debug
- 关键日志标识:
sofia.c
:模块核心日志。sofia_reg.c
:注册相关日志。
5.2 常见问题
- 注册失败:
- 检查
user_directory
中的用户配置。 - 验证防火墙是否放行 SIP 端口(默认 5060)。
- 检查
- 单通/无声音:
- 确认 RTP 端口(默认 16384-32768)未被占用。
- 使用
tcpdump
抓包分析媒体流。
6. 实践案例
案例:配置 SIP 分机互拨
- 创建用户:
- 在
directory/default/1000.xml
中定义用户1000
。
- 在
- 启动 Profile:
sofia profile internal restart
- 测试呼叫:
originate user/1000@internal &echo
7. 扩展学习
- 官方文档: mod_sofia - FreeSWITCH Wiki
- 工具推荐:
sipsak
:SIP 协议测试工具。sngrep
:SIP 消息抓包分析工具。
通过以上步骤,您应该能够全面理解 mod_sofia
的工作原理和配置方法。建议在测试环境中实际操作,逐步验证每个功能模块。