玩软路由不折腾DNS是没有灵魂的。

———我说的

目前有多种成熟方式获取域名的解析结果,简单来说就是通过以下方式与DNS服务器联络。
获取域名解析的方式很灵活,并不只限于以下几种,只要服务器和客户端支持就可以使用任意方式,也可以使用任意的端口号。

使用UDP进行解析

使用UDP协议连接DNS服务器,默认使用53号端口,这是目前互联网使用DNS服务器的主流方式
只要看到填写DNS的地方只写了一个IP那就代表着使用这种方式,如果旁边也没标注端口号则代表着使用53号端口
这种方式没有加密,代表着所有发送数据包的设备是可以看到你想访问的域名的,同样也可以随意修改结果。

使用TCP进行解析

使用TCP协议连接DNS服务器,同样默认使用53号端口,相比于UDP,此种方式使用量较少
与UDP方式相同,使用TCP也一样没有加密,对所有转发数据包的设备可见,也可修改,只是修改起来更麻烦一点。

使用DoT进行解析

DoT就是DNS over TLS,意思是把DNS请求装进TLS里,TLS是一种成熟的加密手段,简单的说就是DNS解析流程是被加密的,不再需要担心被其他人知道你要访问的域名了,更不用担心被篡改。
这种方式一般使用853号端口。

简单来说就是这样👇
TCP + TLS + DNS = DoT

使用DoH进行解析

DoH就是DNS over HTTPS,把DNS请求装进HTTPS里,HTTPS就是使用TLS加密的HTTP,跟上面的DoT同样使用TLS,不同的是内部使用HTTP协议以及通常使用443端口(浏览器访问HTTPS的网站也是访问的443端口),对于转发数据包的设备(中间人)来说这更像是在访问网页,提供了一定的伪装性。

TCP + TLS + HTTP + DNS = DoH

虽然使用了TLS加密和443端口但这并不是万无一失,中间人还可以通过目标IP地址和收发数据量(DNS查询的数据量很小,即使被加密也看的出来。)来检查这是否是DNS请求。
比如,在中间人的视角下发现你访问的8.8.8.8这个IP,虽然内容是加密的,但是8.8.8.8是个DNS服务器几乎人尽皆知。

使用DoQ进行解析

DoQ(DNS over QUIC),使用QUIC连接,有TLS加密,因为QUIC的特性耗时会短一些。

UDP(QUIC) + TLS = DoQ

QUIC是一个基于UDP的协议,在UDP数据包中额外添加一些数据,可以实现比TCP更好的可靠传输,比如更短的握手时间,除此之外还融合了TLS加密,TLS加密的握手阶段也要比TCP来的更快,目前QUIC属于一个升级选项,与普通的TCP连接同时发起,如果QUIC连接建立成功就用QUIC,失败就改用TCP。
DoH本质就是HTTP协议,启用了HTTP3后也可以使用QUIC,启用后就变成 UDP(QUIC) + TLS + HTTP = DoH。