使用云服务器ECS搭建DoH服务的开发实践

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
云服务器 ECS,u1 4核16GB 1个月
简介: DoH:一种更安全的DNS查询方式。

本文来自于云服务器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/

image.gifimage002.png


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

image003.png


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

image.gifimage007.png


6、设置自启动


docker update --restart=unless-stopped dnscrypt-server   docker update --restart=unless-stopped doh-server

7、Web客户端和ssl证书参照下文nginx

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


03  进阶搭建教程


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

i. nginx + doh-server + dnscrypt(本文使用)

image009.png

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

iii. 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'

image012.png

我们可以使用志愿者贡献的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.toml文件的server_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

注意:以上文件路径请据实替换

image013.png

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

修改如下图所示:

image015.png


重启服务进行应用更改:


sudo systemctl restart doh-server


4、安装Nginx

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


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


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

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


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

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

image017.png


完成后我们需要把配置文件放到/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的监听地址。

image018.png


5、申请SSL证书


方法一:手动安装

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

image019.png


进入控制台-数字证书管理服务https://yundun.console.aliyun.com/

image021.png


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

image023.jpg


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

image027.png


使用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

image028.png


成功后的截图如下:

image030.png

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


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

image032.png


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

image034.png


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

image036.png


重启nginx进行应用配置:


sudo systemctl reload nginx

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


04 DOH的使用方法小结


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

image038.png


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


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


官方活动时间:阿里云采购季还剩最后10天了,整个3月,天天有惊喜;点击我要上云,抓住机会拥有一台属于自己的云服务器吧·

相关实践学习
ECS云服务器新手上路
本实验会自动创建一台ECS实例。首先,远程登陆ECS实例,并部署应用。然后,登陆管理控制台,并对这台ECS实例进行管理操作。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
Prometheus 监控 Cloud Native
Java 服务挂掉,服务器异常宕机问题排查
Java 服务挂掉,服务器异常宕机问题排查
7 1
|
1天前
|
网络协议 安全 Linux
在IntelliJ IDEA中使用固定公网地址远程SSH连接服务器环境进行开发
在IntelliJ IDEA中使用固定公网地址远程SSH连接服务器环境进行开发
7 2
|
2天前
|
弹性计算 缓存 安全
阿里云服务器ECS收费标准参考,2核4G配置ECS实例规格整理
阿里云提供多种2核4G ECS实例,如计算型c7、经济型e、u1等,价格不等,从68.0元/月到203.0元/月。ECS通用算力型u1实例采用高性能Intel处理器,网络收发包能力达30万PPS。经济型e实例基于Intel Xeon Platinum,适合入门级需求。2核4G服务器支持的并发访问人数依赖于软件效率、带宽、应用架构和用户行为等因素。更多信息请查看阿里云ECS产品页。
|
3天前
|
Cloud Native 安全 开发者
云原生架构的演进与实践:从微服务到无服务器计算
本文深入探讨了云原生技术的最新进展,特别关注微服务和无服务器计算模型。通过分析相关研究数据和行业案例,文章揭示了云原生架构如何推动现代应用开发,提升运维效率,并实现资源的最优化配置。文中详细讨论了云原生生态系统中的关键组成部分,包括容器化、自动化管理工具和服务网格,以及它们如何共同促进敏捷性和可扩展性。此外,文章还分析了云原生安全策略的重要性,以及如何在保障安全的同时,保持系统的灵活性和高效性。
|
3天前
|
弹性计算 安全 前端开发
云服务器ECS通用型、计算型和内存型区别以及详细介绍
阿里云ECS实例有计算型(c)、通用型(g)和内存型(r)系列,区别在于CPU内存比。计算型1:2,如2核4G;通用型1:4,如2核8G;内存型1:8,如2核16G。实例有第五代至第八代,如c7、g5、r8a等,新一代通常使用更先进的处理器。性能参数如CPU主频、IOPS和网络带宽随实例规格变化。实例适合场景包括高网络包收发、数据库、计算密集型任务等。
|
3天前
|
存储 弹性计算 网络协议
阿里云hpc8ae服务器ECS高性能计算优化型实例性能详解
阿里云ECS的HPC优化型hpc8ae实例搭载3.75 GHz AMD第四代EPYC处理器,配备64 Gbps eRDMA网络,专为工业仿真、EDA、地质勘探等HPC工作负载设计。实例提供1:4的CPU内存配比,支持ESSD存储和IPv4/IPv6,操作系统限于特定版本的CentOS和Alibaba Cloud Linux。ecs.hpc8ae.32xlarge实例拥有64核和256 GiB内存,网络带宽和eRDMA带宽均为64 Gbit/s。适用于CFD、FEA、气象预报等场景。
|
4天前
|
存储 机器学习/深度学习 弹性计算
阿里云ECS计算型c8i服务器测评_网络PPS_云盘IOPS性能参数
阿里云ECS计算型c8i实例采用Intel Xeon Emerald Rapids或Sapphire Rapids CPU,主频2.7 GHz起,支持CIPU架构,提供强大计算、存储、网络和安全性能。适用于机器学习、数据分析等场景。实例规格从2核到192核,内存比例1:2,支持ESSD云盘,网络带宽高达100 Gbit/s,具备IPv4/IPv6,vTPM和内存加密功能。详细规格参数表包括不同实例的vCPU、内存、网络带宽、IOPS等信息,最高可达100万PPS和100万IOPS。
|
4天前
|
弹性计算 前端开发 JavaScript
高校学生在家实践ECS弹性云服务器
简单谈谈我这几周使用ECS弹性云服务器的体验感
|
4天前
|
人工智能 网络安全 开发工具
视觉智能开放平台操作报错合集之服务部署在pdd的服务器,调用报错:The SSL connection could not be established,该如何解决
在使用视觉智能开放平台时,可能会遇到各种错误和问题。虽然具体的错误代码和消息会因平台而异,但以下是一些常见错误类型及其可能的原因和解决策略的概述,包括但不限于:1. 认证错误、2. 请求参数错误、3. 资源超限、4. 图像质量问题、5. 服务不可用、6. 模型不支持的场景、7. 网络连接问题,这有助于快速定位和解决问题。
|
弹性计算 网络协议 安全
阿里云ECS7天训练营-Day1 搭建FTP服务
阿里云ECS7天训练营-Day1 搭建FTP服务
1131 0
阿里云ECS7天训练营-Day1 搭建FTP服务

热门文章

最新文章

相关产品

  • 云服务器 ECS