前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >善用开源, 用AdGuard Home搭建私有DNS服务

善用开源, 用AdGuard Home搭建私有DNS服务

作者头像
御剑
发布2024-01-29 15:41:11
1.3K1
发布2024-01-29 15:41:11
举报
文章被收录于专栏:微言码道微言码道

1. 明确需求

首先需要再次明确的是, 搭建一个私有的DNS服务是有适应场景的, 建议在以下几个场景中你完全可以考虑搭建一个私有的DNS服务

  • 在你的家庭网络中搭建一个私有的DNS解析, 主要用来保护你家人的上网健康
  • 在公司或团队中搭建一个私有的DNS解析, 主要用来做公司层面的私有服务解析

如果只是你个人使用, 并无太大必要. 直接使用公有的DNS解析就足够了.

但是无论是哪种情况, 搭建一个私有的DNS需要一台私有服务器. 比如我是在自己的家庭服务器上安装的这个服务.

2. AdGuard Home简介

先介绍下AdGuard Home

AdGuard Home是adguard推出的一款工具, adguard是一家专门网络安全与隐私保护的公司. 公司名下有很多广告过滤的产品, 比如我的Chrome上也安装了adguard的广告过滤插件.而AdGurad Home是它推出的开源免费的隐私保护与广告过滤工具.

与Chrome上的广告插件相比, AdGuard Home特点表现在:

  • 它是在DNS层级上做隐私保护以及广告拦截.
  • 你只需要安装它, 通过路由器的DNS用它来解析, 就自动保护所有联网设备
  • 支持DNS自定义解析等DNS扩展能力

所以, 简而言之, AdGuard Home是一个DNS解析服务, 它通过在DNS解析层面来过滤广告, 恶意网站等.

它的原理比较很简单, 一般是通过域名黑名单来实现. 恶意网站或广告网站对它的DNS不做正常解析就行了

3. 安装

这个部分主要讲解如何安装Adgurad Home.

前提条件

安装之前需要考虑以下前提条件的:

  • 你需要一台服务器,当然最好是Linux, 能用来安装Adgurad Home
  • 建议使用Docker来安装, 因此你需要在Linux上搭建好docker环境

Docker环境

我还是那个建议, 能基于Docker来部署, 就不要使用其它方式. Docker部署简单, 易于操作, 并且尽量降低各种环境与依赖

Docker以及Docker Compose, 如果没有请自行查阅官方.

新建目录

在你的Linux某个目录下, 创建一个adguardhome目录 (当然你可以修改其它任何目录名)

在这个目录下, 创建confdir以及workdir两上目录,以下一个docker-compose.yml文件. 结构如下

代码语言:javascript
复制
.
├── confdir
├── docker-compose.yml
└── workdir

解释如下:

  • confdif: 配置目录
  • workdir: AdGurad Home运行产生的数据目录. 比如数据, DNS缓存等
  • docker-compose.yml: docker compose配置文件

编辑docker-compose.yml

编辑你的docker-compose.yml文件,内容如下:

代码语言:javascript
复制
version: "3.9"

services:
  adguardhome:
    image: adguard/adguardhome:latest
    restart: always
    container_name: adguardhome
    ports:
      - 53:53/tcp
      - 53:53/udp
      - 3000:3000/tcp
    volumes:
      - ./workdir:/opt/adguardhome/work
      - ./confdir:/opt/adguardhome/conf

几个重要参数说明:

  • ports: 开放53的TCP以及UDP端口. 53是DNS的默认端口. 3000是Web管理端口
  • volumes: 挂载我们刚刚创建的两个目录, 这样docker容器重启时, 相关数据就不会丢失.

开放端口

如果你的Linux有防火墙, 比如我的Debian都会有UFW. 那你需要开放端口

代码语言:javascript
复制
sudo ufw allow 53
sudo ufw allow 3000

运行

使用如下命令来启动运行服务

代码语言:javascript
复制
sudo docker compose up -d

第一次可能会因为下载镜像需要一些时间, 一切正常很快就能启动

关闭Linux的默认resolved

如果启动时, 报53端口已被占用. 那是因为部分Linux自带了一个resolved服务, 也是做域名解析的的.

我们使用了AdGurad Home, 就不需要这个了. 把它停掉

代码语言:javascript
复制
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved

4. 初始化

启动成功后, 访问http://ip:3000, 第一次会进入一个配置页面. 这个配置页面会要求我们初始化用户名密码及一些常规配置.

设置端口

