本文整理 FreePBX 侧配置。目标是让 SIP 软电话可以注册,并为后续语音网关接入准备中继和路由。
基础假设
示例网络如下:
| 项目 | 示例值 |
|---|---|
| FreePBX IP | 10.20.20.60 |
| 默认网关/路由器 IP | 10.20.20.1 |
| SMG4004 网关 IP | 10.20.20.74 |
| DNS | 114.114.114.114 |
| PJSIP 端口 | 5060 |
| chan_sip 端口 | 5160 |
FreePBX 可以直接使用官方 ISO 安装。老版本 FreePBX 16 常见底层是 CentOS/RHEL 系发行版,网络配置路径和 Debian/Ubuntu 不同。
原文中的整体架构图如下:

固定 FreePBX IP
安装完成后,如果系统通过 DHCP 获取地址,先改为静态 IP。以 eth0 为例:
vi /etc/sysconfig/network-scripts/ifcfg-eth0保留原文件里的其他字段,只调整关键项:
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR=10.20.20.60
NETMASK=255.255.255.0
GATEWAY=10.20.20.1
DNS1=114.114.114.114
DEFROUTE="yes"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"重启后确认地址:
ip addr show eth0
ip route不要在 FreePBX 初始阶段把 DNS 指向代理 DNS。PBX 的外部地址检测、NAT 判断和模块更新都可能因此变得难排查。
初始化 Web 管理
浏览器打开:
http://10.20.20.60/初始化管理员账号后,先完成三件事:
- 设置系统语言、时区和区域。
- 更新 FreePBX 模块。
- 进入
Settings -> Asterisk SIP Settings检查 SIP 监听端口。
如果界面里找不到 chan_sip 相关设置,先到高级设置里确认 chan_sip 是否启用。语音网关这类老设备经常更适合走 chan_sip 中继,而手机软电话分机建议走 PJSIP。
开启 PJSIP UDP/TCP
进入:
Settings -> Asterisk SIP Settings -> SIP Settings [chan_pjsip]确认至少启用:
- UDP:
0.0.0.0:5060 - TCP:按需启用
0.0.0.0:5060 - Local Networks:填写内网网段,例如
10.20.20.0/24 - External Address:如果只在 VPN/内网使用,可以先不填;如果跨公网,要填真实公网地址或 DDNS
RTP 端口保持默认通常即可:
10000-20000/udp下面这几张是旧文里 Asterisk SIP Settings 的配置截图,可以对照界面位置和选项名称:




启用 chan_sip 和设置地区、时间时,可以参考:


创建 PJSIP 分机
进入:
Applications -> Extensions -> Add Extension -> Add New PJSIP Extension示例:
| 项目 | 示例 |
|---|---|
| User Extension | 1001 |
| Display Name | phone-1001 |
| Secret | 32 位以上随机密码 |
| Voicemail | 按需开启 |
生成密码可以在 Linux 上运行:
openssl rand -base64 24 | cut -c1-32也可以使用 pwgen:
apt install pwgen
pwgen -s 32 1软电话客户端配置:
| 项目 | 示例 |
|---|---|
| SIP Server | 10.20.20.60 |
| Username | 1001 |
| Password | 分机 Secret |
| Transport | UDP 或 TCP |
创建两个分机互拨成功后,再继续接网关。基础分机不通时,不要急着配置中继。
分机创建界面参考:



创建给网关使用的 chan_sip 中继
进入:
Connectivity -> Trunks -> Add Trunk -> Add SIP (chan_sip) TrunkTrunk Name 可以写:
smg4004PEER Details 示例:
host=dynamic
port=5160
type=peer
secret=CHANGE_TO_A_LONG_RANDOM_PASSWORD
context=from-pstn
dtmfmode=rfc2833
insecure=no
qualify=3000这里的 secret 要和语音网关注册到 FreePBX 时填写的密码一致。context=from-pstn 表示从网关进来的呼叫按入站线路处理。
旧文中的中继配置流程截图:




出站路由
进入:
Connectivity -> Outbound Routes新增一条路由:
| 项目 | 示例 |
|---|---|
| Route Name | mobile-out |
| Dial Patterns | X. |
| Trunk Sequence | smg4004 |
X. 表示允许直接拨手机号,不额外加拨 9 之类前缀。个人自用比较直观,但一定要确保分机密码强、SIP 不裸露公网,否则风险很高。
出站路由设置参考:



入站路由
进入:
Connectivity -> Inbound Routes测试阶段可以先建一个 catch-all 入站路由:
| 项目 | 示例 |
|---|---|
| Description | mobile-in |
| DID Number | 留空 |
| CallerID Number | 留空 |
| Destination | Extension 1001 |
等呼入跑通后,再按 SIM 卡口、DID 或分机组做更细分的分配。
中文语音与功能码
如果需要中文语音提示,可以上传 FreePBX/Asterisk 中文语音包,并在声音语言里选择中文。常用功能码可在:
Admin -> Feature Codes里查看,例如语音邮箱、会议、呼叫转移、闹铃回拨等。个人方案里不一定都用得上,但知道它们在哪里,后面排错会更从容。
中文语音包和功能码界面参考:






验证清单
完成后至少检查:
- FreePBX 固定 IP 不会变化。
- PJSIP 分机可以注册。
- 两个分机之间可以互拨。
- chan_sip 中继已创建。
- 出站路由指向网关中继。
- 入站路由能把网关来电送到指定分机。
到这里,FreePBX 侧已经准备好。下一步是让三汇 SMG4004 这类语音网关注册到这个中继。