关于流媒体平台使用 P2P 的研究
最近更新日期:2026 年 4 月 3 日,20:50。
注意
此文章可能有时效性,过一段时间后可能不会再起作用。且此文章后续可能会有改动。另外,请根据自己当前的网络实际情况,实行相关的措施。
另外,如果操作不当,会影响其他正常用途需要 NAT 打洞的程序或游戏,例如 GTA 在线模式、绝地潜兵 2。
前言
之前我在浏览器和手机端应用看直播的时候,我发现即时网络速率有点不对劲,上下行近乎对等,然后我再用 Wireshark 抓包看看,全是 UDP DTLS 的网络流量,然后怀疑是不是直播用了 P2P 技术。
由于我是想到啥就写啥,所以可能看着有点乱,先凑合看吧。
先分析
简单来说就是,你在直播间里,服务器会给你发送直播的画面。
与此同时,你的设备还会被当成服务器,给同样在直播间里的其他用户发送直播视频画面。而且,如果你网络环境好的话,上传给其他用户的概率就越大。
怎么传出去的?当然是利用了 STUN 和 NAT 打洞。
利弊
好处就是,但对于服务商来说,降低了服务器本身和网络资源的占用,还能让服务商少掏点钱给运营商。毕竟每年给运营商付的费用不是小数目。
坏处嘛,那就成了用户的了,那就是占用你设备大量的网络资源,和设备本身资源,而且各个参与 P2P 的网络用户,网络环境条件是参差不齐的,非常容易出现直播缓冲的情况。
再就是,鉴于目前三大运营商的跨省流量结算,和跨运营商 QoS 的策略,如果总上传过大,很容易被运营商以 PCDN 为由,对你的网络进行限速处理。
屏蔽措施
在电脑上
如果你用电脑看的话,其实挺简单的,只需要把 STUN 服务器地址屏蔽,就可以了,去 hosts 文件把域名全解析到 0.0.0.0 就行。还有一种,是直接关闭 WEBRTC,你可以去浏览器的应用商店搜索 AdGuard,里面提供了关闭 WEBRTC 的选项。但是直接关闭 WEBRTC 过于一刀切了,会影响其他需要 P2P 的用途,除非…你不用。
如果你用客户端,那我不太建议,因为客户端更容易绕过此种限制,如果你一定要使用客户端,那你可以试试用反病毒软件自带的网络监控功能,给客户端限制上传速度,请注意,上传速率设置太低会影响正常使用,限速大概在 30-50 KB 每秒就差不多可以了。
在手机上
手机的话,屏蔽就有点难了,可能需要借助其他网络设备来屏蔽。
但如果你的路由器有条件进命令行(Telnet 或 SSH)的话,那你或许可以试试对看直播的设备,进行单独的 IPTables MASQUERADE 地址伪装,然后设置 –random 或 –random-full 参数,将 NAT 设置为对称性的,来阻止 P2P。
命令行示例:
1 | |
提示:random 参数有两种可选,一个是 --random ,一个是 --random-fully ,这两个参数区别在于,一个是端口有规律递增,一个是端口完全随机。
如果你需要对其它滥用 STUN P2P 上传的设备进行“制裁”,你也可以试试这么做。
对于手机的热点,如果你手机有 root 的话,你也可以使用 IPtables 命令来对单独的源地址 IP 设置
但这也有缺点,其他需要使用 P2P 的应用程序可能会出现问题。
使用 OpenWRT 将整个局域网”伪装”随机化
注意
此种方法可能会影响其他正常需要 P2P 网络连接的程序。
但对于 Natter,作者本人已经在网关设备实测过,在网关设备执行 MASQUERADE RAMDOM 转换时,不会影响运行在网关的 Natter 的端口转发方式为 IPTables 的行为,放心使用。
如果想把整个局域网的 P2P 都禁止,而且用的是 OpenWRT,可以这样做…
首先命令行,使用 SSH 方式登录,然后使用文本编辑器,nano 或 vim 都可,编辑 /usr/share/firewall4/templates/zone-masq.uc 文件,在最后一行,找到 masquerade comment,在两个单词中间,添加 random,保存即可。
如果使用的是 ImmortalWRT 或者是其他第三方编译的版本,自行找到相关选项,并取消勾选。有的叫 Fullcone NAT,有的叫全锥型 NAT。
回到 OpenWRT 的网页 Luci 设置界面,找到“网络”→“防火墙”,重新点击一下“保存并应用”,现在再使用 NAT Type Tester 再看看,测试结果为 Symmetric,且过滤行为和映射行为都为 AddressAndPortDependent。
其他人的研究
https://www.bilibili.com/opus/960552827377156133
https://www.bilibili.com/opus/625913491082488344
https://www.bilibili.com/opus/858956728907071497
后续
因为没有完美的办法,毕竟道高一尺魔高一丈。
文章开头也说明过,可能具有时效性,随着 APP 厂商的更新,会发生变动,所以并不是一直都是有效的。就像抵抗校园网的路由器共享检测(v4 NAT)一样,各种 TTL、DPI、UA、时间戳检测法。
所以,请根据自己当前的网络实际情况,实行相关的措施。
就先这样吧,后续有新想法我再修改修改。如果文章有错误,欢迎提出意见!