如何通过云服务器ECS实现DoH服务的开发与部署?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1622个文字,预计阅读时间需要7分钟。
DoH:一种更安全的DNS查询方式。本文来自云服务器ECS认证活动投稿,已获得作者(晨曦旧梦)授权发布。我们都知道,DNS服务器(Domain Name Server)可以将人类易于理解的域名(如www.example.com)解析为IP地址。
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实例:free.aliyun.com/
如果您是高校学生或老师,可以使用高校计划可以免费领用2.5个月:developer.aliyun.com/plan/student
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
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(本文使用)
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-yundun.console.aliyun.com/
购买DV单域名证书包后可以点击创建证书,填写申请并验证即可。
购买成功后我们可以下载证书并部署到服务器上。通过ftp或其他方式将证书上传到服务器目录内,修改nginx配置文件以应用更改。示例配置如下:
使用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
成功后的截图如下:
为你的域名申请证书,注意替换,根据提示输入Agree即可下一步:
sudo certbot --nginx -d dns.example.com
下一步我们选择2以便把HTTP流量转发到HTTPS,如果选择1则表示不转发。(如下图所示)
该插件配置文件地址为vim /etc/letsencrypt/options-ssl-nginx.conf
重启nginx进行应用配置:
sudo systemctl reload nginx
由于Let’s Encrypt颁发的证书的有效期只有90天,我们可以使用certbot renew命令来更新证书。
04 DOH的使用方法小结RFC8484中指定使用/dns-query路径作为默认查询路径。在客户端方面,火狐、谷歌等浏览器均已支持DoH,其中谷歌浏览器中的配置路径为:设置-安全和隐私设置-高级-使用安全DNS:
当然,由于政策性原因,我们在中国境内搭建的Doh服务器并不能在没有经营性备案的情况下向公网提供服务,所以本次实践的意义在于学习和动手实践的乐趣。
另外,由于提供DNS服务有快速和准确等要求,所以个人搭建的服务器并不是最优选择;若有需求,可以试一下阿里云的公共DoH服务。
官方活动时间:阿里云采购季还剩最后10天了,整个3月,天天有惊喜;点击我要上云,抓住机会拥有一台属于自己的云服务器吧·
本文共计1622个文字,预计阅读时间需要7分钟。
DoH:一种更安全的DNS查询方式。本文来自云服务器ECS认证活动投稿,已获得作者(晨曦旧梦)授权发布。我们都知道,DNS服务器(Domain Name Server)可以将人类易于理解的域名(如www.example.com)解析为IP地址。
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实例:free.aliyun.com/
如果您是高校学生或老师,可以使用高校计划可以免费领用2.5个月:developer.aliyun.com/plan/student
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
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(本文使用)
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-yundun.console.aliyun.com/
购买DV单域名证书包后可以点击创建证书,填写申请并验证即可。
购买成功后我们可以下载证书并部署到服务器上。通过ftp或其他方式将证书上传到服务器目录内,修改nginx配置文件以应用更改。示例配置如下:
使用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
成功后的截图如下:
为你的域名申请证书,注意替换,根据提示输入Agree即可下一步:
sudo certbot --nginx -d dns.example.com
下一步我们选择2以便把HTTP流量转发到HTTPS,如果选择1则表示不转发。(如下图所示)
该插件配置文件地址为vim /etc/letsencrypt/options-ssl-nginx.conf
重启nginx进行应用配置:
sudo systemctl reload nginx
由于Let’s Encrypt颁发的证书的有效期只有90天,我们可以使用certbot renew命令来更新证书。
04 DOH的使用方法小结RFC8484中指定使用/dns-query路径作为默认查询路径。在客户端方面,火狐、谷歌等浏览器均已支持DoH,其中谷歌浏览器中的配置路径为:设置-安全和隐私设置-高级-使用安全DNS:
当然,由于政策性原因,我们在中国境内搭建的Doh服务器并不能在没有经营性备案的情况下向公网提供服务,所以本次实践的意义在于学习和动手实践的乐趣。
另外,由于提供DNS服务有快速和准确等要求,所以个人搭建的服务器并不是最优选择;若有需求,可以试一下阿里云的公共DoH服务。
官方活动时间:阿里云采购季还剩最后10天了,整个3月,天天有惊喜;点击我要上云,抓住机会拥有一台属于自己的云服务器吧·

