AdGuardHome在OpenWrt系统上的应用

我们在前面讲解过Adblock在OpenWrt系统上的应用,其实在国外还有一款非常有名的去广告应用叫AdGuardHome,其去广告的效果还是非常不错的,另外设置界面支持中文,对于国内用户来说操作相对简单一些。但它在OpenWrt系统上的安装过程与其它应用相比略有不同,其它应用大都采用opkg安装包进行安装,而AdGuardHome则采用Linux shell脚本命令方式安装,所以接下来我们就来讲解一下AdGuardHome在OpenWrt系统上的应用,包括安装、设置及使用的全过程,大家在碰到其它类似应用也就可以用同样的方式来处理了。

OpenWrt官网论坛区有类似的文章可以参考,如果你英语没问题,可以先看一下相关的内容:https://forum.openwrt.org/t/howto-running-adguard-home-on-openwrt/51678

下面我们就以在已刷OpenWrt19.07.3系统的软路由 J1900 上安装最新版的 AdGuardHome 为例,展开具体说明。

1、安装

AdGuardHome项目源码:https://github.com/AdguardTeam/AdGuardHome,根据路由器所采用的CPU来选择合适的程序下载,Beta及Edge版本的下载选择界面如下:

AdGuardHome在OpenWrt系统上的应用-1

如果想运行稳定版本,则选择Release版本,像 J1900 软路由采用x86_64架构,就到最新发布版网址:https://github.com/AdguardTeam/AdGuardHome/releases/tag/v0.105.1,选 Linux 64-bit 平台下载相应的安装文件:

opkg update && opkg install wget
mkdir /opt && cd /opt
wget -c https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.105.1/AdGuardHome_linux_amd64.tar.gz
tar xfvz AdGuardHome_linux_amd64.tar.gz
rm AdGuardHome_linux_amd64.tar.gz
2、安装
/opt/AdGuardHome/AdGuardHome -s install
3、配置

浏览器地址栏输入:http://192.168.17.1:3000(如果你的Lan地址不是192.168.17.X,则网址做相应变化)

AdGuardHome在OpenWrt系统上的应用-2

设置AdGuardHome的Web管理监控端口(这里用8080)及DNS端口号(这里用5353)

AdGuardHome在OpenWrt系统上的应用-3

后面设置登录的账号及密码,其它全部按缺省即可。

在进入AdGuardHome管理页面之前,我们还需要将DNS解析从原先的53端口全部转移到AdGuardHome的5353,将DNS解析任务交给AdGuardHome去处理。

在 /etc/config/dhcp 添加

config dnsmasq
    option domainneeded '1'
    option localise_queries '1'
    option rebind_protection '1'
    option rebind_localhost '1'
    option local '/lan/'
    option domain 'lan'
    option expandhosts '1'
    option authoritative '1'
    option readethers '1'
    option leasefile '/tmp/dhcp.leases'
    option resolvfile '/tmp/resolv.conf.auto'
    option localservice '1'
    list server '192.168.17.1#5353'

在 /etc/firewall.user 添加

# This file is interpreted as shell script.
# Put your custom iptables rules here, they will
# be executed with each firewall (re-)start.

# Internal uci firewall chains are flushed and recreated on reload, so
# put custom rules into the root chains e.g. INPUT or FORWARD or into the
# special user chains, e.g. input_wan_rule or postrouting_lan_rule.

iptables -t nat -A PREROUTING -i br-lan -p udp --dport 53 -j DNAT --to 192.168.17.1:5353
iptables -t nat -A PREROUTING -i br-lan -p tcp --dport 53 -j DNAT --to 192.168.17.1:5353
4、监控及管理

路由器重启后,在浏览器地址栏输入 http://192.168.17.1:8080 ,输入账号及密码就可以进入AdGuardHome的监控管理界面了:

AdGuardHome在OpenWrt系统上的应用-4

点 “过滤器” 进入添加或删除阻止列表界面

AdGuardHome在OpenWrt系统上的应用-5

其它都用缺省设置即可,当然如果你希望更深入研究,可以去试着设置更多的内容,反正都是中文的,可以多试验,慢慢就掌握各项配置了。

OpenWrt应用程序自编译(4)-为DDNS添加DNSPOD支持

