gravity sync可一键同步pi-hole多节点的黑白名单库,核心是只传变化、自动触发、文件级精准;默认同步custom.list、gravity.db和05-pihole-custom-cname.conf三类文件,支持定时(每15分钟)和手动(sudo gravity-sync)两种同步方式,需正确配置路径、ssh免密及远程凭证。

直接用 Gravity Sync 就能实现黑白名单库的一键同步,它专为 Pi-hole 多节点环境设计,不依赖外部脚本或手动复制,核心是“只传变化、自动触发、文件级精准”。
同步哪些黑白名单文件
Gravity Sync 默认监控并同步三类关键配置文件:
- /etc/pihole/custom.list:这是用户自定义的 DNS 黑白名单主文件,所有手工添加的域名、IP 或通配符规则都存于此;同步时通过 gs-clist.md5 记录哈希值,确保本地增删改后秒级推送到备用节点。
- /etc/pihole/gravity.db:Pi-hole 的广告拦截主数据库,含上游广告列表(如 adaway、StevenBlack)合并后的最终结果;同步靠 gs-gravity.md5 比对,避免整库传输,仅更新差异条目。
- /etc/dnsmasq.d/05-pihole-custom-cname.conf:CNAME 重定向规则(如把 tracker.example.com 指向 0.0.0.0),适合高级分流场景;独立使用 05-pihole-custom-cname.conf.md5 跟踪,防止误覆盖。
一键同步的操作方式
无需写 cron 或 shell 脚本,Gravity Sync 提供两种开箱即用的触发方式:
-
定时自动同步:安装后 systemd timer(gravity-sync.timer)默认每 15 分钟检查一次哈希差异,有变更则立即执行 gravity-sync 命令。启用命令:
sudo systemctl enable --now gravity-sync.timer。 -
手动即时同步:修改完 custom.list 后,终端输入
sudo gravity-sync,系统立刻比对全部目标文件的 md5,仅上传发生变化的部分到远端设备(如另一台 Pi-hole),全程通常在 2 秒内完成。
同步前必须确认的配置项
同步能否成功,取决于三个基础路径是否正确指向你的实际部署结构:
- Pi-hole 配置目录:默认为 /etc/pihole,若你自定义了路径(如迁移到 /opt/pihole),需在 /etc/gravity-sync/config 中修改 LOCAL_PIHOLE_DIRECTORY 变量。
- DNSMASQ 规则目录:默认为 /etc/dnsmasq.d,用于同步 CNAME 和其他 *.conf 文件;如有额外规则目录,可追加到 LOCAL_DNSMASQ_DIRECTORY。
-
远端设备访问凭证:Gravity Sync 使用 SSH 连接备用节点,需提前配置免密登录(
ssh-copy-id user@remote-ip),并在 config 中填写 REMOTE_USER 和 REMOTE_HOST。
验证同步是否生效
执行同步后,快速确认是否真正落地:
- 在本地运行
sudo gravity-sync --dry-run,查看输出中是否提示 “No changes detected” 或列出待同步文件名,确认检测逻辑正常。 - 登录远端 Pi-hole,检查
sudo cat /etc/pihole/custom.list内容是否与本地一致,同时核对sudo pihole -g是否无报错(说明 gravity.db 已就绪)。 - 访问 Pi-hole Admin 页面 → Group Management → Adlists,确认上游列表状态为 “Up to date”,且 “Last updated” 时间与同步时间接近。











