使用云服务器ECS搭建DoH服务器

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 本文来自于云服务器ECS征文活动投稿,已获得作者(昵称绍羽)授权发布。

本文来自于云服务器ECS征文活动投稿,已获得作者(昵称绍羽)授权发布。

我们都知道,DNS服务器(Domain Name Server)可以将人类易于理解的域名(就是平时说的网址)转换为机器易于理解的「IP 地址」,它使用UDP端口53对外提供服务。通常,DNS查询是明文的,这意味着您的网站访问记录可以轻易被网络管理员和ISP获取到。

面对日益严峻的行为管理、隐私泄露和恶意劫持,DoH作为一种更安全的DNS查询方式正在被更广泛使用。它通过RFC 8484指定的经过TLS加密的HTTP连接提供DNS解析,这意味着我们的DNS查询得到了加密保护。

那么我能不能尝试一下在公网搭建一个DoH服务器呢?

当我有这种想法之后便开始行动,通过查阅网络公开资料也解决了很多疑点,最终,借助阿里云的ECS(镜像源真的很快,推荐),成功地完成了搭建Doh服务器的实践。

接下来,跟着我一起看看是怎样完成搭建的吧~

01 资源准备:云服务器+域名

1.云服务器

本次实践推荐使用一台装载Ubuntu镜像的云服务器,在阿里云的试用中心可以免费使用一个月t5实例:https://free.aliyun.com/c3e170c00e2e4ac9b0b669dffece4e24

如果您是高校学生或老师,可以使用高校计划可以免费领用2.5个月:https://developer.aliyun.com/plan/studentadd20dd3aea04fe4890cf724dd41aee6

2.域名准备

建议使用阿里云万网购买域名,优势是可以获得免费的SSL证书。

02 便捷搭建方案

如果只是想便捷配置可以参考下面的步骤:

  1. 安装docker:

    apt-get install docker.io
  2. 启动docker:

    service docker start
  3. 下载创建并初始化Dnscrypt容器:

    docker run --name=dnscrypt-server -p 443:443/udp -p 443:443/tcp \
    --restart=unless-stopped \
    -v /etc/dnscrypt-server/keys:/opt/encrypted-dns/etc/keys \
    jedisct1/dnscrypt-server init -N example.com -E '192.168.1.1:443'
    说明
    • example.com替换为您的域名,192.168.1.1:443替换为ECS公网IP,可以指定多个逗号分隔的IP和端口,如 -E'192.168.1.1:443,[2001:0db8::412f]:443'. -v

    • /etc/dnscrypt-server:/opt/encrypted-dns/etc/keys 表示容器内部的路径。/opt/encrypted-dns/etc/keys 映射到 /etc/dnscrypt-server/keys

    启动服务命令:docker start dnscrypt-server

  4. 下载创建并初始化Doh-server容器:

    docker run -d --restart unless-stopped --network host --name doh-server \
      -e UPSTREAM_DNS_SERVER="udp:127.0.2.1:53" \
      -e DOH_HTTP_PREFIX="/dns-query" \
      -e DOH_SERVER_LISTEN="127.0.0.1:8053" \
      -e DOH_SERVER_TIMEOUT="10" \
      -e DOH_SERVER_TRIES="3" \
      -e DOH_SERVER_VERBOSE="true" \
      satishweb/doh-server
  5. 验证容器状态:

    docker ps -a
    953cf9d35d8341b3ae19e73993aa730f
  6. 设置自启动:

    docker update --restart=unless-stopped dnscrypt-server   docker update --restart=unless-stopped doh-server
  7. Web客户端和SSL证书参照下文nginx。

  8. 检查配置-所有服务启动,我们就得到了Doh服务,请转最后小结部分。

03 进阶搭建教程

如何搭建是个问题,那么这里列举3种方案与思路:

  • nginx + doh-server + dnscrypt(本文使用)ce8dc794a3db4c4e81ec283d6c6e6e66

  • nginx + doh-server + Bind(备选方案)

  • nginx + doh-server + CoreDNS(云原生方案)

1、安装software-properties-common软件包

这是一个预备操作。我使用的是阿里云官方提供的Ubuntu 20.04 64位系统,其缺少add-apt-repository命令,需要在系统终端中运行以下命令来安装software-properties-common软件包:

