一、背景
工作过程中遇到需要频繁切换测试和现网域名的问题,每次都去修改C:\Windows\System32\drivers\etc\hosts,感觉比较麻烦,而且修改之后由于系统和浏览器DNS缓存问题可能需要等一会才能切换成功。
于是想通过浏览器自定义DNS来实现不同浏览器访问不同域名的需求,如用Chrome浏览器访问测试环境,Edge浏览器访问现网环境。搜索发现Chrome浏览器有使用安全DNS的相关设置(chrome://settings/security),可以自定义安全DNS的服务地址:
二、准备
Chrome浏览器中说的安全DNS指的是DoH(DNS over HTTPS),它是一个安全的域名解析方案。其意义在于以加密的HTTPS协议进行DNS解析请求,避免原始DNS协议中用户的DNS解析请求被窃听或者修改的问题(例如中间人攻击)来达到保护用户隐私的目的。因此,攻击者将无法查看请求的URL并对其进行更改,如果使用了基于HTTPS的DNS,数据在传输过程中发生丢失时,DoH中的传输控制协议(TCP)会做出更快的反应。
因此本地要自建支持DoH的DNS服务器,像dnsmasq就无法直接满足要求,需要增加前置代理。后来发现coredns可以直接支持DoH,因此就选择用coredns来搭建本地DNS服务器。coredns官网(