增强用户隐私保护!利用 DoH 协议构建更安全的域名解析体系!

979a97ed7a07aa1547e9da6ceda25e84.gif

传统的 DNS 查询过程存在一些隐私和安全问题,例如,你的 DNS 查询会被网络运营商或其他第三方监视,从而了解你访问了哪些网站;有些不安全的 DNS 服务器也可能被黑客攻击,将你的设备重定向到钓鱼网站或者恶意网站(域名劫持或域名污染)。而 DNS over HTTPS(DoH)是一种安全协议,它允许客户端使用 HTTPS 协议通过加密的通道向 DNS 服务器查询域名解析信息。DoH 旨在提高互联网用户的隐私和安全,通过加密 DNS 查询来防止第三方(如 ISP 或黑客)窥探用户的网络活动。

DoH 具有如下一些特点:

加密 DNS 查询:DoH 通过 HTTPS 加密 DNS 查询,这意味着用户设备和 DoH 服务器之间的 DNS 流量是加密的,从而防止了第三方的窃听和篡改。

保护用户隐私:由于 DNS 查询包含了用户想要访问的域名信息,这可能暴露用户的上网行为。DoH 通过加密这些查询,保护了用户的隐私,使得第三方无法轻易地通过 DNS 查询来跟踪用户的行为。

防止 DNS 劫持:传统的 DNS 协议在传输过程中不加密,容易被中间人攻击者劫持,导致用户被重定向到恶意网站。DoH 通过 HTTPS 进行传输,减少了这种风险。

使用 HTTPS 端口:DoH 利用 HTTPS 的 443 端口进行通信,这个端口通常用于加密的 Web 流量,因此不易被网络监控或过滤软件所识别或阻止。

Amazon Route 53 Resolver(以下简称 Route 53 Resolver)目前已经支持 DNS over HTTPS 协议,并遵循 RFC 8484 标准。Route 53 Resolver 以递归方式响应来自公共记录亚马逊云科技资源、Amazon VPC 特定的 DNS 名称和 Amazon Route 53 私有托管区域的 DNS 查询,并且在所有 VPC 中都可用。但在 Amazon Region 之外的 Internet 上使用 Route 53 Resolver 需要进行一些改造。

使用 DoH 进行域名解析时,客户端需要通过域名访问支持 DoH 的 DNS 服务器。然而,这个 DNS 服务器的域名本身也可能被劫持或污染。为了彻底解决域名劫持和污染问题,我们可以像传统 DNS 查询一样,使用 IP 地址直接访问DNS服务器。在这种情况下,我们可以利用 Amazon Global Accelerator 实现全球加速。

Amazon Global Accelerator 在全球超过 50 个国家/地区的近百个城市部署了 100 多个边缘节点,可以让客户端的流量从最近的边缘节点接入。同时,Amazon Global Accelerator 提供了静态 IP 地址,作为固定的入口点。这些 IP 地址来自亚马逊云科技边缘站点,是任播 IP 地址,因此它们会同时从多个亚马逊云科技边缘站点播出。这样,进入亚马逊云科技全球网络的流量就能尽可能靠近用户。

通过结合 Amazon Global Accelerator 和 Amazon Route 53 Resolver,我们就可以部署一个覆盖全球的支持 DNS over HTTPS 的域名解析系统。

方案架构图

335e95db979b79db39faa8f89bdb7f61.png

客户端通过 DNS over HTTPS 协议向 Amazon Global Accelerator 的任播 IP(Anycast IP)发送请求。

Amazon Global Accelerator 将流量路由到最近的亚马逊云科技边缘位置(PoP)。

然后,流量进入 Amazon Region 内的虚拟私有云(VPC)。在 VPC 内部,Network Load Balancer 将流量分发到多个 Route 53 Resolver 端点。这些端点是 Route 53 Resolver 在 VPC 内的私网 IP 地址。

