测试设备:路由器一台,wan口eth1.2,lan口br-lan,wan侧pc一台,lan侧pc一台
VLC版本:3.0.6,测试时wan和lan侧最好运行同版本
视频源:720p 的mp4视频源
测试过程:
1,环境配置,参考:https://wenku.baidu.com/view/3d7824e5844769eae109ed91.html
测试时使用的是: RTP / MPEG Transport Stream
2,路由器配置,参考:http://www.cnblogs.com/harryzwh/p/4279316.html
其中,防火墙的配置延用参考文档。
但igmpproxy的配置需要根据情况修改:
openwrt官方文档:https://oldwiki.archive.openwrt.org/doc/howto/udp_multicast?s[]=igmpproxy
3,路由器内核支持组播路由,这里不做讨论
4,测试时遇到的问题:lan侧无法播放wan侧的组播视频
4.1 使用ixchariot构建组播报文,可以跑通组播数据流,所以认为路由器本身是没有问题的:
4.2 在wan侧pc抓包,可以抓到lan侧pc发送的“Membership Report Message”报文,但是抓不到后续wan侧pc回应组播数据流的报文,那这个报文wan侧主机到底发了没有,发了的话发到哪里去了呢?
排查这个问题首先是在eth1.2口使用tcpdump抓包:tcpdump -i eth1.2 -p udp
一直未能抓到包,其间不断设置wan侧主机的vlc播放器,主要是做了一些改组播地址,选择不同视频源文件之类,发现一直没有效果,也不断上网查询资料,查到一些资料,其中有些误导,但也慢慢在靠近问题的原因,这两个有提到多网卡组播问题的情况,但是没解决我的问题:
https://blog.csdn.net/rcfalcon/article/details/35221759
https://blog.csdn.net/yunlianglinfeng/article/details/50754526
而多网卡引起了注意,wan侧的pc有两张网卡,lan侧的pc也有两张网卡,于是朝这个方向继续找,找到vlc论坛里有一篇讲怎么vlc绑定网卡的文章,正是这篇文章讲明了多网卡主机播放视频的问题点(原来断肠草的解药就在他旁边啊,vlc的问题就在vlc论坛找,有时候迷茫的去找是舍近求远了):
https://forum.videolan.org/viewtopic.php?t=5018
于是,在wan侧pc上运行(以管理员身份打开cmd):
route -p add 234.0.0.0 mask 255.0.0.0 172.16.20.200
然后,再在eth1.2抓包,终于看到组播视频流的报文到了路由器wan口:
15:22:10.133114 IP 172.16.20.200.54917 > 234.0.0.6.5004: UDP, length 1328
4.3 但是,但是lan侧pc还是未能播放视频,这就苦恼了,又是一番折腾,难道是防火墙把报文丢了,一番查找,发现报文都没有到防火墙:
也不知道为什么脑子突然想到抓一个ip报文看看:
tcpdump -i eth1.2 -p ip -v
17:41:55.993200 IP (tos 0x0, ttl 1, id 47149, offset 0, flags [none], proto UDP (17), length 1356)
172.16.20.200.55511 > 234.5.6.7.5004: UDP, length 1328
这里看到,ttl 为1,我们做路由器产品应该知道,ttl的概念,为1的话过转发时会减1,那么就为0了,ttl为0的报文就不会转发了,心想问题可能在这里,于是就去找vlc怎么设置ttl,因为vlc发出来的报文ttl为1就无法被路由器转发了:
vlc设置数据ttl值得地方在这个文章:https://blog.csdn.net/u013401853/article/details/51025791
我们看下修改后wan口的抓包吧:
17:41:55.993200 IP (tos 0x0, ttl 10, id 53449, offset 0, flags [none], proto UDP (17), length 1356)
172.16.20.200.55511 > 234.5.6.7.5004: UDP, length 1328
至此,使用VLC 测试Igmp proxy时,lan侧可以正常播放wan侧的组播视频了。