配置浏览器使用 DNS over HTTPS (DoH) 进行安全 DNS

什么是 DNS over HTTPS

域名安全协议有如DNSSEC,DNSCrypt,DNS over TLS,DNS over HTTPS,而 DNS over HTTPS 最被看好

DNS over HTTPS 简称为 DoH 是基于 HTTPS 隧道之上的域名协议。HTTPS 流量特征目前无法识别,那么 DoH 也就无法识别,白脸不知道你是在浏览 https 网站还是在进行 DNS 查询,所以很安全

DoH 协议栈示意

--------
  DoH
--------
  HTTP
--------
  TLS
--------
  TCP
--------
  IP
--------

DNS over HTTPS 缺点

相比DNS over TLS (DoT),DoH 多了一层封装,所以性能会比 DoT 略差,如果使用国内的DoH服务,这个性能损失是可以忽略的

为什么推荐使用 DNS over HTTPS

  • 基于 HTTPS 之上,十分安全。白脸不知道你在进行域名查询

  • 基于 HTTPS 之上,可以无缝支持 Proxy

  • 可以充分利用 HTTP 2.0 的特性

  • 浏览器积极支持

    Firefox 从 63.0 beta 开始正式支持 DoH

本教程使用 DoH 的环境

  • 路由器配置好了 shadowsocks 翻墙服务

    • shadowsocks-libev 客户端 ss-redir 提供流量翻墙
    • dnsmasq 分配 dns 查询
    • shadowsocks-libev 客户端 ss-tunnel 转发 DNS 查询到 shadowsocks 服务端
  • 电脑或其他设备的网络连接属性中,网关和DNS设为路由器地址

    此时所有连上路由器的设备都可以自动翻墙

浏览器设置为使用国内DoH服务端进行DNS解析,也就是浏览器直接进行DNS查询,不通过路由器 dnsmasq 和 ss-tunnel 进行转发了

这样做的好处是减轻了路由器的负担,并且DNS查询的速度可能比转发到 shadowsocks 服务端更快

如果只有浏览器需要用到翻墙服务,那么所有浏览器都配置 DoH,就可以把路由器里的 dnsmasq 和 ss-tunnel 停掉,同时网络连接属性中的 DNS 没有必要设为路由器地址了

浏览器使用DNS over HTTPS (DoH)的准备工作

我们要使用国内的 DoH 服务端,需要先把 DoH服务端的域名和 IP 地址加入到路由器的相应配置中

  • DoH 服务端域名加入到路由器 dnsmasq 国内网站名单中
  • DoH 服务端IP地址加入到路由器防火墙的忽略列表中

如果你按照 OpenWrt 路由器 shadowsocks自动翻墙、科学上网教程

https://github.com/softwaredownload/openwrt-fanqiang

配置了路由器自动翻墙,那么就很简单了,步骤如下:

  • 把项目 clone 到本地,假定是 C 盘根目录

    git clone https://github.com/softwaredownload/openwrt-fanqiang.git
    
  • 把相关文件复制到路由器,假设你使用的是 Git Bash for Windows

    cd /C/openwrt-fanqiang
    scp openwrt/default/etc/dnsmasq.d/custom.china.conf root@192.168.1.1:/etc/dnsmasq.d/
    

    custom.china.conf 是自定义的在国内进行 dns 的域名,已经把我们要用到的 DoH 服务端域名加入其中了

    scp openwrt/default/etc/shadowsocks-libev/ip_custom.txt root@192.168.1.1:/etc/shadowsocks-libev/
    

    ip_custom.txt 是自定义的防火墙规则中需要忽略的IP,已经包含了 DoH 服务端的 IP 地址

    我们把数据从防火墙设置脚本中分离了出来,改动数据不需要去动脚本文件,十分方便

    需要注意的是,ip_custom.txt 等数据文件不能使用 Windows 记事本编辑,可以使用第三方编辑器如 Sublime Text,并把换行方式设置为 Linux 格式

  • 登录路由器,执行命令使用新数据生效

    ssh root@192.168.1.1
    kige@openwrt:~# /etc/init.d/dnsmasq restart
    kige@openwrt:~# /etc/init.d/shadowsocks restart
    

FireFox 配置使用 DNS over HTTPS (DoH)

  • 下载 FireFox

    Firefox 自从 63.0 版本开始,提供了十分简单的的 DoH 配置界面

    如果你使用的是 63.0 以前的版本,先卸载它

    FireFox配置DoH方法参考这个教程

  • DNS Over HTTPS 国内服务商

    • https://doh.rixcloud.dev/dns-query 不支持EDNS-Client-Subnet 2020-10-02 测试可用
    • https://www.nextrt.com/s/dns 2020-10-02 测试不可用
    • https://rubyfish.cn/ 2020-10-02 测试不可用
    • https://i.233py.com/dns-query 2020-10-02 测试不可用
    • https://dns.233py.com/dns-query 2020-10-02 测试不可用
  • DNS Over HTTPS 国外服务商

    • https://dns.containerpi.com/dns-query
    • https://doh.dns.sb/dns-query
    • https://public.dns.iij.jp/dns-query
    • https://doh-jp.blahdns.com/dns-query
  • 测试浏览器 DoH 是否起作用

    打开 https://1.1.1.1/help

    如果 Using DNS over HTTPS (DoH) 一栏是 Yes,说明浏览器 DoH 开启了

    另外的方法,打开一些外网,如 https://youtube.com https://flickr.com

    FireFox地址栏输入 about:networking#dns 查看有哪些域名是通过 DoH 服务解析的

    TRR = Trusted Recursive Resolver,结果中 TRR 列为 true 表示域名是通过 DoH 解析的

    也可以路由器关闭 dnsmasq再测试:

    kige@openwrt:~# /etc/init.d/dnsmasq stop
    

    这时别的浏览器没有配置过DoH,又无法通过路由器解析域名,自然打开 youtube.com,只有FireFox还是畅行国内外无阻

    目前用的是红鱼DNS,可能是技术原因,有的网站可能无法解析,切换到未用 DoH 的浏览器就正常了

相关资源:


感谢 movie editor converter download 提供空间