Adblock在OpenWrt系统上的应用

说起去广告应用,国外比较有名的有adblock、adguard等,其中最常见的是adblock,以前经常会发现有人在桌面浏览器上安装adblock插件,听说去广告效果还是相当不错的,今天我们要将这个应用移植到OpenWrt路由器上,来讲讲Adblock在OpenWrt系统上的应用成果。

关于OpenWrt系统官方推荐的去广告应用,大家可以参考如下网址获取更多详细资料:

https://openwrt.org/docs/guide-user/services/ad-blocking

其中simple-adblock应用是adblock应用的精简版,banhostlist应用2015年后已停止更新,adguard应用所采用的广告列表可以包含在adblock应用里,因此从某种意义上来说我们只要掌握adblock应用就可以了。

为了达到满意的去广告效果,我们通常需要一个相对比较全的广告列表(包含几万条~几十万条广告网址信息),这会占用路由器很多的存储空间,也会导致路由器处理DNS解析的时间大大延长,使路由器响应其它服务的时间变慢,所以如果要安装去广告应用,首先路由器的性能必须出众,个人建议最好采用X86或树莓派的OpenWrt软路由系统。

本次讲解我会使用树莓派软路由,安装19.07.3版本的OpenWrt系统,关于树莓派安装OpenWrt系统的教程我会另文进行讲解。

一、安装

1、安装相应程序包

opkg update
opkg install adblock luci-app-adblock

2、路由器重启

reboot
二、常规设置

在OpenWrt的Luci界面,点“Services – Adblock”进入设置界面:

其中,在“Overview“栏中含”Information“项显示了adblock目前的配置及运行情况。

具体的设置我们需要在”Settings”项的”General Settings“子项中进行:

除缺省的”Enabled”栏勾选外,将“Force Local DNS“及“DNS Report”栏也勾选上,在新增的“Local DNS Ports”栏里填上“53”。同时为了使DNS Report发挥作用,还需要按提示安装tcpdump-mini:

opkg update
opkg install tcpdump-mini

最后在Luci界面点“Save & Apply”,使修改生效,一般这时测试网站或视频内容就可以达到去广告的效果了。

三、诊断及微调

如果通过以上的设置,还无法达到去广告的效果,你可以通过以下的步骤进行诊断及微调:

1、点开“Log View”项,看一下应用运行所必需的程序包是否已全部安装,根据提示先安装程序包,直到没有错误提示信息为止;

2、改变或增加广告列表源:在“Overview – Settings – Blocklist Sources”子项的”Sources“栏下拉框中变更或增添新的广告列表源;

3、添加自定义列表:通过”Edit Blacklist“和”Edit Whitelist“,自定义黑名单及白名单,特别是要去除国内广告时,添加自定义的广告黑名单(注:可通过网络下载随时更新的国内广告列表)是非常必要的;

4、根据”DNS Report“的刷新结果,看一下需要去除的广告是否都已去除,有”漏网之鱼”就将其加入到黑名单。

相信通过以上的步骤以后,去广告的效果肯定会大有改善,当然在去广告的同时我们还需要兼顾路由器的其它性能不受大的影响,广告列表名单也不可能是越多越好,大家需要通过多试验才能取得一个合适的平衡值。

国内比较知名的去广告应用有adbyby及koolproxy,但可惜的是这两个应用都长久没有更新了,去广告效果已大打折扣,但它们在国内还是拥有大量的粉丝,特别是adbyby,所以我还是会在后面给大家讲一讲adbyby在OpenWrt系统中的应用,但因为要涉及到自编译,因此我会把它放在应用程序自编译部分来进行讲解。

将4G移动网络接入OpenWrt路由器

要远程控制设在郊外的设备,设备附近没有有线网络也没有WIFI无线信号;坐高铁出差途中突然有公事须处理,需要用到网络又不想共享手机移动网络;家里宽带突然断网,一家子人等着上网看剧、玩游戏、查信息,碰到这些问题怎么办?最简单的方法就是,将4G移动网络接入OpenWrt路由器,利用移动网络信号来帮助完成这些工作。

