openwrt中adguard+passwall实现广告拦截教程

背景:

环境是openwrt作为旁路由,ImmortalWrt v21.02.6固件,通过软件包安装的passwall和adguardhome。

网上有很多adguardhome+openclash的教程,也有openwrt+smartdns+passwall的教程,openclash有监听dns的端口,所有我们可以把adguardhome的上游服务器设置成openclash的DNS监听湍口就可以了,也就是127.0.0.1:7874就可以了,但是passwall没有dns的监听端口,显然这样是行不通的。

openwrt+smartdns+passwall又有些复杂,需要额外安装smartdns,这样adguardhome和smartdns显得有点重复了。

因为passwall的dns转发基于dnasmasq,所有我们可以将adguardhome监听53端口,dnsmasq的监听端口修改成非53的任意端口,passwall又可以接收dnsmasq的dns请求进行分流,这样就可以实现dns分流以及去广告的功能。

首先 安装adguardhome

很多人都会安装luci-app-adguardhome,有管理界面,但是实际使用有这样那样的bug,还有核心无法更新等等。所有我们可以直接下载安装adguardhome。

Opkg update 
Opkg install adguardhome

软件管理哪里也可以直接下载安装,还可以自行上传文件安装,这里就不赘述了。

MhCrmjOzV1onX58.png

第二步 配置DHCP/DNS

转到网络-dhcp

Q4gXb7eHLAKPyfl.png

把dns重定向的勾去掉

GqTC7p2Q8YDXlAr.png

高级设置里面 dns服务端口改成553(可以改成你喜欢的任意端口)

OEdSsK3IUMYmh4r.png

gZ1Q8bJn7AXz6Pk.png

保存应用。

第三步 配置adguardhome

先启动adguardhome

OAGeKTq3XPJu94b.png

确定adguardhome的位置在/usr/bin文件夹中

SSH连接后台

进入文件夹:

cd /usr/bin

启动adguardhome:

./ AdGuardHome

这个时候就可以通过你的路由器ip:3000进入管理界面了, 首先设置管理页面端口,80占用改成3000(当然可以改成任何没有被占用的端口,我们习惯3000) 然后dns监听端口53,因为我们把dnsmasq的端口改成553,所有53是可以设置的。 然后按照安装知道设置就行了。 进入管理界面首先就要dns设置,上游dns改成:127.0.0.1:553.

 

563meiGp7dvBQuJ.png

其他的按需求更改。

然后打开passwall,就可以愉快的使用了

说明:你的dhcpdns或者客户端dns一定要设为路由器的地址,不然虽然可以使用,但是dns没有经过adguardhome和passwall。

Passwall的dns可以不更改,也可以改成xray分流,和我一样:

g8lH4uGTSjxPCbe.png

不建议使用chinaDNS-NG 个人感觉分流不是很准确。

PS

本来到这里就结束了,但是还有一个问题,万一路由器重启,或者是adguardhome故障了怎么办?所有我们要增加开启启动和自动重启的脚本。

首先创建一个自动启动脚本:

vi /etc/init.d/adguardhome

在编辑器修改成以下脚本:

  #!/bin/sh /etc/rc.common

START=25
STOP=89

USE_PROCD=1

PROG="/usr/bin/AdGuardHome"
CONFIG_FILE="/etc/adguardhome.yaml"
WORK_DIR="/path/to/workdir"

start_service() {
  config_load adguardhome
  config_get_bool enabled config enabled
  config_get WORK_DIR config workdir

  [ "$enabled" -eq "1" ] || return 1
  [ -d "$WORK_DIR" ] || mkdir -m 0755 -p "$WORK_DIR"

  procd_open_instance
  procd_set_param command "$PROG" -c "$CONFIG_FILE" -w "$WORK_DIR" --no-c
  procd_set_param stdout 1
  procd_set_param respawn
  procd_set_param file "$CONFIG_FILE"

  procd_close_instance
}

stop_service() {
  procd_close_instance
}

reload_service() {
  procd_send_signal "$CONFIG_FILE" HUP
}

boot() {
  start_service
}

start() {
  start_service
}

stop() {
  stop_service
}

reload() {
  reload_service
}

restart() {
  stop_service
  sleep 1
  start_service
}

 

分配权限:

chmod +x /etc/init.d/adguardhome

 

启动脚本并设置自动启动:

/etc/init.d/adguardhome enable

 

AdGuard Home现在应该会在OpenWrt启动时自动启动,并且可以使用以下命令手动启动、停止、重新加载和重启:

/etc/init.d/adguardhome start 
/etc/init.d/adguardhome stop 
etc/init.d/adguardhome reload 
/etc/init.d/adguardhome restart

 

如果不想使用adguardhome,可以关闭adguardhome,并将dnsmasq端口改回,也可以手动将dns改成其他的dns地址,但是这样dns就不可以分流了,还可以改成主路由。

阅读剩余
THE END