sudo apt update
sudo apt -y install software-properties-common dirmngr apt-transport-https lsb-release ca-certificates

Tips

可以使用以下命令添加PPA存储库:

sudo add-apt-repository ppa:<PPA Name>

添加PPA存储库后,更新程序包列表并从存储库安装新程序包:

sudo apt update
sudo apt install

2、安装Dnscrypt-Proxy

a) 安装和验证

Dnscrypt-Proxy是具备很多现代化功能的DNS代理服务器程序,其支持DNSCrypt v2(身份认证), DNS-over-HTTPS【RFC8484,DNS Queries over HTTPS (DoH)】等功能。

由于Dnscrypt-Proxy使用Golang开发,所以其不支持在CentOS5及之前的Linux发行版上安装。Dnscrypt-Proxy需要占用53端口,所以安装前可以先查看一下53端口使用情况,命令:

ss -lp 'sport = :domain'
c841994b20f54f1c9706cc3b797d5a1f

我们可以使用志愿者贡献的PPA来快捷安装和保持程序的最新版本:

sudo add-apt-repository ppa:shevchuk/dnscrypt-proxy
sudo apt install dnscrypt-proxy

安装后,Dnscrypt-Proxy服务将在服务器上自动启动。

程序会被安装到/etc/dnscrypt-proxy文件夹,dnscrypt-proxy的监听地址通常为(V:2.1.0~ppa6):127.0.0.53:53,我们可以使用dig命令查看一下。

其配置文件/etc/dnscrypt-proxy/dnscrypt-proxy.tomlserver_names字段要求您设置一个或多个您喜欢的服务器即可,第一个请求失败会自动向第二个服务器请求。例如:server_names = ['alidns-doh']我们这里不做更改,根据服务器所在可用区的不同,我们可能会修改这里的参数。

b) 修改系统DNS配置

移除系统DNS配置命令:

apt-get remove resolvconf

为系统DNS配置文件设置备份:

cp /etc/resolv.conf /etc/resolv.conf.backup

修改原DNS配置文件:

vim /etc/resolv.conf

修改为nameserver 127.0.0.53 options edns0

最后重启dnscrypt-proxy服务:

sudo systemctl restart dnscrypt-proxy
说明

系统Systemd 服务使用的默认套接字库地址为127.0.2.1:53。

3、安装DNS-over-HTTPs

这是一个基于golong开发的开源DoH服务器程序,它可以接受HTTP请求并执行DNS查询。我们可以使用deb安装包快捷的安装DNS-over-HTTPs服务器程序:

如果使用debian,则命令为:

sudo dpkg -i doh-server_2.0.1_amd64.deb

在ubuntu里面,命令为:

sudo apt install doh-server_2.0.1_amd64.deb
sudo apt install /root/doh-server_2.0.1_amd64.deb
重要

以上文件路径请据实替换。

25ae3dd7b21f463dbcb24b60f9ea2e42

Tips:如果您在安装 deb 软件包的过程中得到一个依赖项的错误,您可以使用下面的命令来修复依赖项的问题:

sudo apt install -f

安装好的DoH服务器程序的配置文件在路径/etc/dns-over-https/doh-server.conf。为了设置反向解析,我们修改其upstream字段(上游DNS解析),将其修改为上面提到的dnscrypt-proxy的监听地址;dnscrypt-proxy监听字段可以在/etc/dnscrypt-proxy/dnscrypt-proxy.toml文件里修改。这样DoH程序就会使用Dnscrypt-proxy来执行DNS请求。

修改代码:

vim /etc/dns-over-https/doh-server.conf

修改如下图所示:687eb20a948e4bbfa1805aa8b1b82797

重启服务进行应用更改:

sudo systemctl restart doh-server

4、安装Nginx

Nginx是一款高性能的反向代理服务器程序,在这里它负责接受客户端HTTPS DNS请求,然后作为反向代理解码来自客户端的HTTPS请求并向DoH服务器程序发送DoH请求。它是与客户端交流的门户,我们还会为它配置一个SSL证书以便于验证HTTPS请求。

我使用的是“Ondřej Surý”提供的相关版本,在百度中搜索此关键词,然后进入网页下载对应的安装包就好。以下为安装命令:

sudo add-apt-repository ppa:ondrej/nginxsudo apt install nginx-full

Nginx被安装在/etc/nginx目录下,我们需要编辑配置文件。

