IPTV单线复用

在现实生活中,其实需要设置IPTV单线复用的情形已很少发生,因为目前家庭网络中已几乎不存在单口光猫、单口路由器、墙面单网线布置的情况,但作为技术分享的一部分,本文还是对其做一些简要说明。

我们就以墙面单网线布置的情况为例,光猫是多口的(Internet和ITV传输口是分开的),路由器也是有一个WAN口、多个LAN口的那种,因为光猫与路由器连接之间的墙面只布置了一条网络,所以我们只能采用单线复用的方式来进行Internet和ITV信号的正常传输。

1、光猫内部配置情况分析

我们需要先进入光猫端的设置页面,PC网口直接连接光猫的千兆口,然后在浏览器地址输入:192.168.1.1,再输入账号及密码(一般光猫背面都有标注)就进入简易配置页面。为避免与路由器LAN处于同一IP网段(缺省一般采用192.168.1.X)信号冲突,建议先将光猫配置服务器端IP网段从192.168.1.X改为其它的。当然我们也可以选择修改路由器LAN口的IP网段,但最好还是修改光猫端的,特别是涉及到多级路由的情况下,修改光猫端一劳永逸、最方便。

IPTV单线复用-1

进入“高级设置”页面,再点选“局域网设置”,将局域网IP从192.168.1.1修改为其它的,上图中我是修改为:192.168.88.1,这样不容易与路由器设置相冲突。

接下来我们要配置千兆口既传输Internet信号也传输ITV信号,相互分工明确且互不干扰。这时我们需要用到光猫的超级账号及密码,因为接下来要设置的项目以普通账户登录是没法操作的。关于如何才能够获取光猫的超级账号及密码,请参考光猫超级账号及密码一文。

PC浏览器地址栏输入:192.168.88.1,然后输入超级账号及密码,就进入光猫的详细配置页面了。例如:刚才我们配置的IP网段,就可以在“网络-用户侧管理“页面发现。IPTV单线复用-2

还有Internet及ITV的接口配置情况:

IPTV单线复用-3

Internet信号采用“VLAN ID”是41,绑定了”网口1“,即千兆口。

IPTV单线复用-4

ITV信号采用“VLAN ID”是43,绑定了ITV口及“网口3”、“网口4”,即两个百兆口。

单线复用时,我们希望Internet及ITV都通过网口1即千兆口传输,再通过设定VLAN绑定,在路由段端将接收的信号分离。同时为了让路由器端完全还原光猫的接口功能,我们将路由器的LAN1设为Internet信号输出,LAN2、LAN3、LAN4设为ITV信号输出。

IPTV单线复用-5

2、光猫端设置

因为VLAN绑定的优先级高于LAN端口绑定,因此我们只需要设定VLAN绑定,而不需要去修改光猫内部别的配置:

IPTV单线复用-6

光猫超级账号的设置页面:点“网络-宽带设置-VLAN绑定”,点“添加”按钮,在新增的“用户侧端口”栏勾选”网口1“,”用户侧VLAN“栏输入:41(与”绑定WAN连接名称“栏的VID_41对应),点:保存”。同理,再添加用户侧43对应光猫侧VID_43:

IPTV单线复用-7

光猫端的设置就全部完成了。

3、路由器端设置

TL-WDR4310路由器为例,它刚好有一个WAN口,4个LAN口,可以满足我们完全还原光猫接口功能的要求。

1)先设置交换机Switch

IPTV单线复用-8

eth0.1对应LAN,就关联了LAN1;eth0.41对应WAN,建立internet口;eth0.43对应通过WAN连接LAN2、LAN3、LAN4,用来建立iptv口。

2)新增internet及iptv口

删除原wan及wan6口;

新增internet口:协议PPPoe(注:跟自己所用的宽带上网协议一致,桥接模式就选PPPoe,路由模式就选DHCP Client),eth0.41,防火墙挂wan区域;

新增iptv口:协议DHCP Client,eth0.43,防火墙可以另行创建,也可挂wan区域。

IPTV单线复用-9

LAN1接电脑,上网测试正常;LAN2、LAN3、LAN4任一口接IPTV机顶盒测试,都正常。

若想拓宽IPTV使用范围,可参考利用OpenWrt系统拓宽IPTV使用范围一文进行更进一步设置。

