丶企鹅未婚夫 发表于 2023-8-22 17:54

单个adguardhome实现傻瓜式的DNS分流/防污染/防DNS泄漏/教程

本帖最后由 丶企鹅未婚夫 于 2023-8-22 22:29 编辑

pve7用了2年,挺稳定的,最近看PVE升级到8.0了,把我的小玩具也升级了一下,升级后运行的也挺好,没啥问题,但是心里有点不爽啊,其实就是想折腾一下,玩具嘛。所以全部重装了一下,这里把dns的设置给大家分享一下,也当作是自己的一个记录吧。这里使用的是alpine的LXC容器作为底层。alpine非常小,很节省资源,用起来也比较简单。大部分docker也是用alpine实现的。我对其算是情有独钟。为什么和论坛其他人各种套娃方式不一样呢?因为单个adguardhome本身是可以实现dns分流效果的,因为功能隐藏的有些深,没人发现罢了。我们能用一个软件实现的功能为什么要用多层套娃呢。原理:这里利用adg的上游服务器配置文件,实现国内白名单列表由阿里的doh来解析,其他的都用另外填入的国外doh服务器来解析,实现国内外分流。国内用阿里实现速度快,国外用其他实现防污染。也可以国外白名单,国外列表指定某个doh解析,国内用其他的上游解析。也可以实现国内指定一个doh解析,需要代理的指定一个doh解析,剩下的用其他doh来解析。总之算是比较灵活。这里再添加一点说明,adg支持https://dns.alidns.com/dns-query 这种形式为某个的域名指定dns服务器解析。上面的语句就是265.com这个域名极其子域名都由阿里的doh来解析。其实可以把这种都填在上游服务器列表里面,但是几万条的话你复制进去会卡死的,所以用配置文件的方法来实现。这里实现的方法就是用脚本自动下载Loyalsoldier/“师夷长技以制夷”-rules-dat这个项目下面的直连域名列表,可直连的苹果域名列表,可直连的谷歌域名列表,然后把下载的所有列表都转换成adg可以识别的格式,并且拼接在一个文件中,提供adg来使用。所以你要是不嫌麻烦的话,也可以修改我提供的sh文件,把需要代理的域名列表也下载下来,然后指定他们用谷歌和opendns的doh来解析。然后关闭adg设置里面的EDNS客户端子网,让/科/学/路由代理谷歌和opendns的doh域名,这样就实现了需要代理的网站直接用你的“师夷长技以制夷”来解析,国内的继续用阿里doh来解析。我在sh里面也提供了相关的语句,取消注释添,在最上面加下载网址网址即可。其他的漏网之鱼就用df.up里面的上游来解析。感谢Loyalsoldier大神提供的域名列表!这里说一下我的网络架构。①一个极简的openwrt虚拟机,作为主路由使用,功能是拨号,提供DHCP服务,发射WIFI信号。②一个极简的openwrt旁路由,用LXC的方式安装,只用来番/羽/土/蔷。③一个dns服务器,就现在教程里面的这个。建议:①建议大家不要执着于ipv6,如果你番/羽/土/蔷的话,那么最好关掉ipv6。使用ddns的话只打开主路由的ipv6就行,可以用socat端口转发实现联通内网其他没有ipv6的设备,如果要链接ipv6下载的话,建议需要的机器设置静态内网ipv6地址使用。②和我一样玩all in one的人,建议尽可能的把各种功能分开到不同的虚拟机或者LXC容器里面部署。这样你折腾的时候其它服务不容易崩。PVE本身还是非常稳定的,只要你保持PVE母机的环境不被污染,不要乱安装其他服务,一般没啥事。好了,教程开始了。都是傻瓜式的,大家直接照着做就行,几分钟搞定。1.下载alpine的ct模板。
2.创建alpine的ct


这里主意一下,防火墙关闭,没啥用,一个主路由防火墙就够了,ipv4那里自己填吧。网关那里要填写能番/羽/土/蔷的路由器ip,因为下载adguardhome是从github上面拉取的。我这里硬盘给了256M。内存给了512M。然后打开容器的自动开机自启动。到这里lxc的alpine安装完成。3.打开刚刚创建好的容器。进行初始化设置。输入以下命令。sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories更换国内源apk add --no-cache tzdata
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone设置国内时区,因为后面要用到定时器实现自动更新文件,所以这一步是必要的。apk add --no-cache curl安装curl工具。安装adguardhome要使用,后面有个自动运行脚本也要使用。apk add --no-cache bash安装bash工具,执行脚本的时候要使用到。
4.现在开始安装adguardhome了,我这里选择的是beta版本安装。curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -c beta你也可以安装最新的稳定版curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
出现这样的页面安装成功。现在网页打开192.168.1.249:3000进入到adg的初始化页面。
需要注意的就是这里,因为我们是单独的dns服务器,所以不用改这里,默认就行。注意的是,下次打开的时候直接输入192.168.1.249即可,不用后面添加3000的端口号。reboot然后重启,浏览器输入192.168.1.249 看看服务是否能够正常启动。没问题的话,就继续往下。5.重启之后登陆,现在因该在默认的/root目录下依次执行以下三条命令mkdir list在/root下创建list文件夹进入list文件夹在list文件夹下面创建list.up文件这个list.up文件填不填内容都无所谓。英文输入法状态下按esc键然后保存退出即可:wq主意,wq前面有个冒号。创建默认上游服务器文件df.upvi df.up英文状态下按 “ i ” 键进入插入模式。粘贴以下内容# https://doh.360.cn/dns-query
# https://dns.google/dns-query
https://doh.opendns.com/dns-query
https://doh.dns.sb/dns-query
https://dns.cloudflare.com/dns-query
https://dns.quad9.net/dns-query
# https://dns-unfiltered.adguard.com/dns-query
# https://77.88.8.8:443/dns-query这里是默认的上游服务器。推荐大家都使用这种doh的服务器,加密防泄漏。除了提供dns服务的公司知道你访问什么网站,运营商都不知道。然后保存退出:wq那现在主意一下我们的/root/list/目录下存在以下两个文件list.updf.up可以用命令ls来查看当前文件夹下的文件。可以用命令pwd来查看当前所在目录。好了 现在我们写脚本。创建list.sh文件。vi list.sh按i键进入插入模式。粘贴我在后面提供的脚本文件进去。:wq保存并退出。chmod +x list.sh给脚本可执行权限。./list.sh初次执行脚本。鉴于有人执行出现问题,这里贴一个我个人执行的结果(单独给脚本设置了重试次数2和最大限制时间10秒)你们要设置的话改一下这一句即可。if curl --connect-timeout 3 -m 10 --retry 2 --output "/root/list/$filename" "$url" ; then
alpine-adg:~/list# ./list.sh
Start downloading from github...
% Total    % Received % XferdAverage Speed   Time    Time   TimeCurrent
                                 DloadUpload   Total   Spent    LeftSpeed
0   0    0   0    0   0      0      0 --:--:--0:00:03 --:--:--   0
curl: (28) Failed to connect to raw.githubusercontent.com port 443 after 3000 ms: Timeout was reached
Warning: Problem : timeout. Will retry in 1 seconds. 2 retries left.
0   0    0   0    0   0      0      0 --:--:--0:00:03 --:--:--   0
curl: (28) Failed to connect to raw.githubusercontent.com port 443 after 3000 ms: Timeout was reached
Warning: Problem : timeout. Will retry in 2 seconds. 1 retries left.
0   0    0   0    0   0      0      0 --:--:--0:00:02 --:--:--   0
curl: (28) Connection timeout after 3000 ms
direct-list.txt download failed!!!,Removing direct-list.txt ......
% Total    % Received % XferdAverage Speed   Time    Time   TimeCurrent
                                 DloadUpload   Total   Spent    LeftSpeed
0   0    0   0    0   0      0      0 --:--:--0:00:03 --:--:--   0
curl: (28) Failed to connect to raw.githubusercontent.com port 443 after 3000 ms: Timeout was reached
Warning: Problem : timeout. Will retry in 1 seconds. 2 retries left.
0   0    0   0    0   0      0      0 --:--:--0:00:03 --:--:--   0
curl: (28) Failed to connect to raw.githubusercontent.com port 443 after 3000 ms: Timeout was reached
Warning: Problem : timeout. Will retry in 2 seconds. 1 retries left.
0   0    0   0    0   0      0      0 --:--:--0:00:03 --:--:--   0
curl: (28) Failed to connect to raw.githubusercontent.com port 443 after 3000 ms: Timeout was reached
apple-cn.txt download failed!!!,Removing apple-cn.txt ......
% Total    % Received % XferdAverage Speed   Time    Time   TimeCurrent
                                 DloadUpload   Total   Spent    LeftSpeed
0   0    0   0    0   0      0      0 --:--:--0:00:03 --:--:--   0
curl: (28) Failed to connect to raw.githubusercontent.com port 443 after 3000 ms: Timeout was reached
Warning: Problem : timeout. Will retry in 1 seconds. 2 retries left.
0   0    0   0    0   0      0      0 --:--:--0:00:03 --:--:--   0
curl: (28) Failed to connect to raw.githubusercontent.com port 443 after 3000 ms: Timeout was reached
Warning: Problem : timeout. Will retry in 2 seconds. 1 retries left.
0   0    0   0    0   0      0      0 --:--:--0:00:02 --:--:--   0
curl: (28) Connection timeout after 3000 ms
google-cn.txt download failed!!!,Removing google-cn.txt ......
1.Check that all files are downloaded...
Find some files not downloaded successfully, remove all downloaded files, and try to download from the CDN agent site. .
Removal successful
Start downloading files from the CDN proxy site...
% Total    % Received % XferdAverage Speed   Time    Time   TimeCurrent
                                 DloadUpload   Total   Spent    LeftSpeed
100797k    0797k    0   0   123k      0 --:--:--0:00:06 --:--:--143k
direct-list.txt downloaded successfully!!!
% Total    % Received % XferdAverage Speed   Time    Time   TimeCurrent
                                 DloadUpload   Total   Spent    LeftSpeed
1004167    04167    0   0   1537      0 --:--:--0:00:02 --:--:--1537
apple-cn.txt downloaded successfully!!!
% Total    % Received % XferdAverage Speed   Time    Time   TimeCurrent
                                 DloadUpload   Total   Spent    LeftSpeed
1004265    04265    0   0   2499      0 --:--:--0:00:01 --:--:--2501
google-cn.txt downloaded successfully!!!
2.Check that all files are downloaded...
3.Check that the files are stored in a local directory...
direct-list.txt exists!!!
apple-cn.txt exists!!!
google-cn.txt exists!!!
cp list.up to list.up.bak...
The backup is complete
......txt to adg......
!!!!!......OK......!!!!!
Cleaning......
Restart the ADG service......
* Stopping AdGuardHome ... [ ok ]
* Starting AdGuardHome ... [ ok ]
......ojbk enjoy......
alpine-adg:~/list# 说明一下,我现在dns服务器是用的主路由网关,没有用/科/学/网关,所以执行输出上面显示github下载文件失败。从cdn代理网站上下载成功。
重点主意:以下是实现分流的核心内容

6.填写adguardhome的配置文件vi /opt/AdGuardHome/AdGuardHome.yaml这里主意,你必须在前面网页上设置完adg,才会出现配置文件,否则没有这个配置文件的。可以用TAB按键实现自动输入。
      进去之后往下拉,找到这两行内容。

upstream_dns:                                    

    - https://dns10.quad9.net/dns-query               

upstream_dns_file: “”修改为以下即可。
upstream_dns:                                    

    - https://dns10.quad9.net/dns-query               

upstream_dns_file: “/root/list/list.up”reboot
重启LXC容器。
然后浏览器输入192.168.1.249
在DNS设置里面查看是否生效。

如果生效的话,在上游DNS那里应该显示和我是一样的。
7.设置定时器,实现每天自动更新
输入以下代码,打开定时器。
crontab -e在最下面添加这样一行
以上表示每天早上6点自动执行脚本,并把日志重定向。

8.设置adguardhome
我这里挑几个重点的说一下。

这里选择并行请求

这里bootstrap用来解析你的上游服务器,这里建议填写两三个就够了,以速度最快为标准,
我填了一个运营商的,一个阿里的,一般就是运营商来解析,运营商的挂了会用阿里的来解析。
私人反向dns那里填写你DHCP服务器的ip地址,我是用主路由DHCP的,所以这里填主路由的ip地址

速度不限制。
下面四个✓都要。
为edns使用自定义ip那里可以不✓,打勾的话需要填一个ip地址,这个是dns服务商给你定位用的,他会解析离你最近的服务器给你。你填北京的ip他就给你解析离北京最近的服务器给你,你填美国的,他就给你解析离美国最近的。如果不填因该是用你流量走向中第一个遇到的公网ip。