在讲解DDNS应用时,我们用到了DNSPOD腾迅云的域名解析服务,但是DDNS官方并不直接支持DNSPOD,所以我们后来采用了Shell脚本命令的方式来实现相应的功能,但是大家可能已经发现用Shell脚本的方式非常复杂,不像DDNS官方带的一些域名提供商一样设置简单,直接在Luci界面就可以轻松完成。那有没有可能将DNSPOD域名解析服务也添加到DDNS官方所支持的Luci界面里呢?回答是肯定的。下面我们就来讲解OpenWrt应用程序自编译(4)-为DDNS添加DNSPOD支持的具体实现过程。

1、SDK下载、安装及配置

DDNS一般我们都安装在一级路由器上,而家庭一级路由往往需要性能好的路由器来担当,所以很多家庭都会采用软路由来做一级路由。下面SDK仍以x86_64平台的软路由为例,刷OpenWrt19.07.3稳定系统。

下载网页:https://downloads.openwrt.org/releases/19.07.3/targets/x86/64/

cd /home/hzshw
wget https://downloads.openwrt.org/releases/19.07.3/targets/x86/64/openwrt-sdk-19.07.3-x86-64_gcc-7.5.0_musl.Linux-x86_64.tar.xz

解压缩文件

tar xf openwrt-sdk-19.07.3-x86-64_gcc-7.5.0_musl.Linux-x86_64.tar.xz
rm openwrt-sdk-19.07.3-x86-64_gcc-7.5.0_musl.Linux-x86_64.tar.xz

配置

cd openwrt-sdk-19.07.3-x86-64_gcc-7.5.0_musl.Linux-x86_64
./scripts/feeds update -a
./scripts/feeds install -a
2、自编译

DDNS添加DNSPOD支持的源码下载地址为 https://github.com/nixonli/ddns-scripts_dnspod

下载源码到SDK的 package 目录

git clone https://github.com/nixonli/ddns-scripts_dnspod.git package/ddns-scripts_dnspod

编译

make package/ddns-scripts_dnspod/compile V=s

编译过程完成后,你会在 /home/hzshw/openwrt-sdk-19.07.3-x86-64_gcc-7.5.0_musl.Linux-x86_64/bin/packages/x86_64/base 目录里发现你想要的文件:

ddns-scripts_dnspod_1.0-3_all.ipk

用 opkg install 命令安装以上文件后,再打开DDNS的Luci设置界面,你会发现在可供选择的服务提供商列表中添加了DNSPOD,选中后按Luci界面设置完成即可。

OpenWrt应用程序自编译(4)-为DDNS添加DNSPOD支持

PS:OpenWrt应用程序自编译部分的讲解至此要先告一段落了,考虑到有部分人员受编译环境的影响,并不能完成自编译过程,我会将编译完成的部分应用程序放在下载中心供大家下载(百度网盘下载密码:lyzj)。

OpenWrt应用程序自编译(3)-Adbyby

在上次讲解去广告应用Adblock时,我们提到了国内有一个非常有名的应用叫Adbyby,虽然现在已不再更新,但是还是有很多粉丝在一直使用这个应用,同时也在做一些简单的维护工作(例如:不断地更新去广告列表)。今天我们就来讲解一下OpenWrt应用程序自编译(3)-Adbyby的实现过程。

1、SDK下载、安装及配置

上次我们就讲过,对于去广告应用路由器的性能要绝对过硬才行,要不整个路由器都会被去广告应用拖累而无法运行,所以这次我们x选择采用x86_64平台的软路由,刷OpenWrt19.07.3系统。

下载网页:https://downloads.openwrt.org/releases/19.07.3/targets/x86/64/

cd /home/hzshw
wget https://downloads.openwrt.org/releases/19.07.3/targets/x86/64/openwrt-sdk-19.07.3-x86-64_gcc-7.5.0_musl.Linux-x86_64.tar.xz

解压缩文件

tar xf openwrt-sdk-19.07.3-x86-64_gcc-7.5.0_musl.Linux-x86_64.tar.xz
rm openwrt-sdk-19.07.3-x86-64_gcc-7.5.0_musl.Linux-x86_64.tar.xz

配置

cd openwrt-sdk-19.07.3-x86-64_gcc-7.5.0_musl.Linux-x86_64
./scripts/feeds update -a
./scripts/feeds install -a
2、自编译

