FreeSWITCH 配置

一、配置文件结构

FreeSWITCH 的配置文件位于 /usr/local/freeswitch/conf 目录,主要包含:

  • sip_profiles/:SIP 配置(如外部 SIP 客户端、运营商对接)
  • directory/:用户目录(分机号、密码等)
  • dialplan/:拨号计划(路由逻辑)
  • vars.xml:全局变量
  • autoload_configs/:模块配置

二、基础配置

1. 全局变量配置

编辑 vars.xml 设置基本参数:

<X-PRE-PROCESS cmd="set" data="default_password=1234"/>
<X-PRE-PROCESS cmd="set" data="domain=yourdomain.com"/> <!-- 替换为公网域名或IP -->
<X-PRE-PROCESS cmd="set" data="external_sip_ip=$${domain}"/>
<X-PRE-PROCESS cmd="set" data="external_rtp_ip=$${domain}"/>
<X-PRE-PROCESS cmd="set" data="internal_sip_ip=127.0.0.1"/>
<X-PRE-PROCESS cmd="set" data="internal_rtp_ip=127.0.0.1"/>
<X-PRE-PROCESS cmd="set" data="rtp_start_port=16384"/>
<X-PRE-PROCESS cmd="set" data="rtp_end_port=32768"/>

2. 时区设置

编辑 freeswitch.xml

<param name="timezone" value="Asia/Shanghai"/>  <!-- 设置时区 -->

三、SIP 配置

1. 内部 SIP 配置(客户端接入)

编辑 sip_profiles/internal.xml

<param name="nat-map" value="false"/>  <!-- 内部网络通常无需 NAT 映射 -->
<param name="ext-rtp-ip" value="$${local_ip_v4}"/>  <!-- RTP 媒体 IP -->
<param name="ext-sip-ip" value="$${local_ip_v4}"/>  <!-- SIP 信令 IP -->
<param name="apply-nat-acl" value="loose-rfc3261"/>  <!-- NAT 规则 -->

2. 外部 SIP 配置(公网接入)

编辑 sip_profiles/external.xml

<include>
  <profile name="external">
    <!-- 基础网络设置 -->
    <param name="rtp-ip" value="$${external_rtp_ip}"/>
    <param name="sip-ip" value="$${external_sip_ip}"/>
    <param name="sip-port" value="5060"/>
    <param name="ws-binding" value=":5066"/> <!-- WebSocket 支持 -->
    <param name="wss-binding" value=":7443"/> <!-- 安全 WebSocket 支持 -->
    
    <!-- 安全与性能参数 -->
    <param name="context" value="public"/>
    <param name="apply-inbound-acl" value="wan.auto"/>
    <param name="inbound-codec-prefs" value="PCMU,PCMA,G722,opus"/>
    <param name="outbound-codec-prefs" value="PCMU,PCMA,G722,opus"/>
    <param name="tls-cert-dir" value="$${certs_dir}"/>
    <param name="tls-key-dir" value="$${certs_dir}"/>
    
    <!-- NAT 相关设置 -->
    <param name="ext-rtp-ip" value="$${external_rtp_ip}"/>
    <param name="ext-sip-ip" value="$${external_sip_ip}"/>
    <param name="nat-options" value="enable"/>
    <param name="force-rport" value="true"/>
    <param name="rewrite-contact" value="true"/>
  </profile>
</include>

四、用户分机配置

编辑 directory/default/1000.xml(示例分机 1000):

<include>
  <user id="1000">
    <params>
      <param name="password" value="1234"/>  <!-- 分机密码 -->
      <param name="vm-password" value="1000"/>  <!-- 语音信箱密码 -->
    </params>
    <variables>
      <variable name="user_context" value="default"/>  <!-- 用户上下文 -->
      <variable name="effective_caller_id_name" value="Extension 1000"/>  <!-- 主叫显示名 -->
      <variable name="effective_caller_id_number" value="1000"/>  <!-- 主叫显示号码 -->
    </variables>
  </user>
</include>

五、拨号计划配置

编辑 dialplan/default.xml 设置基本路由规则:

