WebRTC 和 STUN 的防火墙规则

WebRTC 和 STUN 的防火墙规则

我正在尝试通过公司防火墙运行 WebRTC 服务。该服务在本地网络上运行良好,但防火墙似乎阻止了它在全球范围内运行。

我使用 Python 中的代码示例主动脉夹包裹,找到这里,在客户端和服务器端都增加了一个 STUN 服务器 URL。

客户端似乎工作正常,并正确地将其外部 IP 作为 ICE 候选发送。

但是,服务器端只发送具有本地地址的候选。STUN 似乎被阻止了。stunclient返回以下内容:

$ stunclient --verbosity 9 --mode full --localaddr eno1 
stun.stunprotocol.org
Resolved stun.stunprotocol.org to 52.15.67.208:0
config.fBehaviorTest = true
config.fFilteringTest = true
config.timeoutSeconds = 0
config.uMaxAttempts = 0
config.addrServer = 52.15.67.208:3478
socketconfig.addrLocal = <MyLocalIp>:0
Sending message to 52.15.67.208:3478
Continuing to wait for response...
...
Continuing to wait for response...
Sending message to 52.15.67.208:3478
Continuing to wait for response...
...
Continuing to wait for response...
Binding test: fail
Behavior test: fail
Filtering test: fail

其他 STUN 服务器也出现故障。

我认为这是由于防火墙阻止了我用于 HTTPS 的端口上除 TCP 之外的任何内容造成的。

应如何配置防火墙以允许 STUN 和 WebRTC?

谢谢!

答案1

我是 stun.stunprotocol.org 和 stuntman 代码本身的维护者。只是碰巧在这里迟到了一点才发现你的问题。我通常会在 stackoverflow.com 上监控 stun 问题,但只是偶尔才会去 serverfault。

是的,看来您的防火墙正在阻止到 stun 服务器的流量。这在大型企业环境中并不意外。

默认情况下,STUN 在 UDP 端口上工作,而不是 TCP。您可以尝试--protocol tcpstunclient命令行上指定,看看是否有任何区别。但 WebRTC 仅使用 UDP 模式。一个可以尝试的简单想法是在 UDP 端口 53 上托管您自己的 stun 服务器(与 DNS 相同),看看是否可行。同样,企业可能会将 DNS 流量限制到知名或内部服务器。

向 IT 管理员提出的要求是“开放对监听 UDP 端口 3478 和 3479 的远程服务器的访问权限”。如果他们确实开放了这些端口,您可能会发现企业防火墙充当对称 NAT,无法很好地启用 WebRTC 连接。YMMV。

相关内容