为什么选择采用4G移动网络?是因为其速度可以满足大部分应用的需要,另外目前的4G模块的价格还是比较便宜的,相比3G、5G网络具有更高的性价比。市场上4G模块有多种输出模式,因为我们要选择接入路由器,所以需要购买带usb接口的4G模块,目前比较常见的有宽翼通信BroadMobi的BM806U、移远通信QUECTEL的EC20、龙尚的U8300C、芯讯通SIMCom的SIM7600CE等等。

这次我们的讲解就以BroadMobi的BM806U为例。OpenWrt路由器选用TL-WR720N,选择这款路由器主要是考虑其体积小,方便布置及携带;另外带Micro-usb供电,有移动充电宝就可以让路由器运行起来。

一、安装4G模块的驱动程序

1、安装必要的程序包

opkg update
opkg install usb-modeswitch kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan uqmi

2、重启路由器

reboot

3、测试

ls -l /dev/cdc-wdm0

# 判断返回的信息是否与下面内容类似:

crw-r--r--    1 root     root      180, 176 Oct  1 12:03 /dev/cdc-wdm0

如果返回的信息有问题,可以运行以下两个命令看一下问题具体出在什么地方:

dmesg

或

cat /sys/kernel/debug/usb/devices

4、插上SIM卡查看

将中国移动SIM卡(注:BM806U说支持全网通,但是我用电信4G卡测试没有通过,联通的没试,移动是可以的,所以不知道是不是还需要额外的配置),插入usb dongle的4G模组,最好把天线也接上。一般4G模块的指示灯会亮,不亮的话可以将路由器再重启一下试试。然后运行如下命令:

uqmi -d /dev/cdc-wdm0 --get-data-status
# 返回信息
"disconnected"

uqmi -d /dev/cdc-wdm0 --get-signal-info
# 返回类似信息就表明驱动安装成功
{
        "type": "lte",
        "rssi": -71,
        "rsrq": -9,
        "rsrp": -94,
        "snr": 70
}

将4G移动网络接入OpenWrt路由器-1

二、设置拨号程序

1、采用命令方式,这种方法可靠性好,建议使用

uqmi -d /dev/cdc-wdm0 --start-network cmnet --autoconnect
# 返回程序运行的进程号,例如:
90268320

同理,也可以通过命令确认一下连接状态:

uqmi -d /dev/cdc-wdm0 --get-data-status
# 返回信息
"connected"

2、第2种方法,采用Luci界面设置

这种方法需要知道移动网络提供商的APN、鉴权模式、拨号用户名及密码等,比较复杂,而且不太稳定,不推荐使用。

先在Luci界面增加4G拨号协议支持:

opkg update
opkg install luci-proto-qmi

再在“Network – Interfaces”界面新增一个wwan0的拨号协议接口:

将4G移动网络接入OpenWrt路由器-2

配置相应参数:

将4G移动网络接入OpenWrt路由器-3

最后添加防火墙到wan区域:

将4G移动网络接入OpenWrt路由器-4

保存并应用后,4G拨号就成功了。

三、添加4G移动网络

新增4G移动网络接口wwan:

vim /etc/config/network

# 在打开的文本最后加上如下语句

config interface 'wwan'
        option ifname 'wwan0'
        option proto 'dhcp'

再添加防火墙到wan区域(在Luci设置界面完成):

将4G移动网络接入OpenWrt路由器-5

配置完成,点“Save & Apply”后,就可以看到连接状态了:

将4G移动网络接入OpenWrt路由器-6

>> 因为有wan和wwan两个网络输入接口,所以为避免冲突,最好配置mwan3,具体可参考OpenWrt的负载均衡及多线多拨控制应用mwan3一文。

至此,将4G移动网络接入OpenWrt路由器的具体实施方法就讲解完成了,你学会了吗?更详细的说明,你也可以参考如下英文网址:

https://openwrt.org/docs/guide-user/network/wan/wwan/ltedongle

如果你手头有的4G模块不是BM806U,而是移远通信的EC20,那对不起,上面的拨号程序没有用,我们需要专门为其编译拨号程序,这个比较复杂,留给以后在应用程序自编译部分再讲解。

