文章摘要
作者分享了自己搭建Wireguard VPN网络的经验,结合Pi-Hole广告拦截和Unbound DNS解析,以实现对DNS查询的精细控制和简化设备连接。相比Tailscale等现成方案,自行配置虽复杂但能深入学习网络原理。文中还提到了设备配置和IP分配方案。
文章总结
使用WireGuard VPN搭配Pi-Hole广告拦截与Unbound DNS的配置指南
背景与需求
作者长期使用Mullvad VPN服务,但由于需要更精细的DNS查询控制和内网设备便捷访问(如通过http://emby.home.server这样的简单地址),决定自建WireGuard网络,并整合Pi-Hole广告拦截与Unbound DNS递归解析功能。虽然Tailscale等工具能简化流程,但手动配置有助于深入理解技术细节。
网络拓扑设计
采用中心辐射型(hub-and-spoke)架构:
- VPN服务器(10.10.10.1):运行于高性能VPS,负责设备间通信和互联网出口。
- 客户端设备:包括家庭服务器(10.10.10.10)、台式机、笔记本及移动设备(10.10.10.100-101),均通过WireGuard隧道连接。
关键配置步骤
VPS基础配置
- SSH安全加固:禁用密码登录、修改默认端口(如12345)、使用ED25519密钥认证。
- 自动更新:通过
unattended-upgrades设置每日安全更新及自动重启策略。 - 防火墙规则:仅开放WireGuard端口(51820)和自定义SSH端口,启用日志记录。
WireGuard部署
- 密钥生成:为服务器和每个客户端生成公私钥及预共享密钥。
- 服务器配置:
ini [Interface] PrivateKey = <服务器私钥> Address = 10.10.10.1/24 PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE - 客户端配置:指定服务器为DNS解析器(
DNS = 10.10.10.1),并通过AllowedIPs控制路由范围。
Pi-Hole安装
- 通过官方脚本安装,选择
wg0作为监听接口。 - 配置上游DNS为初始选项(如Quad9),后续改为本地Unbound。
- 通过官方脚本安装,选择
Unbound递归DNS
- 监听
127.0.0.1:5353,仅允许本地和WireGuard网段(10.10.10.0/24)查询。 - 启用DNSSEC和缓存优化,减少外部DNS依赖。
- 监听
本地资源访问优化
- 域名映射:在Pi-Hole中添加本地服务记录(如
emby.home.server→192.168.1.10)。 - 防火墙规则:允许WireGuard内网设备访问HTTP/HTTPS和DNS端口。
- 域名映射:在Pi-Hole中添加本地服务记录(如
移动端配置
使用qrencode生成客户端配置二维码,通过WireGuard应用扫描导入。针对移动网络优化AllowedIPs,排除本地私有IP段以避免路由冲突。
性能测试与调试
- 速度测试:通过
iperf3测量VPS与客户端间吞吐量(如上传25Mbps/下载244Mbps)。 - DNS泄漏检查:使用dnsleaktest.com验证查询是否仅通过VPS解析。
推荐工具与致谢
- 配置工具:WireGuard AllowedIPs计算器
- 性能调优:MTU调整与加密算法优化(参考Pro Custodibus指南)
- 支持开源项目:鼓励捐赠WireGuard、Pi-Hole等。
最终效果
- 隐私保护:所有设备流量经VPS加密出口,避免ISP监控。
- 广告拦截:网络级广告过滤通过Pi-Hole实现。
- 灵活访问:无论本地或外网,均可通过统一域名访问内网服务。
(注:本文为技术指南,实际部署需根据网络环境调整。保留关键命令和配置片段,删减了部分重复性操作说明。)
评论总结
以下是评论内容的总结:
Unbound替代Pi-Hole
- 观点:使用Unbound的blocklists比Pi-Hole更简单易维护
- 引用:
- "I just use blocklists in Unbound without having to bother with Pi-Hole"(gentooflux)
- "I preferred PiHole because I found its documentation a bit more helpful"(pSYoniK)
AdGuardHome的优势
- 观点:AdGuardHome界面更现代,且支持IPv6
- 引用:
- "AdGuardHome's UI is from this century at least"(plqbfbv)
- "I host an AdguardHome instance...get 24/7 adblocking"(muppetman)
VPN的必要性争议
- 观点1:无需VPN,通过Private DNS即可实现广告拦截
- "You don't need a VPN!...I get 24/7 adblocking"(muppetman)
- 观点2:VPN是访问家庭网络的核心需求
- "The VPN is the main thing I wanted setup"(pSYoniK)
- 补充:Wireguard易被识别封锁
- "Wireguard protocol is easily identified and blocked"(stoicfungi)
- 观点1:无需VPN,通过Private DNS即可实现广告拦截
托管服务替代方案
- 观点:NextDNS等托管服务更省心且家庭友好
- 引用:
- "$20/year for NextDNS...spouse approved"(syntaxing)
- "Tailscale...makes securing your network really simple"(BrandoElFollito)
实现方式选择
- 观点1:偏好Docker打包方案
- "Fully packaged version"(byteknight)
- 观点2:坚持OS级部署以深入学习
- "I really wanted this setup at the OS level"(pSYoniK)
- 观点1:偏好Docker打包方案
总结呈现了关于广告拦截方案(Unbound/Pi-Hole/AdGuardHome)、VPN必要性、以及托管服务与自建优劣的多元讨论,同时反映了用户在选择时对易用性、学习成本和家庭适配性的不同考量。