请求可以采用以下定义的 DNS 线格式: RFC1035 (使用 POST 和 GET HTTP 方法发送),或以 JSON 格式(使用 GET HTTP 方法发送)。 对于我个人来说,通过 HTTP 请求发出 DNS 请求的想法似乎出乎意料,但其中有一个合理的颗粒:这样的请求会经过许多流量过滤系统,解析响应非常简单,生成请求甚至更容易。 通常的库和协议负责安全性。
$ kdig -d @1.1.1.1 +tls-ca +tls-host=cloudflare-dns.com example.com
;; DEBUG: Querying for owner(example.com.), class(1), type(1), server(1.1.1.1), port(853), protocol(TCP)
;; DEBUG: TLS, imported 170 system certificates
;; DEBUG: TLS, received certificate hierarchy:
;; DEBUG: #1, C=US,ST=CA,L=San Francisco,O=Cloudflare, Inc.,CN=*.cloudflare-dns.com
;; DEBUG: SHA-256 PIN: yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc=
;; DEBUG: #2, C=US,O=DigiCert Inc,CN=DigiCert ECC Secure Server CA
;; DEBUG: SHA-256 PIN: PZXN3lRAy+8tBKk2Ox6F7jIlnzr2Yzmwqc3JnyfXoCw=
;; DEBUG: TLS, skipping certificate PIN check
;; DEBUG: TLS, The certificate is trusted.
;; TLS session (TLS1.2)-(ECDHE-ECDSA-SECP256R1)-(AES-256-GCM)
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 58548
;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 1
;; EDNS PSEUDOSECTION:
;; Version: 0; flags: ; UDP size: 1536 B; ext-rcode: NOERROR
;; PADDING: 408 B
;; QUESTION SECTION:
;; example.com. IN A
;; ANSWER SECTION:
example.com. 2347 IN A 93.184.216.34
;; Received 468 B
;; Time 2018-03-31 15:20:57 PDT
;; From 1.1.1.1@853(TCP) in 12.6 ms
此选项似乎最适合满足本地网络或单个用户需求的本地 DNS 服务器。 确实,标准的支持不是很好,但是 - 让我们希望吧!
用两个词解释对话内容
DNS 缩写代表域名服务(所以说“DNS 服务”有点多余,该缩写已经包含“服务”一词),用于解决一个简单的任务 - 了解特定主机名具有的 IP 地址。 每当有人点击链接或在浏览器地址栏中输入地址(例如“https://habrahabr.ru/post/346430/”),一个人的计算机正在尝试找出哪个服务器发送请求以接收页面内容。 对于 habrahabr.ru,DNS 的响应将包含 Web 服务器的 IP 地址的指示:178.248.237.68,然后浏览器将尝试联系具有指定 IP 地址的服务器。
反过来,DNS 服务器在收到请求“名为 habrahabr.ru 的主机的 IP 地址是什么?”后,会确定它是否知道有关指定主机的任何信息。 如果没有,它会向世界上的其他 DNS 服务器发出请求,并逐步尝试找出所提出问题的答案。 因此,在找到最终答案后,找到的数据会发送到仍在等待的客户端,并且存储在 DNS 服务器本身的缓存中,这将使您下次更快地回答类似的问题。
一个常见的问题是,首先,DNS 查询数据以明文形式传输(这使得有权访问流量的任何人都能够隔离 DNS 查询和他们收到的响应,然后根据自己的目的对其进行解析;这使得能够为 DNS 客户端准确定位广告,这是相当多的!)。 其次,一些 ISP(我们不会指责,但不是最小的)倾向于显示广告而不是一个或另一个请求的页面(实现方式非常简单:而不是 habranabr.ru 查询的指定 IP 地址)主机名,随机人因此,返回提供商的网络服务器的地址,其中提供包含广告的页面)。 第三,有些互联网接入提供商实施了一种机制,通过将有关被阻止 Web 资源的 IP 地址的正确 DNS 响应替换为包含存根页面的服务器的 IP 地址来满足阻止单个站点的要求(因此,访问此类站点明显更复杂),或者发送到执行过滤的代理服务器的地址。
您可能应该在此处放一张网站上的图片 http://1.1.1.1/,用于描述与服务的连接。 作者似乎对其 DNS 的质量非常有信心(但是,很难对 Cloudflare 抱有任何其他期望):
人们可以充分理解该服务的创建者 Cloudflare:他们通过维护和开发世界上最受欢迎的 CDN 网络之一(其功能不仅包括分发内容,还包括托管 DNS 区域)来谋生,而且,由于那些人的愿望, 谁不精通,教那些 他们不认识谁, 对此 去哪儿 在全球网络中,经常会遭受服务器地址被封锁的困扰 我们不会说是谁 - 因此,对于公司来说,拥有一个不受“喊叫、口哨和涂鸦”影响的 DNS 意味着对其业务的损害较小。 技术优势(虽然微不足道,但很好:特别是对于免费 DNS Cloudflare 的客户来说,可以即时更新公司 DNS 服务器上托管资源的 DNS 记录)使得使用帖子中描述的服务变得更加有趣。