buzhidao 发表于 2025-2-17 02:03:28

【求助】Pi-KVM 仅在 H.264 WebRTC 模式下黑屏 局域网正常

问题:<br />
<br />
Pi-KVM 在<strong>局域网</strong>环境和使用 <strong>Tailscale</strong> 时均正常。<br />
<br />
但是Tailscale使用不太方便要双方都装了客户端,想直接内网穿透就能用。<br />
<br />
用FRP 和 Lucky 的 STUN 服务进行内网穿透后,H.264 WebRTC 模式黑屏,MJPEG正常。<br />
<br />
按照官方文档(https://docs.pikvm.org/webrtc_config/)的说明,添加了多个不同的 STUN 服务器行测试,还是不行。<br />
<br />
用了Lucky 的 STUN 内网穿透等于是nat之后的公网ip了吧?<br />
<br />
搜了好久不知道还有什么可能了,各位MJJ大佬能指条明路或者给个关键词嘛<img src="https://hostloc.com/static/image/smiley/yct/002.gif" smilieid="30" border="0" alt="" />

ROSROS 发表于 2025-2-17 07:07:36

你都多余来这里问,这里MJJ 对于这种PI DIY技术 基本0 基础,要论抬杠扯犊子 都是一个比一个 是人才。

buzhidao 发表于 2025-2-17 13:05:45

<div class="quote"><blockquote><font size="2"><a href="https://hostloc.com/forum.php?mod=redirect&goto=findpost&pid=16237377&ptid=1389593" target="_blank"><font color="#999999">ROSROS 发表于 2025-2-17 07:07</font></a></font><br />
你都多余来这里问,这里MJJ 对于这种PI DIY技术 基本0 基础,要论抬杠扯犊子 都是一个比一个 是人才。 ...</blockquote></div><br />
<img src="https://hostloc.com/static/image/smiley/yct/007.gif" smilieid="46" border="0" alt="" /> 印象中mjj无所不知

乖.含住 发表于 2025-2-17 07:07:00

好的,用户在使用Pi-KVM进行内网穿透时遇到了问题。他们在局域网和Tailscale下都正常,但用FRP和Lucky的STUN服务穿透后,H.264 WebRTC模式黑屏,而MJPEG正常。用户已经按照官方文档添加了多个STUN服务器,但问题依旧。现在他们想知道可能的原因和解决方案。<br />
<br />
首先,我需要分析WebRTC的工作机制。WebRTC需要STUN/TURN服务器来处理NAT穿透。如果STUN配置不当,可能导致连接失败。虽然用户已经添加了多个STUN服务器,但可能还有遗漏,比如TURN服务器,因为某些情况下仅STUN不足以穿透对称型NAT。<br />
<br />
接下来,考虑Lucky的STUN服务是否足够。用户提到使用Lucky的STUN服务,但可能这只是一个STUN服务器,而缺乏TURN中继功能。如果NAT类型是对称型的,可能需要TURN服务器来中转流量。这时候,建议用户检查NAT类型,并考虑配置或使用包含TURN的服务,比如Coturn。<br />
<br />
然后,FRP的配置是否正确。FRP作为反向代理,需要正确转发UDP端口,因为WebRTC使用UDP传输媒体流。如果FRP只配置了TCP,那么UDP流量无法通过,导致黑屏。用户需要确认FRP是否配置了UDP端口转发,特别是与WebRTC相关的端口(如40000-65535范围)。<br />
<br />
防火Q设置也是关键。无论是Pi-KVM主机还是中间节点的防火Q,都需要放行相关的UDP端口。用户需要检查iptables或ufw设置,确保这些端口未被阻止。<br />
<br />
此外,Pi-KVM的配置可能需要调整。用户应该检查/etc/kvmd/nginx/ssl-overrides.conf中的STUN配置是否正确,并且没有语法错误。同时,可以尝试在WebRTC配置中强制使用TURN服务器,或者调整ICE传输策略,优先使用中继连接。<br />
<br />
最后,用户提到的Lucky的STUN服务是否暴露了正确的公网IP和端口。可能需要通过在线工具检查STUN服务器是否返回正确的公网地址,并确保该地址和端口在FRP配置中被正确映射。<br />
<br />
总结可能的问题点:缺少TURN服务器、FRP未配置UDP转发、防火Q阻止UDP流量、STUN配置错误或NAT类型不支持。用户需要逐一排查这些方面,可能需要结合日志和网络工具进行诊断。<br />
<br />
针对你遇到的问题,这里有一个系统化的排查和解决方案:<br />
<br />
关键问题分析<br />
WebRTC协议特性<br />
<br />
WebRTC依赖STUN/TURN服务器穿透NAT,但需要双向可达的UDP通道。<br />
<br />
如果NAT类型为对称型(Symmetric NAT),仅STUN可能不够,必须依赖TURN中继。<br />
<br />
Lucky/FRP穿透的局限性<br />
<br />
Lucky的STUN服务可能仅提供NAT映射发现,但未提供中继功能(TURN)。<br />
<br />
FRP默认转发TCP流量,而WebRTC的媒体流依赖UDP,需要特别配置。<br />
<br />
Pi-KVM WebRTC配置<br />
<br />
官方文档的STUN配置可能未覆盖所有网络场景,尤其是多层NAT或对称型NAT。<br />
<br />
解决方案步骤<br />
1. 确认NAT类型<br />
使用工具(如 STUN Tester)检查网络NAT类型。<br />
<br />
如果显示为Symmetric NAT,则必须部署TURN服务器。<br />
<br />
2. 部署TURN中继服务器<br />
安装Coturn服务器(推荐):<br />
<br />
bash<br />
复制<br />
sudo apt-get install coturn<br />
配置/etc/turnserver.conf:<br />
<br />
ini<br />
复制<br />
listening-ip=0.0.0.0<br />
relay-ip=服务器公网IP<br />
external-ip=服务器公网IP<br />
realm=yourdomain.com<br />
user=username:password<br />
重启服务:<br />
<br />
bash<br />
复制<br />
systemctl restart coturn<br />
3. 配置Pi-KVM使用TURN<br />
修改/etc/kvmd/nginx/ssl-overrides.conf,添加TURN服务器:<br />
<br />
nginx<br />
复制<br />
add_header Alt-Svc 'webrtc=&quot;turn:turn.yourdomain.com:3478?transport=udp&quot;';<br />
add_header Alt-Svc 'webrtc=&quot;turn:turn.yourdomain.com:3478?transport=tcp&quot;';<br />
添加ICE服务器配置:<br />
<br />
nginx<br />
复制<br />
add_header Link '&lt;/api/webrtc/ice&gt;; rel=&quot;webrtc&quot;';<br />
创建/etc/kvmd/nginx/ice-servers.json:<br />
<br />
json<br />
复制<br />
{<br />
&quot;iceServers&quot;: [<br />
{ &quot;urls&quot;: &quot;stun:stun.l.google.com:19302&quot; },<br />
{ <br />
&quot;urls&quot;: &quot;turn:turn.yourdomain.com:3478&quot;,<br />
&quot;username&quot;: &quot;username&quot;,<br />
&quot;credential&quot;: &quot;password&quot;<br />
}<br />
]<br />
}<br />
4. 配置FRP转发UDP<br />
修改FRP服务端配置(frps.ini):<br />
<br />
ini<br />
复制<br />
<br />
bind_port = 7000<br />
# 添加UDP绑定端口范围<br />
udp_port = 40000-65535<br />
修改FRP客户端配置(frpc.ini):<br />
<br />
ini<br />
复制<br />
<br />
type = udp<br />
local_ip = 127.0.0.1<br />
local_port = 80# Pi-KVM实际UDP端口<br />
remote_port = 40000# 选择一个端口<br />
5. 防火Q放行UDP<br />
在Pi-KVM主机执行:<br />
<br />
bash<br />
复制<br />
sudo ufw allow 3478/udp# TURN端口<br />
sudo ufw allow 40000:65535/udp# FRP UDP范围<br />
6. 强制WebRTC使用TURN<br />
修改Pi-KVM的WebRTC初始化参数:<br />
<br />
javascript<br />
复制<br />
// 在Web界面注入代码或修改前端配置<br />
const pc = new RTCPeerConnection({<br />
iceServers: [<br />
{ urls: &quot;turn:turn.yourdomain.com:3478&quot;, username: &quot;user&quot;, credential: &quot;pass&quot; }<br />
],<br />
iceTransportPolicy: &quot;relay&quot;// 强制仅使用TURN<br />
});<br />
7. 验证穿透路径<br />
访问 WebRTC Troubleshooter 检查连接状态。<br />
<br />
在浏览器控制台查看RTCPeerConnection的ICE候选信息,确认有relay类型候选。<br />
<br />
替代方案<br />
如果仍无法解决,可尝试以下方法:<br />
<br />
改用TCP中转模式:<br />
<br />
nginx<br />
复制<br />
# 在Nginx配置中强制H.264 over TCP<br />
add_header Alt-Svc 'webrtc=&quot;tcp://your-frp-domain.com:443&quot;';<br />
降级到MJPEG(临时方案):<br />
<br />
bash<br />
复制<br />
# 修改Pi-KVM配置使用MJPEG<br />
ln -sf /etc/kvmd/override.d/mjpeg.ini /etc/kvmd/override.d/streamer.ini<br />
systemctl restart kvmd<br />
通过以上步骤,应能解决因NAT类型或UDP转发导致的WebRTC黑屏问题。重点在于确保TURN中继可用且FRP正确转发UDP流量。
页: [1]
查看完整版本: 【求助】Pi-KVM 仅在 H.264 WebRTC 模式下黑屏 局域网正常