配置自己的DNS

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

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

准备部分:

一台能正常解析域名的机器(无需公网 IP)

域名托管在 Cloudflare 上,如果没有请参考 https://www.nodeloc.com/d/23749

前置部分(域名测试工具)

https://github.com/natesales/q/releases

#下载二进制文件压缩包

1
wget https://github.com/natesales/q/releases/download/v0.19.2/q_0.19.2_linux_amd64.tar.gz -O qfiles.tar.gz 

#解压二进制文件

1
mkdir -p qfiles ; tar -xzvf qfiles.tar.gz -C qfiles 

#复制并赋予可执行权限

1
cp ./qfiles/q ./dnsquery ; chmod +x ./dnsquery

部署部分(生成证书,建立 DOH)

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

1
2

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

建立 DOH

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

#下载二进制文件

1
2

wget https://github.com/AdguardTeam/dnsproxy/releases/download/v0.75.0/dnsproxy-linux-amd64-v0.75.0.tar.gz -O dnsproxy.tar.gz

#解压二进制文件

1
2

tar -xzvf dnsproxy.tar.gz

#复制并赋予可执行权限

1
2

cp ./linux-amd64/dnsproxy ./dnsproxy ; chmod +x ./dnsproxy

#创建DOH,使用端口10443

1
2

./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 是否成功**

1
2

./dnsquery A AAAA --dnssec cloudflare.com @https://127.0.0.1:10443/dns-query -i

#如果出现cloudflare.com. * A * 类似的字样就是成功了

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

网站部分

打开 https://dash.cloudflare.com/ 【如果没有登录请先登录】

点击左侧 Zero Trust, 继续点击左侧 Networks,然后中间找到并点击 Create a tunnel

点击中间部分偏左的按钮 Select Cloudflared(Select your tunnel type)

输入 Tunnel name,点击 Save tunnel

在页面中找到 $cloudflared.exe service install ** 类似字样并复制,然后取出 service install 后面的全部字符串,也就是 token 保存好

点击 Next

输入子域名 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

1
2
3
4

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】

1
2

./dnsquery A AAAA --dnssec cloudflare.com @https://mydns.mydomain.com/dns-query

#如果出现cloudflare.com. * A * 类似的字样就是成功了

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

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