在这一步, 设置你刚在docker文件中的端口. 我们的是3000和53

  • 3000是Web管理端口
  • 53是DNS默认端口

创建用户名密码

这一步, 设置你的用户名和密码. 后面你需要使用这个用户名和密码来登录这个系统

完成

完成上述几个简单的步骤, 设置就完成了

5. 设置

其实, 完成这一步后, 这个DNS解析默认就可以使用了, 开箱即用.

但很可惜, 在国内, 由于众所周知的原因, AdGurad Home中默认的上游DNS解析服务器很可能是访问不了的. 所以我们要修改上游DNS解析服务器

进入设置-DNS设置界面

如上图所示, 在这里, 将上游的DNS服务器, 修改为你能够访问的一些知名可靠的DNS服务.

  • 1.1.1.1
  • 1.0.0.1

在这个设置中, AdGurad Home提供了一个已知DNS提供商列表, 建议从这里找你访问速度较快的.

你可以添加一个或多个上游DNS服务. 比如国外一个, 国内一个. 国外优先. 这样更有保障.

建议

***尽量使用国外DNS做DNS上游服务器. ***

原因当然很容易理解, 我们本来就是希望自建DNS来尽量避免DNS劫持与DNS污染. 如果仍然使用国内DNS做上游, 这个就解决不了问题.

当然,你不需要担心国外DNS会不会速度很慢, AdGurad Home本身是一个DNS服务, 只有在本地没有缓存记录的情况下, 才会向上游DNS请求解析的. 这意味着, 除了第一次或缓存过期等极少数情况, 大部分时间域名的解析是非常快的. 是由AdGuard Home承担的.

验证

设置完上游DNS服务器后, 保存下你的设置. 然后使用nslookup来测试下它的正常性

代码语言:javascript
复制
# 将127.0.0.1改成你的AdGurad Home所在服务器的IP
nslookup google.com 127.0.0.1

你会看到如下结果

代码语言:javascript
复制
Server:		127.0.0.1
Address:	127.0.0.1#53

Name:	google.com
Address: 8.7.198.46
Name:	google.com
Address: 8.7.198.46

你得到了Google.com正确的DNS解析. 这证明AdGurad Home已经生效了.

6. 更多

隐私保护与广告拦截

DNS域名解析是AdGurad Home的核心能力. 但AdGurad Home这个产品的本意是基于DNS域名解析层面来做隐私保护与广告过滤.

其实原理比较简单, 它有一个DNS黑名单, 这些黑名单的域名可能是恶意广告或广告网站, 遇到这个黑名单中的域名, 它解析DNS时, 会返回错误的IP.

这样就访问不了这些恶意网站及广告了. (很多广告联盟有固定的一些域名, 屏蔽这些域名就无法在网页上投放广告了)

进入过滤器->DNS黑名单, 在这里添加或维护域名黑名单. AdGuard Home默认已经提供了一份. 你也可以在互联网上寻找一些知名的公开的类似的维护列表.

DNS自定义解析

如果你是公司中使用, 可能会遇上需要解析一些内部域名.

这个时候,在过滤器->DNS重写中, 可以添加自定义解析.

日志

前几天有人私信问我DNS解析日志方面的事.

AdGurad Home自带了完整的日志, 你可以通过查询日志模块, 来访问与查询所有日志. 这里有完整的日志.

6. 最后的设置

其实, 到这一步, 我们已经成功搭建了一个完整的DNS服务. 但DNS服务要生效, 得联网设备修改它的DNS地址指向我们的服务器IP.

如果需要别人每个设备一个一个修改, 这就非常麻烦了.

好在, 大多数情况下, 我们其实都是通过路由器来上网. 所以, 方便的方式是修改路由器中的默认DNS服务地址, 指向我们刚刚建立的这个DNS服务.

只需要输入这个AdGuard Home的IP, 你整个家庭的所有上网设备, 或整个公司所有的上网设备, 就自动使用这个DNS解析的了.

是不是非常方便?

相比其它一些自建DNS解决方案, AdGurad Home是我见过最简单, 最容易部署与设置的DNS解析的服务工具. 除了部署需要一点Linux及Docker能力以外, 普通人使用这个工具完全没有障碍.

AdGurad Home是一个基于GO语言实现的开源项目. 向adgurad公司以及开源致敬.

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微言码道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 明确需求
  • 2. AdGuard Home简介
  • 3. 安装
  • 4. 初始化
  • 5. 设置
  • 6. 更多
  • 6. 最后的设置
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档