一、配置文件结构
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 中统一编解码优先级