前言

最近我在手机浏览器上网时候,经常会有看上去“很正常”的网页提醒我浏览器版本低,而且是用浏览器的对话框来提醒我,看到我就知道网络有一点问题,听说很多都是dns被污染了,我也不清楚是不是,我就打算到一个dns服务器用一用,写此教程。

阿狸嘻嘻嘻

本教程使用AdGuardHome来搭建,效果不错,dns解析速度快,去广告效果显著,可以添加dns解析拦截规则等很多功能,还有可视化面板,操作简单,易懂,适用于普通爱好者使用与研究。

提醒与要求

  • 需要一个拥有公网IP的服务器,操作系统为 linux 64位(x64)。
  • 一个域名 (如果没有就不能使用加密dns)
  • 如果你的服务器在国内,可能需要域名备案之后才能正常使用加密方式(没有备案的服务器会封锁80、443端口)
  • 如果你要在国内用做公用dns服务器,可能需要进行公用dns服务器备案,请自查国家相关政策。
  • 本教程需要你的服务器放行8044353853端口或者你自己接下来自定义的端口。
  • 如果你不懂什么是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 来退回到可执行命令行,如bashzsh,再退出命令行窗口,可以放心,AdGuardHome仍然在后台运行。
  • 如果你需要控制AdGuardHome的进程,请自己使用top等命令查看或结束进程。
  • 运行好之后,不需要再用IP地址访问面板了,直接使用解析到服务器的域名就能访问。
  • 输入用户名密码登陆。

加入之后,点击面板上面的设置->加密设置
开启https

  • 开启加密。
  • 输入你刚刚申请证书的域名,例如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服务器就行。
IP地址
在图中的首选DNS服务器填入我们的服务器的ipv4地址即可

路由器等设备在wan口的设置或者DHCP设置界面都可以设置修改DNS服务器,换成自己的服务器IP地址即可。

通过DOT

安卓手机支持系统级使用DOT服务器解析[^支持的手机版本],在设置中叫私人DNS,开启步骤为设置->网络与互联网->私人DNS->选择私人DNS提供商主机名,输入你的DOT域名即可。
安卓系统开启

  • 注意,直接输入域名即可,不需要tls//:前缀,其他地方是否需要前缀看你填写的地方的说明。

通过DOH

clash配置文件
DOH算是一种比较安全的DNS解析方式,但是可能不是很常见,能用上的地方其实有是有,但是不是很引人注目,比如说clash这个软件的配置文件中的dns配置,可以支持文章中的三种格式的DNS请求。

还有就是火狐浏览器可以支持DOH加密DNS,设置方法如下:
火狐浏览器开启doh
打开火狐浏览器,打开右侧主菜单->选项->常规选项卡->找到网络设置栏目->点击右侧设置...按钮->弹出连接设置对话框->在最下面启用启用基于 HTTPS 的 DNS选项->选用供应商选择自定义->自定义编辑框输入你的DOH地址[^例如]确认保存。

结尾

这个教程讲了怎么下载、安装、配置、获取证书、配置加密dns、dns使用方法等,希望对大家有所帮助,有问题的地方可以提出来,欢迎评论哦!

  • 那些dns拦截规则什么的,这些其实都比较简单,可以直接百度就能找到规则,并且添加进去
  • 另外dns设置本来也需要简单配置一下,还有上游dns地址也要配置一下,但是都不是很影响使用,我会过段时间更新这个文章。

本文章借用了其他网站的部分图片(已标记),转载的图片来源如下:

[^支持的手机版本]: 私人DNS功能只支持Android 9及其以上版本的系统
[^例如]: 需要添加https://前缀,如:https://dns.aliquanquan.xyz/dns-query