利用usb摄像头建立家庭监控系统

2020年年初由于受疫情的影响,很多家庭都为了孩子上网课而购置了usb摄像头,而现在随着孩子恢复到学校正常上课,原先购买的usb摄像头就闲置下来了。那今天我们就来讲解一下如何利用usb摄像头建立家庭监控系统,让闲置的物件再发挥发挥其大作用。

一、材料准备

1、本次讲解路由器我们采用网件Netgear R7800,系统是OpenWrt 19.07.3;

2、家里闲置的usb摄像头型号是C270 HD WEBCAM,是罗技Logitech公司出品的,720p,30fps。

二、设置过程

1、添加usb支持

opkg update
opkg install kmod-usb-core kmod-usb2 kmod-usb3

2、安装usb检测工具(非必须)

opkg install usbutils

3、安装usb video支持

opkg install kmod-video-uvc

具体安装什么usb video支持程序,需要看自己家里的usb摄像头支持什么格式的,具体可以先参考一下OpenWrt关于usb video的用户指南:

https://openwrt.org/docs/guide-user/hardware/video/usb.video

判断自己购买的usb摄像头是否支持uvc格式,是否可以在linux内核里自动识别,可直接参阅:http://www.ideasonboard.org/uvc/

我的罗技C270在支持的列表里,因此我在路由器上安装 kmod-video-uvc 后,就可以使用 lsusb -t 或 ls /dev/video* 看到设备已成功安装:

利用usb摄像头建立家庭监控系统-1

三、实时监控视频

1、安装支持

opkg update
opkg install mjpg-streamer luci-app-mjpg-streamer

2、进入路由器Luci设置界面,点“Services – MJPG-streamer“,在”General“里设置视频格式及输出方式,并勾选”Enabled“;在”Plugin settings – HTTP output”里设置端口号、登录账号及密码等:

利用usb摄像头建立家庭监控系统-2

在”Plugin settings – UVC input“设置项里,勾选”Enable YUYV format“,最后点”Save & Apply“保存并使设置生效:

利用usb摄像头建立家庭监控系统-3

3、验证:因为我们上面设置的是HTTP输出,因此在PC浏览器地址栏输入:http://192.168.1.1:8080 即可看到实时视频画面了。我们也可以通过设置DDNS和端口转发,在远程电脑上获取实时的监控画面。

如果我们选择File文件输出,建议最好在路由器上再挂载一个大容量的usb移动硬盘。

四、利用NAS实现实时监控及存储功能

1、先确保通过上面的设置 mjpg-streamer 已经可以获得网页实时视频;

2、以群晖Synology NAS为例,打开NAS管理界面,打开Surveillance Station(注:须提前安装),打开“添加摄像机”,点“新增”,选“完整设置”,填上名称,如“usb camera”;品牌处选“用户自定义”;类型选“串流-HTTP”;在路径处填上http://”username:password@192.168.1.1:8080/?action=stream”(填上引号内内容,不含双引号;username、password、端口号8080,都按mjpg-streamer的实际设置值输入即可)。

利用usb摄像头建立家庭监控系统-4

3、再正常点”下一步“,按缺省设置,就可以添加成功了。

通过NAS的Surveillance Station就可以实时看到监控视频,同时利用NAS的存储功能也可以很方便的回看以前的画面。目前唯一的缺点是还无法支持声音,希望后续有那位大神可以将声音功能也一并加上,那样的话,利用usb摄像头建立家庭监控系统就会变得更完美了!

 

在OpenWrt路由器上安装KMS

如何在OpenWrt路由器上安装KMS激活服务器?以便在特定情况下也能激活相应的软件,保证软件的正常使用。

特别申明:本网站只是对某种技术进行讲解,不表明网站支持盗版软件的应用,请购买正版软件,保护知识产权!!!

一、KMS项目

KMS项目源码以C语言编写,支持在不同平台上使用,具体可参考:

1、C语言源码参考:https://github.com/Wind4/vlmcsd/

