Sync of configuration items between Pi-Holes

Given that gravity Sync has been retired as a GitHub project and that it no longer works with FTL v6.x it would be great to see sync functionality across the following features:

  • Configuration
  • DHCP Leases
  • Groups
  • Lists*
  • Domains/Regexes
  • Clients

I know you can move settings from one Pi-Hole to another via Teleporter but its a pain to keep having to do it or double keying in between two instances when running primary and secondary instances.

To be able to do this via the WebUI would be very useful.

Under Settings Menu there could be a new option "Sync" with some basic settings:

  • ON/OFF - Enable/disable feature
  • MODE - Set as Source (server holding settings to be pushed out) or Destination (server expecting to receive settings)
    • Destination setting also toggles on "webserver.api.app_sudo" to allow api to write above settings
    • Source setting also allows for choosing which of the above six settings are to be synchronised
  • DESTINATIONS - Available if MODE is set to Source to allow input of one or more rows of Destinations servers with columns as below:
    • IP address of destination server (xxx.xxx.xxx.xxx)
    • API authentication details (application password)
    • Status - Enabled/Disabled (same style as Lists page)
    • Comment - free text to allow name of server instance to be added
    • Trash - for removing entry
    • Sync Status - Same iconography as Lists page with mouse over tool tip
  • SOURCES - Available if MODE is set to Destination to allow input of the Source instance from which settings are to be received:
    • IP address of Source server (xxx.xxx.xxx.xxx)
  • SYNC INTERVAL - Time between attempted syncs (default behavior would be sync on save or update process completes from the 6 settings above, but you could have this as a fixed or defined time interval)

As with other processes logging pipped to Pi-hole diagnosis.

*Also consider if Lists on the destination server is populated by only a single entry, that of the Source server, and gets all of its Gravity entries from the source, instead of maintaining a local source list and running Gravity updates. Maybe this could be a configuration choice when enabling the feature.

I would think this is exactly what the APIs are for and would allow someone to craft their own, bespoke workflow. For example, I use an API call to get the current DHCP configuration so that I can craft an ethers file for my router and access point. Just a little bash/zsh, curl'ing and jq.

I don't disagree that the API's can do everything listed but the whole reason Gravity Sync gained popularity was it plugged a hole in functionality. It was simple enough to setup but probably technically a bit out of reach of many. Adding the features to the UI would just make life easier for many users.

While never having used it personally, nebula-sync is a popular tool to sync the configuration of two or more Pi-hole instances.

Not to mention, if you want reliable DNS, you should be setting up two Pi Holes… so keeping them synced would be important.

Also, I'd love the custom DNS entries to sync too, especially since even Teleporter doesn't seem to pick them up.

Why not check first before venting wrong assumptions like you also did in the other FR thats full of unnecessary profanity?

$ sudo cat /etc/pihole/pihole.toml
[..]
  # Array of custom DNS records
  #
  # Example: [ "127.0.0.1 mylocal", "192.168.0.1 therouter" ]
  #
  # Allowed values are:
  #     Array of custom DNS records each one in HOSTS form: "IP HOSTNAME [HOSTNAME ...]"
  hosts = []
$ sudo pihole-FTL --teleporter
pi-hole_ph6d_teleporter_2026-06-24_05-04-51_CEST.zip
$ unzip -l pi-hole_ph6d_teleporter_2026-06-24_05-04-51_CEST.zip
Archive:  pi-hole_ph6d_teleporter_2026-06-24_05-04-51_CEST.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
    69809  2026-05-23 19:04   etc/pihole/pihole.toml
Pi-hole's configuration

Well, then the feature doesn't work, because I tried it last night, and not only is there not a checkbox for your custom DNS entries, but it didn't restore any of them either.

Unless it's combined with one of the other checkboxes, and isn't labeled as such, it seems like this feature doesn't actually work.

So maybe you should try it first, before you say that it already works. Because it either doesn't, or is labeled in a misleading way, or is combined with other functions that users might not necessarily want to carry over in addition with their custom DNS entries.

With regards to my other post, what does that have to do with this post? Nothing. Let's stay on topic. If you have an issue with my argument in that feature request, I suggest you post in that thread.

Well, then create a help topic here or report a "New issue" on Github:

Again, let's stay on topic here.

This is a feature request to enable syncing between two different Pi hole devices so you can actually have redundant DNS.

It's not acceptable for DNS to crap out, just because one device goes down.

Create a record:

$ sudo pihole-FTL --config dns.hosts '["10.20.30.40 test.record"]'
[ 10.20.30.40 test.record ]

Teleporter backup:

$ sudo pihole-FTL --teleporter
pi-hole_ph6d_teleporter_2026-06-24_06-04-18_CEST.zip

Delete the record:

$ sudo pihole-FTL --config dns.hosts '[]'
[]

Import the backup:

$ sudo pihole-FTL --teleporter pi-hole_ph6d_teleporter_2026-06-24_06-04-18_CEST.zip
Wrote config file:
 - 166 total entries
 - 156 entries are default
 - 10 entries are modified
 - 0 entries are forced through environment
Config file written to /etc/pihole/pihole.toml
Skipping file etc/hosts in Teleporter archive
Skipping file etc/dnsmasq.d/99-edns.conf in Teleporter archive
Skipping file etc/dnsmasq.d/99-my-settings.conf in Teleporter archive
Skipping file etc/pihole/pihole-FTL.db in Teleporter archive
Imported etc/pihole/pihole.toml
Imported etc/pihole/dhcp.leases
Imported etc/pihole/gravity.db->group
Imported etc/pihole/gravity.db->adlist
Imported etc/pihole/gravity.db->adlist_by_group
Imported etc/pihole/gravity.db->domainlist
Imported etc/pihole/gravity.db->domainlist_by_group
Imported etc/pihole/gravity.db->client
Imported etc/pihole/gravity.db->client_by_group

And the custom record thas was deleted has returned:

$ sudo pihole-FTL --config dns.hosts
[ 10.20.30.40 test.record ]

Postings crossed.
I agree.

Didn't work from the UI. :person_shrugging:

It's also entirely useless to use teleporter, if it replaces all the rest of your settings which that seems to do, because your two different DNS servers need two different sets of settings while retaining a shared set of custom DNS records, and things like clients, ad lists, etc.

And again, we are asking for automated syncing between multiple Pi Hole servers so we can have proper redundant DNS. Fixing this manually isn't the goal. It's a nice stop gap, but the problem still remains: without redundancy, if one Pi Hole server goes down, you lose DNS entirely.

Lets stay on-topic pls?
If you have issues with the Teleporter, I'd suggest:

I was literally making a case for the feature request at hand in response to your earlier post.

It can't possibly be more on topic.

FYI I ran a Teleporter backup on my old setup a couple of weeks ago, setup a new Pihole on a new micro-SD card and Teleporter imported my custom DNS entries without issue.

I suspect the custom DNS entries might be lumped in with another setting that I chose not to restore, because I didn't want to mess up the configuration of that other Pi Hole.

Again, another reason why syncing would be very handy.

It’s doable … i did it…