FreeSWITCH中 `mod_sofia` 模块

以下是关于FreeSWITCH中 mod_sofia 模块的详细教学讲解,以分步方式展开:


1. mod_sofia 模块简介

  • 作用: mod_sofia 是 FreeSWITCH 的核心模块之一,负责处理 SIP 协议栈(基于 RFC 3261),实现 SIP 注册、呼叫路由、媒体协商等功能。
  • 关键功能:
    • 管理 SIP 用户代理(User Agent)的注册和会话。
    • 处理 SIP 消息(INVITE, ACK, BYE, REGISTER 等)。
    • 与媒体引擎(如 mod_opusmod_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>
        
        <profile name="internal">
          
          <param name="sip-ip" value="$${local_ip_v4}"/>
          <param name="sip-port" value="5060"/>
          <param name="dialplan" value="XML"/>
          <param name="context" value="public"/>
          
          <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 注册管理
  • 用户注册流程:
    1. SIP 终端发送 REGISTER 请求到 FreeSWITCH。
    2. mod_sofia 验证用户凭证(通过 mod_auth)。
    3. 注册成功后会话信息存储在内存中。
  • 查看注册用户:
    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 分机互拨
  1. 创建用户:
    • directory/default/1000.xml 中定义用户 1000
  2. 启动 Profile:
    sofia profile internal restart
    
  3. 测试呼叫:
    originate user/1000@internal &echo
    

7. 扩展学习

  • 官方文档: mod_sofia - FreeSWITCH Wiki
  • 工具推荐:
    • sipsak:SIP 协议测试工具。
    • sngrep:SIP 消息抓包分析工具。

通过以上步骤,您应该能够全面理解 mod_sofia 的工作原理和配置方法。建议在测试环境中实际操作,逐步验证每个功能模块。

你可能感兴趣的:(VOIP那些事,freeswitch)