2、论坛:https://forums.mydigitallife.net/threads/50234 (须注册登入)

二、KMS for OpenWrt项目

KMS在OpenWrt平台上应用,可具体参考如下网站:

1、vlmcsd分项目

源码:https://github.com/cokebar/openwrt-vlmcsd

预编译:https://github.com/cokebar/openwrt-vlmcsd/tree/gh-pages

发布版:https://github.com/cokebar/openwrt-vlmcsd/releases

2、luci-app-vlmcsd分项目

源码:https://github.com/cokebar/luci-app-vlmcsd

发布版:https://github.com/cokebar/luci-app-vlmcsd/releases

三、具体安装及设置

下面我们就以Netgear WNDR3700 V4路由器为例,来讲解下具体安装及设置过程(注:路由器刷的OpenWrt版本号为19.07.3):

1、自编译过程

1)根据路由器的型号及已安装的OpenWrt的版本号,在OpenWrt官网下载相应的SDK包:

openwrt-sdk-19.07.3-ar71xx-nand_gcc-7.5.0_musl.Linux-x86_64.tar.xz

2)在linux系统下如Ubuntu等,先解压下载的SDK包

tar xf openwrt-sdk-19.07.3-ar71xx-nand_gcc-7.5.0_musl.Linux-x86_64.tar.xz

然后进入相应目录

cd openwrt-sdk-19.07.3-ar71xx-nand_gcc-7.5.0_musl.Linux-x86_64

然后将从vlmcsd分项目中的最新源码及luci-app-vlmcsd分项目中的最新源码拷贝到package子目录下:

package/openwrt-vlmcsd-master
package/luci-app-vlmcsd-master

3)执行编译

make package/openwrt-vlmcsd-master/compile V=s (中间会进入config的设置画面,点exit,点yes保存缺省设置即可)
make package/luci-app-vlmcsd-master/compile V=s

然后在 bin/packages/mips_24kc/base 目录下就可以发现已编译好的两个文件:

vlmcsd_svn1113-1_mips_24kc.ipk
luci-app-vlmcsd_1.0.2-1_all.ipk

2、安装(PC通过WinSCP连路由器)

将上面编译好的两个文件拷贝到 /tmp 目录下,然后运行

opkg update
opkg install /tmp/vlmcsd_svn1113-1_mips_24kc.ipk /tmp/luci-app-vlmcsd_1.0.2-1_all.ipk

3、设置

进入Luci界面,点“Services – vlmcsd”进入,勾选“Enable”和“Auto activate”,然后点“Save & Apply”保存并应用。

在OpenWrt路由器上安装KMS

4、验证

PC接路由器网络,进入dos命令行界面(选“运行”,输入“cmd”,点“return”),然后输入

nslookup -type=srv _vlmcs._tcp.lan

如果能正常获取路由器LAN的IP地址,则表明KMS激活服务器安装成功。

5、激活方式及激活码

1)按以上方式设置后,接上电脑即可自动激活Windows和Office;

2)其它激活方式及激活码可参考如下网址:

https://github.com/Wind4/vlmcsd/tree/gh-pages

6、注意事项

KMS激活方式仅限于相关软件的VOL、VL、business edition版本,并不适用于其它版本(如:Consumer Edition等)。

这次我们讲解的在OpenWrt路由器上安装KMS的内容,相比较我们以前讲解的其它应用要略微复杂一些,因为它要涉及到应用自编译的环节。关于自编译的说明后面我们会详细展开,这次我们只是简单的涉及。本次讲解中涉及的自编译的两个文件,我会放在下载中心(百度网盘提取码:lyzj),方便大家直接下载使用,可以跳过自编译环节。

惠普M1005实现网络共享打印及扫描

家里有1台惠普的打印、复印、扫描一体机HP Laserjet M1005 MFP,想挂在路由器上,实现网络共享打印及扫描,但这款机子只有usb口,没有网络接口,要如何实现呢?其实,只要我们有一台刷了OpenWrt系统又带usb接口的路由器(例如我们前面讲过的TL-WR720N、TL-WDR4310等等),实现起来就非常简单了。下面我们就来详细讲解一下惠普M1005实现网络共享打印及扫描的整个过程。

