按照官方文档中的说明,我生成了一个链接,但是当我把这个链接放到 AdGuard Home 里测试上游的时候无论如何都提示不能使用。
最初我以为是我生成链接的方法哪里设置错了,又或者官网里还有什么设置需要修改,折腾好一会儿没有结果,于是联系客服,客服表示需要专员来解释这个问题,就帮我提了个工单。
等待过程中又试了几次,然后发现测试的时候报错信息和别的上游报错信息不一样,填写生成的链接提示的是第几行无法使用,别的会提示服务器 xxx 无法使用。
于是我怀疑是不是生成的链接主机名部分太长了,有 63 位,删减一部分发现提示变了,再逐个增加长度,发现都加到一样长了提示还是和原来不一样,然后就注意到了生成链接绕不开的 AccessKeyID 有个下划线(_)。
然后我去问了下 chatgpt 域名里有下划线有没有什么影响,得到以下回答:
DNS 标准的限制
根据 RFC 1035 ,DNS 中的主机名(即标签)必须遵循以下规则:
只能包含字母( A-Z ,a-z )、数字( 0-9 )和连字符(-)。
连字符不能在标签的开头或结尾出现。
标签的长度必须在 1 到 63 个字符之间。
由于下划线 _ 不符合这些标准,所以它不能用于域名的主机名中。
又搜索了一下,IBM 网站里写了下面这段。
因特网标准要求域名符合因特网官方协议标准 RFC 952 和 RFC 1123 中描述的主机名要求。 域名必须仅包含字母(大写或小写)和数字。 域名中还可以包含短划线字符(-),但是它不得位于域名末尾。 不支持在主机名中使用下划线字符(_)。
这下貌似无解了,AdGuardHome 应该不会为了这个去改程序代码,阿里云这个 AccessKeyID 的下划线应该也不会改,这下没得玩了,除非阿里云修改生成鉴权链接的方式。
1
totoro625 98 天前
配置文件是否有误?
控制台提示:AccessKey 是使用 SDK 和 JsonAPI 接入方式鉴权的密钥****( DoH/DoT 接入流量不支持鉴权)。 |
3
peasant OP @totoro625 产品文档无误,通过浏览器直接访问生成的链接是可以查询域名的,改动主机名部分就查询不到,说明生成的结果是正确的,只是 AdGuardHome 不支持上游 DNS 主机名里带有下划线。
|
4
Puteulanus 98 天前
试了一下,AdguardTeam/dnsproxy 也不支持域名里有下划线的,那估计是无解了
硬要用可能只能自己中间搭个反代啥的 它这个时间戳有效期一天也挺麻烦 |
5
peasant OP @Puteulanus 阿里那边刚才说说 RFC2181 明确说明域名可以有下划线, 他们跟 AdGuardHome 提了 PR ,如果未来一周 AdGuardHome 没有修复这个问题,他们会修改 URL 。
|
6
peasant OP @Puteulanus 我刚看了下 AdGuardHome 的 api ,有获取 DNS 设置和修改 DNS 设置接口,一天有效期这个问题可以在装 AdGuardHome 的机器上弄个定时任务,每天夜里重新生成一个链接然后用 api 替换一下就行了。
|
7
Puteulanus 98 天前
@peasant 生成 label 试了一下,这个鉴权 DoH 居然可以在网页上的 DoH 开关关闭的情况下工作,感觉这应该是防盗刷的最佳实践了
刚开始怎么生成 label 都不解析,人都麻了,最后发现是 AccessKeyID 添加了但没启用,人更麻了。。 |
8
peasant OP @Puteulanus AdguardTeam/dnsproxy 更新了 0.73.0 支持主机名有下划线了 AdguardHome 的源代码 9 月 10 号更新了引用 dnsproxy 0.73.0 版本 但是还没有发布新版本,自己编译的已经可以正常使用了。
|