Route 53 Resolver 接收到 DNS over HTTPS 的 DNS 请求后,即可查询配置在 Route 53 Zone 里的信息或者递归查询 Internet 上的域名信息。

Route 53 Resolver 获得域名查询的结果后,再使用 DNS over HTTPS 协议将结果通过 Amazon Global Accelerator 返还给客户端。

从 Amazon Global Accelerator 分布在全球的 PoP 点到 Route 53 Resolver 的整段链路都使用亚马逊云科技骨干网,不会暴露到 Internet。

从客户端到 Route 53 Resolver 端到端均为 HTTPS 加密数据,防止被窃取和伪造。

下面我们一步一步进行配置。

配置 Route 53 Resolver

为了让 Route 53 Resolver 能被 VPC 及外部访问,我们需要配置一个 Route 53 Resolver Inbound Endpoint:

191aa14c470f326b630c7a148ee2e363.png

在 Configure inbound endpoint 的配置中,填入 Endpoint 名字,选择要部署 Route 53 Resolver 的 VPC,安全组和 IP 地址簇(IPv4、IPv6 或双栈),其中安全组需要允许访问 443 端口。协议类型默认是 Do53,即使用 53 端口的传统 DNS 协议。我们需要在这里勾选上 DoH 协议:

c3f355d99fddf4d92ddb19feddb3a35a.png

为了高可用,Endpoint 的 IP 需要选择至少两个 AZ,每个 AZ 各配置一个。建议将 Endpoint 部署到私有子网内。

完成配置点击提交后,等待几分钟,我们就可以看到这个 Inbound Endpoint 的状态:

50880824c876e0a1431275cf3017a0d8.png

状态是 Operational,这个 endpoint 就可以正常使用了。我们点击 ID,进入到这个 endpoint 的详情页面,在这里我们需要记录该 endpoint 使用的具体 IP 信息:

9dcfba1ff7d309fb89ce6c13b821566e.png

Route 53 Resolver 默认会有一条递归到 Internet 解析的规则,我们可以根据需要保留这条规则。

接下来我们需要在 EC2 控制台配置 Network Load Balancer 和 Amazon Global Accelerator。

配置 Network Load Balancer 

和 Amazon Global Accelerator

在 EC2 控制台中,我们首先配置 Target Group,我们需要创建一个新的 Target Group:

6a2c20b7b2baefa3ffedd18c0be55e02.png

Target type 选择 IP addresses 类型,协议和端口使用 TCP 443,VPC 选择我们 Route 53 Resolver Inbound Endpoint 所在的 VPC。

在具体的 Target 配置页面,我们填入前面记录的 Route 53 Resolver Inbound Endpoint 的 IP 地址:

c2eb50ac8d7e9a2e018c75baf5e77518.png

点击“Create target group”后,Target Group 就成功创建了。

接下来我们配置 Network Load Balancer。

我们先创建一个类型为 Network Load Balancer(NLB)。该 NLB 的类型为“Internet-facing ”;选择 VPC 为 Route 53 Resolver Inbound Endpoint 所在的 VPC,子网所在的 AZ 需要是 Route 53 Resolver Inbound Endpoint 所在的 AZ;安全组需要允许外部访问 443 端口;侦听协议和端口为 TCP 443;target group 为刚才创建的,target 为 Route 53 Resolver Inbound Endpoint IP 地址的 target group;在 Amazon Global Accelerator 下勾选“创建一个 accelerator,这样可以为该 NLB 同步配置好一个 Amazon Global Accelerator。点击“Create load balancer”后,等待 Network Load Balancer 和 Amazon Global Accelerator 完成创建。

1218a588e7524280cbb625a1ad1af4d5.png

待创建的 Network Load Balancer 的状态变为“Active”后,点击该 NLB name 进入详情页:

067aabc5271eaa0c74cfb658a06f3af5.png