对于Adbyby for OpenWrt源码查找确实是个问题,网络已很少发现其踪迹,但好在OpenWrt系统界的大佬Lean大还一直对Adbyby不离不弃的,使得我们还可以继续在OpenWrt系统上使用Adbyby。

当然你可以在Lean大的OpenWrt第三方平台上 https://github.com/coolsnowwolf/openwrt 上直接生成路由器固件,同时将相应的应用都包含在内(包括Adbyby应用),但现在我只讲解应用程序的自编译过程,因此我们只需要将Lean大的Adbyby的编译源码下载到SDK的 package 目录即可。

OpenWrt应用程序自编译(3)-Adbyby-1

先运行adbyby的自编译过程

make package/adbyby/compile V=s

出现 config 配置界面时,点 “Network” ,选中 adbyby 并保存退出

OpenWrt应用程序自编译(3)-Adbyby-2

再运行Luci-app-adbyby-plus的自编译过程

make package/luci-app-adbyby-plus/compile V=s

编译过程完成后,你会在 /home/hzshw/openwrt-sdk-19.07.3-x86-64_gcc-7.5.0_musl.Linux-x86_64/bin/packages/x86_64/base 目录里发现你想要的文件:

adbyby_2.7-20200315_x86_64.ipk

luci-app-adbyby-plus_2.0-72_all.ipk

luci-i18n-adbyby-plus-zh-cn_2.0-72_all.ipk

直接将以上三个文件拷贝到软路由的 /tmp 目录下,然后用 opkg install 命令安装即可,具体adbyby应用的设置过程这里不再详述,因为有Luci界面还是很容易完成的。

 

OpenWrt应用程序自编译(2)-Frp

在OpenWrt的常规应用讲解时,我们曾经讲到过Frp,当时在往WR720N路由器里安装Frpc时我们用的是Kuoruan的发布版v0.33.0-1,因为mips_24kc平台的Frpc应用在Kuoruan的官方发布网站还没有更新,所以如果你想采用最新版本的Frp就需要自编译,那今天我们就来讲解一下OpenWrt应用程序自编译(2)-Frp的实现过程。

路由器还是采用TL-WR720N(刷WR710N的OpenWrt最新版19.07.6),目前Frp的最新版本是v0.34.3-1。

1、下载、安装并进行配置

该过程在自编译KMS时有详细的讲解,因此这里有些过程会略去。

先找到SDK的下载地址:https://downloads.openwrt.org/releases/19.07.6/targets/ar71xx/generic/

OpenWrt应用程序自编译(2)-Frp-1

下载到指定目录

cd /home/hzshw
wget https://downloads.openwrt.org/releases/19.07.6/targets/ar71xx/generic/openwrt-sdk-19.07.6-ar71xx-generic_gcc-7.5.0_musl.Linux-x86_64.tar.xz

解压压缩文件

tar xf openwrt-sdk-19.07.6-ar71xx-generic_gcc-7.5.0_musl.Linux-x86_64.tar.xz
rm openwrt-sdk-19.07.6-ar71xx-generic_gcc-7.5.0_musl.Linux-x86_64.tar.xz

配置

cd openwrt-sdk-19.07.6-ar71xx-generic_gcc-7.5.0_musl.Linux-x86_64
./scripts/feeds update -a
./scripts/feeds install -a
2、自编译

Frp for OpenWrt 的最新版源码地址:https://github.com/kuoruan/openwrt-frp

下载最新版Frp源码到package目录下

git clone https://github.com/kuoruan/openwrt-frp.git package/openwrt-frp

编译

make package/openwrt-frp/compile V=s

在出现的配置界面中,> Network > Web Servers/Proxies 中选中 frps 及 frpc 保存退出即可。

OpenWrt应用程序自编译(2)-Frp-2

这个编译过程完成后,在 /home/hzshw/openwrt-sdk-19.07.6-ar71xx-generic_gcc-7.5.0_musl.Linux-x86_64/bin/packages/mips_24kc/base 目录下你就会发现最新版的Frps及Frpc:

OpenWrt应用程序自编译(2)-Frp-3

至此,Frp在mips_24kc平台下的最新版应用程序就编译完成了。

OpenWrt应用程序自编译(1)-KMS

