出国自建 VoIP(三):三汇 SMG4004 网关对接 FreePBX

把三汇 SMG4004/SMG4000 类语音网关注册到 FreePBX,实现 SIM 卡电话通过 SIP 分机接打。

本文讲语音网关侧。不同固件菜单名称可能略有差异,但核心都是:SIM 卡正常、网关整机注册 FreePBX、呼入呼出路由打通。

设备与限制

旧款 SMG4004-4LC 常见特点:

  • 4 个 SIM 卡槽;
  • 可做 GSM/GOIP 语音网关;
  • 部分老硬件只支持 2G 通话和短信;
  • 支持 SIP 注册到 PBX;
  • 短信可通过 HTTP API、SMTP、SMPP 或设备自带接口处理,具体看固件。

使用前先确认本地运营商还支持设备可用的制式。很多地区 2G 退网后,老设备会出现可识别 SIM 但无法稳定驻网的问题。

旧文中的设备和卡槽界面截图:

SMG4004 网关外观与卡槽

SMG4004 卡槽状态

网络规划

示例:

项目示例
FreePBX10.20.20.60
SMG400410.20.20.74
SIP 传输UDP
FreePBX chan_sip 端口5160
中继账号smg4004

网关后台、FreePBX 后台和 SIP 信令都建议只放在内网或 VPN 内,不要直接暴露公网。

FreePBX 侧先确认基础页面和 SIP 端口设置无误:

FreePBX 网页管理界面

开启 PJSIP UDP/TCP 监听

如果前面有软路由或防火墙,也要确认 SIP 与 RTP 所需端口已经在内网策略里放行:

软路由放行 SIP/RTP 端口

升级固件

旧设备到手后,第一步不是接 PBX,而是确认固件版本。

建议检查:

  1. 设备型号是否和固件完全匹配。
  2. 是否支持当前 SIM 卡运营商网络。
  3. 是否有短信 API 或短信转发相关功能。
  4. 升级前导出当前配置。

固件升级失败可能导致设备不可用,所以不要跨型号刷,也不要在不稳定供电环境下升级。

SIM 卡检查

插卡后先在网关后台确认:

  • 卡槽识别正常;
  • 信号强度正常;
  • 运营商注册成功;
  • 能看到号码或 IMSI;
  • 单卡手动测试呼出成功;
  • 外部手机拨入该 SIM 卡能触发网关呼入。

如果这一步不通,FreePBX 配再好也没用。先解决 SIM、天线、制式、信号和运营商限制。

SMG4004 测试呼叫相关界面参考:

SMG4004 呼叫配置页面

SMG4004 呼叫测试页面

SMG4004 测试结果页面

注册到 FreePBX

在 FreePBX 里提前准备好 chan_sip 中继,例如:

host=dynamic
port=5160
type=peer
secret=CHANGE_TO_A_LONG_RANDOM_PASSWORD
context=from-pstn
dtmfmode=rfc2833
insecure=no
qualify=3000

然后到 SMG4004 后台的 SIP 注册页面,选择整机注册或网关注册,不建议一开始按每个端口分别注册。填写:

项目示例
SIP Server10.20.20.60
SIP Port5160
Usernamesmg4004 或 FreePBX 中继名
PasswordFreePBX 中继 secret
Register ModeGateway / Whole Gateway
TransportUDP

保存后回到 FreePBX 控制台查看是否注册:

asterisk -rvvv
sip show peers

如果看到网关对应 peer 为 OK 或可达,说明 SIP 注册基本成功。

FreePBX 创建中继时可以对照下面几张旧文截图:

创建 chan_sip 中继入口

填写中继名称与基础路由

中继 SIP 配置页面

填写中继 PEER Details

呼出路由

呼出路径是:

SIP 分机 -> FreePBX 出站路由 -> SMG4004 中继 -> SIM 卡 -> 被叫号码

FreePBX 出站路由可以先用最简单的 X. 规则,确认从分机直接拨手机号能送到网关。

网关侧通常需要配置:

  • IP/Tel Routing;
  • SIP to Mobile;
  • Outbound Route;
  • Call Route;
  • Port Group。

名称因固件不同会变,但逻辑是把来自 FreePBX 的 SIP 呼叫送到一个或多个 SIM 卡口。测试阶段可以先固定走第 1 个卡口,稳定后再做轮询或分组。

出站路由旧文截图:

创建出站路由

选择 SMG4004 中继

设置 X. 拨号匹配

呼入路由

呼入路径是:

外部电话 -> SIM 卡 -> SMG4004 -> FreePBX 中继 -> 入站路由 -> SIP 分机

网关侧要把移动网络来电送到 FreePBX 的 SIP Server。FreePBX 侧则用入站路由把呼叫送到某个分机或 Ring Group。

测试建议:

  1. 用外部手机拨 SIM 卡号码。
  2. 观察 SMG4004 是否显示来电。
  3. 观察 FreePBX 是否有 inbound call 日志。
  4. 观察 SIP 软电话是否振铃。

FreePBX 控制台可以实时看日志:

asterisk -rvvv

最后保存 FreePBX 配置,并在 SMG4004 后台选择“整机注册”到 FreePBX:

保存并应用 FreePBX 配置

SMG4004 整机注册到 FreePBX

DTMF 设置

网关和 FreePBX 的 DTMF 建议保持一致,常用:

RFC2833

如果菜单、语音邮箱或按键转接异常,优先检查 DTMF。其次检查编解码器,先用保守的 alawulaw 做测试。

常见问题

网关注册不上:

  • FreePBX chan_sip 是否启用;
  • 端口是不是 5160
  • 中继密码是否一致;
  • 防火墙是否放行内网 UDP 5160;
  • 网关和 FreePBX 是否能互 ping。

能呼出但无声音:

  • RTP 端口是否被防火墙拦截;
  • FreePBX 的 Local Networks 是否填写;
  • 是否跨 NAT;
  • 网关和 FreePBX 是否在同一内网。

能注册但呼入不到分机:

  • 网关移动到 SIP 的路由是否启用;
  • FreePBX 是否有入站路由;
  • context=from-pstn 是否正确;
  • 是否把呼叫送到了不存在的 DID。

下一步

电话链路跑通后,再处理短信。短信不要强行塞进 FreePBX;更推荐让网关通过 API、邮件或本地脚本把短信交给 Telegram Bot。