网络优化:从0到1-家庭网络的优化复盘-DNS服务篇
2026-03-09
很早之前写过一篇关于在家用旧笔记本搭建相册管理服务的内容,经过一年的优化,它如今已经是这个模样。

是的,目前它已经移到机柜里面,并且经过了三次迭代优化,最终的优化架构如下。

这套架构目前已经平稳运行了一年,我的大部分笔记、照片都已经放到了服务器上。
设备选择
主要的设备包括一台j4215软路由、一台j1900软路由。在搭建自己家庭网络时,设备选择建议使用X86架构,因为可选的固件更多,而且便于重新安装和折腾;ARM架构的设备虽然价格便宜,比如N1盒子才80块钱左右,但固件选择较少,而且出问题后重新刷机比较麻烦,比如改成支持U盘启动支持
不过,我的N1已经改成CE系统,用来看IPTV直播了,有一说一,N1永远的机皇

补充一点设备使用心得:经过一年的稳定运行,j4215作为主路由+虚拟机载体(DNS服务),性能完全够用,即使同时运行爱快、OpenWrt虚拟机也毫无压力。另外,旧笔记本其实并没有完全退役,我把它改造成了从服务器,使用raid1用于手机照片备份,每周自动也会同步主服务器的照片和笔记,到备份的硬盘上,防止因硬件故障导致数据丢失——毕竟照片和笔记都是不可逆的珍贵数据。

部署内容
J4125上部署了爱快和搭载虚拟机的OpenWrt,一个用于家庭网络管理,一个用于DNS解析服务。通过DNS服务器实现了内外网域名解析,比如输入home.kura.ren就能访问内网服务器,直接输入主域名则可访问我的博客。还有一个好处是,自己搭建密码管理工具Bitwarden时,它只支持HTTPS证书,我们可以申请二级域名证书,部署到自己的服务器上即可正常使用。

架构
目前在用的家庭服务器DNS服务架构如下。

通过路由器指向主路由,在爱快上设置DNS强行代理,指向DNS服务所在的虚拟机。

ADG负责统计和广告拦截。

ADG使用53端口,上级设置为mosdns服务。网上很多文章提到双ADG之类的用法,但实际使用后发现过于繁琐,其实一个ADG直接代理53端口即可,OpenWrt自带的dnsmasq甚至可以卸载,没必要设置dnsmasq先代理到ADG,再指向最终的DNS服务,多此一举。

广告拦截
关于广告拦截,它的通用性较强,比如打开某些APP时,确实会有部分广告显示为黑块,但也会影响一些APP的正常使用——比如我的车机APP,点击进入后会一直刷新,无法正常使用(不过,后面排查是我分流策略出的问题)。因此有段时间,我最终关闭了广告拦截功能,仅使用它的统计功能和惰性缓存,后续排除出问题后,又继续使用了广告拦截的功能

这里再补充一个上游设置的优化点:最初我将mosdns的上游设置为多个公共DNS,导致重启后出现连接数超过上万的问题

后来还是换成了smartdns,问题就得到了解决。另外,使用ADG的作为二级缓存功作能确实很实用,能缓存常用的DNS解析结果,有效减少了链接数,提升了使用体验。

mosdns自定义分析
Smartdns和mosdns我都使用过,两者功能大同小异,没有特殊需求的话,随便选一个都可以。我当初选择mosdns,主要是考虑到它的分流功能更符合我的需求,目前,由于链接数过高的问题,我换回了Smartdns。
在mosdns中,可以设置二级域名的通用解析,我这里就将所有二级域名都解析到了内网服务器。

关于mosdns的自定义解析,二级域名的通用解析设置不仅方便访问内网服务,还能隐藏内网IP,提升安全性——比如我搭建的笔记服务、文件共享服务,都可以通过不同的二级域名访问,像note.home.kura.ren、file.home.kura.ren,既清晰又安全。而且后续新增服务时,不需要重新配置DNS,直接在服务器上的Nginx中添加对应的二级域名解析即可。

证书配置
我在阿里云申请了免费的域名证书,目前这类免费证书的使用期限只有三个月。因此我在服务器上写了一个脚本,手动上传证书后,执行脚本就能自动完成文件替换和服务重启,省去了手动操作的麻烦。
echo "🚀 快速部署 Docker Nginx SSL 证书..."
# 设置变量
KEY_FILE="home.kura.ren.key"
PEM_FILE="home.kura.ren.pem"
SSL_DIR="/usr/local/nginx/ssl"
CONTAINER="nginx"
echo "📁 移动证书文件..."
sudo mv "$KEY_FILE" "$SSL_DIR/www.kura.ren.key"
sudo mv "$PEM_FILE" "$SSL_DIR/www.kura.ren.pem"
echo "🔒 设置权限..."
sudo chmod 600 "$SSL_DIR/www.kura.ren.key"
sudo chmod 644 "$SSL_DIR/www.kura.ren.pem"
echo "🐳 重启 Docker 容器..."
docker restart $CONTAINER
echo "✅ 部署完成! 容器状态:"
docker ps -f name=$CONTAINER
原本手动上传证书后,需要逐一替换文件、重启服务,操作比较繁琐;优化脚本后,手动上传证书后只需执行一次脚本,即可自动完成文件替换和服务重启,既能节省时间,也能避免因操作遗漏导致证书生效失败
最终效果
可以看到,home域名已成功解析到内网服务器,一级域名则指向我的博客服务器,这样就可以根据自己的需求,在内网灵活配置各种服务了。

目前这套架构的使用体验非常流畅,通过主域名可以访问博客,通过home.kura.ren可以访问内网的相册、笔记等服务。采用mtphotos管理,还支持手机端上传,平时拍的照片也可以可以自动同步到服务器,再也不用担心手机存储不足的问题。

总的来说,用旧笔记本搭建家庭相册管理服务,再逐步优化成完整的家庭服务器架构,不仅节省了成本,还满足了自己的个性化需求。而且在这个过程中,我也学到了很多关于网络配置、服务部署、数据备份的知识,对于喜欢折腾的人来说,确实是一件很有意义的事情。如果大家也有旧电脑,不妨试试搭建自己的家庭服务器,既能发挥旧设备的价值,也能提升日常使用的便捷性。