本次配置DNS over HTTPS采用Ubuntu 20系统,需要安装dns-over-https和nginx
首先是dns-over-https的安装,在此使用在服务器编译安装的方法:
//安装golang
apt update
sudo apt install golang-1.22
//为go配置bash
sudo vim ~/.bashrc
//在文件末尾添加并:wq保存:
export PATH=$PATH:/usr/lib/go-1.22/bin
//应用新的bash配置文件
source ~/.bashrc
//更换go的代理(可选的)
go env -w GOPROXY=https://goproxy.cn
//清理go mod缓存(可选的)
go clean -modcache && go mod tidy
//安装git(可选的)
sudo apt install git
//克隆dns-over-https源代码并进入目录
git clone https://github.com/m13253/dns-over-https.git
cd dns-over-https
//编译并安装
make
sudo make install
//编辑dns-over-https配置文件并:wq保存
sudo vim /etc/dns-over-https/doh-server.conf
/*
在配置文件中,需要注意的是listen的端口,在此使用默认的8053端口;
此外还有http的路径,在此使用默认的"/dns-query";
需要修改的是upstream地址,即doh的上游服务器地址,在此使用"udp:127.0.0.53:53"(即Linux内建的DNS缓存,地址前端必须添加"udp:"前缀)。
特别的是,由于构建本DoH服务器的主要目的是规避DNS污染,而不是防追踪,所以Ubuntu系统的DNS上游直接采用了阿里云提供的内网DNS服务器,以最优化响应速率和稳定性。
*/
//启动doh-server并检查运行状态
sudo systemctl start doh-server
sudo systemctl status doh-server.service
//安装nginx
apt install nginx
//配置nginx.conf并:wq保存
sudo vim /etc/nginx/nginx.conf
关于nginx.conf的配置,在此详细描述。本次搭建的DoH服务与Web服务共生,虽然二者都采用443端口进行HTTPS通信,但可以通过路径做区分。
首先,在http块中添加转发上游:
upstream dns-backend {
server 127.0.0.1:8053;
}
接着配置server做转发,在已经可以访问的server块(即已经配置好ssl和文件路径等的web server)中添加:
location /dns-query {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 86400;
proxy_pass http://dns-backend/dns-query ;
}
关于nginx的ssl的配置及ssl证书的签发,在本文就不多讲解了,可自行了解。也可查看结尾的参考教程。
配置完成后,启动nginx即可:
sudo service nginx start
之后可以在设备上测试DoH解析,最终的地址为:https://yourdomain.com/dns-query
参考: