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
软件管理哪里也可以直接下载安装,还可以自行上传文件安装,这里就不赘述了。
第二步 配置DHCP/DNS
转到网络-dhcp
把dns重定向的勾去掉
高级设置里面 dns服务端口改成553(可以改成你喜欢的任意端口)
保存应用。
第三步 配置adguardhome
先启动adguardhome
确定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.
其他的按需求更改。
然后打开passwall,就可以愉快的使用了
说明:你的dhcpdns或者客户端dns一定要设为路由器的地址,不然虽然可以使用,但是dns没有经过adguardhome和passwall。
Passwall的dns可以不更改,也可以改成xray分流,和我一样:
不建议使用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就不可以分流了,还可以改成主路由。