GB/T 28181 视频前置接入:让摄像头进得来,又碰不到内网

1889 字
9 分钟
GB/T 28181 视频前置接入:让摄像头进得来,又碰不到内网

需求一句话说得清:外部的摄像头、执法头盔要把实时视频送进内网的视频平台。

难点也一句话说得清:这些设备在互联网、4G 和专线上,而内网平台在业务网段里,两者一步都不能直连。

GB/T 28181 是国标的视频联网协议(SIP 信令 + RTP 媒体)。它解决”怎么互通”,不解决”怎么安全地互通”。后半截是网络工程师的活。

拓扑#

前端监控 / 执法头盔
│
互联网 / 4G / 专线
│
边界防火墙(ACL)
│
前置机(DMZ) ← SIP 信令 + RTP 媒体
│
视频接入网关 ← 级联 SIP + RTP
│
内网视频平台

中间那台 DMZ 前置机是整个方案的核心。它的存在只为一件事:让两边永远不见面。

三条隔离原则#

这三条是不可协商的,其他所有配置都是为了保证它们成立:

  1. 摄像头只能和前置机互通——不能直达内网任何业务网段
  2. 内网平台只能和前置机 / 网关互通——不能直接去连摄像头
  3. 媒体必须经前置机中继,不能端到端直通

第三条最容易被忽略。有些实现为了省带宽会协商成设备与平台直接传 RTP——那样前面两条隔离就白做了,等于在防火墙上开了一条谁也说不清的路。宁可多一跳中继,也不能让码流绕过前置机。

前置机的双重身份#

这台前置机在国标体系里同时扮演两个角色,这一点是整个方案最容易想错的地方:

  • 对前端设备(摄像头 / MCU),它是国标上级平台——设备向它注册、向它推流
  • 对内网视频平台,它是国标下级域——它向平台注册、把流级联上去

于是媒体要做两段 RTP 中继:设备 → 前置机是一段,前置机 → 平台是另一段,中间由前置机重新做 SDP 协商。这正是”不能端到端直通”在实现层面的样子——前置机不是透传的代理,它是两侧各自的对端。

搞不清这层关系,就会在两边的国标 ID、SIP 端口和媒体端口段上反复配错。

单网卡还是双网卡#

两套都做了方案,取舍如下:

单网卡(host 网络)双网卡
部署简单,一块网卡走 DMZeth0 对设备、eth1 对内网网关
隔离强度靠防火墙 ACL 保证物理链路天然分开
适用成本敏感、边界防火墙可信生产首选

生产上推荐双网卡:DMZ 侧和内网侧走不同物理口,即使 ACL 配错了,也不至于一条规则就把两张网连通。

网络一律静态配置,不上 DHCP——前置机的地址要写进防火墙工单和平台配置,不能变。方案阶段是按 Ubuntu / netplan 写的,实际落地的机器是 Anolis OS,改用 NetworkManager,配置方式不同但原则一样。

端口:只开必需的,逐条写清楚#

前置机跑 WVP + ZLMediaKit,Docker 部署用 network_mode: host,让 SIP 和 RTP 端口直接监听,避免 NAT 端口映射把媒体协商搞乱(这是容器化跑 SIP 类应用最常见的坑)。

方向端口用途
设备 → 前置机24600 UDP/TCPSIP 注册与信令
设备 → 前置机24601-24624 UDP实时音视频 RTP/RTCP
前置机 → 设备5060 UDP/TCP回呼 INVITE
前置机 → 网关5060 UDP/TCP级联 SIP
前置机 → 网关22000-22023 UDP媒体送网关
运维网段 → 前置机22 / 18080 / 8080 TCPSSH 与管理界面,限源

媒体端口段的宽度直接决定并发路数。上面这套对应约 12 路并发;要扩容就把设备侧扩成 24601-24700、网关侧扩成 22000-22100,并同步更新防火墙工单——不同步的话下次排障没人知道实际开了哪些口。

主机侧 ufw 默认拒绝入站,只放行上表的端口。管理口(WVP Web、ZLM API)绝不对全网开放。

防火墙工单要写成可审计的样子#

这类项目最后落到边界防火墙上,就是一张工单。写工单有两个原则:

逐条写源、目的、协议、端口、动作、说明。 不要图省事写 any。工单里我专门加了一行:

不要开通 0-65535 any。

这不是废话——现场为了”先通了再说”开全端口,然后就永远没人敢关了。

要有明确的拒绝项。 工单不能只写放行什么,还要写清楚禁止什么:

  • 摄像头 / 公网 不得直达内网业务网段
  • 内网业务终端 不得直达摄像头
  • 数据库 3306、Redis 6379 不对非本机开放

