我想在ejabberd中配置STUNTURN,以便在 "对话 "XMPP客户端中使用WebRTC。
当然,我读了 ejabberd STUNTURN文档。 以及如何 配置DNS SRV记录. 我还临时设置了 匿名认证. 根据要点 对话中的AV呼叫 我测试了ICE STUN TURN与 adb logcat
和 涓流ICE.
我的问题是:我确实看到了 "已发现的ICE服务器 "和 "STUN候选",类型为 "srflx"(所以我认为STUN工作正确),但没有 "候选 "类型为 "中继",我只是得到 "主机 "类型。有时(!)我得到的通知是 "无法到达?"
我的配置(ejabberd.yml):
"listen "是为udp和tcp配置的,都是这样的 use_turn: true
'mod_stun_disco'包含四个条目。type: stun
和 turn
和 transport: udp
和 tcp
所有的IP和端口号都相同,与DNS SRV记录相匹配。
listen:
-
port: 43210
transport: udp
module: ejabberd_stun
use_turn: true
## The server's public IPv4 address:
turn_ip: 123.123.123.123 # Servers real IPv4 IP
auth_type: anonymous
mod_stun_disco:
services:
-
host: 123.123.123.123 # Servers real IPv4 IP
port: 43210
type: turn
transport: udp
所以我最后一个可能的麻烦来源是:我使用的是一个 "初学者友好 "的托管提供商,我只有一个无权限的用户账户(Fedora)。所以我建立并以用户身份运行ejabberd,并不得不打开几个自定义的防火墙端口:c2s, s2s_in, https, 有或没有TLS (和'let's encrypt'证书).但AFAICS一切都很好,除了TURN.当然我没有权利运行tcpdump来分析TCP UDP流量,但在ejabberd.log中我可以找到。
[info] @mod_stun_disco:handle_call:332 Offering STUN/TURN services to [email protected]/Conversations.AbCD
而当我把日志级别提高到 debug
,与一个真正的XMPP客户端有'发送XML流'的条目与 "阅读,"中继候选人收获在WebRTC只与凭证。auth: anonymous
到 user
并向TrickleICE提供了一个有效的测试用户的明文凭证,现在我只在日志中看到 "Not an ephemeral username"。
所以我的问题是:下一步该怎么做呢?有人知道是哪里出了问题吗?或者有什么方法可以深入调试?
我对STUNTURN一无所知,但在ejabberd聊天室里问了这个问题,得到了两个提示。
Licaon_Kter说:
防火墙的范围是49xxx -65000
霍尔格说。
49152-65535 UDP 必须是无障碍的,加上43210 UDP 与他的配置。
而他应该恢复他的摆弄。
auth_type
必须保持在默认状态(user
),他应该只做mod_stun_disco: {}
.关于UDP端口范围(49152-65535),他可以配置一个较小的范围,比如说。
turn_min_port: 60000
和turn_max_port: 60999
. 但他确实需要不止一个或两个端口。
如果您有更多的疑问,可以加入 ejabberd 聊天室:[email protected]。