CentOS 7搭建一台DoH + Nginx服务器

本文为翻译,并加上了自己的一些修改。

原文:https://facebookexperimental.github.io/doh-proxy/tutorials/nginx-dohhttpproxy-unbound-centos7.html

本文介绍在CentOS 7搭建DNS over HTTPS并使用Nginx作为前端的教程。

环境搭建

基础工具

我们在CentOS 7下需要安装几个包,以下操作均以root用户权限:

其中git可选。bind-utils带dig工具,certbox-nginx是为了申请Let’s Encrypt的SSL证书才安装的。

Python 3.6

doh-proxy需要使用到python 3.6版本,所以需要额外安装。在CentOS 7下我们使用IUS的Repo:

配置doh-proxy

使用pip安装:

如果想要尝鲜最新版,则需要安装git后输入

创建新用户

我们将会以一个新用户跑dns-proxy程序,所以需要创建它。

创建systemd unit文件

接下来我们要启动2个doh-httpproxy,分别监听在8080和8081口上。

dns-proxy配置完毕,但目前本地(上方upstream的::1地址,是个本地地址,类似localhost)还没有一台DNS服务器,所以要在本地搭建一个。我们使用unbound。

设置unbound

安装unbound并监听127.0.0.1以及::1地址。

测试可通过以下命令

最后我们还有一步要做,设置Nginx与我们的doh-proxy对话

配置Nginx

安装Nginx

申请证书,你需要先设置一个域名然后把A(以及AAAA)记录指向你的机器,此机器需要能被外部访问到。本文用dns.example.com作为例子。

配置Nginx

找到/etc/nginx/nginx.conf,找到以下内容:

替换成

添加规则,只允许GET/POST/HEAD的请求:

找到下面这一块

替换成

添加上游,添加在server block的上面,像这样:

重启Nginx

如果开启了SELinux,则需要打通规则:

测试

使用以下命令可以在5353口监听一个测试

用以下命令可以针对5353口进行dns query:

正常的话你应该能得到一个A记录了。

发表评论