Vim /etc/nginx/sites-available/dns-over-https

其中server_name字段需要使用您自己的域名,域名是提供DoH服务所必需的。upstream dns-backend就是您需要Nginx转发到的地址,这里就是我们的DOH的监听地址。以下为一个示例配置:e90f1063189246a7bea823e6d4ba9e35

完成后我们需要把配置文件放到/etc/nginx/sites-available/dns-over-https

sudo ln -s /etc/nginx/sites-available/dns-over-https /etc/nginx/sites-enabled/dns-over-https

验证并重启:

sudo nginx -t  sudo systemctl reload nginx

我们可以配置nginx对SSL证书的检查:

vim /etc/nginx/conf.d/stapling.conf

配置如下图,其中resolver变量是DNScrypt的监听地址。a9583a69ad8a478b8f43f205d27fb5dd

5、申请SSL证书

方法一:手动安装

如果您购买的是阿里云的域名,那么我们可以选择手动安装,优点是有效期时间长达一年,缺点是比较麻烦。7918764ed1414d4587724d3a25042ec9

进入数字证书管理服务控制台

购买DV单域名证书包后,可以点击创建证书,填写申请并验证即可。18e7c433a58844be8a4e2995d218aecd

购买成功后我们可以下载证书并部署到服务器上。通过ftp或其他方式将证书上传到服务器目录内,修改nginx配置文件以应用更改。示例配置如下:72cd6875155d42c2a67de6e0bef69866

使用nginx -t命令可测试配置是否正确。

重启nginx进行应用配置:

sudo systemctl reload nginx

方法二:使用插件安装

Certbot 是一个免费的开源申请SSL证书的工具,用于在手动管理的网站上自动部署免费的Let's Encrypt证书以启用HTTPS。在nginx服务器上使用Certbot来配置证书是很棒的选择。优点是比较方便,缺点是有效期短。

使用PPA安装certbot:

sudo add-apt-repository ppa:certbot/certbot
sudo apt install python3-certbot-nginx
95a74e3ec7b04eff903fe4a4988a72f0

成功后的截图如下:07b0231cb58f49cf8eb32593bcf0277c

为您的域名申请证书,注意替换,根据提示输入Agree即可下一步:

sudo certbot --nginx -d dns.example.com
8e9176090eb944aea46ef78a0e606bf4

下一步我们选择2以便把HTTP流量转发到HTTPS,如果选择1则表示不转发。(如下图所示)85ac552a91cf4ec2b6d25e44bf040922

该插件配置文件地址为vim /etc/letsencrypt/options-ssl-nginx.confefd511c7b71c47f8b261693ca271e2a1

重启nginx进行应用配置:

sudo systemctl reload nginx

由于Let’s Encrypt颁发的证书的有效期只有90天,我们可以使用certbot renew命令来更新证书。

04 DOH的使用方法小结

RFC8484中指定使用/dns-query路径作为默认查询路径。在客户端方面,火狐、谷歌等浏览器均已支持DoH,其中谷歌浏览器中的配置路径为:设置-安全和隐私设置-高级-使用安全DNS873b43bf0d334ec89d69e475ce161fa8

当然,由于政策性原因,我们在中国境内搭建的Doh服务器并不能在没有经营性备案的情况下向公网提供服务,所以本次实践的意义在于学习和动手实践的乐趣。

