1. 安装 FreeSWITCH

Ubuntu/Debian 安装

# 添加 FreeSWITCH 仓库
wget -O - https://files.freeswitch.org/repo/deb/debian-release/fsstretch-archive-keyring.asc | apt-key add -
echo "deb http://files.freeswitch.org/repo/deb/debian-release/ `lsb_release -sc` main" > /etc/apt/sources.list.d/freeswitch.list
apt-get update

# 安装 FreeSWITCH
apt-get install -y freeswitch-meta-all

CentOS/RHEL 安装

yum install -y https://files.freeswitch.org/repo/yum/centos-release/freeswitch-release-repo-0-1.noarch.rpm
yum install -y freeswitch-config-vanilla

2. 配置 SIP Gateway(以菜鸟语音为例)

创建 Gateway 配置文件:

<!-- /etc/freeswitch/sip_profiles/external/cainiao.xml -->
<include>
  <gateway name="cainiao-voice">
    <!-- SIP 服务器地址 -->
    <param name="realm" value="sip.cainiaovoice.com"/>
    <param name="username" value="your_account"/>
    <param name="password" value="your_password"/>

    <!-- 注册设置 -->
    <param name="register" value="true"/>
    <param name="register-transport" value="udp"/>
    <param name="retry-seconds" value="30"/>
    <param name="ping-interval" value="30"/>

    <!-- 主叫号码设置 -->
    <param name="caller-id-in-from" value="true"/>
    <param name="extension" value="your_did_number"/>
  </gateway>
</include>

如果是 IP 白名单模式(无需注册),使用以下配置:

<include>
  <gateway name="cainiao-ipauth">
    <param name="realm" value="sip.cainiaovoice.com"/>
    <param name="register" value="false"/>
    <param name="caller-id-in-from" value="true"/>
  </gateway>
</include>

3. 编解码器配置

编辑 SIP Profile 的编解码器设置:

<!-- /etc/freeswitch/vars.xml -->
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=G722,PCMU,PCMA,G729"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=PCMU,PCMA,G729"/>

4. Dialplan 配置(外呼路由)

<!-- /etc/freeswitch/dialplan/default.xml -->
<extension name="international-outbound">
  <condition field="destination_number" expression="^(011\d+|00\d+|\+\d+)$">
    <!-- 设置主叫号码 -->
    <action application="set" data="effective_caller_id_number=your_did_number"/>
    <action application="set" data="effective_caller_id_name=YourCompany"/>
    <!-- 通过菜鸟语音网关呼出 -->
    <action application="bridge" data="sofia/gateway/cainiao-voice/$1"/>
  </condition>
</extension>

<!-- 按国家路由 -->
<extension name="route-us">
  <condition field="destination_number" expression="^(\+1\d{10})$">
    <action application="set" data="effective_caller_id_number=1XXXXXXXXXX"/>
    <action application="bridge" data="sofia/gateway/cainiao-voice/$1"/>
  </condition>
</extension>

5. NAT 穿越

如果 FreeSWITCH 在 NAT 后面(常见于云服务器),需要配置:

<!-- /etc/freeswitch/autoload_configs/switch.conf.xml -->
<param name="rtp-ip" value="YOUR_PUBLIC_IP"/>
<param name="sip-ip" value="YOUR_PUBLIC_IP"/>
<param name="ext-rtp-ip" value="YOUR_PUBLIC_IP"/>
<param name="ext-sip-ip" value="YOUR_PUBLIC_IP"/>
<param name="rtp-timeout-sec" value="300"/>
<param name="rtp-hold-timeout-sec" value="1800"/>

6. 安全加固

  • ACL 限制:只允许 SIP 中继服务商的 IP 地址
  • 强密码:网关密码至少16位随机字符
  • 防火墙:只开放 5060/5061(SIP)和 RTP 端口范围
  • fail2ban:自动封禁异常 IP
  • 关闭不必要的服务:禁用不必要的 SIP Profile

7. 监控和运维

  • fs_cli:FreeSWITCH 命令行控制台
  • ESL(Event Socket Library):程序化监控和操控
  • CDR:配置 CDR 输出到数据库或文件
  • show channels:查看当前通话状态
  • sofia status:查看 Gateway 注册状态
# 常用运维命令
fs_cli -x "sofia status profile external"     # 查看 SIP Profile 状态
fs_cli -x "sofia status gateway cainiao-voice" # 查看网关注册状态
fs_cli -x "show channels count"                # 查看当前并发数
fs_cli -x "reloadxml"                          # 重载配置(不中断通话)

8. 常见问题排查

问题可能原因解决方案
Gateway 注册失败账号密码错误/网络不通检查 credentials,ping SIP 服务器
单向语音NAT 问题/RTP 端口未开放配置 ext-rtp-ip,开放 RTP 端口
通话中断超时/编解码器不匹配检查 session timeout,统一编解码器
通话质量差带宽不足/网络抖动检查带宽,启用 jitterbuffer

菜鸟语音技术支持:菜鸟语音提供 7x24 中英文技术支持,从 FreeSWITCH/Asterisk 配置调试到线路上线的全流程协助。遇到 SIP 对接问题可以直接联系我们的技术团队。

生产上线前建议继续阅读

需要 SIP 中继对接协助?

菜鸟语音技术团队可协助 FreeSWITCH/Asterisk 配置

联系技术支持