文章前言
今天eSir的TG群里有人问如何在Lean的OpenWrt下利用Docker 安装Adguard Home,其实我并不知道这个是什么什么东东,抱着解决问题和折腾的心态实践了一下,这里记录一下折腾过程。
对于Adguard Home是什么请自行谷歌,听他们说是可以去广告什么的,其实Lean的OpenWrt固件中已经有了像luci-app-adbyby 和广告屏蔽大师+plus,我想两个软件利用好了也是可以去掉广告的。
实践过程
如果你还没有刷入Lean的固件你可以参考以下文章,特别是树莓派的小伙伴。
文章是建立在你已经刷入并且成功运行了Docker,如果没有请先把Docker 运行起来。
容器的选择
Adguard Home 官方提供了Docker 镜像,请根据自己的平台拉取对应的镜像:
x86_64:
docker pull adguard/adguardhome
ARM64:
docker pull adguard/adguardhome:arm64-v0.99.0
后面带有arm64
标识的是像树莓派这样的,不然你会发现无法运行
运行镜像
运行容器之前必须建立两个配置目录:
mkdir workdir confdir
注意我这里在root的根目录下建立的,如果你不是请将下面运行代码中的$PWD
修改为你的目录。
官方已经给出了运行代码:
docker run --name adguardhome -v /my/own/workdir:/opt/adguardhome/work -v /my/own/confdir:/opt/adguardhome/conf -p 53:53/tcp -p 53:53/udp -p 67:67/udp -p 68:68/tcp -p 68:68/udp -p 80:80/tcp -p 443:443/tcp -p 853:853/tcp -p 3000:3000/tcp -d adguard/adguardhome
如果你的OpenWrt 装有WEB管理界面LUCI的话是跟有端口冲突的,而且固件默认也是安装有dnsmasq,这样80
端口53
端口和67端口都被占用,所以你会发现无法运行docker。
解决办法
解决办法有两种:
- 修改UHTTPD和
DNSMASQ
监听的端口 - 修改
Adguard Home
的映射端口为其他
第一种方法简单,但是后续会有很多麻烦,比如一些服务需要用到dnsmasq的53端口,所以我选择第二种
- 将本机的808端口映射到Adguard Home的80端口
- 将本机的5353端口映射到Adguard Home的53端口
- 将本机的69端口映射到Adguard Home的67端口(这个端口不知道干啥用,临时先改成别的)
重新启动Docker容器:
docker run --name adguardhome -v $PWD/workdir:/opt/adguardhome/work -v $PWD/confdir:/opt/adguardhome/conf -p 5335:53/tcp -p 5353:53/udp -p 69:67/udp -p 68:68/tcp -p 68:68/udp -p 808:80/tcp -p 443:443/tcp -p 853:853/tcp -p 3000:3000/tcp -d adguard/adguardhome:arm64-v0.99.0
查看容器是否成功启动:
docker ps
看STATUS状态已经成功运行
查看一下docker监听的5353端口:
安装设置
docker容器已经成功启动,下面需要访问Adguard home的WEB界面进行设置,在浏览器内输入:
https://192.168.1.254:3000
下面保持默认
输入Adguard的管理用户名和密码:
下面显示的是一些平台上的设置教程:
点击打开仪表盘默认会跳到80端口,在浏览器里访问你启动Docker时映射的端口,这里是808。
输入用户名密码登录
顺利进入后台,至于如何使用我就不啰嗦了相信你比我会用。
目前就一个问题,首次登录后台后会有一个错误提示:
Error: control/version.json | New app version check is disabled by user | 500
看名字是个什么控制台的版本文件,临时没有问题就不解决它了。
好了以上就是我折腾的笔记,如果你遇到问题欢迎留言,也欢迎点赞~
如果你有什么想折腾的也可以告诉我,我将亲手实验一番。
问题
打开Docker 日志,有以下问题:
2019/10/22 11:16:20 [info] Couldn't request filter from URL https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt, skipping: Get https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt: couldn't lookup host: adguardteam.github.io
2019/10/22 11:16:20 [info] Failed to update filter https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt: Get https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt: couldn't lookup host: adguardteam.github.io
2019/10/22 11:16:20 [error] os.Chtimes(): chtimes /opt/adguardhome/work/data/filters/1.txt: no such file or directory
Adguard Home在成功运行后会现在一些配置文件,下载网址是被墙了,所以你懂的。
解决办法
两种,一种是你手动下载提示中的文件,上传到我们新建的workdir/data/filter/1.txt
第二种比较简单,就是全局自然与科学,然后重启容器,再看日志会看到以下提示:
Saving filter 1 contents to: /opt/adguardhome/work/data/filters/1.txt
再回到后台刷新一下,是不是一些奇奇怪怪的问题都解决了?问题我会持续更近,如果你遇到问题欢迎留言。
后续问题
文章发布后有些朋友反映了不可以用的问题,系统默认使用了Dnsmasq来做DNS解析,并且占用了53端口,我们映射的时候使用了非标端口,如果你想直接使用ADHOME来做DNS查询可以停用掉Dnsmasq,然后修改docker的网络模式为host。
具体操作如下:
#停止adhome
docker stop 容器名称
# 删除容器
docker rm 容器名称
# 停止DNSMASQ服务
service dnsmasq stop
# 指定network为host,修改端口为53
docker run --network=host --name adhome -v $PWD/workdir:/opt/adguardhome/work -v $PWD/confdir:/opt/adguardhome/conf -p 53:53/tcp -p 5353:53/udp -p 60:67/udp -p 68:68/tcp -p 68:68/udp -p 808:80/tcp -p 443:443/tcp -p 853:853/tcp -p 3000:3000/tcp -d adguard/adguardhome
还有个问题是80端口的问题,默认uhttpd 服务占用了80端口,如果你想修改可以做如下操作:
#打开配置文件
vim /etc/config/uhttpd
把80端口修改成任意端口,比如808
config uhttpd 'main'
list listen_http '0.0.0.0:808'
list listen_http '[::]:808'
option redirect_https '0'
option home '/www'
option rfc1918_filter '1'
option max_requests '3'
option max_connections '100'
option cert '/etc/uhttpd.crt'
option key '/etc/uhttpd.key'
option cgi_prefix '/cgi-bin'
list lua_prefix '/cgi-bin/luci=/usr/lib/lua/luci/sgi/uhttpd.lua'
option script_timeout '60'
option network_timeout '30'
option http_keepalive '20'
option tcp_keepalive '1'
option ubus_prefix '/ubus'
list index_page 'cgi-bin/luci'
config cert 'defaults'
option days '730'
option bits '2048'
option country 'ZZ'
option state 'Somewhere'
option location 'Unknown'
option commonname 'OpenWrt'
保存退出后重启uhttpd服务:
/etc/init.d/uhttpd restart
最后修改docker映射的端口为正常的80即可。
very good, just want to try this. thanks for share.
@simon: You are welcome, enjoy it.
在lede docker 按照博主的内容改了端口,还是没法启动成功
@allan: 请博主指导一下,页面显示启动成功麻烦就自动退出
@allan: 你需要看一下有什么报错,不然docker logs -f 容器名称, 这样来看容器的日志。
@Luobo: 它是这样显示….找不到主机
error during connect: Post http://docker:2375/v1.40/containers/create?name=adguardhome: dial tcp: lookup docker on 223.5.5.5:53: no such host.
@Luobo: 不加任何代码能启动,但进不了管理界面。如果加官方提供的代码或者学博主改端口,都是显示启动成功就立刻退出。对docker我也不懂
@allan: 我还真没遇到过,这是docker的日志吗
@Luobo: 是的,也网上搜索了一下相关问题,大概意思lede路由上用官方代码不成,要自己写什么代码上去,神器在手却不懂用,囧
@allan: 我测试没遇到这个问题,不过我更新了后续问题,你可以看一下,在运行的时候指定docker的网络为host,就是本机网络,应该就可以了。
@Luobo: 感谢提供帮助,试了下还是不行,问题依旧
@allan: 你这是在运行adhome的时候出现的错误,还是安装好后出现的错误啊。
@Luobo: 加入代码后运行adhome出现错误,不加任何代码能运行起来
@allan: 加什么代码?
@Luobo: 就是官方或你上面提供的运行代码,端口映射这些,都试过了
@allan: 你肯定什么地方弄错了,根据自己的情况修改docker的启动参数。如果你在eSir的群里可以私聊我
@Luobo: 十分感谢教程和帮助,学习了一下docker指令终于搞掂可以使用了~嘻嘻
0
Blocked by Filters
过滤器也加了,一直显示广告拦截数为0,实际上也没有屏蔽广告,不知道什么原因?
@jxmlingyun: 可能没有通过软件的DNS进行查询
@Luobo: 我的adguardhome也是安装在路由器上,我电脑的dns也设置成路由器ip了,这样的话应该是要走adguardhome的dns查询吧。或者还有其他的地方需要设置?
@jxmlingyun: 这个不一定,docker运行的时候指定网络为hosts试试看,把openwrt的dnsmasq关闭,不过我感觉这软件也没啥用啊,用dnsmasq 完全可以达到同样的效果。
正需要解决,希望下载文件可以解决500问题。
感谢提供帮助
#打开配置文件
vim /etc/config/uthhpd 打錯了,是uhttpd
@在你左邊: 多谢提醒,已经修改过来了
试试