在 NLB 详情页下方的“Integrations”中,展开 Amazon Global Accelerator 即可看到 Amazon Global Accelerator 提供的全球任播 IP(Anycast IP),通过这两个固定的 IP 地址,我们就可以使用 DNS over HTTPS 协议访问 Route 53 Resolver 进行 DNS 解析:

bd2d2ad9792b5b09b23d25ecdd0644fb.png

请记录下这两个 Amazon Global Accelerator 提供的 IP 地址,后续测试时,客户端将访问这两个 IP 地址。

客户端测试

DNS over HTTPS 协议需要客户端也支持,这里我们使用 node.js 作为客户端进行模拟。node.js 的第三方库“dohjs”支持 DNS over HTTPS 协议。我们先安装这个第三方库:

npm install dohjs

这个库的详细信息请扫描下方二维码

9a1c5ca986f09b7d08e3f5e2f67daab6.png

第三方库详细信息

扫码了解更多

假设我们 Amazon Global Accelerator 提供的其中一个静态 IP 是“3.33.239.100”,需要解析的域名是“www.amazonaws.com”,我们可以使用如下的 javascript 代码进行测试:

// Javascript


const doh = require("dohjs");


const dnsServer = "3.33.239.100";
const domainName = "www.amazonaws.com";


const headers = {
  Host: "route53resolver.amazonaws.com",
  accept: "application/dns-message",
};


const resolver = new doh.DohResolver("https://" + dnsServer + "/dns-query");


resolver
  .query(domainName, "A", "GET", headers)
  .then((response) => {
    response.answers.forEach((ans) => console.log(ans.data));
  })
  .catch((err) => console.error(err));

左右滑动查看更多

这段 Javascript 代码中,dnsServer 为 Amazon Global Accelerator 提供的静态 IP 地址,domainName 为需要解析的域名。

由于 HTTPS 协议使用证书进行鉴权,Route 53 Resolver 使用的证书所支持的域名为“route53resolver.amazonaws.com”,因此需要在 HTTPS 请求中把 Host 改为“route53resolver.amazonaws.com”。

DNS over HTTPS 协议需要在请求的 HTTP header 中 accept 的类型为 dns-message,因此我们还需要增加一个 HTTP header:accept: “application/dns-message”。

根据 DNS over HTTPS 协议,请求的 DNS 服务器域名和 uri 为:https://dnsServer/dns-query。

最后,我们调用 query 函数,使用 HTTP GET 方法解析待查询域名的 A 记录。DNS over HTTPS 也支持使用 POST 方法。

假设该代码的文件名为 doh.js,在终端中允许 node doh.js 命令运行这段代码:

$ node doh.js
rewrite.amazon.com
72.21.210.29

可以看到成功获得了该域名的 A 记录信息,得到了该域名的 IP 地址。

总结

本文探讨了使用 DoH 协议通过 Anycast IP 提高域名解析的安全性和隐私性,DoH 通过 HTTPS 加密查询过程,保护用户隐私并防止 DNS 劫持。Amazon Route 53 Resolver 支持 DoH 并遵循 RFC 8484 标准,能够在 Amazon 环境中安全响应 DNS 查询。为了在全球范围内使用 Route 53 Resolver,我们结合了 Amazon Global Accelerator,提供全球任播 IP 地址(Anycast IP)以加速流量并作为固定访问点。

本篇作者

1f89dca588920a7f96df59cc8ce28f5a.jpeg

陆毅

亚马逊云科技高级解决方案架构师,拥有 20 年传统 IT 和公有云行业经验。擅长云上基础设施的架构设计、运维等。

d4cf3d204618cd2bb41c01c4c736cd22.png

2b95cdafc183f63b36f0afde14a5471e.gif

星标不迷路,开发更极速!

关注后记得星标「亚马逊云开发者」

听说,点完下面4个按钮

就不会碰到bug了!

ce467a11e573c5ddc2fda41420245b5f.gif

点击阅读原文查看博客,获得更详细内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值