DNS over HTTPs 目前已经较为流行,考虑到公共服务的稳定性和安全性有限,使用VPS自建一个DOH服务是完全可行的。在参考网上的资料后,发现实际配置中还可以更简化。下面是最精简的方案,最大限度的采用了现成的脚本资源。
排除一个IPV6错误.
1,方案
Client——https——[nginx–doh-server]——udp——8.8.8.8
取消Dnscrypt-proxy,直接使用doh-server程序。因为在大多数地区,并没有安全问题,有安全问题的是你。
由doh-server直接向1.1.1.1或8.8.8.8请求UDP,再http给你。
nginx反代https。
需要一个正常国家的VPS,一个域名。域名先做好解析,解析到VPS的IP。
2,设置doh(示例系统CentOS 7.5,其他系统参考)
安装依赖go语言
yum install golang
安装dns 0ver https 服务器(Github地址)
git clone https://github.com/m13253/dns-over-https.git
cd dns-over-https
make PREFIX=/usr
make install
配置doh服务器
配置文件位置 /etc/dns-over-https/doh-server.conf
listen = [
“127.0.0.1:8053”,
#”[::1]:8053″,## To listen on both 0.0.0.0:8053 and [::]:8053, use the following line
# “:8053”,
]
默认输出解析结果端口为8053,同时listen IPV4和IPV6,如果你的VPS不支持IPV6,务必注释掉IPV6一行,否则会出错。
上游DNS服务器设置
upstream = [
“udp:1.1.1.1:53”,
“udp:1.0.0.1:53”,
“udp:8.8.8.8:53”,
“udp:8.8.4.4:53”,
在大多数地方的VPS环境下,这个就可以了。有人用dnscrypt-proxy做上游,我认为是画蛇添足,而且没有缓存的话会非常慢。
设置systemd启动(可选)
systemctl start doh–server.service
systemctl enable doh–server.service
启动后无问题,则可以配置nginx。
3,配置nginx
既然是用来跑doh,就简化一点,使用LNMP一键包,连证书一并办了吧。当然我们不需要M和P,就不用安装了。
wget http://soft.vpser.net/lnmp/lnmp1.7.tar.gz -cO lnmp1.7.tar.gz && tar zxf lnmp1.7.tar.gz && cd lnmp1.7
./install.sh nginx(只安装nginx,不安装php和mysql)
装好后直接lnmp vhost add,添加刚才解析好的域名(示例name.mydomain.com),证书选择Let’s encrypt,一路绿灯搞完。
搞完后访问 https://name.mydomain.com 测试https服务是否正确运行。
正确运行后,修改vhost配置文件
应该有两个server,在第二个server(应为listen 443)的ssl配置后加入以下内容:
ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
…. (此后插入下面内容)
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://127.0.0.1:8053/dns-query;
}
之后访问https://name.mydomain.com/dns-query 提示报错,非法参数 说明已经正确运行。报错502之类的说明配置错误。
然后可以直接以 https://name.mydomain.com/dns-query 的方式使用DoH了。
什么?DoH也用域名?那DoH的域名怎么解析呢?
亲爱的读者们,你肯定已经有办法了不是吗?
参考文件: