佬友们都知道DNS全称是 Domain Name System,通俗来讲也就是说用一些相对好记忆的字符串来解析出实际要访问的IP地址。DNS这些年来也一直在进化和改进,最终的目的是安全快速易使用

今天我们以实际例子来说说目前使用较多且相对安全的DNS查询方式 DOH (DNS-over-HTTPs)。

准备部分:
1.一台能正常解析域名的机器(无需公网IP
2.域名托管在Cloudflare上,如果没有请参考 https://www.nodeloc.com/d/23749

前置部分(域名测试工具)
感谢 natesales 提供了一个简洁易使用的域名测试工具
工具更多格式请访问 https://github.com/natesales/q/releases

#下载二进制文件压缩包
wget https://github.com/natesales/q/releases/download/v0.19.2/q_0.19.2_linux_amd64.tar.gz -O qfiles.tar.gz
#解压二进制文件
mkdir -p qfiles ; tar -xzvf qfiles.tar.gz -C qfiles
#复制并赋予可执行权限
cp ./qfiles/q ./dnsquery ; chmod +x ./dnsquery

部署部分(生成证书,建立DOH)
1.生成5000年的证书,只需要一直回车即可。
如果想优雅的生成证书请访问 https://www.nodeloc.com/d/23186https://www.nodeloc.com/d/23215

openssl genrsa -out mydomain.key 2048 ; openssl req -new -x509 -key mydomain.key -out mydomain.crt -days 1825000

2.建立DOH
感谢 AdguardTeam 提供的安全DNS软件
更多格式请访问 https://github.com/AdguardTeam/dnsproxy/releases

#下载二进制文件
wget https://github.com/AdguardTeam/dnsproxy/releases/download/v0.75.0/dnsproxy-linux-amd64-v0.75.0.tar.gz -O dnsproxy.tar.gz
#解压二进制文件
tar -xzvf dnsproxy.tar.gz
#复制并赋予可执行权限
cp ./linux-amd64/dnsproxy ./dnsproxy ; chmod +x ./dnsproxy
#创建DOH,使用端口10443
./dnsproxy -l 127.0.0.1 --https-port=10443 --tls-crt=mydomain.crt --tls-key=mydomain.key -u https://1.1.1.1/dns-query -u https://8.8.8.8/dns-query -u 1.1.1.1:53 -u 8.8.8.8:53 -p 0 --cache --edns --edns-addr=114.114.114.114

测试本机DOH是否成功

./dnsquery A AAAA --dnssec cloudflare.com @https://127.0.0.1:10443/dns-query -i
#如果出现cloudflare.com. *** A ******* 类似的字样就是成功了

Cloudflare配置部分(如果没有托管域名请参考准备部分

网站部分
打开 https://dash.cloudflare.com/ 【如果没有登录请先登录】
1.点击左侧 Zero Trust , 继续点击左侧 Networks,然后中间找到并点击 Create a tunnel
2.点击中间部分偏左的按钮 Select Cloudflared (Select your tunnel type)
3.输入 Tunnel name ,点击 Save tunnel
4.在页面中找到 $cloudflared.exe service install ************** 类似字样并复制,然后取出 service install 后面的全部字符串,也就是 token 保存好
5.点击 Next
6.输入子域名 Subdomain ,选择根域 Domain ,Type 选 HTTPS,URL中 输入 127.0.0.1:10443,然后点击 Additional application settings,接着点击 TLS,然后打开 No TLS Verify ,最后 Save tunnel

软件部分
感谢大善人 Cloudflare,更多格式请访问 https://github.com/cloudflare/cloudflared/releases
如果想要使用更强大的cftun,请访问 https://www.nodeloc.com/d/23373

wget https://github.com/cloudflare/cloudflared/releases/download/2025.2.1/cloudflared-linux-amd64 -O cf
chmod +x cf
./cf tunnel --edge-ip-version auto --no-autoupdate run --token 这里填写刚才复制出来的token

测试最终的DOH是否成功【假设域名是mydns.mydomain.com

./dnsquery A AAAA --dnssec cloudflare.com @https://mydns.mydomain.com/dns-query
#如果出现cloudflare.com. *** A ******* 类似的字样就是成功了

需要使用DOH的地方,只需要填写 https://mydns.mydomain.com/dns-query 即可。

到此我们就实现了在无公网IP的条件下配置出一个安全绿色的DNS环境,教程至此基本结束。

相信佬友们会有更好的解决方案,还请多多交流与分享。

Good luck to all

打赏

  • 50 能量 来自 James
  • 10 能量 来自 gcp
  • 30 能量 来自 piller
  • 10 能量 来自 amd64
  • 10 能量 来自 dian
    评论: 好用

看了15分钟,大概是看明白了,等下就实操试试

打赏

  • 10 能量 来自 rabit

感谢大佬上课!

大佬每次出教程,都会把可能用到的全列出来,简直就是喂饭啊。ac13

不愧是传奇,这教程出的太及时了

虽然不怎么懂,但不能掩盖我的佩服之情

感谢分享,学习一下

牛P,按教程搞定了,速度没感觉和之前有啥区别。做为后备妥妥的。

  • x

    YEAR
  • #10

感谢分享 xhj06

谢谢传奇大佬,早就想自己弄一个,但是总是少这少哪,不是很稳定。
按照大佬的教程已经配置好了,以后再也不用看别人眼色了。