缓存这里我直接在默认基础上加了个0.默认4M,现在是40M 。
后面两个可以默认也可以照我的填。乐观缓存打开。
其他的就没什么了,规则什么的你们自己去github上面找吧。
到此为止,adguardhome就设置结束了。
9.番/羽/土/蔷插件的设置。
很简单
这里我用的是pass/wall。就用它来为例,其他的都差不多。

照抄即可。其他没有UDP的可以用tcp不管国内国外都填这个就行,因为我们已经在adguardhome上面实现国内外分流,所以插件的国内外dns都填这个。

10.主路由分发dns

DHCP选项那里照着填,DHCP服务器会自动分发下去。





iamyangyi 发表于 2023-8-22 18:08

我现在ADG 改MOSDNS了 速度比ADG快 但是感觉稳定性不那好

iamyangyi 发表于 2023-8-22 18:31

ADG有点卡顿

amwpei 发表于 2023-8-22 19:18

思考一下,谢谢分享!!!

丶企鹅未婚夫 发表于 2023-8-22 19:23

iamyangyi 发表于 2023-8-22 18:08
我现在ADG 改MOSDNS了 速度比ADG快 但是感觉稳定性不那好

那去广告和也用mosdns吗?其他的软件去广告误杀的时候不好排查啊。adg就很容易找到误杀放行。像我这样用lxc搭建的话,应该是比较省资源的。感觉不会比mosdns慢。

丶企鹅未婚夫 发表于 2023-8-22 19:25

iamyangyi 发表于 2023-8-22 18:31
ADG有点卡顿

LXC不会卡,基本等于裸机安装。J4105,给了2核 长期在0.几波动。RAM占用100M+ROM算上缓存也才100M出头,很省资源,不至于卡吧。

kelebenben 发表于 2023-8-22 20:40

思考一下思考一下

yexusky 发表于 2023-8-22 20:42

谢谢你的分享啊

zsz520 发表于 2023-8-22 20:47

好东西啊

大米饭 发表于 2023-8-22 21:01

谢谢分享

iamyangyi 发表于 2023-8-22 21:24

本帖最后由 iamyangyi 于 2023-8-22 21:26 编辑

丶企鹅未婚夫 发表于 2023-8-22 19:25
LXC不会卡,基本等于裸机安装。J4105,给了2核 长期在0.几波动。RAM占用100M+ROM算上缓存也才100M出头 ...
我说的 是ADG 机制卡。你不用 ADG 对比DNSMASQ的CACHE。ADG开有个停顿感

yexusky 发表于 2023-8-22 21:47

按照你的教程一步步来并不能成功,就是感觉sh有问题。现在adg-home 不能解析域名

丶企鹅未婚夫 发表于 2023-8-22 21:49

yexusky 发表于 2023-8-22 21:47
按照你的教程一步步来并不能成功,就是感觉sh有问题。现在adg-home 不能解析域名 ...

可以截图看看sh里面的内容吗?我是直接复制出来到TXT文件的。

丶企鹅未婚夫 发表于 2023-8-22 21:49

yexusky 发表于 2023-8-22 21:47
按照你的教程一步步来并不能成功,就是感觉sh有问题。现在adg-home 不能解析域名 ...

或者把sh执行的输出贴一下看看也行

yexusky 发表于 2023-8-22 22:00

直接执行出来是这个你看下,还有我的adm不能解析啊
alpine-adg-home:~# /root/list/list.sh
date: unrecognized option: rfc-3339
BusyBox v1.36.1 (2023-06-02 00:42:02 UTC) multi-call binary.

Usage: date [+FMT] [[-s] TIME]

Display time (using +FMT), or set time

      -u            Work in UTC (don't convert to local time)
      [-s] TIME       Set time to TIME
      -d TIME         Display TIME, not 'now'
      -D FMT          FMT (strptime format) for -s/-d TIME conversion
      -r FILE         Display last modification time of FILE
      -R            Output RFC-2822 date
      -I      Output ISO-8601 date
                        SPEC=date (default), hours, minutes, seconds or ns

Recognized TIME formats:
      @seconds_since_1970
      hh:mm[:ss]
      MM.DD-hh:mm[:ss]
      YYYY-MM-DD hh:mm[:ss]
      [[[[YY]MM]DD]hh]mm[.ss]
      'date TIME' form accepts MMDDhhmm[YY][.ss] instead
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 单个adguardhome实现傻瓜式的DNS分流/防污染/防DNS泄漏/教程