5.3 KiB
5.3 KiB
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:rtpenginertpengine-daemonrtpengine-recording-daemonrtpengine-iptablesrtpengine-kernel-dkmsrtpengine-utils
- 安装匹配当前内核的 headers,DKMS 已为
6.17.0-22-generic和6.17.0-35-generic构建rtpengine/11.5.1.18。 - 加载内核模块
xt_RTPENGINE,RTPEngine 使用 kernel forwarding。 - 创建
/dev/shm/voip_rec3 GiB tmpfs,子目录:spoolincomingreadyfailedtmp
- 部署录音 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.service、rpcbind.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 - CLI:
127.0.0.1:2224/tcp - HTTP/metrics:
127.0.0.1:2225/tcp - 录音 spool:
/dev/shm/voip_rec/spool
防火墙:
- 允许 T
100.93.185.30到 A30000-40000/udp - 丢弃其他来源到 A
30000-40000/udp - 阻断非本地访问
2223/udp、2224/tcp、2225/tcp
验收记录
- 重启后
systemctl is-system-running为running,无 failed unit。 opensips、rtpengine-daemon、rtpengine-recording-daemon、lisglosips-recording-finalize.timer、lisglosips-a-firewall.service、lisglosips-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/udp、40000/udp发送探针,A 在tailscale0抓包可见。 - 从 T 发 SIP
OPTIONS到 A15060/udp返回SIP/2.0 200 Keepalive。 - 从 T 发 SIP
REGISTER到 A15060/udp返回SIP/2.0 401 Authentication Required和WWW-Authenticate。 - finalizer 冒烟:测试
.wav从incoming移动到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
回滚
-
停止 RTPEngine 与录音服务:
sudo systemctl stop rtpengine-recording-daemon lisglosips-recording-finalize.timer rtpengine-daemon -
从备份目录恢复被覆盖的配置:
sudo rsync -a /var/backups/lisglosips-s19/20260621T054645Z/etc/ / -
移除 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 -
如需卸载 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 -
如需移除 tmpfs,先确认无待搬运录音,再卸载并删除
/etc/fstab中对应行。
回滚不涉及 SSH 管理策略,不禁用 SSH 密钥登录。