在OpenWrt系统的官方应用程序库里,集成了很多很多有用的程序,你可以通过opkg install命令很方便的安装,但是总是会有一些特殊的应用是游离在外的,或者是官方收集的是早期版本的应用而你想采用最新版本的,这时你就需要进行应用程序的自编译来生成应用的安装程序文件(.ipk)。今天我们就来讲解一下OpenWrt应用程序自编译(1)-KMS的实现过程。

首先我们需要搭建OpenWrt系统的自编译环境(参考网站前期文章),再利用SDK工具来完成自编译过程。在自编译之前,先重申两条原则:1)不要用roo账户或sudo命令进行自编译,一定要用普通账户!!!;2)编译的目录路径中不要带空格。切记切记,否则自编译过程无法正常进行。

下面以安装了OpenWrt19.07.3版本的树莓派3B+为例,来说明KMS的自编译全过程:

1、下载、安装SDK并进行配置

先要找到相应的SDK下载地址,进入OpenWrt官网首页

OpenWrt应用程序自编译(1)-KMS-1

点左边的“Downloads”,进入下载页

OpenWrt应用程序自编译(1)-KMS-2

点“Stable Release builds“进入发布版平台

OpenWrt应用程序自编译(1)-KMS-3

选”19.07.3/“进入相应的版本空间

OpenWrt应用程序自编译(1)-KMS-4

进入”targets/”目录

 

OpenWrt应用程序自编译(1)-KMS-5

树莓派的分类为brcm2708,因此进入“brcm2708/”目录

OpenWrt应用程序自编译(1)-KMS-6

树莓派3B+属brcm2710分类,进入“brcm2710/”目录

OpenWrt应用程序自编译(1)-KMS-7

这里我们就可以发现相应的SDK文件了,可通过点击直接下载,然后通过WinSCP上传至自编译环境(注:以Ubuntu20.04为例)的相应目录下,如 /home/hzshw;也可以通过下载命令直接下载

cd /home/hzshw
wget https://downloads.openwrt.org/releases/19.07.3/targets/brcm2708/bcm2710/openwrt-sdk-19.07.3-brcm2708-bcm2710_gcc-7.5.0_musl.Linux-x86_64.tar.xz

将文件解压并删除原压缩文件

tar xf openwrt-sdk-19.07.3-brcm2708-bcm2710_gcc-7.5.0_musl.Linux-x86_64.tar.xz
rm openwrt-sdk-19.07.3-brcm2708-bcm2710_gcc-7.5.0_musl.Linux-x86_64.tar.xz

这时用 ls 命令查看,就会发现在/home/hzshw目录下多了一个 openwrt-sdk-19.07.3-brcm2708-bcm2710_gcc-7.5.0_musl.Linux-x86_64 目录,用 cd 命令进入该目录

ls

cd openwrt-sdk-19.07.3-brcm2708-bcm2710_gcc-7.5.0_musl.Linux-x86_64

目录里包含的就是SDK的初始环境,接下来我们还必须进一步配置SDK环境

更新feeds列表并安装

./scripts/feeds update -a

./scripts/feeds install -a

make menuconfig     #采用缺省状态,直接退出保存设置即可

注:这里运行make menuconfig命令后后续自编译时就不会出现要求配置的界面了,当然你放在后面运行也是可以的。

这时自编译要用到的SDK工具就配置好了,下一步就可以进入应用程序的自编译过程了。

2、KMS的自编译

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

1)vlmcsd分项目

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

2)luci-app-vlmcsd分项目

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

将KMS及对应的Luci源程序先下载到SDK的 package 目录下

git clone https://github.com/cokebar/openwrt-vlmcsd.git package/openwrt-vlmcsd

git clone https://github.com/cokebar/luci-app-vlmcsd.git package/luci-app-vlmcsd

然后编译

make package/openwrt-vlmcsd/compile V=s

make package/luci-app-vlmcsd/compile V=s

在 bin/packages/aarch64_cortex-a53/base 目录下就可以发现自编译生成的KMS及对应的Luci文件

vlmcsd_svn1113-1_aarch64_cortex-a53.ipk

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

通过WinSCP将以上两个文件上传至树莓派3B+软路由,通过 opkg install 命令安装即可。

OpenWrt应用程序自编译(1)-KMS-8

 

