我的 adg 部署在家里的 NAS 上,只有公网 IPv6 ,通过 DDNS 日常使用没有问题。
在家里,手机电脑等设备,都与 adg 在同一局域网下,但由于设备都是优先使用 IPv6 ,访问内网服务时,比如访问 NAS 后台( nas.abc.cc ),还会去 adg 的上游 DNS 查询一下 v6 地址,而不是直接使用内网 IP ( 10.0.0.10 ),而每次查询都有 100ms 左右的耗时,即使在内网也能明显感觉使用 adg 做 DNS 时,访问网页会变慢。
用 adg 本意是为了屏蔽广告,尝试了各种方法,自定义过滤规则,重写 DNS 等,都只能顾一头,比如
||*.abc.cc^$client=myphone,dnstype=A,dnsrewrite=10.0.0.10
这样写规则,内网使用没问题,但在外网访问时,会同时查询到公网 v6 和内网 v4 地址,但由于 v4 几乎无延迟就查询到了,返回给下游的是内网 v4 ,在外网就访问不了。
帅气的 v 站老哥们,有没有解决方案啊,在内网使用时仅返回内网 v4 ,外网仅返回公网 v6 。 (在使用同一个私人 DNS 地址的情况下,不用每次回家或出门时修改私人 DNS 服务器)
![]() |
1
itiao 28 天前
试试看开启 禁用 IPV6 解析?
|
![]() |
2
Puteulanus 28 天前 ![]() |
3
pdone OP @itiao 禁用 v6 解析 在局域网以外就访问不了了
@Puteulanus 客户端是用安卓系统自带的私人 dns 设置,使用的是 doh ,如果每次出门都修改这个 doh 地址,可以实现分别解析 v6 和 v4 ,不过这样要经常修改 |
![]() |
4
Puteulanus 28 天前
@pdone 我是说 adguard home 的 客户端 设置,能不能比如把家里的 v6 段划成一个客户端,然后用 client 修饰符让规则只应用于家里过来的请求,这样就把内网和外网的 DNS 请求给分开了
![]() |
5
pdone OP @Puteulanus #4 这个思路可以,我尝试一下,感谢👍
|
![]() |
6
jesky 27 天前
看起来你在意的是“每次查询都有 100ms 左右的耗时”,那你就把你的域名 *.abc.cc 指定为公网 IPv6 就可以了,然后需要一个脚本定时更新这个记录,就如同 DDNS 服务定时把 IP 更新到 DNS 服务器,你这个就等于是定时更新到本地 DNS 服务里。
|
7
fuzzsh 27 天前 via Android
内网 v6Only ,做 dns64
|
8
pdone OP @Puteulanus 再次感谢老哥,按你的思路也已经解决目前的困扰了
@jesky 是的,这是接下来要优化的地方,既然 ddns 能更新记录,我也要更新 adg 的记录,就不用每次去上游查询了 @fuzzsh 我研究一下 |
9
fuzzsh 27 天前 via Android
手机 PC 网用 v6 Only 没问题,有嵌入式设备就要另外开 wifi, 大多数不支持 ipv6
|
10
mac100 27 天前
@Puteulanus 完全看不明白什么意思。。
|
![]() |
11
bjfane PRO 家里的东西 虽然 ipv6 ,是不是套一层 vpn 比较好,比如 wg , 不知道有没有成熟的 v4 on ipv6 的解决方案。
|
12
pdone OP @Puteulanus @jesky 结合两位老哥的思路,已经完全解决问题,总结一下方法给其他可能用到朋友提供一个参考。
![]() ![]() 以上可以实现客户端在内网时,返回内网 ipv4 ,在外网时,返回公网 ipv6 ,适用于只有公网 ipv6 的 adg 或 nas 。 ![]() ![]() 以上可以实现个人服务器已知域名的动态公网 ipv6 不再去上游 dns 查询,大幅降低查询耗时,我这里之前平均 100ms 以上,改为从规则匹配后降低到 1ms 内。 参考文档 https://github.com/AdguardTeam/AdGuardHome/tree/master/openapi https://adguard-dns.io/kb/zh-CN/general/dns-filtering-syntax/ |
13
pdone OP #12 另外黑名单中的规则,也可以放在 ddnsgo webhook 的请求体里,就不用添加黑名单,不过这部分都是固定内容,不必每次 ipv6 变化后都重新设置,所以选择分开设置这两部分规则。
|
![]() |
14
jesky 27 天前
@pdone #12 祝贺解题成功。不过,请教一下,你执意实现“内网请求,要返回内网 IPv4”,我觉得即便解析为公网 IPv6 地址,实际访问速度应该无差吧,本机和目标设备都是相同的 IPv6 前缀,同一子网,并不会从公网绕一圈。
|
15
pdone OP |
![]() |
16
goodryb 27 天前
有公网 IP , 在外面走 ddns ,回家直接用 DNS 重写相关域名到内网 IP
v6 以前开过,麻烦切没啥用,又给关了 |
![]() |
17
yangfan1999 26 天前
adguard 上游配置 mosdns 做分流,使用 mosdns 的 prefer_ipv4 参数应该能满足要求:同时存在 A 和 AAAA 记录时,仅返回 A 记录。
我本地就是这么配置的。NAS 使用群晖的 DDNS 进行 AAAA 解析,MOSDNS 配置本地 V4 解析。 局域网内我本地 PC 是正常的,只能拿到 NAS 的 V4 地址,但是内网的 Shield TV 还是会走 V6 去连,这个我还没搞定。局域网手机表现和电视盒子一致。 |
![]() |
18
yangfan1999 26 天前
@yangfan1999 想了下,考虑直接在 MOSDNS 上面同时配置 NAS 的 V4 和 V6 本地解析,V6 随便写一个,让 V6 不再向上游进行解析,这样 perfer_ipv4 应该能生效,下班回去试试。
|
19
trott 24 天前
你的 adg 还对外提供服务吗,这个还没本人找上门?
|