V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
PepperEgg
V2EX  ›  程序员

今日学到一个东西,基于 https 的 dns 解析

  •  
  •   PepperEgg · 2021-12-02 11:30:23 +08:00 · 5761 次点击
    这是一个创建于 1112 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天抓手机包,怎么都抓不到手机的一些 dns 包,排除了缓存问题,访问的都是新网址。。。 后来筛选发现有一些对 dns 服务器的 tcp 包,还是加密的 然后请教了大佬,说有基于 https 的 dns 解析。 学到老,学到老。。。。

    33 条回复    2021-12-03 13:16:18 +08:00
    foolnius
        1
    foolnius  
       2021-12-02 11:36:40 +08:00
    DoH DoT
    xiadong1994
        2
    xiadong1994  
       2021-12-02 11:39:02 +08:00 via iPhone
    DoH ,DoT 。

    cloudflare 之前还搞过 dns over sms……
    xiadong1994
        3
    xiadong1994  
       2021-12-02 11:39:26 +08:00 via iPhone
    chairuosen
        4
    chairuosen  
       2021-12-02 11:40:24 +08:00
    应该是 http 的写死 IP 的私有加密协议。https 是需要证书的,证书是针对域名的,域名就得解析,那用啥解析这个 HTTPS 的域名呢
    kokutou
        5
    kokutou  
       2021-12-02 11:40:56 +08:00
    dns over https
    dns over tls
    kokutou
        6
    kokutou  
       2021-12-02 11:41:30 +08:00
    还有直接访问 ip 的骚操作
    360 就有
    bipy
        7
    bipy  
       2021-12-02 11:50:47 +08:00   ❤️ 2
    @chairuosen #4 那当然是 IP 证书—— https://1.1.1.1
    krixaar
        8
    krixaar  
       2021-12-02 11:54:35 +08:00
    @chairuosen #4 用你当前设置好的 DNS 服务器啊,就跟用 IE 为了下载别的浏览器一样,用当前 DNS 去解析这个网址,返回错误 IP 你连不上,你就知道出问题了;只要能连上那就一定是正确结果,之后就只走 HTTPS 了呗。
    chairuosen
        9
    chairuosen  
       2021-12-02 11:56:10 +08:00
    @bipy #7 咦,还真有
    v2000000001ex
        10
    v2000000001ex  
       2021-12-02 11:56:42 +08:00
    我已经用上了 dot ,
    coredns
    forward tls://8.8.8.8
    chairuosen
        11
    chairuosen  
       2021-12-02 11:57:48 +08:00
    @krixaar #8 这样做就违背了 HTTPDNS 的初衷了,还是会被污染
    yin1999
        12
    yin1999  
       2021-12-02 12:02:51 +08:00 via Android
    @chairuosen 咋污染,后续请求走的是加密流量
    ysc3839
        13
    ysc3839  
       2021-12-02 12:03:23 +08:00
    @chairuosen #4 可以写死 IP 地址,不进行域名解析。证书里包含域名又不代表一定要进行 DNS 解析。
    krixaar
        14
    krixaar  
       2021-12-02 12:07:15 +08:00
    @chairuosen #11 但这样做绕开了单一 IP 阻断,以及给了你便捷的确认是否被污染的手段。只要默认的 DNS 解析出了 cloudflare-dns.com 的其它地址,万一 1.1.1.1 被某个傻缺 wifi 登录页面劫持了呢。
    2i2Re2PLMaDnghL
        15
    2i2Re2PLMaDnghL  
       2021-12-02 12:20:19 +08:00
    @chairuosen 这个就是 bootstrap 问题
    一个是用 IP 证书
    一个是预置的 hosts ,Firefox 有一个 network.trr.bootstrapAddress 设置
    最后就是用常规 DNS 解析 DoH 服务器域名

    你这里有个误解,常规 DNS 污染是可以被发现的(证书与地址不符),而 DoH 仍然是不会被污染的(通过 TLS 加密)
    这里是个两层结构

    (顺便,1.1.1.1 被深信服占了)
    Yadomin
        16
    Yadomin  
       2021-12-02 12:45:54 +08:00
    @2i2Re2PLMaDnghL 可以 https://1.0.0.1
    v2tudnew
        17
    v2tudnew  
       2021-12-02 13:11:59 +08:00
    @krixaar DOH\DOT 不影响 WIFI 登录页面,反正 IOS 没受到影响。别说公共 WIFI 了,傻缺运维把 1.1.1.1 设置成某网关地址了,能咋办?凉拌。又不是只有一个公共 DNS ,真要有傻缺阻断所有加密流量,这不是司马昭之心么,还不快跑?
    ink19
        18
    ink19  
       2021-12-02 13:14:31 +08:00
    @xiadong1994 dns over sms ,那不得上一个小时网,话费扣 50
    fkdog
        19
    fkdog  
       2021-12-02 13:21:31 +08:00
    概念意义上来说,dns 是通过域名换取主机 ip 地址。实现上包括 DNS 报文协议和传输协议,但是概念上并没有规定 dns 的传输实现一定要基于 udp 。

    只不过最开始搞 dns 服务实现的人采用了 udp ,然后这个东西推广开了默认成为了事实标准,只不过他没有想到如今的网络安全问题会这么严重。
    2i2Re2PLMaDnghL
        20
    2i2Re2PLMaDnghL  
       2021-12-02 13:49:41 +08:00
    @fkdog 你这边可能混淆了 Name 到 IP 转换和现有的 DNS 协议体系 rfc 1034/1035

    而且 rfc1035 可以用 tcp ,你也可以用 dig +tcp 实际使用。之前甚至可以用来避免污染(因为有三次握手,纯抢答没用),现在会被选择性 RST
    chairuosen
        21
    chairuosen  
       2021-12-02 15:41:43 +08:00
    @2i2Re2PLMaDnghL #15 我想说的意思用『污染』表达不合适,我应该说是『被攻击』或者是『受运营商 DNS 波动影响』,之前在业务里用 HTTPDNS 是有可能小运营商的 DNS 服务不可靠,导致 web 服务解析失败中断,如果用了 DoH ,最开始还是要走普通 DNS ,那它断了,我的服务还是得断。我的意思是这个。
    tulongtou
        22
    tulongtou  
       2021-12-02 15:44:17 +08:00
    @chairuosen 证书可以给 IP 的,只是一般人申请不到
    tsanie
        23
    tsanie  
       2021-12-02 17:29:27 +08:00
    还有个 https://223.5.5.5
    2i2Re2PLMaDnghL
        24
    2i2Re2PLMaDnghL  
       2021-12-02 18:18:30 +08:00
    @chairuosen 那你这个也不是 DoH 设计上想要解决的问题,你说的这个问题范畴和 DNS over HTTPS 根本不同。
    DoH 的目的是加密,而且几乎只是加密。
    而且仅仅是可用性不足的话,可以手动指定 DNS 递归解析器的地址,连 http 也不需要。
    v2tudnew
        25
    v2tudnew  
       2021-12-02 18:31:56 +08:00
    DOT\DOH 只是加密,要说可用性那就别硬编码 DNS 地址,用系统设置的,有问题用户自然会去查看 DNS 。
    Showfom
        26
    Showfom  
       2021-12-02 18:37:15 +08:00
    @tulongtou #22 IPv4 的 DV 证书老早就开放给所有人申请了
    chairuosen
        27
    chairuosen  
       2021-12-02 19:49:53 +08:00
    @2i2Re2PLMaDnghL #24 可能标准制定时没考虑到可用性问题,但是实际应用中是有这个目的的,可以看 https://cloud.tencent.com/product/httpdns "解决移动互联网服务中域名解析异常带来的困扰。" 我理解 app 层面无法改变操作系统的 DNS 地址来发请求,只能通过 HTTPDNS 请求回 IP 后直接向该 IP 发请求来代替 DNS 过程。
    2i2Re2PLMaDnghL
        28
    2i2Re2PLMaDnghL  
       2021-12-03 09:22:52 +08:00
    @chairuosen 哪有这么复杂,不需要改变操作系统 DNS ,你直接构造符合 rfc 1035 的数据包然后用 UDP 发给公共的或你自建的服务器就行了。
    但无论如何,你 1. 离题; 2. 在无知的情况下否认了 DoH 的存在。
    你看下你链接里的文档,『基于容灾考虑,建议保留使用运营商 LocalDNS 解析域名的方式作为备选。』
    顺便,你这个 HTTPDNS 我花几分钟写个 mitmproxy 插件就能随意污染。
    unco020511
        29
    unco020511  
       2021-12-03 09:48:37 +08:00
    就是 httpDNS 吧,腾讯和阿里都有类似的服务
    wanguorui123
        30
    wanguorui123  
       2021-12-03 10:02:47 +08:00
    DOH/DOT/DOQ
    calvincc
        31
    calvincc  
       2021-12-03 11:10:27 +08:00 via iPhone
    好奇是啥手机,一般手机都不会默认用 DoH 吧?
    chairuosen
        32
    chairuosen  
       2021-12-03 11:43:55 +08:00
    @2i2Re2PLMaDnghL #28 好,你说的都是对的
    jmk92
        33
    jmk92  
       2021-12-03 13:16:18 +08:00
    我这边的程序是默认 DoT 备选 DoH ,都失败后回退 HTTPDNS ,备选 udp53 ,最大程度避免解析生效慢、不及时、运营商不遵守 TTL 缓存,以及部分运营商劫持 53 端口的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2996 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 82ms · UTC 14:16 · PVG 22:16 · LAX 06:16 · JFK 09:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.