本文同步发布于 Heliumの博客,到我的博客阅读体验更佳QwQ

DNS是什么

DNS(Domain Name System)是一项网络服务,用途是对全球各个网站的域名进行解析。如果听不懂上面这句话也没关系,接下来会讲解。如果你是网络方面的大牛可以直接跳过或关闭此网页。

简明易懂的DNS

举个例子,从前有个叫小明的人(目测此人已累死),开了一家商店。一开始顾客要去购物时,就直接去商店里买。

但由于网络环境的复杂性,让顾客直接记住地址是不太可能的。(你试试看?)于是就有人动了脑筋,推出了一样类似DNS的服务:你只需要说出地点(小明杂货店),服务商就会开车送你去目的地。

很多大公司实际上都推出了这份服务,例如阿里,百度,谷歌,Cloudflare等。

实际网络中的DNS,则是向服务器询问域名,而服务器返回IP地址。

顺便推荐几个质量好的良心DNS如下:

Cloudflare DNS:

1.1.1.1, 1.0.0.1

Google Public DNS:

8.8.8.8, 8.8.4.4

OpenDNS

208.67.222.222, 208.67.220.220

DNS查询

看到这里你可能有疑惑了,难道每一台DNS服务器都储存了很多IP地址和域名的对应吗?不是。一这很浪费空间,二这样很难更新。

以我的博客地址keepthethink.github.io为例,当你输入地址后:

1.你的电脑首先会去询问DNS服务器;

