2502 自建DNS服务及反向代理实现内网域名解析

0 背景

由于想要在局域网中使用域名访问本地 nas 中的服务,可以通过修改 Host 在单台设备上实现,但由于想一次配置供所有内网设备使用,因此选择自建 DNS 服务作为路由器的默认 DNS 服务器。本次使用开源的 AdGuard Home 进行搭建。

而 AdGuard Home 中的本地 DNS 重写仅支持 A 记录及 CNAME 记录,因此为了实现域名指向 nas 端口,还需要搭建反向代理,用 80 端口监听所有域名解析请求,并转发到各域名对应的端口。本次使用国产的 lucky 进行搭建,其有着相对完善的 WebUI,简单反向代理的需求之下,相比 Nginx 能一定程度上简化配置的繁琐。

当然,自建了 DNS 服务,当然也顺便兼顾一下其主要功能,隐私保护及广告过滤。其中隐私保护一方面通过 DoH (DNS over HTTPS) 对局域网向外发出的 DNS 解析进行加密,另一方面通过添加 DNS 拦截规则实现;广告过滤全部通过添加 DNS 拦截规则实现。

规则的时效性很强,AdGuard Home 自带了很多自动更新的规则,而互联网上很多个人发布的规则难以维持更新,故这方面的内容本文不进行展开,默认使用自带的规则。

1 使用 AdGuard Home 搭建 DNS 服务

使用 Docker 方式部署 AdGuard Home。

虽然是在 fnOS 的 GUI 中安装,但各项配置参考如下。

docker run --name adguardhome\
    --restart unless-stopped\
    -v /my/own/workdir:/opt/adguardhome/work\
    -v /my/own/confdir:/opt/adguardhome/conf\
    -p 80:80/tcp\ 
    -p 3000:3000/tcp\
    -d adguard/adguardhome

本次部署仅需注意挂载路径映射及端口映射即可,网络模式保持默认的 bridge。

由于只向局域网内设备提供 DNS 服务,因此设备 -> dns过程无需使用 DoH,通过传统方式访问即可,因此仅需开放 53 端口;AdGuard Home 的管理面板通过 3000 端口访问。因此除 80 与 3000 之外的端口可以忽略。其余端口用途参考
用腾讯云服务器搭建属于你的AdGuard Home与AdGuard Home的设置-腾讯云开发者社区-腾讯云

容器运行后,通过nas http:本机ip:3000 即可进入到初始界面,一路默认即可。

image.png

image.png

进入到控制面板中如下图所示。

image.png

点击导航栏中 设置-DNS设置 ,开始配置 DNS nas等内容。

此处只添加 google 及 cloudflare 提供的 DNS 服务器,访问国内域名可添加阿里云及腾讯云等厂商提供的 DNS。需注意 google 的 DNS 地址不能填写为 https://8.8.8.8/dns-query ,8.8.8.8 仅提供传统 DNS 及 DoT 服务;而cloudflare 的 DNS 可以填写为 https://1.1.1.1/dns-query

DNS 查询策略选择并行请求即可。

image.png

当在上游服务器填写了多个上游 DNS,并选择并行的查询策略,可以不配置后备 DNS 服务器。

本次部署使用 DoH 方式访问上游 DNS,AdGuard Home 首先需要请求解析上游 DNS 的域名,因此需要添加 Bootstrap DNS 服务器。如果上游服务器填写为 https://1.1.1.1/dns-query 的形式,此处就无需填写。

image.png

添加完成后,点击 测试上游 按钮,没问题的话会提示指定的 DNS 服务器正常运行。

其余配置如下。需注意的是是否启用 EDNS 及 DNSSEC 需要添加的上游 DNS 支持功能。

image.png

image.png

点击保存,到路由器控制面板中修改上网设置为手动配置 DNS,然后填写 AdGuard Home 的宿主机 ip 地址。

image.png

此外,连接到路由器的设备,需设置为自动配置 DNS,这样设备才会使用路由器指定的 DNS 服务器。

完成设置后,正常使用互联网服务,即可在管理面板中看到 DNS 查询统计及日志。

image.png

此次搭建完成后,一台设备连接到内网的设备,进行一次 DNS 查询时,将经过以下过程。

设备 (192.168.xx.xx) -> [DNS 查询 (53)]     -> AdGuard Home (192.168.xx.xx) 
AdGuard Home         -> [DNS 查询 (53)]      -> Bootstrap DNS          #查询DoH DNS服务器地址
Bootstrap DNS        -> [DNS 查询 (53)]      -> AdGuard Home
AdGuard Home         -> [DoH 查询 (HTTPS)]   -> 上游 DNS(如 8.8.8.8)   #真正的DNS查询请求
上游 DNS              -> [DoH 响应 (HTTPS)]  -> AdGuard Home 
AdGuard Home         -> [DNS 响应 (53)]      -> 设备 (192.168.xx.xx)

由于存在缓存,因此除第一次查询 DoH 服务器地址需要经过 Bootstrap DNS 服务器,此后在缓存有效期内无需再次访问 Bootstrap DNS 服务器。

2 使用 lucky 进行反向代理

使用 Docker 安装 lucky。

各项配置参考如下。需注意不添加挂载目录的话,删除容器时配置文件将一并删除;反代的服务位于宿主机中,需要使用 host 模式监听所有宿主机端口;由于 80 及 443 属于特权端口,只有 root 权限才能访问,因此需要将容器设置为使用高权限执行,才能够使用 80 端口,否则直接监听 80 端口将出现 permission denied 的报错。

docker run -d --name lucky --restart=always --net=host -v /root/luckyconf:/goodluck gdy666/lucky

容器运行后,通过 http:本机ip:16601 端口即可访问控制面板,默认用户名及密码均为 666,进入后如下图所示。

image.png

点击侧边栏 Web服务 ,点击添加Web服务规则,选择简易模式。此处 tcp4 及 tcp6 分别表示 ipv4 及 ipv6,按需勾选即可。

image.png

点击添加子规则,由于在本地提供 DNS 解析,因此使用虚构的域名也可以正常工作,此处使用 .home 的虚构顶级域名,选择感兴趣的词条自定义即可。

image.png

点击添加子规则即可。

3 添加本地DNS解析

使用反向代理将域名全部指向 nas 的 80 端口后,还需要将域名解析到 nas 的 ip 地址。

进入 AdGuard Home 的管理面板,点击 过滤器-DNS重写,点击添加 DNS 重写,填写域名及nas ip。

由于运行于 nas 的众多服务都想要使用不同二级域名区别开,因此此处选择添加通配符记录,将所有 .home 下的二级域名全部解析到 nas 中。如果需要解析到其他服务器中运行的服务,针对每项服务各自添加记录即可。

image.png

保存后,在局域网中即可使用 http://nas.home/ 通过浏览器访问到 fnOS 的管理面板。

image.png

参考

  1. AdGuard Home 中文指南 - TimochanのBlog
  2. 使用 AdGuard Home 搭建自用 DoH 服务 - atpX
  3. 用腾讯云服务器搭建属于你的AdGuard Home与AdGuard Home的设置-腾讯云开发者社区-腾讯云
  4. adguardhome
  5. lucky
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