webrtc candidate xxx.local mDNS ip地址问题

版权声明:转载请附上原文出处连接及本声明。     原文连接:https://www.cnblogs.com/mangshe0/p/12108400.htmlhtml

若是你也遇到了相似 这种问题:前端

 

先说解决办法:   chrome://flags/#enable-webrtc-hide-local-ips-with-mdns 中将 Anonymize local IPs exposed by WebRTC. 选项设置成disable 便可恢复原来ip地址, 再也不使用 xxx.local地址.web

 

 

后面都是自个缘由分析的小记,没啥用不用看。chrome

-------------------------------------------------- 原由:api

最近用jssip开发个小demo,用来本身测试使用。服务器

遇到了 web-发起invite时候 sdp中
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:89174025 1 udp 2113937151 50c6594a-c1f8-43dd-9370-01b8976daa4c.local 49997 typ host generation 0 network-cost 999
语音通信地址 IPV4是0, ice-candidate中使用 ipv6.

我就无语了 前端时间用还好使。
chrome.exe -disable-ipv6 也不行.
暂时先在onSDP事件时候 sdp.replace 手动修改ip地址 解决该问题.网络

 

-------------------------------------------------- 缘由分析session

终于解决了 以前遗留的问题,困扰我很久,用了好几天的时间,有时间有点思路就分析 找找.
首先以前的分析是正确的,就是手欠升级chrome致使的,

IP4地址是0.0.0.0, 说明媒体通信时不使用这里,而是使用candidate中描述的地址,
这里candidate描述的地址为  50c6594a-c1f8-43dd-9370-01b8976daa4c.local,
我当初一直误觉得是IPV6的地址,这个误区里挣扎了很久.
尝试将fs配置成IPV6与之进行通信,发现仍然不行,这根本就不是个IP地址。

翻了翻历史版本的数据抓包, sdp描述的相关信息都差很少,惟独之前写IP地址的地方被换成了xxx.local 这个鬼玩应。
本地环境测试 我还能够重写sdp来绕过去,可是生产环境 nat穿个几层,那怎么搞? 因此必须得把这个问题解决了。
回退chrome虽然能够暂时解决,可是这个技术盲点,未来早晚要遇到的,啥也不说了继续研究吧。

搜索引擎检索的信息都几乎不沾边,没有捷径 前人的帮助,只能一点点翻ietf官方标准了。
https://tools.ietf.org/html/draft-wang-mmusic-encrypted-ice-candidates-00#ref-MdnsCandidate
果不其然,在IETF的草案当中 draft-wang-mmusic-encrypted-ice-candidates,终于找到了encoded_encrypted_address.local
这种结构地址的描述。

太着急了没有仔细看,误觉得是IP地址被加密致使,
https://www.w3.org/TR/webrtc/#rtcicecandidate-interface 根据RTCPeerConnection candidate接口
又返回到jssip中去查设置ip地址加密的相关属性,结果确定是没有。。。
https://jssip.net/documentation/3.3.x/api/session/#event_icecandidate

再回到ietf草案当中 定睛一看, 加密后的IP地址都是.encrypted这种格式的,
.local是属于mDNS, mDNS 这事个什么鬼,跟dns有啥关系啊?
https://tools.ietf.org/html/rfc6762  Multicast DNS
mDNS用于处理本地网络中机器名称,而不须要DNS服务器,
大体意思就是 本地网络中的机器会随机产生惟一名字相似 50c6594a-c1f8-43dd-9370-01b8976daa4c.local,
网络中其余的机器想要与之通信 会进行mDNS广播查询, 这个名称的机器收到后会回复其IP地址.

新版本的webrtc,我目前是 79.0.3945.88(正式版本), NND就是用了这个功能,替代了原有IP地址。
由于google webrtc 的ip地址以前是直接暴漏的,一直被你们吐槽, 如今用了这个mDNS功能,将IP给隐藏起来了。。
想必不少不支持这个mDNS功能的webrtcServer都被这个功能给搞的不能通信。

而且目前W3C webrtc接口中没有这方面的设置,
https://www.w3.org/TR/webrtc/#rtcicecandidate-interface
https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/addIceCandidate

虽然google强制开启使用mDNS功能, 还好有个开关,
chrome://flags/#enable-webrtc-hide-local-ips-with-mdns
折腾了我好几天, 就是这么一个配置。 我一个作服务器的就为了搞个测试demo, 太不容易了。。。tcp

相关文章
相关标签/搜索