实现IPTV组播信号播放的特殊拓扑结构

这次我们要讲解实现IPTV组播信号播放的特殊拓扑结构,不同于《利用OpenWrt系统拓宽IPTV使用范围》一文中虚拟WAN口的配置方法,这些拓扑结构要显得更加简单些,但也有一个缺点:就是只支持组播地址的播放,不支持单播地址的播放,不过将组播地址通过udpxy代理出来的单播地址还是支持的。

首先我们还是来看一下常规的IPTV接线图:

实现IPTV组播信号播放的特殊拓扑结构-1

>>  一旦我们通过抓包、对数据包分析获得组播地址,最简单的方法就是抛开IPTV机顶盒,让PC电脑网线直接与ITV口(三选一),在PC播放器例如Potplayer上输入组播地址,或者双击m3u格式组播列表文件由Potplayer打开,就可以观看IPTV直播节目了。

实现IPTV组播信号播放的特殊拓扑结构-2

>>  但是按上图连接PC无法连接Internet,因此我们还是加上OpenWrt路由器,让WAN口连接光猫千兆口连接Internet,让LAN口连接ITV。但是不同于上次将其中的一个LAN口设置成VWAN口,然后通过DHCP鉴权的方式获取ITV信号,这次连接ITV的LAN口不做改变,还是继续保持与其它LAN口一样的桥接模式,即保持LAN口功能不变。

实现IPTV组播信号播放的特殊拓扑结构-3

按上图连接后,PC端播放器打开组播地址并不能正常播放,这时我们需要开启LAN口的IGMP snooping功能:

实现IPTV组播信号播放的特殊拓扑结构-4