一、网络共享打印功能的实现

(一)路由器端设置

1、先在OpenWrt路由器上安装必要的支撑程序:

opkg update

opkg install kmod-usb-printer p910nd luci-app-p910nd

2、将打印机接入路由器usb口,开启电源;然后电脑连接路由器,用如下命令确认打印机安装是否成功:

ls /dev/usb/lp*

# 显示示例如下

/dev/usb/lp0

若有显示类似 “/dev/usb/lp0“,则表示安装成功。

惠普M1005实现网络共享打印及扫描-1

3、打开路由器中p910nd服务器的Luci设置页面:

1)选择启用p910nd服务,即”enable”选项打勾;

2)不要选择双向模式,即将双向模式”Bidirectional mode”后面的勾去掉(注:M1005必须去掉,其它机型自己测试)。

惠普M1005实现网络共享打印及扫描-2

4、防火墙打开9100端口(注:高版本OpenWrt系统,可以省略这一步,系统在安装p910nd服务时会自动允许9100端口数据通行)。

5、重启路由器(注:M1005必须重启路由器,只重启p910nd服务没用)。

(二)电脑端设置(以win10系统为例)

1、打开“添加打印机和扫描仪”,然后点选“我需要的打印机不在列表中”;

2、选中“使用TCP/IP地址或主机名添加打印机”,点“下一步”;

3、输入ip地址:例如192.168.1.1;输入端口名称:随便自定义;点“下一步”;

4、选中“自定义”,点“设置”进入设置页面,在设置页面输入正确的IP地址及端口号等,点“OK”回原页面;再点“下一步”;

5、然后选择正确的打印机驱动程序(注:可以事先安装后,因为hp一般只提供exe安装文件),系统会自动提示用现有的驱动程序;

6、设置完成之前,可以点一下“打印测试页”,以测试所有设置是否正确。

二、网络共享扫描功能的实现

(一)路由器侧设置

1、在OpenWrt上安装必要的支撑程序:

opkg update

opkg install sane-daemon sane-frontends sane-hpljm1005 xinetd

sane-hpljm1005是HP Laserjet M1005 MFP的扫描驱动程序,若是其它机型,则需要自己查询如下网站进行确认。

http://www.sane-project.org/sane-backends.html#SCANNERS

2、运行一下以下命令确认扫描仪是否正确安装:

scanimage -L

# 显示示例如下

device `hpljm1005:libusb:001:002' is a Hewlett-Packard LaserJet M1005 multi-function peripheral

显示类似 “device `hpljm1005:libusb:001:002′ is a Hewlett-Packard LaserJet M1005 multi-function peripheral” 即OK。

3、开启监控,修改 /etc/xinetd.d/sane-port的内容,将最后的 disable = yes 改成 disable = no

vim /etc/xinetd.d/sane-port

# default: off
# description: The saned provides scanner service via the network.  
#       Applications like kooka, xsane or xscanimage can use the remote 
#       scanner.
service sane-port
{
        socket_type = stream
        port        = 6566
        wait        = no
        user        = root
        group       = root
        server      = /usr/sbin/saned
        disable     = no
}

4、添加内网使用扫描仪支持,在 /etc/sane.d/saned.conf 中添加,例如:192.168.1.0/24

vim /etc/sane.d/saned.conf

# saned.conf
# Configuration for the saned daemon

## Daemon options
# Port range for the data connection. Choose a range inside [1024 - 65535].
# Avoid specifying too large a range, for performance reasons.
#
# ONLY use this if your saned server is sitting behind a firewall. If your
# firewall is a Linux machine, we strongly recommend using the
# Netfilter nf_conntrack_sane connection tracking module instead.
#
# data_portrange = 10000 - 10100


## Access list
# A list of host names, IP addresses or IP subnets (CIDR notation) that
# are permitted to use local SANE devices. IPv6 addresses must be enclosed
# in brackets, and should always be specified in their compressed form.
#
# The hostname matching is not case-sensitive.

