上海電信 TL-EP110 + RT-AC86U 實現觀看 4K IPTV 無卡頓 (2019-10)


前言

網上能找到不少路由器接 IPTV 的例子,前期給了我很大的幫助。但我選的這兩個設備給我留了兩個大坑,幾經折騰才終於能流暢觀看了。過程中學到不少目前百度/谷歌都找不到或很難找到的東西,做一下分享。

拓撲圖

拓撲圖

兩個大坑

  • RT-AC86U 不支持 robocfg 命令,網上找不到正確配置 VLAN 的例子。
  • 目前能找到的例子都有使用電信設備設置組播(VLAN 51),這背后隱藏了一些細節,不正確配置會導致卡頓/卡死。

幾個知識點

  • 路由器接 IPTV 需要在路由器上配置 DHCP OPTION 125 (上海電信是這個),網上很多例子,這里不再贅述。
  • 上海電信撥號上網(PPPoE)走 Native VLAN (untagged),IPTV 專網走 VLAN 85,組播走 VLAN 51。
  • 網上有人提到現在 4K IPTV 不需要 VLAN 51 了,其實是需要的,這跟前面提到的坑有關。

RT-AC86U VLAN 配置

照着網上的例子,發現 RT-AC86U 沒有 robocfg,而且找不到替代方法,很絕望啊有沒有。倒是看到有人提到 vlanctl,但沒正確配置的例子,谷歌也只看到有人在研究,沒有個結果。不過發現梅林的源代碼里其實有用到這個命令,經過仔細對比上下文,加上大腦的飛速運轉 [滑稽](其實是花了一整天就琢磨那幾個參數),終於弄明白了。

由於示例太長,單獨發了博客:RT-AC86U VLAN 配置 - vlanctl 篇。另外過程中還發現使用 vconfig 同樣可以配置 VLAN,甚至更簡單,參見:RT-AC86U VLAN 配置 - vconfig 篇

不看也沒有關系,本文最后有完整腳本。

IGMP Snooping

配置好 VLAN 85 后,IPTV 盒子 就能同時獲取到 公網 和 專網 的 IP 地址了。但是事情總沒那么順利,這時你會發現看直播一會就卡,再過一會直接卡死。

在說怎么解決之前,先說一下我當時的情況。因為某種沒必要細說的原因,我當時撤下了自己的光貓(TL-EP110),換回了電信光貓,這時候抓包會發現組播的數據是在 VLAN 85 傳輸的。

經過對每一層接口進行抓包分析,發現組播數據傳到了 vlan85 這個 bridge 后就沒再往后傳了。好在當時花時間狂補了組播相關知識,感覺應該跟 IGMP Snooping 有關。幾番查找,在 梅林 源代碼中看到 bcmmcastctl 這個命令,用法如下:

bcmmcastctl mode -i vlan85 -p 1 -m 1  # 對 vlan85 啟用 IGMP Snooping
bcmmcastctl mode -i vlan85 -p 2 -m 1  # 對 vlan85 啟用 MLD Snooping(這個是針對 IPv6 的,可以不管)

測試后可用![淚流滿面]

然而還是高興得太早...

VLAN 51

換回自己的光貓,發現直播還是卡,這時候心里飄過一群草泥馬。繼續抓包發現組播數據是從 VLAN 51 傳進來的,而用電信光貓時完全就沒看見 VLAN 51 的影子!這時候我做了一個大膽的假設,電信光貓一定是把 VLAN 51 的數據轉發到了 LAN 端 的 VLAN 85 ,如下圖所示:

說時遲那時快(其實是說時快那時傻p兮兮的),我立馬嘗試在路由器上做類似的配置,果不其然(心里想我真TND聰明),終於可以無比絲滑地看電視了(雖然以后會不會看還不一定呢)!

最終配置

兩個版本二選一,推薦使用 vconfig 版。另外,記得還要配置 DHCP OPTION 125(自行百度吧)。

#!/bin/sh

# 該腳本需要在 services-start 中運行

ifconfig eth0 allmulti up

#####################################################################
vlanctl --mcast --if-create eth0 0                                  #
vlanctl --if eth0 --rx --tags 0 --set-rxif eth0.v0 --rule-append    #
ifconfig eth0.v0 up                                                 #
                                                                    #
brctl addbr br1                                                     #
brctl addif br1 eth0.v0                                             #
ifconfig br1 up                                                     #
                                                                    #
nvram set wan_ifnames=br1                                           #
nvram set wan_ifname=br1                                            #
nvram set wan0_ifname=br1                                           #
#####################################################################

#####################################################################
brctl delif br0 eth1                                                #
                                                                    #
vlanctl --mcast --if-create eth1 0                                  #
vlanctl --if eth1 --rx --tags 0 --set-rxif eth1.v0 --rule-append    #
ifconfig eth1.v0 up                                                 #
                                                                    #
brctl addif br0 eth1.v0                                             #
#####################################################################

vlanctl --mcast --if-create eth0 85
vlanctl --if eth0 --rx --tags 1 --filter-vid 85 0 --pop-tag --set-rxif eth0.v85 --rule-append
vlanctl --if eth0 --rx --tags 1 --filter-vid 51 0 --pop-tag --set-rxif eth0.v85 --rule-append
vlanctl --if eth0 --tx --tags 0 --filter-txif eth0.v85 --push-tag --set-vid 85 0 --rule-append
ifconfig eth0.v85 up

vlanctl --mcast --if-create eth1 85
vlanctl --if eth1 --rx --tags 1 --filter-vid 85 0 --pop-tag --set-rxif eth1.v85 --rule-append
vlanctl --if eth1 --tx --tags 0 --filter-txif eth1.v85 --push-tag --set-vid 85 0 --rule-append
ifconfig eth1.v85 up

brctl addbr vlan85
brctl addif vlan85 eth0.v85
brctl addif vlan85 eth1.v85
ifconfig vlan85 up

bcmmcastctl mode -i vlan85 -p 1 -m 1
bcmmcastctl mode -i vlan85 -p 2 -m 1
#!/bin/sh

# 該腳本可手動執行,或放入 wan-start 中開機自動運行

vconfig set_name_type DEV_PLUS_VID_NO_PAD
vconfig add eth0 85
vconfig add br0 85

brctl addbr vlan85
brctl addif vlan85 eth0.85
brctl addif vlan85 br0.85

bcmmcastctl mode -i vlan85 -p 1 -m 1
bcmmcastctl mode -i vlan85 -p 2 -m 1

ifconfig eth0.85 up
ifconfig br0.85 up
ifconfig vlan85 up

vconfig add eth0 51
brctl addif vlan85 eth0.51
ebtables -A FORWARD -i eth0.51 -o ! br0.85 -j DROP
ebtables -A FORWARD -o eth0.51 -j DROP
ifconfig eth0.51 up

作者:u128393
首發:https://www.cnblogs.com/u128393/p/11629969.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM