搭建公网DNS服务器教程[AdGuardHome]

本文最后更新于 6 年前,文中所描述的信息可能已发生改变。

前言

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

阿狸嘻嘻嘻

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

提醒与要求

  • 需要一个拥有公网IP的服务器,操作系统为 linux 64位(x64)。
  • 一个域名 (如果没有就不能使用加密dns)
  • 如果你的服务器在国内,可能需要域名备案之后才能正常使用加密方式(没有备案的服务器会封锁80、443端口)
  • 如果你要在国内用做公用dns服务器,可能需要进行公用dns服务器备案,请自查国家相关政策。
  • 本教程需要你的服务器放行 8044353853端口或者你自己接下来自定义的端口。
  • 如果你不懂什么是DOT、DOH,那么你可以先不要先看我的教程,了解好这两个之后再继续。
  • 本教程需要你懂得一些linux操作与互联网基础知识才能让你理解步骤为什么这么做。

下载与运行AdGuardHome

直接用 wget命令下载二进制包

shell
$ 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。

shell
$ ./AdGuardHome		#直接运行,默认端口为3000

默认端口为 3000 ,如果需要自定义端口,那么在上面的命令后面添加 -p 你的端口号 例如我想要AdGuardHome使用 10086端口作为面板入口,那么运行:

shell
$ ./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

shell
$ yum install certbot
  • 转到刚刚运行 $ ./AdGuardHome的命令行窗口中,使用 <kbd>Ctrl </kbd>+<kbd>c </kbd> 结束AdGuardHome运行。
  • 如果CentOS 7提示找不到 certbot的包,请把 yum源更换到国内阿里云镜像源。

申请证书

运行这个命令安装证书

shell
$ certbot certonly --standalone
  • 运行会一个一个问题需要你操作,和填写,按照要求去操作,如果输入错误了可以重新来运行。
  • 整个过程就不展示了,虽然是英文,但是翻译一下就会懂它提示的操作,按程序提示走就行了。
  • 最后会提示你输入你的域名,按照你域名解析的网址输入就行了。

接下来会提示下载证书成功的消息,命令窗口会给出两个文件的路径,一个是证书 pem文件,一个是私钥 pem文件(有的后缀名是key),把这两个文件的路径保存好!

  • 下面是我的证书申请安装成功的样子:
bash
- 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

:

shell
$ ./AdGuardHome &
  • 注意这里的命令后面添加了一个 &号,你可以在命令行运行AdGuardHome时,使用 <kbd>Ctrl </kbd>+<kbd>c </kbd> 来退回到可执行命令行,如 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地址DOTDOH
xxx.xxx.xxxtls://www.example.comhttps://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地址也要配置一下,但是都不是很影响使用,我会过段时间更新这个文章。

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


  1. 请使用root权限安装或运行 ↩︎

  2. 上文已经重新设置了面板为 80端口,所以不需要再指定端口了。 ↩︎

  3. 私人DNS功能只支持Android 9及其以上版本的系统 ↩︎

  4. 需要添加 https://前缀,如:https://dns.aliquanquan.xyz/dns-query ↩︎

关于校园网结构的思考与探索
构建安卓刷机包教程[Android Q]