搭建OpenWrt系统的自编译环境

不管是自编译固件,还是自编译应用程序,都需要先搭建自编译的环境,今天我们就来讲解一下如何搭建OpenWrt系统的自编译环境。有英文基础的人可以详细了解一下OpenWrt官网里这篇文章:https://openwrt.org/docs/guide-developer/build-system/install-buildsystem

1、操作系统

因为OpenWrt系统采用的是Linux内核,因此自编译操作系统我们也选用Linux或Unix的系统,像Debian、Red Hat、Fedora等等,个人偏向于采用Ubuntu(Debian的衍生系统),系统稳定且更新及时。我也采用过CentOS系统,但个人感觉自编译的成功率没有Ubuntu的高,当然这仅仅是我个人很粗浅的认知,每个系统都会有各自的闪光点,可能只是我习惯了使用Ubuntu系统而已。

硬件方面,你可以直接使用安装了Ubuntu系统的台式电脑或笔记本电脑,也可以采用虚拟机技术VM或Docker,都能很好的完成自编译操作系统的搭建工作,但就方便性而言,建议还是采用虚拟机技术,采用虚拟机技术后在同一硬件环境下可以方便的安装同一系统的不同版本,因为有些编译过程,对系统版本的要求很高,如果你只安装了Ubuntu的最新版本20.04,对于某些只支持在18.04版本下编译的应用程序就会出现无法编译的情况,所以会存在需要安装多个不同版本号的系统的需求。另外,采用虚拟机技术,也可以方便我们随时远程访问主机进行编译工作,而不受时间及空间的限制。至于具体采用哪种虚拟机技术,我试过很多种,我觉得都OK,大家不必纠结于此,那一种你拿手就用那一种。本网站OpenWrt自编译部分讲解时,我使用的是在原台式电脑裸机的基础上,采用VMware的ESXI虚拟机技术搭建的Ubuntu系统,为方便管理里面也搭建了OpenWrt的软路由环境。

搭建OpenWrt系统的自编译环境-1

关于如何安装ESXI虚拟机以及如何在ESXI虚拟机下安装Ubuntu系统,不在本篇讲解,大家可以参考本网站的“关联应用 – 虚拟机技术 – VMware”部分的内容。

2、添加必要的程序包文件

为了能够顺利进行后续OpenWrt系统的编译过程,在安装好Ubuntu操作系统后,还必须添加编译时要用到的专用程序包文件:

sudo apt update
sudo apt install build-essential ccache ecj fastjar file g++ gawk \
gettext git java-propose-classpath libelf-dev libncurses5-dev \
libncursesw5-dev libssl-dev python python2.7-dev python3 unzip wget \
python3-distutils python3-setuptools rsync subversion swig time \
xsltproc zlib1g-dev

注:不同的操作系统,需要安装的程序包文件是不一样,具体还请参考OpenWrt官网的指导文件。

至此,搭建OpenWrt系统的自编译环境的工作就算完成了,后续就可以进行固件自编译及应用程序自编译的过程了。

树莓派安装OpenWrt系统

树莓派升级到4B后,新买了一个,家里原先购买的3B+一直闲置着,近期公司事情比较少,就想着将闲置的3B+试着刷入OpenWrt系统,通过一番周折总算是成功了。现将树莓派安装OpenWrt系统的过程一起分享给大家。

1、先下载固件

到OpenWrt官网下载相应的固件,Paspberry Pi 3B+的固件下载地址为:

https://downloads.openwrt.org/releases/19.07.3/targets/brcm2708/bcm2710/

下载 openwrt-19.07.3-brcm2708-bcm2710-rpi-3-ext4-factory.img.gz 文件到电脑中

树莓派安装OpenWrt系统-1

2、将下载的固件安装到SD卡

以Windows操作系统为例,先将下载文件解压成:openwrt-19.07.3-brcm2708-bcm2710-rpi-3-ext4-factory.img,用常规软件7zip等就可以完成解压任务。

再利用Win32diskimager程序,将解压后的固件写入到SD卡中(过程略)。

注:Linux系统可以采用dd命令完成SD卡的写入工作。

3、系统配置