这个“DNS服务器”可能在任何地方,可能就在你家的路由器上,也有可能在万里之遥的灯塔国QwQ(如果你是非酋

当然,一般来讲你的路由器上不会真的有一个DNS服务端,如果你在本地登录912.168.0.1或192.168.1.1,你就会看到在“DNS”设置那一栏会有你的ISP的DNS地址(当然,如果你想把它换成公共DNS也可以,但要为你自己的网速负责。)

2.DNS服务器询问所谓“根服务器”;

根服务器询问.io域名的权威服务器;

.io域名的权威服务器询问.github.io域名的权威服务器;

.github.io域名的权威服务器将IP告知你的电脑;

OK

(这套措施实在是找不到合适的比喻,看不懂就跳过吧。)

注意事项

如果你访问的是一些比较国际化的网站,而且还使用了国外的DNS服务器,有可能会会给你分配个国外的IP地址。

举个最基础的例子:Hexo博客在注册网址时,进行的国内外分流。这是不排除某些睿智国外DNS不管三七二十一给你个国外地址的情形。

DNS缓存

这么干,空间的确节省了很多,但效率显然就更慢了。所以,DNS服务器中一般有个“缓存”,当你重复询问同一个网址时,直接找出缓存记录并答复。当然,每个一定的时间会更新缓存。

既然这套措施已经很完美了,那DoH是干嘛的?别急,马上就讲。

DNS劫持与HTTP劫持

DNS劫持:当DNS不那么老实

打个比方:

从前有个叫小刚的,他也开了家杂货店;

小刚发现小明的杂货店有很多客户,分外眼红,便拿钱贿赂了DNS服务商,于是,当顾客要求DNS服务商将其带到“小明杂货店”是,DNS会不管三七二十一将其带到“小刚杂货店”。在网络中,则是DNS服务器故意给出错误的IP地址。

这显然是无计可施的,一般来说,遇到这种人品烂的掉渣的服务商,最好的办法就是换一家,好在这年头网络条件不错,大多数DNS都不搞这种事。

但是,对于DNS劫持,刚才讲的一种情况并非最常见的,最常见的事下面这种:

假设只有服务商A收了贿赂,而服务商B没有。当你向DNS服务商B打电话时,你的电话服务商将其转接到服务商A,那你就前功尽弃了。唯一的方法是使用DNS-over-HTTPS,后面会讲解。

HTTP劫持:当ISP不那么老实

假设你向DNS服务器打了个电话,“我要去小明杂货店。”结果你的电话服务商窃听了这句话,得知了你的行程;甚至将其修改为“我要去小刚杂货店。”,然后你就不明不白的被带到了另一个地方。

在这种情况下,你的DNS服务商是老实可靠的,但你的ISP(网络服务提供商)则不那么可靠。当然,一般的ISP并没有那么猖狂,他们最多不过是往你身上塞几张奇♂怪♂的广♂告♂(想必大家都有这样的经历。)你有时候会不会发现你看到的广告就是最近曾经关注过的事物?

你也许会说,可以修改DNS来解决这个问题,但如果你的ISP让 Google Public DNS 跳转到 ... 之类与其同流合污的DNS地址怎没办?图样图森破。

注意

有哪些进行HTTP劫持的ISP?基本上都有:移动,联通,电信,天下乌鸦一般黑,呵呵。
一个极其明显的例子如下:

这种劫持的关键在于,DNS服务器与你之间的链接为“明文传输”,而非“加密传输”。这就导致每一个环节上的人都能随意修改你的链接。幸运的是,在生产力高度发达的9102年,加密技术早已像烂柿子一样成熟了,如HTTPS。

DoH的具体原理

DoH的具体原理其实就是在DNS外面套一层HTTPS。(而且更慢了)即流程变成了

你的电脑 -> DoH服务器 -> DNS服务器 -> DoH服务器 -> 你的电脑

以上流程中的一个箭头代表一个HTTPS加密链接,使得该过程中的所有流量皆受到强加密,这样一来,除非拖出量子计算机或智子,否则绝无可能被破解。

(当然,如果HTTPS本身出现漏洞,流量自然就会被破解。但这样一来所有与网络有关的事务都会彻底崩溃,不多你一个。)

提示

  1. 本人电脑为macOS + Firefox,亲测有效。
  2. 新疆OIer会因为某些原因而无法使用DoH。

在Firefox浏览器中体验DoH

首先,把你的Firefox Quantum更新到最新版。(废话)

点击右侧的“菜单”,就是那个三条横线的图标;

在菜单里点击“首选项”;

进入“常规”选项;

滚动页面到最下方,选择“网络设置”;

在弹出窗口的最下方选择“启用基于HTTPS的DNS”,点击“使用默认值”即可。

在Google Chrome中体验DoH

遗憾的是,直到这篇科普写完时,Chrome仍然不支持直接配置DoH。如果你希望使用Chrome,请参见下面的教程。

在Windows上使用DoH

想再Windows上使用DoH?直接安装Firefox不就好了?

当然,如果你是一名狂信徒,非要使用其他浏览器,我这里倒是有个思路:

  1. 买一台服务器,系统是Linux。

  2. 在服务器上重复“在Linux中体验DoH”中的方案

  3. 把你的DNS服务器地址设为你的服务器的公网IP地址

当然,可能你自己得花点钱。

在macOS中体验DoH

首先,为了安装必要的组件,我们首先要安装Homebrew软件包管理器。在终端中输入:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装完成后,输入以下命令安装cloudflared:

brew install cloudflare/cloudflare/cloudflared

等待安装,这段时间内你可以去换(chuan)件(shang)衣(nv)服(zhuang)。

然后,我们要修改一下配置文件,新建一个文件/usr/local/etc/cloudflared/config.yaml,输入如下内容:

proxy-dns: true
proxy-dns-upstream:- https://1.1.1.1/dns-query- https://1.0.0.1/dns-query

(顺便提一下,如果1.1.1.1和1.0.0.1两个都连不上,可以把网址删除换成https://dns.google.com/experimental试试,

好了不要吵了我知道这是天方夜谭)

配置结束,启动服务:

sudo cloudflared service install

QED!现在你的电脑已经成了一台DoH服务器,高兴的话你也可以把它当作DNS服务器来用。打开 系统首选项 -> 网络 -> 高级 -> DNS,在列表的最顶端添加 127.0.0.1 即可。

在Linux中体验DoH

同macOS,但安装时一定要记得加PPA源~

DoH的使用测试

用dig命令测试一下,发现DOH的使用体验还是相当不错的。对域名www.google.com的查询结果如下:

$ dig @127.0.0.1 www.google.com; <<>> DiG 9.10.6 <<>> @127.0.0.1 www.google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48175
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1452
; PAD: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (".................................................................")
;; QUESTION SECTION:
;www.google.com.            IN  A;; ANSWER SECTION:
www.google.com.     66  IN  A   216.58.194.196;; Query time: 165 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Apr 16 16:33:38 CST 2019
;; MSG SIZE  rcvd: 142

注意最下方几行:165毫秒的查询时间不可谓不快。

总结

事实上,如果你饱受各种小广告弹窗之苦,DoH是个不错的应对措施;

如果你的运营商直接进行DNS劫持,建议投诉或诉诸法律;

如果你的运营商进行HTTP劫持,推荐DoH。

点个赞再走吧(๑•́₃ •̀๑)

转载于:https://www.cnblogs.com/Helium-Air/p/dns-over-https.html

DNS-over-HTTPS(DoH)简析与配置相关推荐

  1. 微软不再为 DNS over HTTPS (DoH) 提供 Google PublicDNS 和 Cloudflare DNS 服务提供商

    如果你尝试在 Microsoft Edge 浏览器设置中自行选择 DNS 服务提供商,那么现在微软不再为 DNS over HTTPS (DoH) 提供 Google PublicDNS 和 Clou ...

  2. Webwork 学习之路【08】结合实战简析Controller 配置

    虽然现在 MVC 框架层出不穷,但做为 Struts 前身的 webwork. 其经典程度不亚于贝利之于足球,双 11 之于淘宝特卖. 本篇将结合 webwork controller 配置文件 xw ...

  3. 启用Win11原生支持的DoH(DNS over HTTPS)和配置自定义的DoH服务

    更新 22.1.23:发现有的dns配置没有首选的dns加密,好像是用无线的时候就会没有,不影响,看情况2就行 为了方便,直接给出一些模板(国内可用的) netsh dns add encryptio ...

  4. 如何为Win10开启DoH(DNS over HTTPS)

    Win11 Win11已原生支持DoH,参考这篇:启用Win11原生支持的DoH(DNS over HTTPS) 本文Win10的使用cloudflared实现,其他的工具比如smartdns也可以, ...

  5. 如何快速的自建 DoH ( DNS over HTTPS) 服务

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 1. 前言 DoH(DNS over HTTPS),顾名思义,使用HTTPS协议执行DNS查询,除了最常用的UDP ...

  6. 简析 .NET Core 构成体系

    简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代 ...

  7. django源码简析——后台程序入口

    django源码简析--后台程序入口 这一年一直在用云笔记,平时记录一些tips或者问题很方便,所以也就不再用博客进行记录,还是想把最近学习到的一些东西和大家作以分享,也能够对自己做一个总结.工作中主 ...

  8. 基于IdentityServer4的OIDC实现单点登录(SSO)原理简析

     # 写在前面 IdentityServer4的学习断断续续,兜兜转转,走了不少弯路,也花了不少时间.可能是因为没有阅读源码,也没有特别系统的学习资料,相关文章很多园子里的大佬都有涉及,有系列文章 ...

  9. Linux的启动流程简析(以Debian为例)

    Linux的启动流程简析(以Debian为例) 正文: 前面的文章探讨BIOS和主引导记录的作用.那篇文章不涉及操作系统,只与主板的板载程序有关.今天,我想接着往下写,探讨操作系统接管硬件以后发生的事 ...

最新文章

  1. 人工智障?243个机器人被裁
  2. 我们常称自己“码农”,这次已得到官方认定:“新生代农民工!
  3. 英伟达CUDA太难!OpenAI出手要取代它,新语言性能相当但编程更简单
  4. Nginx笔记系列(1)——Nignx的安装部署
  5. boost::qvm::deduce_mat相关的测试程序
  6. [推荐] TechNet 广播 SQL Server 2000完结篇
  7. Java 中的5个代码性能提升技巧,最高提升近10倍
  8. 加解密算法、消息摘要、消息认证技术、数字签名与公钥证书
  9. nginx +php-fpm 发挥更大的php作用
  10. Micropython教程之TPYBoard DIY金属探测仪实例演示(萝卜学科编程教育)
  11. Python第3次作业
  12. 如何更换python版本
  13. bzoj 3717 [PA2014]Pakowanie
  14. oracle同义词6,Oracle同义词
  15. MGF病毒的利用代码
  16. x64dbg 黑色主题配色方案
  17. 天耀18期 -08.面向对象-上转型【作业】
  18. KONG 之 rate-limiting
  19. OpenCV开发笔记(五十九):红胖子8分钟带你深入了解分水岭算法(图文并茂+浅显易懂+程序源码)
  20. 今天安利几个实用的APP给你

热门文章

  1. Python_删除TXT文件中不想要的内容
  2. 10分钟白嫖我的常用的在线工具网站清单
  3. Axure旋转与移动效果
  4. 文件校验工具HashTab
  5. 华科出身,师从贾佳亚,从鹅厂到创业,90后如何登上胡润U30?
  6. 40网桥的基本概念及其原理
  7. Flutter-解决Try catch出现异常:type ‘_TypeError‘ is not a subtype of type ‘Exception‘ in type cast
  8. 在表示计算机存储容量中1T,1T等于多少G,
  9. 904. 水果成篮(数组、滑动窗口)
  10. cpp+数据结构+设计模式