V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
• 请用平和的语言准确描述你所遇到的问题
• 厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
• 如果是关于 V2EX 本身的问题反馈,请使用 反馈 节点
dingdangnao
V2EX  ›  全球工单系统

dnspod 的 doh 没了么?

  •  
  •   dingdangnao · 355 天前 · 1267 次点击
    这是一个创建于 355 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不知道从什么时候开始的

    https://doh.pub/dns-query 502 了?

    11 条回复    2023-05-12 20:13:43 +08:00
    johnjiang85
        1
    johnjiang85  
       355 天前
    测试是正常的,不过在 10:30-12:50 这个时间段 1.12.12.12 和 120.53.53.53 这两个 IP 有部分地区部分运营商可能会失败。
    dingdangnao
        2
    dingdangnao  
    OP
       355 天前
    @johnjiang85 奇怪,我这用了联通和电信的蜂窝数据,还有电信的宽带,都是 502😂
    johnjiang85
        3
    johnjiang85  
       355 天前
    @dingdangnao 问下哪个地区的啊
    johnjiang85
        4
    johnjiang85  
       355 天前
    @dingdangnao 有复现,我找负责的人看下
    dingdangnao
        5
    dingdangnao  
    OP
       355 天前
    @johnjiang85 好的,感谢您
    johnjiang85
        6
    johnjiang85  
       355 天前
    @dingdangnao 看下是不是 dnsid 传了 0 ,目前这两个 IP 的 doh 不支持 dns id 为 0 的请求,会返回 502 。正常的 dig/kdig/浏览器等发起的 doh 请求都是正常应答的。

    可以通过或者抓包( POST )或者 GET 看下请求 url base64 编码的前 3 个字节是什么,比如如果是 AAA-AAD 表示 dns id 为 0 。

    如果不是 dns id 为 0 的情况,可以发下请求串的 base64 或抓包的 16 进制都可以。
    johnjiang85
        7
    johnjiang85  
       355 天前
    @dingdangnao 说错了,id 可以为 0 ,但是 answer 不能是 1 或其他值,必须是 0 ,否则会 502 。
    johnjiang85
        8
    johnjiang85  
       355 天前
    @dingdangnao 也可能是其他参数校验错误,如果参数都正常的话可以正常应答。
    johnjiang85
        9
    johnjiang85  
       355 天前
    任何请求参数校验失败服务器会丢弃请求,前面的 nginx 自己回了 502
    dingdangnao
        10
    dingdangnao  
    OP
       355 天前
    @johnjiang85 但是直接用浏览器访问,境外 IP 是会正常返回接口报错的,只有大陆 IP 返回了 502
    https://cloud.dingdangnao.com/ORfgJ8.png

    而且直接访问 doh.pub ,境外会重定向到 https://www.dnspod.cn/Products/publicdns ,大陆仍然是 502
    johnjiang85
        11
    johnjiang85  
       355 天前
    @dingdangnao [流汗]doh 不是这样直接使用的,如果只是想访问产品主页,建议直接从官网进入。

    如果要用 DoH 进行 DNS 查询,建议直接使用相关软件或浏览器 /操作系统中设置安全 DNS 。

    如果想通过命令行方式通过 DoH 进行 DNS 请求,则必须带查询参数,有两种 API ,google 的 json API 和 RFC 8484 两种方式,而 RFC 8484 又分为 GET 和 POST 两种不同的方式,请求参数都不一样,可以参考: https://developers.google.com/speed/public-dns/docs/doh?hl=zh-cn

    比如查询 dnspod.com 需要请求,如果是 json api 就是类似这样
    curl -v "https://doh.pub/resolve?name=www.dnspod.com&type=a" 或
    curl -v "https://doh.pub/dns-query?name=www.dnspod.com&type=a"

    RFC 8484 GET 方式,其中 dns 参数是 dns 请求二进制数据进行了 base64 编码:
    curl -v "https://doh.pub/dns-query?dns=AAABAAABAAAAAAAAA3d3dwZkbnNwb2QDY29tAAABAAE"

    如果是 RFC POST 方式则是将 dns 请求的二进制数据放到 post 数据里
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2149 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:01 · PVG 10:01 · LAX 19:01 · JFK 22:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.