Files
lisglosips/docs/SERVER_A_RTPENGINE_RECORDING_RUNBOOK.md
T

5.3 KiB
Raw Blame History

Server A RTPEngine 与录音 tmpfs Runbook

适用阶段:S19
服务器:Server A 100.90.90.90
备份目录:/var/backups/lisglosips-s19/20260621T054645Z

部署内容

  • 安装并固定 Ubuntu 仓库 RTPEngine 包 11.5.1.18-1ubuntu1.2
    • rtpengine
    • rtpengine-daemon
    • rtpengine-recording-daemon
    • rtpengine-iptables
    • rtpengine-kernel-dkms
    • rtpengine-utils
  • 安装匹配当前内核的 headers,DKMS 已为 6.17.0-22-generic6.17.0-35-generic 构建 rtpengine/11.5.1.18
  • 加载内核模块 xt_RTPENGINERTPEngine 使用 kernel forwarding。
  • 创建 /dev/shm/voip_rec 3 GiB tmpfs,子目录:
    • spool
    • incoming
    • ready
    • failed
    • tmp
  • 部署录音 finalizer,将 incoming 下完成文件移动为 ready/<path>.part,再原子重命名为 ready/<path>.ready
  • 新增 lisglosips-a-firewall.service,重启后自动加载 S18/S19 nftables 规则。
  • 新增 OpenSIPS drop-in,等待 Tailscale 地址 100.90.90.90 后再启动,避免开机绑定失败。
  • 覆盖 rtpengine-recording-daemon.service,移除包默认 NFS/rpcbind 依赖,改为依赖本机 tmpfs 和 rtpengine-daemon
  • 停止并 mask rpcbind.servicerpcbind.socket。S19 录音缓冲不使用 NFS。

关键文件

服务器文件:

  • /etc/rtpengine/rtpengine.conf
  • /etc/rtpengine/rtpengine-recording.conf
  • /etc/default/rtpengine-daemon
  • /etc/default/rtpengine-recording-daemon
  • /etc/nftables.d/lisglosips-s19-rtpengine.nft
  • /etc/systemd/system/lisglosips-a-firewall.service
  • /etc/systemd/system/opensips.service.d/10-lisglosips-wait-tailscale.conf
  • /etc/systemd/system/rtpengine-recording-daemon.service
  • /etc/systemd/system/lisglosips-recording-finalize.service
  • /etc/systemd/system/lisglosips-recording-finalize.timer
  • /etc/tmpfiles.d/lisglosips-voip-rec.conf
  • /usr/local/sbin/lisglosips-recording-finalize
  • /etc/fstab

仓库副本:

  • infra/server-a/s19/rtpengine/
  • infra/server-a/s19/nftables/
  • infra/server-a/s19/systemd/
  • infra/server-a/s19/tmpfiles/
  • infra/server-a/s19/scripts/

运行参数

RTPEngine

  • 媒体地址:100.90.90.90
  • RTP 端口范围:30000-40000/udp
  • NG 控制口:127.0.0.1:2223/udp
  • CLI127.0.0.1:2224/tcp
  • HTTP/metrics127.0.0.1:2225/tcp
  • 录音 spool/dev/shm/voip_rec/spool

防火墙:

  • 允许 T 100.93.185.30 到 A 30000-40000/udp
  • 丢弃其他来源到 A 30000-40000/udp
  • 阻断非本地访问 2223/udp2224/tcp2225/tcp

验收记录

  • 重启后 systemctl is-system-runningrunning,无 failed unit。
  • opensipsrtpengine-daemonrtpengine-recording-daemonlisglosips-recording-finalize.timerlisglosips-a-firewall.servicelisglosips-node-exporter.service 均 active/enabled。
  • /dev/shm/voip_rec 为 3.0 GiB tmpfs,目录属主 rtpengine:rtpengine,权限 0750
  • xt_RTPENGINE 已加载;DKMS 状态为 installed。
  • rtpengine-ctl -ip 127.0.0.1 -port 2224 list interfaces 显示 100.90.90.90,端口段 30000 - 40000
  • nftables 表 lisglosips_s19_rtpengine 重启后存在。
  • 从 T 向 A 30000/udp40000/udp 发送探针,A 在 tailscale0 抓包可见。
  • 从 T 发 SIP OPTIONS 到 A 15060/udp 返回 SIP/2.0 200 Keepalive
  • 从 T 发 SIP REGISTER 到 A 15060/udp 返回 SIP/2.0 401 Authentication RequiredWWW-Authenticate
  • finalizer 冒烟:测试 .wavincoming 移动到 ready/...wav.ready,权限 0640,无 .part 残留,测试文件已删除。

说明:S19 尚未把 OpenSIPS 呼叫路由接入 RTPEngine,真实双向通话、NAT 媒体锚定和完整录音由 S20/S21/S28 联调完成。本阶段已验证 RTPEngine 服务、内核模块、RTP 端口范围、tmpfs 和录音 ready 生命周期。

常用检查

systemctl is-system-running
systemctl is-active opensips rtpengine-daemon rtpengine-recording-daemon lisglosips-recording-finalize.timer
findmnt /dev/shm/voip_rec
df -h /dev/shm/voip_rec
lsmod | grep RTPENGINE
dkms status | grep rtpengine
rtpengine-ctl -ip 127.0.0.1 -port 2224 list numsessions
rtpengine-ctl -ip 127.0.0.1 -port 2224 list interfaces
nft list table inet lisglosips_s19_rtpengine
iptables -t mangle -L -n -v

回滚

  1. 停止 RTPEngine 与录音服务:

    sudo systemctl stop rtpengine-recording-daemon lisglosips-recording-finalize.timer rtpengine-daemon
    
  2. 从备份目录恢复被覆盖的配置:

    sudo rsync -a /var/backups/lisglosips-s19/20260621T054645Z/etc/ /
    
  3. 移除 S19 新增防火墙表和服务:

    sudo nft delete table inet lisglosips_s19_rtpengine || true
    sudo systemctl disable --now lisglosips-a-firewall.service || true
    sudo rm -f /etc/systemd/system/lisglosips-a-firewall.service
    sudo systemctl daemon-reload
    
  4. 如需卸载 RTPEngine 包,先解除 hold,再卸载:

    sudo apt-mark unhold rtpengine rtpengine-daemon rtpengine-recording-daemon rtpengine-iptables rtpengine-kernel-dkms rtpengine-utils
    sudo apt-get remove --purge rtpengine rtpengine-daemon rtpengine-recording-daemon rtpengine-iptables rtpengine-kernel-dkms rtpengine-utils
    
  5. 如需移除 tmpfs,先确认无待搬运录音,再卸载并删除 /etc/fstab 中对应行。

回滚不涉及 SSH 管理策略,不禁用 SSH 密钥登录。