OpenVox VoxStack 网关分析

OpenVox 模拟网关分析#

因为淘到一个二手 OpenVox 语音网关,就好奇"里面"长什么样。

Let's find out.

VS-AGU-E2M0800#

  • VS - VoxStack 系列 - 模块化,热插拔
  • AGU - Analog Gateway - 模拟网关
  • 软件 1.1.10
  • 硬件 1.0.0

一张卡两个模块

  • E2M8HJ9DJ68P - VS 模块
    • M83241G13 - Freescale Semiconductor - NXP
      • Telecom Interface ICs C1K-LS102M 450MHz
      • IC C1K 450MHZ VOIP 448BGA
  • FXS-420 v1.2 - FS42HJ1KK4UY5
    • S13215-FM
  • FXO-400 v1.4 - FXODHJO2XT6L
    • 3019-FT 1718FF L0L4
    • Si3050-FT 1708EM F1Q5

Web 管理界面#

界面类似于官方演示 http://admin:[email protected]:65327

通过开启 ssh, 账号名设置为 super 可获取到 root 权限,默认 SSH 端口 12345。

硬件#

未开箱,不一定准确。

-规格
内存120MB
CPUARMv6-compatible processor rev 5 (v6l)

Comcerto 1000 M83263G

  • ARM1136 - 2 Core, 650MHz
  • 敏迅科技/Mindspeed Technologies 芯片
  • Mindspeed 主要提供 VoIP 领域解决方案 - DSP, LTE, Transcede
  • VoIP, Security Engine, PCIe 2, RGMII 2
  • SDRAM 16/32 bit DDR2-800/667/533
  • L1 缓存 2x(64K D$/64K I$)
  • VoIP 能力
    • Field hardened voice features
    • World class acoustic echo cancellation technology
    • Narrow and wideband codecs
    • G.711, G.729, G.722, G.723.1, iLBC, T.38, G.729.1, G.722.2, AMR, AMR Wideband
    • Enhanced echo canceller, CID-I/II, VAD/CNG, AGC
    • 3-Way conferencing
  • TDM/PCM interface for glue-less VoIP support
  • 2009 年

/proc/cpuinfo

Processor : ARMv6-compatible processor rev 5 (v6l)
BogoMIPS : 648.80
Features : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 6TEJ
CPU variant : 0x1
CPU part : 0xb36
CPU revision : 5
Hardware : Comcerto 1000 (EVM)
Revision : 0000
Serial : 0000000000000000

系统环境#

底层基于 OpenWrt

--
uname -aLinux General 2.6.33.5 #4 Tue Aug 29 20:38:01 CST 2017 armv6l unknown
Busybox1.4.2
Asterisk1.8.20.0 / 1.8.X 发布于 2010-10-21 EOL 2015-10-21
dahdi2.6.0
dcra0.1.0

Busybox applet

