前言
最近我在手机浏览器上网时候,经常会有看上去“很正常”的网页提醒我浏览器版本低,而且是用浏览器的对话框来提醒我,看到我就知道网络有一点问题,听说很多都是dns被污染了,我也不清楚是不是,我就打算到一个dns服务器用一用,写此教程。
本教程使用AdGuardHome来搭建,效果不错,dns解析速度快,去广告效果显著,可以添加dns解析拦截规则等很多功能,还有可视化面板,操作简单,易懂,适用于普通爱好者使用与研究。
提醒与要求
- 需要一个拥有公网IP的服务器,操作系统为 linux 64位(x64)。
- 一个域名 (如果没有就不能使用加密dns)
- 如果你的服务器在国内,可能需要域名备案之后才能正常使用加密方式(没有备案的服务器会封锁80、443端口)
- 如果你要在国内用做公用dns服务器,可能需要进行公用dns服务器备案,请自查国家相关政策。
- 本教程需要你的服务器放行
80
、443
、53
、853
端口或者你自己接下来自定义的端口。 - 如果你不懂什么是DOT、DOH,那么你可以先不要先看我的教程,了解好这两个之后再继续。
- 本教程需要你懂得一些linux操作与互联网基础知识才能让你理解步骤为什么这么做。
下载与运行AdGuardHome
直接用wget
命令下载二进制包
$ wget https://static.adguard.com/adguardhome/release/AdGuardHome_linux_amd64.tar.gz #下载到用户文件夹
$ tar -xzvf AdGuardHome_linux_amd64.tar.gz #解压到用户文件夹
$ cd AdGuardHome #定位到解压后的文件夹
这个时候可以开始让AdGuardHome运行了,运行的时候会占用一个端口来显示可视化面板,可以直接用IP地址加端口号访问,AdGuardHome可以自定义监听端口号,下面我们来运行AdGuardHome。
$ ./AdGuardHome #直接运行,默认端口为3000
默认端口为3000
,如果需要自定义端口,那么在上面的命令后面添加-p 你的端口号
例如我想要AdGuardHome使用10086
端口作为面板入口,那么运行:
$ ./AdGuardHome -p 10086
等命令行开始跑动之后,这个时候不要关闭这个命令行窗口,在我说要关闭之前都不要关!
第一次配置
打开浏览器,在地址栏输入你的服务器IP地址及端口号,格式:[ip]:[port]
浏览器会打开AdGuardHome的控制面板,第一次打开,需要设置一下。
点击开始配置
网页管理界面
端口保持默认,80
端口,因为要使用加密dns,等会要申请证书注意,等会设置完成之后,需要更换到
80
端口再次登陆面板,以后默认的面板端口就是80
端口。DNS服务器
端口保持默认,53
端口,这个是使用IP地址为服务器的端口,53
为标准dns端口。点击
下一步
,设置账户密码。点击
下一步
,你的服务器已经可以解析由你的设备填写本dns服务器(填写的是服务器公网IP地址)的请求了。点击
下一步
,可以看到整个仪表盘了。
为服务器申请SSL证书,并配置到DNS服务器中
但是我们的服务器还不具备解析加密dns的请求,下面申请证书。
解析域名
进行安装证书之前,需要把你的域名解析到这个服务器。
- 比如说我的域名
dns.aliquanquan.xyz
解析到服务器的IP地址即可。 - 如果你的服务器支持ipv6,也可以把你的域名解析到你的ipv6地址上面去。
下面以CentOS 7为例子
我们使用Certbot来申请证书,打开Certbot官网。
Software
选择None of the above
System
选择你的服务器操作系统,网页下面就会刷新到你对应操作系统和软件的安装方法。
安装Certbot ^root
$ yum install certbot
- 转到刚刚运行
$ ./AdGuardHome
的命令行窗口中,使用 Ctrl+c 结束AdGuardHome运行。 - 如果CentOS 7提示找不到
certbot
的包,请把yum
源更换到国内阿里云镜像源。
申请证书
运行这个命令安装证书
$ certbot certonly --standalone
- 运行会一个一个问题需要你操作,和填写,按照要求去操作,如果输入错误了可以重新来运行。
- 整个过程就不展示了,虽然是英文,但是翻译一下就会懂它提示的操作,按程序提示走就行了。
- 最后会提示你输入你的域名,按照你域名解析的网址输入就行了。
接下来会提示下载证书成功的消息,命令窗口会给出两个文件的路径,一个是证书pem文件
,一个是私钥pem文件
(有的后缀名是key),把这两个文件的路径保存好!
- 下面是我的证书申请安装成功的样子:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/dns.aliquanquan.xyz/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/dns.aliquanquan.xyz/privkey.pem
Your cert will expire on 2020-10-30. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
其中可以看到certbot默认保存证书的路径是/etc/letsencrypt/live/你的域名/
fullchain.pem
为证书文件。privkey.pem
为私钥文件。
配置加密dns
加密dns有两种,一种是叫DNS-over-HTTPS
(简称DOH),另一种叫DNS-over-TLS
(DOT),其中DOH的相对安全性最高。
AdGuardHome可以支持普通IP地址访问解析、DOH、DOT三种。
打开命令行,重新运行AdGuardHome^端口:
$ ./AdGuardHome &
- 注意这里的命令后面添加了一个
&
号,你可以在命令行运行AdGuardHome时,使用Ctrl+c 来退回到可执行命令行,如bash
、zsh
,再退出命令行窗口,可以放心,AdGuardHome仍然在后台运行。 - 如果你需要控制AdGuardHome的进程,请自己使用
top
等命令查看或结束进程。 - 运行好之后,不需要再用IP地址访问面板了,直接使用解析到服务器的域名就能访问。
- 输入用户名密码登陆。
加入之后,点击面板上面的设置
->加密设置
- 开启加密。
- 输入你刚刚申请证书的域名,例如
dns.aliquanquan.xyz
。
添加证书到你的AdGuardHome
1.证书和私钥都选择设置私钥文件
的选项。
2.输入证书文件路径,例如:/etc/letsencrypt/live/dns.aliquanquan.xyz/fullchain.pem
。
3.输入私钥的路径,例如:/etc/letsencrypt/live/dns.aliquanquan.xyz/privkey.pem
如果一切顺利的话,你会看到两个绿色的文字:证书链验证有效
、该 RSA 私钥验证有效
,说明加密已经成功了,点击保存配置
。
DNS服务器的使用
恭喜你,你的服务器已经可以正常处理外来的计算机的网络域名解析请求了,接下来让自己的设备使用我们自己搭建的DNS服务器。
你的三种DNS连接解析途径已经配置完成,你的IP地址本身、你的域名、你的域名及后面加/dns-query
IP地址 | DOT | DOH |
---|---|---|
xxx.xxx.xxx | tls://www.example.com | https://www.example.com/dns-query |
你也可以在面板里面的设置指导
中查看你的DOT、DOH地址。
通过IP地址
电脑、路由器设备大部分都需要设置DNS的IP地址,不支持DOH和DOT,电脑设置DNS服务器就不需要多介绍了,到网卡适配器界面设置ipv4的dns服务器就行。
在图中的首选DNS服务器
填入我们的服务器的ipv4地址即可
路由器等设备在wan口的设置或者DHCP设置界面都可以设置修改DNS服务器,换成自己的服务器IP地址即可。
通过DOT
安卓手机支持系统级使用DOT服务器解析[^支持的手机版本],在设置中叫私人DNS
,开启步骤为设置
->网络与互联网
->私人DNS
->选择私人DNS提供商主机名
,输入你的DOT域名即可。
- 注意,直接输入域名即可,不需要
tls//:
前缀,其他地方是否需要前缀看你填写的地方的说明。
通过DOH
DOH算是一种比较安全的DNS解析方式,但是可能不是很常见,能用上的地方其实有是有,但是不是很引人注目,比如说clash
这个软件的配置文件中的dns
配置,可以支持文章中的三种格式的DNS请求。
还有就是火狐浏览器可以支持DOH加密DNS,设置方法如下:
打开火狐浏览器,打开右侧主菜单->选项
->常规
选项卡->找到网络设置
栏目->点击右侧设置...
按钮->弹出连接设置
对话框->在最下面启用启用基于 HTTPS 的 DNS
选项->选用供应商选择自定义
->自定义编辑框输入你的DOH地址
[^例如]确认保存。
结尾
这个教程讲了怎么下载、安装、配置、获取证书、配置加密dns、dns使用方法等,希望对大家有所帮助,有问题的地方可以提出来,欢迎评论哦!
- 那些dns拦截规则什么的,这些其实都比较简单,可以直接百度就能找到规则,并且添加进去
- 另外dns设置本来也需要简单配置一下,还有上游dns地址也要配置一下,但是都不是很影响使用,我会过段时间更新这个文章。
本文章借用了其他网站的部分图片(已标记),转载的图片来源如下:
[^支持的手机版本]: 私人DNS功能只支持Android 9及其以上版本的系统
[^例如]: 需要添加https://
前缀,如:https://dns.aliquanquan.xyz/dns-query
评论内容审核后显示,评论后刷新页面您刚刚评论的内容可能会隐藏哦,不必重复评论 😁