因为树莓派只有一个网口,在OpenWrt系统中该网口已缺省设置为LAN口,要实现路由功能至少还缺一个WAN口,好在树莓派上还有多个usb口,我们可以将usb口转换成网口。先购买一个usb网线转换器,然后再安装必要的驱动,让OpenWrt系统可以识别出usb网口。

安装usb网口驱动可以通过PC先下载必要的驱动程序,然后通过WinSCP将下载文件上传到树莓派进行安装,也可以将无线接口先设置成wan口直接进行安装,下面以后一种方法进行驱动安装说明:

将SD卡插入树莓派,3B+的唯一网口接PC,接通电源启动树莓派,启动完成后在PC浏览器地址栏输入:192.168.1.1,设置密码:

树莓派安装OpenWrt系统-2

然后进入“Network – Wireless”,点Scan,设置wwan利用无线接入Internet(具体设置方法可参考本网站的另一篇文章:OpenWrt的负载均衡及多线多拨控制应用mwan3),然后进行驱动安装:

opkg update
opkg install kmod-usb-net kmod-usb-net-asix kmod-usb-net-asix-ax88179

当然,不同的usb网线转换器可能会用到不同的驱动程序,需要大家先查资料确认。

驱动成功安装后,usb网口系统就能识别了,物理接口名新增了eth1,利用新增的eth1就可以添加wan口及wan6口,这时可以删除wwan,恢复其无线发射功能了。

同理,你也可以利用其它的usb口,再多出几个物理接口,如eth2、eth3等,将这些接口与eth0桥接,组成LAN口,这时树莓派就更像个功能齐全的路由器了。

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,那对不起,上面的拨号程序没有用,我们需要专门为其编译拨号程序,这个比较复杂,留给以后在应用程序自编译部分再讲解。

一个Frps带多个Frpc

Frp在OpenWrt系统中的应用一文中,我们讲解了Frps服务器端的安装及设置,以及OpenWrt系统下Frpc客户端的安装及设置,是一对一的关系。但如果我们有多个客户端需要进行内网穿透的话,是不是需要设置多个Frps服务器端?如果是的话,那成本就有点高了,因为大家知道Frps服务器端是需要有公网地址的,而一般来说获取公网地址都是要支付费用的,所以多一个Frps通常就会多一份费用。那是否可以一个Frps带多个Frpc呢?回答是肯定的!今天我们就来讲解一下一个Frps带多个Frpc的具体实施方法。

以两个客户端都要设置SSH服务为例(注:客户端设置中与服务器信息相关的部分略去,因为设置是一样的):

路由器1中 /etc/config/frpc 与SSH服务相关的配置如下:

config rule 'ssh_proxy'
    option name 'ssh'
    option type 'tcp'
    option local_ip '127.0.0.1'
    option local_port '22'
    option remote_port '6000'

那路由器2设置SSH服务时,是不是只要将远程服务端口改成与6000端口不一样就可以了呢?例如:改成6001:

config rule 'ssh_proxy'
    option name 'ssh'
    option type 'tcp'
    option local_ip '127.0.0.1'
    option local_port '22'
    option remote_port '6001'

即在Luci界面设置如下:

一个Frps带多个Frpc-1

按以上方式设置之后,你会发现登录远程的6001端口,并不能进入路由器2的SSH服务,即22端口。

那问题出在什么地方呢?查frp源码你可以发现frps不是以端口号来区分不同的客户端的,而是以代理服务的名称来区分的。上面的设置中,虽然路由器1的SSH服务远程端口是6000,路由器2的SSH服务远程端口为6001,但是它们的代理名称Proxy Name都是ssh,所以路由器1设置有效,路由器2的设置是无效的。因此我们需要修改一下路由器2的代理名称,例如,就改为“ssh1”:

config rule 'ssh_proxy'
    option name 'ssh1'
    option type 'tcp'
    option local_ip '127.0.0.1'
    option local_port '22'
    option remote_port '6001'

如果采用Luci配置时,在“Rules”子项目的“Proxy Name”栏输入框内点下拉菜单后选“Custom”用户自定义,输入“ssh1”回车即可。

一个Frps带多个Frpc-2

设置完成后,路由器2的SSH服务内网穿透测试完全正常(注:利用WinSCP,设置远程服务器及6001端口号访问)。

其它的像web服务、ftp服务等也都可以同样的方法进行设置,一个Frps带多个Frpc功能实现!!