[, [[, arping, ash, awk, awx, basename, bunzip2, bzcat, cat, chgrp, chmod, chown, chroot, clear, cp, crond, crontab, cut, date, df, dirname, dmesg, du, echo, egrep, env, expr, false, fgrep, find, free, getty, grep, gunzip, gzip, halt, head, hostid, hostname, httpd, id, ifconfig, init, insmod, ipkg, kill, killall, killall5, klogd, length, less, ln, lock, logger, login, logread, ls, lsmod, md5sum, mdev, mesg, mkdir, mkfifo, mknod, mktemp, mount, mv, nc, netmsg, netstat, nice, nslookup, passwd, pidof, ping, ping6, pivot_root, poweroff, printf, ps, pwd, rdate, reboot, renice, reset, rm, rmdir, rmmod, route, sed, seq, sh, sleep, sort, strings, stty, switch_root, sync, sysctl, syslogd, tail, tar, tee, telnet, test, time, top, touch, tr, traceroute, true, tty, udhcpc, umount, uname, uniq, uptime, vconfig, vi, watchdog, wc, wget, which, xargs, yes, zcat

cmdline

init=/etc/preinit ubi.mtd=4,2048 ubi.block=0,0 root=/dev/ubiblk0_0 ro rootfstype=squashfs hwaddress=eth0,a0:98:05:0e:04:8e hwaddress=eth2,00:03:7F:0B:00:01 console=ttyS0,115200 mtdparts=comcertonand:256k(uboot),128k(env),128K(param),4M(kernel),20M(root),4M(ekernel),20M(eroot),16M(config),-(system) partno=M83263G fppmode=1

内核模块

ModuleSizeUsed by
wctdmc1k3009616
dcra85241 wctdmc1k
dahdi18594817 wctdmc1k
krtpd1485200
csmencaps147402
led_key25004
  • dahdi
    • wctdmc1k - OpenVox 模拟信号处理模块
      • WCTDMC1K 设备驱动 - Mindspeed 开发的芯片驱动
    • dcra - opvx_dcra - Access Dahdi Channel Registers through procfs
  • csmencaps - 应该是 FX 处理相关模块
  • led_key - 应该是驱动面板 led 的
  • krtpd - Kernel RTP proxy for Asterisk - openvox 开发
filename: /lib/modules/2.6.33.5/dcra.ko
license: GPL v2
alias: opvx_dcra
description: Access Dahdi Channel Registers through procfs
parmtype: maxchan:int
parmtype: debug:int
depends:
vermagic: 2.6.33.5 mod_unload ARMv6

主要用户进程

procdesc
/bin/php /my_tools/keeper
/bin/php /my_tools/logfile_monitor
/my_tools/checkasteriskstat
/my_tools/ntpclient时间同步
/my_tools/resetkey
/my_tools/sys_restore
/my_tools/watchdog
/usr/sbin/crond定时任务
/webservice/service
asterisk -gasterisk 主进程
dropbear -p 12345SSH 守护进程
lighttpd -f /etc/lighttpd.conf -m /usr/lib/lighttpdWeb 服务

系统目录#

  • /www -> /tmp/web/www
  • /tmp/web/www - cgi-bin css images index.html js lang - 管理应用
  • /data/
    • info/
    • log/
      • cdr.db - SQLite 通话记录
      • sys-log - 系统日志
      • update.txt - 更新日志
    • sms/
  • /my_tools/ - 系统工具
  • /webservice/service - 服务
  • /version
    • version - 系统版本
    • build_time - 构建时间
    • cfg_ver_list - 配置版本 - 内容 1.1.10
    • def_cfg.tar.gz - asterisk 配置备份
    • openvpn.sample_configs.tar.gz
    • sip_bendpoints.sample_configs.tar.gz

系统挂载

devsizepathfstype
/dev/ubiblk0_016.1M/rootfs, squashfs
none57.5M/tmptmpfs
tmpfs512.0k/devtmpfs
/dev/mtdblock716.0M/etc/asteriskjffs2
/dev/mtdblock863.5M/datajffs2

mtd 分区

mtdfsrangenamesizemount
mtd00x000000000000-0x000000040000uboot256k
mtd10x000000040000-0x000000060000env128k
mtd20x000000060000-0x000000080000param128K
mtd30x000000080000-0x000000480000kernel4M
mtd4ubi00x000000480000-0x000001880000root20MB/
mtd50x000001880000-0x000001c80000ekernel4M
mtd60x000001c80000-0x000003080000eroot20M
mtd7jffs20x000003080000-0x000004080000config16M/etc/asterisk
mtd8jffs20x000004080000-0x000008000000system63.5MB/data

v1.1.23

版本变化底层系统和软件均无变化,变化的主要是 php 代码和部分配置。

--
uname -aLinux General 2.6.33.5 #23 Mon Oct 14 17:12:50 CST 2019 armv6l unknown

安装包#

ipkg list

pkgver
base-files-comcerto100014-unknown
busybox1.4.2-1
cmm7.00-5
cyclesoaknone-1
dropbear0.49-1
ethtool3-0
hotplug20.9-1
ip2.6.23-1
kernel2.6.33.5-comcerto1000-1
kmod-csme2.6.33.5+2.14.0-comcerto1000-1
kmod-fci2.6.33.5+7.00-comcerto1000-1
kmod-fpp-csme2.6.33.5+2.14.0-comcerto1000-1
kmod-fpp-driver2.6.33.5-comcerto1000-1
kmod-ipt-conntrack2.6.33.5-comcerto1000-1
kmod-ipt-core2.6.33.5-comcerto1000-1
kmod-matisse1.00-0
kmod-nf-conntrack-netlink2.6.33.5-comcerto1000-1
kmod-nfnetlink2.6.33.5-comcerto1000-1
ldd14
libc2.7-14
libcli1.9.3-1
libgcc4.1.2-14
libgdbm1.8.3-0
libgmp4.2.1-1
libiptc1.4.7-1
libncurses5.2-8
libnfconntrack0.0.100
libnfnetlink1.0.0
libopenssl0.9.8q-1
libpcap1.1.1-2
libpopt1.7-4
libpthread2.7-14
librt2.7-14
libstdcpp4.1.2-14
libxtables1.4.7-1
msp-firmware2.6.33.5+3.00.11-comcerto1000-1
mtd5
ntpclient2003_194-2
openssl-util0.9.8q-1
ppp2.4.3-7
ppp-mod-pppoe2.4.3-7
rp-pppoe-client3.8-1
udevtrigger106-1
vapi2.14.0
zlib1.2.3-3

/etc/ipkg.conf

/etc/ipkg.conf
src snapshots http://openwrt.org/downloads/snapshots/$S/packages
dest root /
dest ram /tmp

系统工具/my_tools#

nametypedesc
add_syslogshelllog 到 syslog
addkey_client.shshell
addkey_server.shshell
astmanproxyAsterisk Manager Proxy
checkAsteriskProc.shshell检测并启动 dahdi 和 asterisk
checkCapture.shshelldahdi 停止 dump 给定 chanid
checkStartFinish.shshellsleep 1000s 重启
checkasteriskstat
cluster_modephp配置集群模式 - master, slave, standalone
cluster_slaveslave 应用
cpuusageCPU 使用情况 - 类似 vmstat
eth_server.conf
fetch解密固件
get_backport
gwpingeth ping 客户端
gwpingdeth_server - eth_server.conf 为配置文件
if_monitor
keeper保持进程存在 - 类似 supervisor
krtpd_cli
led_key.ko内核模块
logfile_monitorphp日志监控
lstast
net_tool获取网卡信息
ntpclientNTP 客户端
play_all_led所有 LED 亮
process_cdrCDR 处理
readDeviceID
resetkey
restore_cfg_file恢复 asterisk 配置文件
safe_append_to_file
safe_rebootshellreboot
set_busytone.shshellfxomon.conf busytone 设置
set_config配置文件操作
set_default
set_registers.shshell注册 dcra
sys_restore
unpack.shshell用于解压固件 - unzip, md5 checmsum, 解密, unzip
watchdog
web_language_initphp初始化 web 的语言
# 固件解密 - 类似 fetch
openssl enc -aes-256-cbc -d -in firmware.img -pass pass:O7r8yGv0cdlNM4lQ -out firmware.tar.gz
# 获取配置
/my_tools/set_config /etc/asterisk/gw/web_server.conf get option_value general port 2

固件#

官网提供固件下载 https://www.openvox.cn/pub/firmwares , Web 界面支持上传或在线更新。

固件更新上传逻辑位于 /www/cgi-bin/php/system-tools.php 。 固件准备好后通过 /my_tools/unpack.sh 解压升级。

固件格式

  • AnalogGateway-current.bin -> tar.gz
    • firmware/AnalogGateway-1.1.20.img.md5
    • firmware/AnalogGateway-1.1.20.img - openssl enc'd data with salted password
  • AnalogGateway-1.1.20.img - 解密 -> tar.gz
    • AnalogGateway.img - 应该为系统镜像
    • key - AnalogGateway.img 的 md5 checksum
    • u-boot.bin - bootloader
    • upgrade.sh - 升级脚本
# 下载
curl -O https://www.openvox.cn/pub/firmwares/Analog%20Gateway/AnalogGateway-current.bin
# 固件为 tar.gz
tar zxvf AnalogGateway-current.bin
cd firmware
# 固件经过 openssl 加密 - 解密后为 tar.tz
openssl enc -aes-256-cbc -d -in AnalogGateway-*.img -pass pass:O7r8yGv0cdlNM4lQ -out AnalogGateway.tar.gz
# 解压获取实际内容
mkdir firmware
tar zxvf AnalogGateway.tar.gz -C firmware

固件升级

固件升级使用 openvox 内置的自定义工具 /usr/bin/auto_update,主要涉及操作 mtd。

# -i 1 - 使用 ubiblk
auto_update -i 1
# -b 升级 ubook
auto_update -b u-boot.bin
# -f 更新文件, -u 升级系统
auto_update -u -f AnalogGateway.img

集群模式#

运行模式通过 /my_tools/cluster_mode 配置。

slave extension

#include sip_general.conf
#include sip_endpoints.conf
#include sip_slave.conf
#include extensions_macro.conf
#include extensions_slave.conf
#include extensions_dialmatchingrules.conf
# ext = slave_password+index
[fxs-<ext>-<master_ip>]
exten => #00,1,playback(Ext_number)
exten => #00,n,agi(getsipbinding.sh)
exten => #00,n,Wait(1)
exten => #00,n,Hangup()
exten => s,1,Dial(SIP/$sip_extension-$slave_masterip)
exten => s,n,Hangup()
exten => *1*2*3*4,1,agi(factoryreset.sh)
exten => *1*2*3*4,n,Hangup()
exten => **,1,playback(IP_address)
exten => **,n,agi(geteth0ip.sh)
[sip-$sip_extension]
exten => _X.,1,GotoIf($["${SIP_HEADER(X-Best-Codec)}" = ""]?dial)
exten => _X.,n,Set(SIP_CODEC=${SIP_HEADER(X-Best-Codec)})
exten => _X.,n(dial),Dial(dahdi/${i}r1/${EXTEN},$DIALTIMEOUT)
exten => _X.,n,Hangup()

master extension

#include sip_general.conf
#include sip_endpoints.conf
#include sip_master.conf
#include extensions_macro.conf
#include extensions_fxs.conf
#include extensions_master.conf
#include extensions_internal.conf
#include extensions_routing.conf
;#include extensions_sipdef.conf
#include extensions_dialmatchingrules.conf

VS_USB-400#

  • 无线网关

系统环境#

  • 软件版本 2.1.22
  • 硬件版本 1.0
  • 一个主控,多个模块,模块不带 CPU
  • 无线模块为 高通 Gobi 无线宽带芯片技术 - GobiNet - USB 驱动
  • 通道 STM32, 底板 MCU STM8
  • 该版本包含 frpc - 允许 openvox cloud 建立链接 - 映射了 ssh 和 web

该版本最大的区别是模块不在是独立系统。

HWDesc
CPUIntel(R) Atom(TM) CPU Z3735G @ 1.33GHz
Memory1 G
Disk16 G Flash
SWDesc
Debian8
uname -aLinux Wireless-Gateway 4.19.81 #7 SMP Thu Feb 13 08:24:02 CST 2020 i686 i386
Busyboxv1.22.1
Asterisk1.8.20.0
/proc/cmdlineBOOT_IMAGE=/vmlinuz ro root=LABEL=kernel1 intel_pstate=disable quiet console=ttyS0,115200n8

/proc/mtrr

reg00: base=0x0ffd00000 ( 4093MB), size= 4MB, count=1: write-protect
reg01: base=0x000000000 ( 0MB), size= 1024MB, count=1: write-back
reg02: base=0x03e000000 ( 992MB), size= 32MB, count=1: uncachable
reg03: base=0x03d000000 ( 976MB), size= 16MB, count=1: uncachable
reg04: base=0x03ce00000 ( 974MB), size= 2MB, count=1: uncachable
reg05: base=0x03c800000 ( 968MB), size= 4MB, count=1: uncachable

/proc/mounts

devsizepathfs
/dev/mmcblk0p6487.9M/etc/cfgext4
/dev/mmcblk0p7487.9M/dataext4
/dev/mmcblk0p292.8M/bootext4
/dev/mmcblk0p428.9M/gatewaysquashfs

modules

  • GobiNet - 驱动无线模块
  • usb_wwan
  • cdc_acm
  • ch341
  • usbserial - 依赖 USB 串口
  • cdc_ether
  • usbnet
  • r8152
  • snd_pcm
  • snd_timer
  • i2c_hid
  • i2c_algo_bit
  • soundcore
  • sdhci_acpi
  • button

系统目录#

  • /my_tools -> /gateway/my_tools
  • /sound -> /gateway/sound
  • /webservice -> /gateway/webservice
  • /version -> /gateway/version
  • /www -> /gateway/www
  • /conf
  • /data
    • log/
      • cdr.db
      • smsinbox.db
      • smsoutbox.db
  • /etc
    • cfg/ - Asteris 配置 - 独立挂载 - 可备份
      • gw/ - 网关配置
        • n2n/ - 2 层 Mesh 组网
        • sim840w.conf - SIM 模块配置 - AT 命令之类
        • sim6320.conf - SIM 模块配置
        • uc15.conf - SIM 模块配置 - UC15
        • sms.conf - 短信配置
      • cloud/ - 应该是 openvox 云平台之类的 - https://cloud.openvox.com.cn/
        • cloud.conf
        • frpc.ini - openvox 访问 ssh 和 web 的后门
    • udev/rules.d/
      • gobinet.rules - GobiNet 映射 - /sys/class/net/gobinet*
      • internet.rules - 模块内部 usbnet 映射 - 会 symlink 到 /dev/opvx/
  • /tmp
    • hw_info.cfg - 硬件配置 - 由于生成 asterisk gw_gsm.conf 和 extra-channels.conf 配置
  • /usr/sbin/cloudMain
  • /usr/sbin/cloudExternal
  • /usr/sbin/cloudNat
  • /gateway - 完整网关系统 - 独立挂载
    • www/ - PHP 网站
    • my_tools/ - 工具集

Asterisk#

不管什么版本的网关,Asterisk 的版本似乎都没有变过 - 1.8.20.0

moddesc
chan_extraGSM/CDMA Telephony Driver FOR Asterisk
  • chan_extra
    • OpenVox 开发的无线模块 - GSM, CDMA 和新的 LTE 均使用该模块
    • opvxg4xx 驱动提供支持
    • 配置文件 extra-channels.conf, chan_extra.conf
    • GSM, CDMA 基于 DAHDi
    • 4G LTE 基于 GobiNet 内核驱动
    • 驱动下载 https://www.openvox.cn/pub/misc/GSM/
modprobe opvxg4xx
# Asterisk 命令
gsm show spans