目录
背景
现在很多文章都在说 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,考个证吧:)