背景
現在很多文章都在說 iptv 單線組網的文章。總的來說就是建立 IPTV 機頂盒到局端的二層鏈路,最後都歸結到一點:iptv 機頂盒連通到光貓的 iptv vlan 上。從 iptv 機頂盒得到的 ip 你就能看出來,這種方法得到的 ip 一定是局端分配的 ip,比如:10.68.xx.xx,一看就能看出來。這種方式沒什麼不好,不過有幾個問題需要注意:
1、安全問題。因為是二層鏈路直接到了局端,當你拓撲設計完了,一定要模擬一下從局端訪問你家裡的內網,是否有隔離,否則,你辛苦的在 pppoe 上做了一堆的防火牆,卻在 iptv 端口上把整個家庭內網和局端連接起來了。看到過很多這種設計,比如下面這種設計:
或是這種設計,
以上設計都沒有做 vlan 隔離,直接把 iptv 端口連入 LAN 交換端口上,你從運營商的局端開始模擬一下就可以發現,局端可以直接進入你家裡的內網,訪問你的 NAS 共享,你的 airplay 音箱,你家裡的攝像頭,甚至操控你的智能門鎖;如果你的運營商 iptv 端口沒有做用戶隔離了(不要認為不可能,我就在我家的 iptv 端口抓包時抓到了鄰居家的包),你的鄰居就可以從 iptv 口,進入你家裡的內網,訪問你的 NAS 共享,你的 airplay 音箱,你家裡的攝像頭,甚至操控你的智能門鎖。可怕嗎?
另外還有兩個缺點:
1、只能一臺 iptv 機頂盒使用,其他房間如果有電視,是不能用 iptv 機頂盒的。如果電信限制了 iptv 機頂盒認證(電腦隨便插上網線就能獲得 ip 的是沒限制)。
2、用不了 udpxy,udpxy 是什麼呢,是讓電腦、平板、 android 盒子也能看iptv 的方案。因為 udpxy 也需要作為一個終端接入 iptv 專網,如果電信限制了 iptv 機頂盒認證。
接下來,我介紹的這種方案不常見,和上面的方案在原理上完全不一樣。
方案概述
先拿上網打個比方,我們以前上網時都是電腦 pppoe,電腦直接獲得一個202.111.xxx.xxx 的 ip,後來有了路由器,通過路由器 pppoe,路由器拿到的 ip 為 202.111.xxx.xxx,然後路由器後端分配給 pc 一個 192.168.xxx.xxx 的地址,pc 通過路由器上網,後來電信禁止路由撥號,綁定 mac,路由器後來又具備了克隆 mac 的功能,所謂道高一尺魔高一丈,總的來說,就是路由器模擬了一臺電腦接入了局端的網絡。
然而,這個場景到了 iptv 為什麼不能用呢?我們的路由同樣也可以模擬一臺 iptv 盒子接入局端 iptv 網絡。然後路由器把 iptv 數據分發給 iptv 機頂盒。電信局端看到的只是一臺機頂盒,其實是我們的路由器冒充的,我們的路由器獲得了局端分配的 ip,10.68.xx.xx 類似的地址,路由器背後有 n 個 iptv 設備,各分配到了一個 192.168.xx.xx 的地址,最後通過路由器連入 iptv 專絡。以上問題就解決了:
1、安全問題,路由器 WAN 以外是局端,LAN 以內是家庭端,路由器起到了防火牆隔離。
2、路由器後幾個 iptv 設備局端是不知道的,你想用幾個設備就用幾個設備,當然沒問題。
3、udpxy 作為一個 iptv 軟終端設備,當然也可以用了。
最後,還有一個附帶的優點:
4、iptv 的無線設計還會變得很簡單,就如同你手機平板接入無線,IPTV 機頂盒通過 AP+ 交換機最後接入路由器 LAN 口,當然需要調優無線組播的效率問題,否者 IPTV 直播會卡頓。
拓撲設計
設備需求
1、UBNT 路由
首先,這裡為什麼推薦 ubnt 路由呢。如果你看過我過去設計的一些方案,你會發現,有一些設計場景直接使用了 Linux Shell 腳本和 Linux 3rd packages 來實現一些功能,首先這就排除了像華為、H3C、思科類型的設備,雖然他們很牛,但由於系統的封閉性,家庭使用場景中一些特殊的功能沒辦法實現。所以,剩下可以挑選的設備就那麼幾種了:openwrt 系,vyos 系,破解後的 routeros 系(原生不能用 linux),其中我傾向於未破解的商業產品路由,最為穩定,另外,ubnt 帶的 OS 為 debian 也比較簡單:沒有一個 apt-get 搞不定的,如果有,那就用兩個 apt-get。
這裡主要用到的路由特性有:vlan 路由,nat,dhcp,組播代理(igmpproxy)或者組播路由(PIM等),如果你現有的路由能做這幾個事,也是可以替代的,本方案使用的 USG。
2、UniFi 交換機
這裡主要用到的交換特性有:vlan和igmp snooping,如果你現有的交換機能做這幾個事,也是可以替代的。本方案使用的Unifi交換機。
3、UBNT UAP
這裡主要用到的 ap 特性有:vlan_ssid,無線 igmp 增強(Mulitcast to Unicast);如果你現有的 ap 能做這幾個事,也是可以替代的。本方案使用的 UAP。
方案要點
1、iptv 機頂盒抓包與路由配置
首先需要對 IPTV 盒子抓包,分析 IPTV 盒子向局端發送了什麼信息。然後通過路由配置 dhcp 信息,克隆 IPTV 盒子的信息通過認證,接入運營商的 IPTV 專有網絡。
比如:我這的運營商對 IPTV 盒子採取的 DHCP 認證,也就是 IPOE 認證,根據抓包分析,運營商根據 IPTV 盒子的 MAC 地址、HostName、Vendor 來認證。如下:
然後局端對 IPTV 盒子下發的信息也需要分析,克隆運營商局端的 DHCP 信息,讓 USG 替代局端下發 IP。
這個方法是通用的,無論是上海還是北京,比如:上海的雙認證,只要 WAN 口上新建一個 VLAN85,然後向局端網關提交克隆的認證信息即可。
如果,你的 iptv 是 pppoe 上網,那更簡單,直接在路由上配置 pppoe 就可以了,不過內網裡的 iptv 盒子 ip 獲取方式改為 dhcp。
這些信息都是通過配置 WAN 接口的 DHCP Client 就可以了,最後路由能獲得一個 IPTV 專網的地址。
2、iptv lan的規劃
在內網裡專門建立一個 IPTV 網段,並把所有流量 NAT 到 WAN 口的 IPTV 接口。
然後,還需要做的一件事情,就是要建立內網 IPTV 和外網 IPTV 的組播通道,即組播代理,配置 igmpproxy。
最後,IPTV 盒子,如下圖,獲得的是一個內網 IP,而且,使用正常。
3、無線 iptv
針對上面的 vlan id 配置一個 iptv 的專用 ssid
因為 iptv 直播使用的組播數據流,無線組播默認的效率很低,因此還需要對無線組播進行調優,加強無線組播效率。
4、udpxy
udpxy 是一個把組播流變成 http 點播流的軟件,我們通過 udpxy,可以把我們iptv 的服務擴展到手機、平板上,甚至映射到公網上,在外面就可以直接訪問家裡的 iptv 電視節目。
udpxy 的用法很簡單,網上很多,這就不多說了,最後的效果如下:
5、多個 iptv 機頂盒同時使用
首先,為什麼要使用 iptv 機頂盒,通過 udpxy 可以把 iptv 通過小米盒子觀看,但iptv機頂盒還是有很多好處,比如,可以回看;適合老人孩子操作等;
一般來說運營商的 IPTV 機頂盒做了 mac 地址認證,這裡的認證指的不是 dhcp認證,而是業務認證。所謂業務認證,就是機頂盒會把 mac地址+機頂盒序列號+IPTV 業務賬號+密碼通過 WebService 向 IPTV 服務器認證。運營商一般在下發 iptv 機頂盒都做了信息綁定。如果你的運營商沒有做這個限制,恭喜你,前面的方案設計就夠了。
但是,如果你的運營商做了這個限制,那怎麼解決呢。
1、向運營商申請第二個 iptv 盒子,當然他們會額外收點錢,他們會給你一臺新的 iptv 盒子,然後新的信息進行綁定。
2、如果你的運營商沒有第二臺 iptv 盒子的業務(比如我這),那你還只能採取別的手段了。什麼步驟呢?
1、首先,你得買一個相同型號的機頂盒,這個首富家有賣。
2、然後你得把新的機頂盒克隆成原來的機頂盒的信息,比如:系統(各省份的系統不同)、mac 地址、序列號等,但是,無線 wifi 的 mac 地址配置成一個新的地址。最好買的時候就讓賣家幫您做了,否則自己動手,你的知識面需要擴展到 android系統了。
完成以上兩步,恭喜您,現在機頂盒已經可以使用了。而且通過無線 iptv 多個機頂盒可以同時觀看 iptv。
理論上你是可以增加數量很多的 IPTV 機頂盒的。但是,因為iptv組播數據是靠路由的 CPU 轉發,沒有 offload/hwnat,所以,像 usg 這種性能不高的 cpu,大概跑個 3-4 個機頂盒就差不多了,一路 IPTV 的帶寬大概在 20Mbps,usg 靠cpu,吞吐量在80-90Mbps(不影響上網的速度,上網的數據量還是走的offload)。
好了,最後弄完了,也調試通了,也清楚了為什麼要這麼設計,恭喜您,掌握了交換網絡和路由網絡很多的核心知識點了,再努力學點其他東西比如 ospf,bgp,考個證吧:)
閱讀更多 UBNT 的文章