【问题标题】:Asterisk 12.6 // TURN // WebRTC // No audioAsterisk 12.6 // TURN // WebRTC // 没有音频
【发布时间】:2014-12-08 22:38:35
【问题描述】:

WebRTC 设置正在本地网络上运行。它已移至托管,不再起作用。我正在研究 SDP,但我对网络和 SIP 的了解不足以完全理解发生了什么错误。

日志:

  1. 完整的星号日志:http://tny.cz/5ace73e9 (sip and rtp debug on)
  2. reTURNServer.log:http://tny.cz/3b75ae45

架构:

  • 星号 PBX 12.6
    • 公网IP:213.xxx.xxx.178
    • 私有IP:192.168.xxx.99
    • 不在 NAT 后面。 SIP 位于 5060。它启用了实时,配置了 WebRTC,WebSockets on :8088/ws,启用并配置了 TLS 和 SRTP。 RTP 从 49152 到 65535。
    • reTURNServer 安装在同一个 Debian 实例上,TURN 开启:3478,TLS 开启:5349,STUN 开启:5355。
  • Dialogic 的 HMP 3 运行良好。
    • 不在 NAT 后面。与 Asterisk 在同一网络上。
    • 公共 IP:与此处的通信无关,因为它使用内部网络与 Asterisk 通信。
    • 私有IP:192.168.xxx.100
    • SIP 位于 5060。RTP 从 49152 到 65535。
    • 我使用此 PBX 从大量 SIP 电话成功拨打电话。
  • WebRTC 客户端是 sipML5,来自他们的演示站点。
    • 在 NAT 之后。与 Asterisk 或 HMP 不在同一个网络上。
    • 公网IP:213.xxx.xxx.210
    • 私有IP:10.xxx.xxx.118
    • 用户为“mySIPUser”,在ws://213.xxx.xxx.178:8088/ws注册成功。
    • 浏览器是最新的 Chrome (38)。

reTURNServer.config :

TurnPort = 3478
TlsTurnPort = 5349
AltStunPort = 5355
TurnAddress = 213.xxx.xxx.178
AltStunAddress = 213.xxx.xxx.178
AuthenticationMode = 2
AuthenticationRealm = AsteriskREALM
NonceLifetime = 3600
AllocationPortRangeMin = 49152
AllocationPortRangeMax = 65535
DefaultAllocationLifetime = 600
MaxAllocationLifetime = 3600
MaxAllocationsPerUser = 0
TlsServerCertificateFilename = /etc/asterisk/keys/asterisk.pem
TlsTempDhFilename =
# leave blank if key is not encrypted
TlsPrivateKeyPassword = ********
# Logging Type: syslog|cerr|cout|file
LoggingType = file
# Logging level: NONE|CRIT|ERR|WARNING|INFO|DEBUG|STACK
LoggingLevel = DEBUG
LogFilename = /var/log/reTurnServer.log
LogFileMaxLines = 50000
# It is highly recommended that these values are NOT left at their
# default setting
LongTermAuthUsername = MyTURNLogin
LongTermAuthPassword = MyTURNPassword
# Must be true or false, default = false, not supported on Windows
Daemonize = true
# On UNIX it is normal to create a PID file
# if unspecified, no attempt will be made to create a PID file
#PidFile = /var/run/reTurnServer/reTurnServer.pid

防火墙:

*sudo iptables -L*

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:sip
ACCEPT     udp  --  anywhere             anywhere             udp dpt:sip
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:sip-tls
ACCEPT     udp  --  anywhere             anywhere             udp dpt:sip-tls
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:omniorb
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:3478
ACCEPT     udp  --  anywhere             anywhere             udp dpt:3478
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:5349
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:hostmon
ACCEPT     udp  --  anywhere             anywhere             udp dpt:hostmon
ACCEPT     tcp  --  anywhere             anywhere             multiport dports webmin:20000
ACCEPT     udp  --  anywhere             anywhere             multiport dports 10000:20000
ACCEPT     udp  --  anywhere             anywhere             multiport dports 49152:65535

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain fail2ban-ssh (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

任何帮助将不胜感激!

【问题讨论】:

    标签: networking webrtc asterisk rtp


    【解决方案1】:

    SDP Section 的 200 OK 就可以了,你会看到一堆候选人。现在涉及 STUN / ICE 协商,其中每个路径都由呼叫的每一方进行测试。双方能够相互交谈的路径是确保 RTP 可以通过的原因。

    在网络路径中的某个地方没有正确映射数据包。您需要抓取网络流量并检查 STUN 数据包以识别数据包流。

    检查企业防火墙他们的防火墙规则是什么。通常企业需要开放以接受来自 TURN 的流量。尝试为 WebRTC 使用一些公共的 google TURN 服务器,并尝试看看它是否能让事情变得更好。

    【讨论】:

    • 感谢 Rapan 的回答,我会对此表示赞同,因为这是使用 Wireshark 放置跟踪的正确方法,例如,使用密集的日志分析在正确的前面构建实际网络路径的映射网络路径。但这涉及到对网络的认真理解。
    【解决方案2】:

    所以我终于解决了这个问题。 TURN 服务器需要有 2 个公共 IP。 TurnAddressAltStunAddress 必须是 2 个不同的 IP。 所以reTURNServer.config的正确配置是:

    TurnAddress = 213.xxx.xxx.178
    AltStunAddress = 213.xxx.xxx.179
    

    当然,如果您使用 JsSIP 或 Sipml5,客户端脚本必须反映这些更改,通过 sip_servers ("turn:turnuser@turnip", credentials:"turnpassword")。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多