勾选“Enable IGMP snooping”,保存并应用后使之生效,再用PC的Potplayer播放器测试一下(以CCTV1HD为例,rtp://233.50.201.118:5140):

实现IPTV组播信号播放的特殊拓扑结构-5

若需支持无线播放,仍需增加udpxy代理服务,将组播地址变更为单播地址;支持个别播放器播放直播地址列表文件(m3u),安装DLNA服务(xupnpd);支持远程播放,设置DDNS和端口转发,具体可参考《利用OpenWrt系统拓宽IPTV使用范围》一文,这里不再展开。

>>  若对Internet连接没有要求,还有一种较简单的拓扑结构也可以实现有线及无线对组播信号播放的要求:

实现IPTV组播信号播放的特殊拓扑结构-6

按上图连接以后,我们需要通过设置让组播信号能够在LAN口与WAN口之间自由传输:安装igmpproxy服务,并对/etc/config/igmpproxy文件进行相应的设置,有线连接就可以正常播放组播地址了。其它像无线及远程支持,只要按以前讲解的方法设置OK,播放就没有问题,这里不再累述。

利用OpenWrt系统拓宽IPTV使用范围

前面我们讲了如何利用OpenWrt系统来抓取IPTV数据包,又在应用技巧及工具栏目讲解了如何分析IPTV数据包并提取有用的信息,这次我们要来讲解如何利用OpenWrt系统拓宽IPTV使用范围,从使用传统的IPTV机顶盒拓展到PC、网络机顶盒、平板电脑、手机等终端,同时还要拓宽其使用环境:既支持有线连接也支持无线连接;既支持在局域网内部使用也支持远程访问使用;既支持组播信号播放也支持单播信号播放。

通常IPTV网络电视须通过IPTV机顶盒才能播放:

利用OpenWrt系统拓宽IPTV使用范围-1

但只要有OpenWrt路由器,通过一些并不算太复杂的设置,我们就可以将IPTV服务拓宽到更多的使用环境下:

利用OpenWrt系统拓宽IPTV使用范围-2

这次我们先讲解最常见的方法,即在路由器上设置虚拟WAN口,来代替IPTV机顶盒取得IPTV信号。该方法既适用组播信号,也适用单播信号,但是采用单播信号传输时设置要稍微复杂一点。

下面以TL-WDR4310路由器为例,说明一下具体的设置过程,与光猫的连接方式如上图,WAN口与光猫千兆口连接以获取Internet信号,LAN1口设置成VWAN,既虚拟WAN口与光猫的ITV口(注:一般光猫中的两个百兆口都设置成与ITV口桥接模式,因此这三个口可以任选一个连接)。

1、设置交换机Switch

利用OpenWrt系统拓宽IPTV使用范围-3

接口eth0.1对应桥接的LAN2、LAN3、LAN4口;eth0.2对应WAN口;eth0.3对应LAN1口即新增的VWAN口。

2、新增IPTV接口

因为涉及DHCP鉴权,因此通过Luci界面无法完成所有的配置工作,因此我们选择在network配置文档上直接修改:

vim /etc/config/network

# 在打开的编辑界面,新增如下语句

config interface 'iptv'
    option ifname 'eth0.3'
    option proto 'dhcp'
    option metric '20'
    option delegate '0'
    option macaddr 'xx:xx:xx:xx:xx:xx'
    option hostname 'XXXXXXXXXXXXXXXXXXXXXXXXX'
    option sendopts '0x3c:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

macaddr处填上抓包所用的IPTV机顶盒的MAC值;hostname处填上分析DHCP鉴权相关信息时获取的Option 12,是一组明码字符串;sendopts处因为我所在的地方只需要验证Option 60的值,所以只要将分析时获取的Option 60,即一长串16进制密码字符填入即可。如果你所在的地方,需要认证Option 61的值,则需要在上面的语句中再增加一句(注:十进制60对应16进制的0x3c;十进制61对应16进制的0x3d):

option sendopts ‘0x3d:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY’

同理有其它需要DHCP鉴权的值,可以按上面的方法一并加入。

如果原WAN口未设置网关跃点metric值,需要在上面的network文档的wan接口上添加如下语句(注:数值可以自行设定,只要与iptv接口的metric不同即可):

option metric ’10’

设置完成后,重启一下network服务:

service network restart

3、安装igmpproxy,让组播信号可以在LAN与IPTV之间传输
opkg update
opkg install igmpproxy

安装完成后,还需要进行设置,但目前igmpproxy程序尚未开发Luci设置界面,因此我们还是直接修改配置文件:

vim /etc/config/igmpproxy

# 修改文件如下

config igmpproxy
    option quickleave 1
#	option verbose [0-3](none, minimal[default], more, maximum)

config phyint
    option network iptv
    option zone iptv
    option direction upstream
    list altnet 0.0.0.0/0

config phyint
    option network lan
    option zone lan
    option direction downstream

再添加igmp在iptv通道防火墙畅行:

vim /etc/config/firewall

# 在打开的文档最后添加:

config rule
        option target 'ACCEPT'
        option src 'iptv'
        option name 'Allow_IGMP'
        option proto 'IGMP'

系统重启后,我们可以验证一下igmpproxy是否已正常运行:

# 先重启一下igmpproxy服务

service igmpproxy restart
vim /var/etc/igmpproxy.conf

# 若igmpproxy运行正常,则文档内容如下:

quickleave

phyint eth0.3 upstream ratelimit 0 threshold 1
    altnet 0.0.0.0/0

phyint br-lan downstream ratelimit 0 threshold 1
4、设置防火墙

>> 防火墙设置可以在Luci界面下进行:

利用OpenWrt系统拓宽IPTV使用范围-4

>> 也可以直接修改防火墙文件

vim /etc/config/firewall

# 在打开的编辑文档里,添加如下语句:

config zone
    option network 'iptv'
    option forward 'REJECT'
    option name 'iptv'
    option output 'ACCEPT'
    option masq '1'
    option input 'REJECT'

config forwarding
    option dest 'iptv'
    option src 'lan'

设置完成后,重启一下firewall服务:

service firewall restart

通过以上这几步的设置,IPTV接口就可以获取鉴权服务器返回的IP地址了:

利用OpenWrt系统拓宽IPTV使用范围-5

这时,有线连接的PC、网络机顶盒等已可正常播放IPTV的组播信号了(以当地的CCTV2HD为例:rtp://233.50.201.119:5140)。

利用OpenWrt系统拓宽IPTV使用范围-6

5、支持单播信号播放

要想让单播信号可以正常播放,还必须使一些特殊的IP地址也通过IPTV接口进行DHCP鉴权,具体涉及哪些地址,在对IPTV包分析的文章中有详细说明,这里不再展开。这里主要讲如何在OpenWrt系统里使用和设置这些IP地址,实现方法有很多种,但我这里只讲最简单的方法:就是在系统自启配置文档中添加上相关的路由表及信号路径。

>> 可以在Luci界面里直接添加:

利用OpenWrt系统拓宽IPTV使用范围-7

>> 也可以在自启配置文档中直接添加:

vim /etc/rc.local

# 在exit 0之前,添加如下语句

ip rule flush table 100
ip route flush table 100
ip rule add from 192.168.1.0/24 to 122.229.17.0/24 table 100 
ip rule add from 192.168.1.0/24 to 115.233.41.0/24 table 100
ip rule add from 192.168.1.0/24 to 220.191.136.0/24 table 100
ip rule add from 192.168.1.0/24 to 115.233.200.0/24 table 100
ip route add default via 10.242.96.1 dev eth0.3 table 100

保存后,重启一下系统。然后用播放器打开单播地址测试一下(以CCTV3HD为例:rtsp://115.233.41.137/PLTV/88888913/224/3221229136/10000100000000060000000005809121_0.smil):

利用OpenWrt系统拓宽IPTV使用范围-8

对于单播地址,有线连接测试OK,那么无线连接肯定也OK,你可以用网络机顶盒、手机、平板电脑测试一下。

但对于组播地址,有线测试OK,但是用无线却无法播放,还需要更进一步配置,通过代理服务将组播地址转换成单播地址。

6、组播地址转单播地址,以便无线连接设备播放
opkg update

opkg install udpxy luci-app-udpxy

在udpxy的Luci界面设置如下:

利用OpenWrt系统拓宽IPTV使用范围-9

在Bind IP/Interface栏输入:192.168.1.1(LAN地址);Port:4022(缺省值);Source IP/Interface:eth0.3,即IPTV的接口。

在浏览器上输入:http://192.168.1.1:4022/status,可以看到udpxy服务的具体运行情况:

利用OpenWrt系统拓宽IPTV使用范围-10

在防火墙上,增加允许udpxy信号通行的语句:

vim /etc/config/firewall

# 增加如下语句,保证udpxy信号顺利传输

config rule
        option target 'ACCEPT'
        option src 'iptv'
        option proto 'udp'
        option name 'Allow-UDP-udpxy'
        option dest_ip '224.0.0.0/4'

设置完成后,可以将原先的组播地址,例如CCTV1HD:rtp://233.50.201.118:5140,修改为:http://192.168.1.1:4022/udp/233.50.201.118:5140,就可以在无线连接的设备上进行播放了。

另外,对于一些有线连接时组播地址无法播放的情况(注:多半是播放器不支持组播信号播放),也可以用udpxy代理服务方式进行播放。

而且通过设置DDNS及端口转发,你稍微修改一下地址就可以实现在远程设备上进行播放的目的。例如,在远程播放CCTV1HD时,可以将地址修改为:http://123.red-yellow.net:4022/udp/233.50.201.118:5140,这样你公司的电脑也可以播放家里的IPTV直播节目了。

7、IPTV DLNA服务的实现

大多数的视频播放器支持m3u或txt格式的视频列表文件,但也有一些播放器不支持,特别是苹果IOS系统的设备,但每次输入直播地址进行变台操作又太复杂了,这时我们需要用到DLNA服务。

opkg update

opkg install xupnpd

在浏览器上输入:http://192.168.1.1:4044,就可以配置xupnpd:

利用OpenWrt系统拓宽IPTV使用范围-11

在PlayLists上传入m3u格式的列表文件,支持DLNA服务的播放器就可以播放列表里的所有视频了。

8、原IPTV机顶盒支持

将原IPTV机顶盒与路由器的LAN口连接,按以上的设置步骤,不需要新增别的设置内容,就可以在显示器或电视上享受直播、回看及点播节目了。

当然,利用OpenWrt系统拓宽IPTV使用范围的方法有很多种,以上我们只是讲解了最常见的一种解决方案,应该说也是一种高效、彻底地的解决方法。后续我们还会讲解利用其它拓扑结构来拓宽IPTV使用范围的方法,以及单线复用模式下的IPTV拓展

 

OpenWrt系统下的IPTV抓包方法

IPTV抓包的实现方法有很多种,像网络抓包神器(Throwing Star LAN Tap)加Wireshark实现方法,像高档交换机的端口镜像设置再加上Wireshark实现方法等等。但这次我们主要还是讲在OpenWrt系统下的IPTV抓包方法,你只要有一台刷了OpenWrt系统的路由器,不需要再添加别的设备就可以轻松实现IPTV的抓包过程。

方法一、端口镜像设置加Wireshark

采用这种方法,你需要先有一台拥有端口镜像功能的路由器,一般有多个LAN口的路由器都能符合要求,我们这次讲解以TP-Link的TL-WDR4310为例展开:

1、先来看一下接线图:

OpenWrt系统下的IPTV抓包方法-1

图中,ITV源信号与LAN1口连接,IPTV机顶盒(目标信号)与LAN2口连接,LAN4口接PC。

2、路由器设置

在PC浏览器的路由器Luci界面,点“Network – Switch”进入交换机设置界面:

OpenWrt系统下的IPTV抓包方法-2

勾选“Enable mirroring of incoming packets”和“Enable mirroring of outgoing packets”,设置将进出镜像数据一起抓取:

OpenWrt系统下的IPTV抓包方法-3

然后根据自己实际的接线情况,来选择镜像源端口Mirror source port,我这里选LAN2,即IPTV机顶盒端;选择镜像监控端口Mirror monitor port,即PC端,我这里选LAN4,点“Save & Apply”按钮使设置生效。

3、在PC端使用Wireshark程序抓包

在PC端运行Wireshark程序:

OpenWrt系统下的IPTV抓包方法-4

双击“以太网”行,进入监控及数据包的抓取:

OpenWrt系统下的IPTV抓包方法-5

将IPTV机顶盒重新启动一下,机顶盒和ITV之间交互的数据包就完全被Wireshark抓取了出来,后续点红色停止按钮,再将相应数据文件保存即可。

方法二、应用Tcpdump软件

与Wireshark一样,Tcpdump也是一个非常有名的抓包软件,它被移植到了多种不同的平台上,这里面就包括OpenWrt系统,我们可以在opkg应用仓库中直接安装OpenWrt版的Tcpdump。继续以TP-Link的TL-WDR4310为例:

1、先安装tcpdump应用

opkg update
opkg install tcpdump

2、配置tcpdump的抓包环境

先按下图连接好相关接线:

OpenWrt系统下的IPTV抓包方法-6

因为tcpdump只能抓取wan(eth0.2)及br-lan(eth0.1)的数据包,所以我们无法像方法一那样,将ITV源信号及机顶盒目标信号都放在LAN口上,而是将ITV源信号与路由器的WAN口连接,机顶盒目标信号与LAN口相连。但这样连接以后,在路由器缺省配置模式下,IPTV组播信号是无法在WAN口与LAN口之间传递的。

最简单的解决方法就是建立wan和br-lan的桥接模式,这样既能保证IPTV组播信号的正常传递,又能用tcpdump对传输数据包进行抓取。

在PC浏览器的路由器Luci界面,点”Network – Interfaces”,点LAN接口所在行的“Edit”按钮进入编辑状态:

OpenWrt系统下的IPTV抓包方法-7

在”Physical Settings“界面下的Interface栏中增加eth0.2接口,点”Save”保存,然后再点“Save & Apply”使配置生效,桥接模式就设置好了,为安全起见建议将系统重启一下。

3、然后再回到路由器shell界面,运行tcpdump抓包程序:

tcpdump -i eth0.2 -s 0 -w /mnt/sda1/tcpdump/iptv.cap

回车运行,路由器就会进入wan(eth0.2)的监控及抓包进程,将IPTV机顶盒重启一下(注:抓取完成就在shell界面按ctrl+c停止相应进程),相应的数据包就会自动保存到我们指定的文件里。

OpenWrt系统下的IPTV抓包方法-8

4、接下来我们就可以对抓取下来的iptv.cap文件进行分析了。具体分析的过程在后面的文章中再详细展开。

总的来说,方法二比方法一的应用范围要更广一些,像一些没有端口镜像功能的路由器,例如WR720N这种只有两口的路由器、还有软路由等,就没有办法用方法一,但都可以用方法二来实现IPTV的抓包功能。不过从配置上来说,方法一要稍微简单一点,所以说两种方法是各有好处,在实际使用中大家可以灵活应用。