#scan-client.somedomain.firm
#192.168.0.1
#192.168.0.1/29
#[2001:db8:185e::42:12]
#[2001:db8:185e::42:12]/64

192.168.1.0/24

# NOTE: /etc/inetd.conf (or /etc/xinetd.conf) and
# /etc/services must also be properly configured to start
# the saned daemon as documented in saned(8), services(4)
# and inetd.conf(4) (or xinetd.conf(5)).

5、防火墙打开6566端口(注:高版本OpenWrt系统不需要)

6、重启路由器

(二)电脑侧设置(以win10下安装为例)

1、先下载wiasane:http://github.com/mback2k/wiasane,然后安装,按提示输入相关内容即可;

2、利用“windows附件”中的“windows 传真和扫描”就可进行网络共享扫描了。

这次我们讲解了惠普M1005实现网络共享打印及扫描的设置方法,这是一项非常实用的应用,特别是家里有多台电脑的时候,实现共享以后每台电脑都好像连接了一个打印机和扫描仪,可以省去很多不必要的麻烦。如果你家里有类似老式的打印机或扫描仪,建议可以用类似的方法去试试实现网络共享的乐趣。

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的抓包功能。不过从配置上来说,方法一要稍微简单一点,所以说两种方法是各有好处,在实际使用中大家可以灵活应用。

OpenWrt系统下的DHCP客户端如何获得固定的IP地址?

OpenWrt系统下的DHCP客户端如何获得固定的IP地址?在实际应用中,例如NAS、监控系统、二级或多级路由等,如果需要远程访问的时候,我们希望它们的IP地址是固定的,这样我们在设置端口转发的时候就不需要经常去变化IP值了。下面我们就以挂在二级路由下NAS服务为例(假设其配置情况如下图),来详细说明一下具体的设置过程。

OpenWrt系统下的DHCP客户端如何获得固定的IP地址?-1

一级路由的WAN口接光猫的宽带口,通过PPPoe拨号协议获得IP公网地址,再通过DDNS设置关联上固定的域名:123.red-yellow.net,这样就可以通过转发设置(Port Forwards)远程访问二级路由LAN口下挂载的NAS服务了。假设我们采用的是群晖NAS,其缺省端口号为5000,那么我们在一级路由上可以这样设置转发(在OpenWrt系统的Luci界面,点“Network – Firewall”进入防火墙设置,再点“Port Forwards”进入转发设置,点“Add”按钮添加):

OpenWrt系统下的DHCP客户端如何获得固定的IP地址?-2

为安全起见,在远程访问时通常我们不会使用缺省的端口号,上图中我们使用了5566端口号。转发到一级路由的LAN口,即二级路由的WAN口的5000端口号上(假设其内网IP地址为192.168.1.218)。然后再设置二级路由的端口转发,即将WAN的5000端口转发到NAS的5000上(假设NAS获得的内网地址是192.168.2.218):

OpenWrt系统下的DHCP客户端如何获得固定的IP地址?-3

这时,在远程电脑的浏览器地址栏输入:123.red-yellow.net:5566,就可以进入NAS服务的管理界面了:

OpenWrt系统下的DHCP客户端如何获得固定的IP地址?-4

是不是很简单?但是实际上这样的设置还是存在很大的一个漏洞的,由于我们的二级路由以及NAS与上一级路由都是采用DHCP服务,DHCP的客户端所获得的IP地址是由DHCP服务器端(即上一级路由)随机分配的,就是说现在的二级路由WAN的IP地址192.168.1.218和NAS的IP地址192.168.2.218是可能会发生变化的,通常在路由器重启及NAS重启时都可能发生这种情况,而只要其中的任一个IP地址发生变化,转发的规则链就断开了,远程访问就会失败。

所以,接下来我们还需要进一步设置,将192.168.1.218这个IP地址永远给二级路由的WAN口,将192.168.2.218这个地址给NAS网卡口。下面以一级路由器上的设置为例:

方法一、在DHCP Client模式下,将IP地址与MAC地址绑定

