Skeyevss FAQ:NAT 穿透与媒体地址改写
1. 典型问题
- 信令注册成功,点播无画面 或 RTP 单通;
- 外网客户端能收目录,拉流超时;
- 内网预览正常,跨 NAT 失败;
- SDP 中
c=/m=地址为 私网段,对端无法路由。
以上多与 SDP 中的媒体地址未改写为对端可达地址 或 RTP 端口未映射 有关。
2. 基本概念
- 信令 NAT 与 媒体 NAT 是两层问题:SIP 路径通了,RTP 仍可能走错网卡或私网地址。
- ALG:部分路由器 SIP ALG 会错误改写包头,导致 Contact/Via 错乱;疑难时可对比开关 ALG 的表现。
- Symmetric NAT 下单纯端口映射可能不够,需 STUN/TURN 或平台侧统一 媒体代理(视架构而定)。
3. 平台侧配置要点(通用)
- 配置 对外媒体 IP,确保 SDP 中携带的地址与端口对 播放端/上级平台 可达;
- 若多网卡,明确 SIP 绑定地址 与 RTP 出口 是否一致;
- 核对 防火墙放行 UDP 端口段(RTP 常用偶数端口范围),不要只放信令端口。
具体键名以当前版本的 .env 或配置文档为准。
4. 设备侧
- 确认设备 本地网络 与 平台填写的 SIP 服务器 是否同一可达路径;
- 部分 IPC 需在 Web 里填 STUN 服务器 或开启 NAT 穿透 选项;
- 若设备在多层 CGNAT 后,优先考虑 平台侧集中转发 而非端到端直连。
5. 抓包与验证
- 在平台出口或客户端侧抓包,看 INVITE/200 OK 的 SDP 中外层 IP 是否为预期公网;
- 抓 RTP/RTCP 是否有双向流;若只有单向,检查对端是否向错误 IP 发包;
- 对比 内网直连 与 跨 NAT 两种场景的 SDP 差异。
6. 级联与上级平台
上级拉流时,若下级返回的 SDP 仍为下级内网地址,上级无法建链。级联场景要统一 媒体地址发布策略(由哪一层做改写、哪一层做代理)。
NAT 问题 先读 SDP,再抓 RTP;信令成功只说明找对对应设备,不代表媒体对接成功。