根据自己的设备设置路由规则

	<extension name="866-prefix-numbers">
	  <condition field="destination_number" expression="^866(\d+)$">
		<action application="export" data="dialed_extension=866${1}"/>
		<action application="set" data="ringback=${us-ring}"/>
		<action application="set" data="call_timeout=30"/>
		<action application="set" data="hangup_after_bridge=true"/>
		<action application="set" data="continue_on_fail=true"/>
		<action application="answer"/>
		<action application="sleep" data="1000"/>
		<action application="bridge" data="sofia/internal/866${1}@apollo.aovx.com"/>
	  </condition>
	</extension>

六、媒体配置

1. 编解码设置

编辑 autoload_configs/switch.conf.xml

<param name="rtp-start-port" value="16384"/>  <!-- RTP 起始端口 -->
<param name="rtp-end-port" value="32768"/>    <!-- RTP 结束端口 -->
<param name="rtp-timeout-sec" value="30"/>     <!-- RTP 超时时间 -->

2. 编解码优先级

编辑 autoload_configs/codecs.conf.xml

<param name="default-codec-prefs" value="OPUS,G722,PCMU,PCMA"/>  <!-- 编解码优先级 -->

七、STUN/TURN 集成配置

1. 启用 STUN/TURN 支持

编辑 sip_profiles/external.xml

<profile name="external">
  <!--stun -->
  <param name="stun-srv" value="stun.l.google.com:19302"/>
  <param name="ext-rtp-ip" value="$${external_rtp_ip}"/>
  <param name="ext-sip-ip" value="$${external_sip_ip}"/>
  <param name="nat-options" value="enable"/>
  <param name="force-rport" value="true"/>
  <param name="rewrite-contact" value="true"/>
  
  <!-- TURN服务器配置 -->
  <param name="turn-server" value="turn:YOUR_TURN_SERVER:3478"/>
  <param name="turn-tls-server" value="turns:YOUR_TURN_SERVER:5349"/>  <!-- TLS版本 -->
  <param name="turn-user" value="YOUR_USERNAME"/>
  <param name="turn-password" value="YOUR_PASSWORD"/>
  <param name="turn-min-port" value="49152"/>
  <param name="turn-max-port" value="65535"/>
  
  <!-- 启用TURN -->
  <param name="use-turn" value="true"/>
  <param name="turn-only" value="false"/>  <!-- 仅在STUN失败时使用TURN -->
</profile>

2. 高级 NAT 穿透配置

<param name="ext-rtp-ip" value="$${external_rtp_ip}"/>  <!-- 外部 RTP IP -->
<param name="ext-sip-ip" value="$${external_sip_ip}"/>  <!-- 外部 SIP IP -->
<param name="rtp-ip" value="$${local_ip_v4}"/>  <!-- 内部 RTP IP -->
<param name="sip-ip" value="$${local_ip_v4}"/>  <!-- 内部 SIP IP -->

八、安全配置

1. ACL 访问控制

编辑 autoload_configs/acl.conf.xml

<list name="localnet.auto" default="deny">
  <node type="allow" cidr="192.168.1.0/24"/>  <!-- 允许内部网络 -->
  <node type="allow" cidr="10.0.0.0/8"/>
  <node type="allow" cidr="172.16.0.0/12"/>
</list>

2. 禁用危险模块

编辑 autoload_configs/modules.conf.xml

<!-- 注释掉不需要的模块 -->
<!-- <load module="mod_xml_cdr"/> -->
<!-- <load module="mod_spandsp"/> -->

九、启动与验证

1. 启动 FreeSWITCH

sudo systemctl start freeswitch
sudo systemctl enable freeswitch  # 设置开机自启

2. 验证服务状态

sudo systemctl status freeswitch

3. 进入 FreeSWITCH 控制台

fs_cli -x status  # 查看状态
fs_cli -x "sofia status"  # 查看 SIP 状态
fs_cli -x "show channels"  # 查看当前通道

十、常见问题排查

1.SIP 注册失败

  • 检查 SIP 端口(5060)是否开放
  • 确认 sip_profiles/external.xml 中 ext-sip-ip 配置正确

2.有信令无媒体

  • 检查 RTP 端口范围(16384-32768)是否开放
  • 确认 STUN/TURN 配置正确

3.编解码不匹配

  • 使用 fs_cli -x "show codecs" 查看支持的编解码
  • 在客户端和 FreeSWITCH 中统一编解码优先级
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鱼>

一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值