在一级路由器的Luci界面,点”Network – DHCP and DNS“进入DHCP及DNS设置界面,再点”Static Leases“进入静态或固定地址的设置界面:

OpenWrt系统下的DHCP客户端如何获得固定的IP地址?-5

点”Add“按钮添加静态地址设置规则,即设置DHCP根据客户端的MAC地址给予指定的IP地址,因为客户端的MAC地址是固定的,所以其获得的IP地址也将是固定的。

OpenWrt系统下的DHCP客户端如何获得固定的IP地址?-6

1、Hostname栏可以不填,如果非要填的话,你必须先知道自己的设备的Hostname,如果设备正连接在路由器上,那么在”Static Leases“设置页的”Active DHCP Leases“部分可以看到所有的Hostname,将自己要设置的那个设备(注:这里指二级路由器)的Hostname值输入即可,千万不可乱输。

2、MAC-Address栏输入相应的MAC值:00:11:22:33:44:55。

3、IPv4-Address栏输入固定的IP地址:192.168.1.218。

4、Lease time栏输入:infinite,让它永久有效。

5、DUID及IPv6-Suffix(hex)栏,不设置IPv6地址,可以不填。

点”Save“按钮,回到”Static Leases“设置页面,再点”Save & Apply“使设置生效就OK,你可以重启系统测试一下二级路由WAN口的IP地址是否会发生变化。

二级路由器上的设置过程与一级路由器相同,这里就不再展开了。

OpenWrt系统下的DHCP客户端如何获得固定的IP地址?-7

设置完成之后,不管是一级路由,还是二级路由,亦或NAS设备重启,都不会破坏转发链条的有效性,后续远程访问NAS服务的过程也将变得稳定、可靠。

方法二、将WAN口的DHCP Client模式改为Static address

方法一我们设置的是DHCP的服务器端,方法二则是设置DHCP的客户端,将客户端的获取IP地址的协议从DHCP Client模式改为Static address模式。

1、在二级路由器Luci界面,点“Network – Interfaces”进入接口设置界面,在WAN设置行,点“Edit”进入编辑状态:

OpenWrt系统下的DHCP客户端如何获得固定的IP地址?-8

在原DHCP Client协议模式下,如果我们没有按方法一进行MAC和IP绑定的动作,DHCP服务器给的IP地址是随机的,像上图中给的就是192.168.1.166,现在我们需要修改协议模式,使WAN口的IP地址固定为192.168.1.218。

2、在Protocol栏的下拉菜单中选择“Static address”协议:

OpenWrt系统下的DHCP客户端如何获得固定的IP地址?-9

3、点“Switch protocol”按钮进入协议配置界面:

OpenWrt系统下的DHCP客户端如何获得固定的IP地址?-10

在“General Settings”设置界面中,“IPv4 address”栏输入:192.168.1.218,“IPv4 netmask”栏的下拉菜单中选择:255.255.255.0,“IPv4 gateway”栏输入:192.168.1.1,“IPv4 broadcast”栏输入:192.168.1.255,其它项目都保持缺省设置即可。

4、点“Save”按钮保存,系统会自动回到Interfaces界面,再点“Save & Apply”按钮使设置生效:

OpenWrt系统下的DHCP客户端如何获得固定的IP地址?-11

从上图可以看到,WAN口IP地址已变更为我们所设定的192.168.1.218。NAS端的设置与OpenWrt系统略有不同,但原理是一样,这里不再累述。

PS:这种方法存在一定的缺陷,如果你要设置的静态地址由DHCP服务器随机分配给了其它的LAN口(也包括无线LAN)时,这时静态地址模式会无法工作。而且这种情况发生的概率还挺高的,例如当你将设置为静态地址模式的路由器或其它设备关闭时,如果这时又有新的设备要连接到LAN口,DHCP服务器端就有可能将你所关闭设备正在用的静态地址随机分配给新接入的设备,这时你再打开关闭的设备时就无法获取你所设定的静态IP地址了。另外,在实践中可能还有设备不支持静态地址设置模式的,所以一般的情况我们还是建议采用方法一更安全、更可靠。