另外,由于提供DNS服务有快速和准确等要求,所以个人搭建的服务器并不是最优选择;若有需求,可以试一下阿里云的公共DoH服务。

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
存储 缓存 固态存储
阿里云服务器租用价格参考,云服务器收费标准与活动价格表参考
本文为大家展示阿里云服务器最新的收费标准与活动价格情况,以供了解和参考。
阿里云服务器租用价格参考,云服务器收费标准与活动价格表参考
|
4天前
|
机器学习/深度学习 弹性计算 缓存
简单聊聊,阿里云2核2G3M带宽云服务器与轻量应用服务器区别及选择参考
2核2G3M带宽云服务器与轻量应用服务器是目前阿里云的活动中,入门级走量型云服务器,轻量云服务器2核2G3M带宽68元一年,经济型e实例云服务器2核2G3M带宽99元1年。同样的配置,对于有的新手用户来说,有必要了解一下他们之间的区别,以及各自的购买和续费相关政策,从而选择更适合自己需求的云服务器。本文为大家简单分析一下我们应该选择哪一款。
|
24天前
|
弹性计算 运维 安全
阿里云轻量应用服务器与ECS的区别及选择指南
轻量应用服务器和云服务器ECS(Elastic Compute Service)是两款颇受欢迎的产品。本文将对这两者进行详细的对比,帮助用户更好地理解它们之间的区别,并根据自身需求做出明智的选择。
|
1月前
|
SQL 弹性计算 安全
阿里云服务器产品详情介绍:云服务器是什么、应用场景、租用流程、使用教程参考
对于很多新手用户来说,阿里云服务器是什么、阿里云服务器可以干嘛、阿里云服务器租用价格表、阿里云服务器新手教程是很多用户对于阿里云服务器最为关心的问题。同时,面对琳琅满目的服务器配置和优惠活动,如何选择最适合自己的服务器并充分利用其资源,成为许多用户面临的难题。本文将从阿里云服务器的定义、应用场景、价格、租用流程以及使用技巧等方面进行全面解析,帮助用户更好地了解和应用阿里云服务器。
|
22天前
|
机器学习/深度学习 人工智能 编解码
阿里云GPU云服务器优惠收费标准,GPU服务器优缺点与适用场景详解
随着人工智能、大数据分析和高性能计算的发展,对计算资源的需求不断增加。GPU凭借强大的并行计算能力和高效的浮点运算性能,逐渐成为处理复杂计算任务的首选工具。阿里云提供了从入门级到旗舰级的多种GPU服务器,涵盖GN5、GN6、GN7、GN8和GN9系列,分别适用于图形渲染、视频编码、深度学习推理、训练和高性能计算等场景。本文详细介绍各系列的规格、价格和适用场景,帮助用户根据实际需求选择最合适的GPU实例。
|
10天前
|
机器学习/深度学习 人工智能 PyTorch
阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考
阿里云GPU云服务器怎么样?阿里云GPU结合了GPU计算力与CPU计算力,主要应用于于深度学习、科学计算、图形可视化、视频处理多种应用场景,本文为您详细介绍阿里云GPU云服务器产品优势、应用场景以及最新活动价格。
阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考
|
9天前
|
存储 运维 安全
阿里云弹性裸金属服务器是什么?产品规格及适用场景介绍
阿里云服务器ECS包括众多产品,其中弹性裸金属服务器(ECS Bare Metal Server)是一种可弹性伸缩的高性能计算服务,计算性能与传统物理机无差别,具有安全物理隔离的特点。分钟级的交付周期将提供给您实时的业务响应能力,助力您的核心业务飞速成长。本文为大家详细介绍弹性裸金属服务器的特点、优势以及与云服务器的对比等内容。
|
17天前
|
人工智能 JSON Linux
利用阿里云GPU加速服务器实现pdf转换为markdown格式
随着AI模型的发展,GPU需求日益增长,尤其是个人学习和研究。直接购置硬件成本高且更新快,建议选择阿里云等提供的GPU加速型服务器。
利用阿里云GPU加速服务器实现pdf转换为markdown格式
|
1天前
|
存储 人工智能 网络协议
浅聊阿里云倚天云服务器:c8y、g8y、r8y实例性能详解与活动价格参考
选择一款高性能、高性价比的云服务器对于企业而言至关重要,阿里云推出的倚天云服务器——c8y、g8y、r8y三款实例,它们基于ARM架构,采用阿里自研的倚天710处理器,并基于新一代CIPU架构,通过芯片快速路径加速手段,实现了计算、存储、网络性能的大幅提升。2025年,计算型c8y云服务器活动价格860.65元一年起,通用型g8y云服务器活动价格1187.40元一年起,内存型r8y云服务器活动价格1454.32元一年起。本文将为大家详细解析这三款实例的性能特点、应用场景以及最新的活动价格情况,帮助大家更好地了解阿里云倚天云服务器。
|
4天前
|
监控 安全 数据库
阿里云国际站:如何使用阿里云国际站服务器
阿里云国际站服务器是一种强大的云计算服务,可以帮助用户轻松搭建和管理自己的网站、应用程序和数据库。本文将介绍如何使用阿里云国际站服务器,包括注册账户、选择服务器配置、安装操作系统、配置网络和安全设置等方面。