拒绝项是给后来人看的。半年后有人问”能不能让平台直接连摄像头”,工单上白纸黑字写着不行,就不用重新讨论一遍。

现场环境比协议更难对付#

真实项目里,协议本身反而是最可控的部分。难的是现场给你什么条件:

约束影响
服务器无互联网镜像只能离线导出、拷贝、导入,不能 docker pull
Anolis OS 8.8RHEL 系但不是 CentOS,部分包源和文档对不上
Docker 19.03(厂商定制版,不允许升级)很多新版 compose 语法不能用,只能按老版本写
Compose v2.12.2 可用唯一的好消息,编排还能正常做

服务栈是 WVP-PRO + ZLMediaKit + MySQL + Redis,全部要在这台机器上离线跑起来。所有镜像先在有网的机器上 docker save,拷进去再 docker load,版本必须一次选对——进去之后没有第二次机会拉包。

还有一个容易忽略的点:时间必须准。 SIP 鉴权对时间敏感,机器时钟偏了,注册就会莫名其妙失败,而报错信息不会告诉你是时间问题。

后续:MCU 会议 SIP 中继#

国标这套跑通之后,接着做的是 MCU 会议系统的 SIP 中继,要支持双向主叫。

这一段没有继续用 WVP,而是换成 Kamailio + rtpengine——因为需求从”视频监控联网”变成了”会议信令路由与媒体中继”,前者的国标栈在这里是多余的。选型跟着需求走,不跟着”上次用了什么”走。

交付物#

这个项目最后交付的不只是一台能跑的机器:

  • 定稿方案(拓扑、选型、单/双网卡对比、端口互通表)
  • 配置交付文档(逐步骤,含 netplan、Docker Compose、WVP 配置样例)
  • 前置机完整配置手册(从裸系统到服务可用;方案版基于 Ubuntu,现场版按 Anolis OS 调整)
  • 防火墙开通工单(可直接提交给网信 / 安全部门审批)

做集成项目十几年下来的经验是:方案能不能落地,一半取决于文档能不能让别人照着做。 只有你自己能维护的系统,等于埋了个雷。

这套东西能迁移到哪#

同一套思路适用于所有”外部设备要进内网”的场景:园区监控联网、门禁平台对接、工业采集设备上云。变的是协议和端口,不变的是前置机 + 强制中继 + 逐条 ACL + 明确拒绝项这个骨架。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

GB/T 28181 视频前置接入:让摄像头进得来,又碰不到内网
https://dr.cctv15.net/posts/gb28181-video-frontend/
作者
董锐
发布于
2026-07-29
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
涉密车间的网络怎么隔离:分区、准入、访客和审计
企业信息化涉密车间的网络合规化改造。只写可公开的方法:办公网与车间网怎么分开、终端怎么准入、访客怎么隔离、审计看什么。不涉及任何具体客户、工艺、产品线和现场细节。
2
订阅制服务的用量计量和三通道支付
个人上线的系统一套跑在 GCP 上的订阅计费:支付宝 / PayPal / USDT 三条通道,重构了原实现里用量统计对不上账的部分。只写计量和通道边界,不写业务名和域名。
3
云资源自助交付平台:把「申请一台机器」做成不用找人的事
个人上线的系统对接 GCP / AWS API 做计算实例的自动开通、回收与生命周期管理,用户在自助控制台就能开关机、重装、重置凭据。做这套的动机来自运维本职——重复劳动应该被消灭。
4
换核心交换机:不做一次性大割接
企业信息化老核心承载 25 个三层接口、下联 21 台接入交换机,独立 AC 管着 24 台 AP。换成华为 CloudEngine 并把无线收进新核心,跨 V200 到 V600 两个大版本。这篇讲怎么拆成可回滚的小步,以及射频诊断查出来的真问题。
5
企业 AD 从 0 到 1:域控、终端、证书、无线和 SSO
企业信息化在一家从没有域的制造企业里,把 Active Directory、DNS、证书、SCCM、RADIUS 和 Entra ID 一次铺起来。这篇写边界怎么划、坑在哪,不写客户内网细节。
随机文章随机推荐
Profile Image of the Author
董锐
网络 / 系统工程师。身份底座、跨境网络、信息化交付。
公告
这是项目履历站,配合简历看。中英文 PDF 在「关于我」页可下载。
分类
标签
站点统计
文章
16
分类
3
标签
76
总字数
20,278
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.6
文章许可
CC BY-NC-SA 4.0