400 Bad Request(validating dns config: private upstream servers: no upstream specified
What happened?
Hello, I am using AdGuard Home sync with a couple of small VMs (on Proxmox) running AdGuardHome with no issues. Recently I have created a container on Docker running AdGuardHome (adguard/adguardhome:latest), I have set it up and added its configuration settings to AdGuardHome-sync (this run in a different Docker server). As result, the sync process fails with Errors, and the configuration is not synced (there are just default settings left). I am not sure if the issue with container itself (but it's just deployed on docker per its public documentation and using Network "macvlan" so all the ports are exposed) or something else. The other instances of AdGuardHome (on the VM Instances) keeps syncing.
Steps To Reproduce
- Create a new instance of AdGuard home on Docker: https://hub.docker.com/r/adguard/adguardhome
- Set the Network as "macvlan"
- Complete the configuration per http://IP_ADDRESS:3000
- Edit the configuration for AdGuard home sync by adding the details for the new AdGuard home instance
- Recreate the Container
- Manually start the sync and check the logs
Regards,
AdguardHome-Sync Version
version": "v0.8.2", "build": "2025-10-24T17:14:03Z", "os": "linux", "arch": "arm64"
AdguardHome Version
v0.107.69
OS Information
❯ cat /etc/os-release PRETTY_NAME="Ubuntu 22.04.5 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04.5 LTS (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=jammy
❯ docker --version Docker version 28.5.1, build e180ab8
Configuration
Docker Stack:
adguardhome-sync (on Docker #1)
*********************************
services:
adguardhome-sync:
image: ghcr.io/bakito/adguardhome-sync
container_name: adguardhome-sync
environment:
- TZ=Asia/Tokyo
command: run --config /config/adguardhome-sync.yaml
volumes:
- /mnt/CEPHFS/volumes/adguardsync/config/adguardhome-sync.yaml:/config/adguardhome-sync.yaml
ports:
- 8080:8080
restart: unless-stopped
*********************************
adguardhome (on Docker #2)
*********************************
services:
adguardhome:
image: adguard/adguardhome:latest
container_name: adguardhome
networks:
adguard_macvlan:
ipv4_address: 192.168.10.5
environment:
- TZ=Asia/Tokyo
# Define the default web interface port if you want it different from 3000
- ADGUARD_HOME_DEFAULT_WEB_PORT=80
- API_PORT=80
volumes:
- /mnt/.ix-apps/app_mounts/adguard-home/conf:/opt/adguardhome/conf:rw
- /mnt/.ix-apps/app_mounts/adguard-home/work:/opt/adguardhome/work:rw
- /etc/hosts:/etc/hosts:ro
restart: unless-stopped
networks:
adguard_macvlan:
driver: macvlan
driver_opts:
parent: bond0 # Replace eth0 with your host's physical network interface
ipam:
config:
- subnet: 192.168.10.0/24 # Replace with your network's subnet
gateway: 192.168.10.1 # Replace with your network's gateway
ip_range: 192.168.10.0/24 # Optional: Specify a range for IP allocation
*********************************
Current Applied Configuration
2025-11-14T08:16:42.831+0900 INFO config config/print-config.go:34 Printing adguardhome-sync aggregated config (THE APPLICATION WILL NOT START IN THIS MODE):
<!-- PLEASE COPY THE FOLLOWING OUTPUT AS IS INTO THE GITHUB ISSUE (Don't forget to mask your usernames, passwords, IPs and other sensitive information when using this in an issue ) -->
### Runtime
AdguardHome-Sync Version: v0.8.2
Build: 2025-10-24T17:14:03Z
OperatingSystem: linux
Architecture: arm64
OriginVersion: v0.107.69
ReplicaVersions:
- Replica 1: v0.107.69
### AdGuardHome sync aggregated config
origin:
url: http://192.168.10.3/
webURL: http://192.168.10.3/
apiPath: /control
username: *******
password: *******
insecureSkipVerify: false
autoSetup: false
replicas:
- url: http://192.168.10.5/
webURL: http://192.168.10.5/
apiPath: /control
username: *******
password: *******
insecureSkipVerify: false
autoSetup: false
cron: '*/30 * * * *'
runOnStart: true
printConfigOnly: true
api:
port: 80
username: *******
password: *******
darkMode: true
features:
dns:
accessLists: true
serverConfig: true
rewrites: true
dhcp:
serverConfig: false
staticLeases: false
generalSettings: true
queryLogConfig: true
statsConfig: true
clientSettings: true
services: true
filters: true
theme: true
tlsConfig: false
### AdGuardHome sync unmodified config file
Config file path: /config/adguardhome-sync.yaml
# cron expression to run in daemon mode. (default; "" = runs only once)
cron: "*/30 * * * *"
origin:
# url of the origin instance
url: http://192.168.10.3/
# apiPath: define an api path if other than "/control"
# insecureSkipVerify: true # disable tls check
username: *******
password: *******
# replica instance (optional, if only one)
replicas:
# url of the replica instance
# - url: http://192.168.10.4/
# username: *******
# password: *******
- url: http://192.168.10.5/
username: *******
password: *******
# - url: http://192.168.0.3/
# username: *******
# password: *******
# - url: http://192.168.20.3/
# username: *******
# password: *******
# - url: http://192.168.20.4/
# username: *******
# password: *******
# Configure the sync API server, disabled if api port is 0
# Ref. https://github.com/bakito/adguardhome-sync
api:
# Port, default 8080
port: 80
# if username and password are defined, basic auth is applied to the sync API
username: *******
password: **************
darkMode: true
features:
generalSettings: true
queryLogConfig: true
statsConfig: true
clientSettings: true
services: true
filters: true
dhcp:
serverConfig: false
staticLeases: false
dns:
serverConfig: true
accessLists: true
rewrites: true
### Environment Variables
=/opt/go/adguardhome-sync
HOME=/
HOSTNAME=adguardhome-sync
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PRINT_CONFIG_ONLY=true
TZ=Asia/Tokyo
<!-- END OF GITHUB ISSUE CONTENT -->
Relevant DEBUG log output
2025-11-14T08:02:46.952+0900 INFO sync sync/sync.go:41 AdGuardHome sync {"version": "v0.8.2", "build": "2025-10-24T17:14:03Z", "os": "linux", "arch": "arm64"}
2025-11-14T08:02:46.953+0900 INFO sync types/features.go:61 Disabled features {"features": ["DHCP.ServerConfig", "DHCP.StaticLeases", "TLSConfig"]}
2025-11-14T08:02:46.954+0900 INFO sync sync/sync.go:66 Setup cronjob {"cron": "*/30 * * * *", "next-execution": "2025-11-14T08:30:00.000+0900"}
2025-11-14T08:02:46.954+0900 INFO sync sync/http.go:101 Starting API server {"port": 80}
2025-11-14T08:02:46.955+0900 INFO sync sync/sync.go:88 Running sync on startup
2025-11-14T08:02:47.344+0900 INFO sync sync/sync.go:183 Connected to origin {"from": "192.168.10.3", "version": "v0.107.69"}
2025-11-14T08:02:51.280+0900 INFO sync sync/sync.go:291 Start sync {"from": "192.168.10.3", "to": "192.168.10.5"}
2025-11-14T08:02:51.368+0900 INFO sync sync/sync.go:312 Connected to replica {"from": "192.168.10.3", "to": "192.168.10.5", "version": "v0.107.69"}
2025-11-14T08:02:51.745+0900 INFO client client/client.go:417 Set dns config list {"host": "192.168.10.5"}
2025-11-14T08:02:51.824+0900 ERROR sync sync/sync.go:337 Error syncing DNS server config {"from": "192.168.10.3", "to": "192.168.10.5", "error": "400 Bad Request(validating dns config: private upstream servers: no upstream specified\n)"}
github.com/bakito/adguardhome-sync/internal/sync.(*worker).syncTo
/go/src/app/internal/sync/sync.go:337
github.com/bakito/adguardhome-sync/internal/sync.(*worker).sync
/go/src/app/internal/sync/sync.go:279
github.com/bakito/adguardhome-sync/internal/sync.runOnStartAsync.func1
/go/src/app/internal/sync/sync.go:89
2025-11-14T08:02:51.826+0900 ERROR sync sync/sync.go:299 Sync done {"from": "192.168.10.3", "to": "192.168.10.5", "duration": "2.041e-06s"}
github.com/bakito/adguardhome-sync/internal/sync.(*worker).syncTo.func1
Anything else?
No response
Hi
Either you need to define upstream dns servers in your Adguardhome origin, or disable the serverConfig feature.
Thank you for getting back @bakito,
As per I can see, Upstream DNS servers on the Adguardhome origin are definitely set (should be the default ones).
To be more correct, the configuration on origin and replica are most the same as i kept the default configuation (apart DNS rewrites which is what I want so sync).
However, disabling the serverConfig settings fixed the issue, but it's very strange this occurs only with AdGuardHome running on Docker, and not the other ones. My final goal would be to sync all the settings.
Regards,
Could you provide debug logs of the error? https://github.com/bakito/adguardhome-sync/wiki/FAQ#how-do-i-get-debug-logs
Sorry for the late reply.
I have collected the debug logs as below (I have replaced the username with the string <USERNAME> and other details, and set serverConfig: true to replicate the Error):
2025-11-23T18:46:09.429+0900 INFO sync sync/sync.go:41 AdGuardHome sync {"version": "v0.8.2", "build": "2025-10-24T17:14:03Z", "os": "linux", "arch": "arm64"}
2025-11-23T18:46:09.430+0900 DEBUG sync types/types.go:112 Using config {"config": {"origin":{"url":"http://192.168.10.3/","webURL":"http://192.168.10.3/","apiPath":"/control","username":"l*****o","password":"s**********0","insecureSkipVerify":false,"autoSetup":false},"replicas":[{"url":"http://192.168.10.5/","webURL":"http://192.168.10.5/","apiPath":"/control","username":"l*****o","password":"s**********0","insecureSkipVerify":false,"autoSetup":false}],"cron":"*/30 * * * *","runOnStart":true,"api":{"port":8080,"darkMode":true,"metrics":{},"tls":{}},"features":{"dns":{"accessLists":true,"serverConfig":true,"rewrites":true},"dhcp":{"serverConfig":false,"staticLeases":false},"generalSettings":true,"queryLogConfig":true,"statsConfig":true,"clientSettings":true,"services":true,"filters":true,"theme":true,"tlsConfig":false}}}
2025-11-23T18:46:09.430+0900 INFO sync types/features.go:61 Disabled features {"features": ["DHCP.ServerConfig", "DHCP.StaticLeases", "TLSConfig"]}
2025-11-23T18:46:09.431+0900 INFO sync sync/sync.go:66 Setup cronjob {"cron": "*/30 * * * *", "next-execution": "2025-11-23T19:00:00.000+0900"}
2025-11-23T18:46:09.431+0900 INFO sync sync/http.go:101 Starting API server {"port": 8080}
2025-11-23T18:46:09.431+0900 INFO sync sync/sync.go:88 Running sync on startup
2025-11-23T18:46:09.431+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "status", "username": "<USERNAME>"}
2025-11-23T18:46:09.825+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "status", "username": "<USERNAME>", "status": 200, "body": "{\"version\":\"v0.107.69\",\"language\":\"en\",\"dns_addresses\":[\"192.168.10.3\"],\"dns_port\":53,\"http_port\":80,\"protection_disabled_duration\":0,\"protection_enabled\":true,\"dhcp_available\":true,\"running\":true}\n", "content-type": ["application/json"]}
2025-11-23T18:46:09.826+0900 INFO sync sync/sync.go:183 Connected to origin {"from": "192.168.10.3", "version": "v0.107.69"}
2025-11-23T18:46:09.826+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "/profile", "username": "<USERNAME>"}
2025-11-23T18:46:10.154+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "/profile", "username": "<USERNAME>", "status": 200, "body": "{\"name\":\"<USERNAME>\",\"language\":\"en\",\"theme\":\"dark\"}\n", "content-type": ["application/json"]}
2025-11-23T18:46:10.155+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "/parental/status", "username": "<USERNAME>"}
2025-11-23T18:46:10.483+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "/parental/status", "username": "<USERNAME>", "status": 200, "body": "{\"enabled\":false}\n", "content-type": ["application/json"]}
2025-11-23T18:46:10.483+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "/safesearch/status", "username": "<USERNAME>"}
2025-11-23T18:46:10.811+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "/safesearch/status", "username": "<USERNAME>", "status": 200, "body": "{\"enabled\":false,\"bing\":true,\"duckduckgo\":true,\"ecosia\":true,\"google\":true,\"pixabay\":true,\"yandex\":true,\"youtube\":true}\n", "content-type": ["application/json"]}
2025-11-23T18:46:10.812+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "/safebrowsing/status", "username": "<USERNAME>"}
2025-11-23T18:46:11.138+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "/safebrowsing/status", "username": "<USERNAME>", "status": 200, "body": "{\"enabled\":true}\n", "content-type": ["application/json"]}
2025-11-23T18:46:11.139+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "/rewrite/list", "username": "<USERNAME>"}
2025-11-23T18:46:11.467+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "/rewrite/list", "username": "<USERNAME>", "status": 200, "body": "[{\"domain\":\"*.oracle.<DOMAIN>\",\"answer\":\"192.168.0.241\",\"enabled\":true},{\"domain\":\"*.italy.<DOMAIN>\",\"answer\":\"192.168.20.241\",\"enabled\":true},{\"domain\":\"dns1.japan.<DOMAIN>\",\"answer\":\"192.168.10.3\",\"enabled\":true},{\"domain\":\"dns2.japan.<DOMAIN>\",\"answer\":\"192.168.10.4\",\"enabled\":true},{\"domain\":\"dns1.italy.<DOMAIN>\",\"answer\":\"192.168.20.3\",\"enabled\":true},{\"domain\":\"myrouter.io\",\"answer\":\"192.168.19.1\",\"enabled\":true},{\"domain\":\"gateway.japan.<DOMAIN>\",\"answer\":\"192.168.10.1\",\"enabled\":true},{\"domain\":\"dns1.oracle.<DOMAIN>\",\"answer\":\"192.168.0.3\",\"enabled\":true},{\"domain\":\"time.japan.<DOMAIN>\",\"answer\":\"192.168.10.8\",\"enabled\":true},{\"domain\":\"time.italy.<DOMAIN>\",\"answer\":\"192.168.20.8\",\"enabled\":true},{\"domain\":\"*.japan.<DOMAIN>\",\"answer\":\"192.168.10.241\",\"enabled\":true},{\"domain\":\"dns2.italy.<DOMAIN>\",\"answer\":\"192.168.20.4\",\"enabled\":true},{\"domain\":\"dns3.japan.<DOMAIN>\",\"answer\":\"192.168.10.5\",\"enabled\":true},{\"domain\":\"*.wireguard.<DOMAIN>\",\"answer\":\"192.168.10.3\",\"enabled\":true}]\n", "content-type": ["application/json"]}
2025-11-23T18:46:11.467+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "/blocked_services/get", "username": "<USERNAME>"}
2025-11-23T18:46:11.795+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "/blocked_services/get", "username": "<USERNAME>", "status": 200, "body": "{\"schedule\":{\"time_zone\":\"Asia/Tokyo\"},\"ids\":[]}\n", "content-type": ["application/json"]}
2025-11-23T18:46:11.796+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "/filtering/status", "username": "<USERNAME>"}
2025-11-23T18:46:12.126+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "/filtering/status", "username": "<USERNAME>", "status": 200, "body": "{\"filters\":[{\"url\":\"https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt\",\"name\":\"AdGuard DNS filter\",\"last_updated\":\"2025-11-23T14:18:53+09:00\",\"id\":1762132082,\"rules_count\":119462,\"enabled\":true},{\"url\":\"https://adaway.org/hosts.txt\",\"name\":\"AdAway Default Blocklist\",\"last_updated\":\"2025-11-23T14:18:53+09:00\",\"id\":1762132083,\"rules_count\":6542,\"enabled\":true},{\"url\":\"https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_7_Japanese/filter.txt\",\"name\":\"Japanese filter\",\"last_updated\":\"2025-11-23T14:18:54+09:00\",\"id\":1762132084,\"rules_count\":11615,\"enabled\":true},{\"url\":\"https://malware-filter.gitlab.io/malware-filter/urlhaus-filter-agh-online.txt\",\"name\":\"Online Malicious URL Blocklist\",\"last_updated\":\"2025-11-23T14:18:54+09:00\",\"id\":1762132085,\"rules_count\":2706,\"enabled\":true},{\"url\":\"https://someonewhocares.org/hosts/zero/hosts\",\"name\":\"Dan Pollock's List\",\"last_updated\":\"2025-11-23T14:18:54+09:00\",\"id\":1762132086,\"rules_count\":11825,\"enabled\":true},{\"url\":\"https://raw.githubusercontent.com/DandelionSprout/adfilt/master/Alternate%20versions%20Anti-Malware%20List/AntiMalwareAdGuardHome.txt\",\"name\":\"Dandelion Sprout's Anti-Malware List\",\"last_updated\":\"2025-11-23T14:18:55+09:00\",\"id\":1762132087,\"rules_count\":15423,\"enabled\":true},{\"url\":\"https://raw.githubusercontent.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites/master/hosts\",\"name\":\"The Big List of Hacked Malware Web Sites\",\"last_updated\":\"2025-11-23T14:18:55+09:00\",\"id\":1762132088,\"rules_count\":13822,\"enabled\":true}],\"whitelist_filters\":null,\"user_rules\":[],\"interval\":24,\"enabled\":true}\n", "content-type": ["application/json"]}
2025-11-23T18:46:12.127+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "/clients", "username": "<USERNAME>"}
2025-11-23T18:46:12.460+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "/clients", "username": "<USERNAME>", "status": 200, "body": "{\"clients\":null,\"auto_clients\":[{\"whois_info\":{},\"ip\":\"192.168.10.154\",\"name\":\"lwip0.<DOMAIN>\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"192.168.10.118\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.1\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"fe00::\",\"name\":\"ip6-localnet\",\"source\":\"etc/hosts\"},{\"whois_info\":{},\"ip\":\"ff02::1\",\"name\":\"ip6-allnodes\",\"source\":\"etc/hosts\"},{\"whois_info\":{},\"ip\":\"172.18.0.3\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.109\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.125\",\"name\":\"lwip0.<DOMAIN>\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"192.168.10.177\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"172.17.0.2\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"ff00::\",\"name\":\"ip6-mcastprefix\",\"source\":\"etc/hosts\"},{\"whois_info\":{},\"ip\":\"192.168.10.185\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.9\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.165\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.151\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"172.17.0.4\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.192\",\"name\":\"wlan0.<DOMAIN>\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"192.168.10.153\",\"name\":\"iPhone.<DOMAIN>\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"192.168.10.137\",\"name\":\"OPPO-A3-5G.<DOMAIN>\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"192.168.10.244\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.250\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.243\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.146\",\"name\":\"lwip0.<DOMAIN>\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"127.0.1.1\",\"name\":\"ADGUARD-HOME\",\"source\":\"etc/hosts\"},{\"whois_info\":{},\"ip\":\"192.168.10.132\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.166\",\"name\":\"Mac.<DOMAIN>\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"192.168.10.169\",\"name\":\"Broadlink_RMMINI-e4-21-bc.<DOMAIN>\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"192.168.10.179\",\"name\":\"<USERNAME>s-Air.<DOMAIN>\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"127.0.0.1\",\"name\":\"localhost\",\"source\":\"etc/hosts\"},{\"whois_info\":{},\"ip\":\"::1\",\"name\":\"localhost\",\"source\":\"etc/hosts\"},{\"whois_info\":{},\"ip\":\"ff02::2\",\"name\":\"ip6-allrouters\",\"source\":\"etc/hosts\"},{\"whois_info\":{},\"ip\":\"172.18.0.5\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.117\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.155\",\"name\":\"wlan0\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"192.168.10.119\",\"name\":\"OPPO-Reno3-A.<DOMAIN>\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"192.168.10.126\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.101\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.184\",\"name\":\"M2006C3MG-Redmi9C.<DOMAIN>\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"192.168.10.10\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.120\",\"name\":\"p,\\\\175\\\\152U\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"192.168.10.160\",\"name\":\"LGwebOSTV.<DOMAIN>\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"192.168.10.150\",\"name\":\"wlan0.<DOMAIN>\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"172.18.0.7\",\"name\":\"\",\"source\":\"ARP\"},{\"whois_info\":{},\"ip\":\"192.168.10.138\",\"name\":\"/etc/localtime\",\"source\":\"rDNS\"},{\"whois_info\":{},\"ip\":\"192.168.10.242\",\"name\":\"\",\"source\":\"ARP\"}],\"supported_tags\":[\"device_audio\",\"device_camera\",\"device_gameconsole\",\"device_laptop\",\"device_nas\",\"device_other\",\"device_pc\",\"device_phone\",\"device_printer\",\"device_securityalarm\",\"device_tablet\",\"device_tv\",\"os_android\",\"os_ios\",\"os_linux\",\"os_macos\",\"os_other\",\"os_windows\",\"user_admin\",\"user_child\",\"user_regular\"]}\n", "content-type": ["application/json"]}
2025-11-23T18:46:12.461+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "/querylog/config", "username": "<USERNAME>"}
2025-11-23T18:46:12.789+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "/querylog/config", "username": "<USERNAME>", "status": 200, "body": "{\"ignored\":[],\"interval\":604800000,\"enabled\":true,\"anonymize_client_ip\":false}\n", "content-type": ["application/json"]}
2025-11-23T18:46:12.790+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "/stats/config", "username": "<USERNAME>"}
2025-11-23T18:46:13.119+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "/stats/config", "username": "<USERNAME>", "status": 200, "body": "{\"ignored\":[],\"interval\":604800000,\"enabled\":true}\n", "content-type": ["application/json"]}
2025-11-23T18:46:13.121+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "/access/list", "username": "<USERNAME>"}
2025-11-23T18:46:13.449+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "/access/list", "username": "<USERNAME>", "status": 200, "body": "{\"allowed_clients\":[],\"disallowed_clients\":[],\"blocked_hosts\":[\"version.bind\",\"id.server\",\"hostname.bind\"]}\n", "content-type": ["application/json"]}
2025-11-23T18:46:13.449+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "/dns_info", "username": "<USERNAME>"}
2025-11-23T18:46:13.777+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "/dns_info", "username": "<USERNAME>", "status": 200, "body": "{\"upstream_dns\":[\"https://dns10.quad9.net/dns-query\",\"https://3r1ecxbrv6.cloudflare-gateway.com/dns-query\",\"https://dns.cloudflare.com/dns-query\"],\"upstream_dns_file\":\"\",\"bootstrap_dns\":[\"9.9.9.10\",\"149.112.112.10\",\"2620:fe::10\",\"2620:fe::fe:10\"],\"fallback_dns\":[],\"protection_enabled\":true,\"ratelimit\":20,\"ratelimit_subnet_len_ipv4\":24,\"ratelimit_subnet_len_ipv6\":56,\"upstream_timeout\":10,\"ratelimit_whitelist\":[],\"blocking_mode\":\"default\",\"edns_cs_enabled\":false,\"edns_cs_use_custom\":false,\"dnssec_enabled\":false,\"disable_ipv6\":false,\"upstream_mode\":\"parallel\",\"blocked_response_ttl\":10,\"cache_size\":0,\"cache_ttl_min\":0,\"cache_ttl_max\":0,\"cache_enabled\":false,\"cache_optimistic\":true,\"resolve_clients\":true,\"use_private_ptr_resolvers\":true,\"local_ptr_upstreams\":[],\"blocking_ipv4\":\"\",\"blocking_ipv6\":\"\",\"protection_disabled_until\":null,\"edns_cs_custom_ip\":\"\",\"default_local_ptr_upstreams\":[\"8.8.8.8:53\",\"127.0.0.1:53\",\"192.168.10.1:53\"]}\n", "content-type": ["application/json"]}
2025-11-23T18:46:13.779+0900 INFO sync sync/sync.go:291 Start sync {"from": "192.168.10.3", "to": "192.168.10.5"}
2025-11-23T18:46:13.779+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.5", "method": "GET", "path": "status", "username": "<USERNAME>"}
2025-11-23T18:46:13.862+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.5", "method": "GET", "path": "status", "username": "<USERNAME>", "status": 200, "body": "{\"version\":\"v0.107.69\",\"language\":\"en\",\"dns_addresses\":[\"192.168.10.5\"],\"dns_port\":53,\"http_port\":80,\"protection_disabled_duration\":0,\"protection_enabled\":true,\"dhcp_available\":true,\"running\":true}\n", "content-type": ["application/json"]}
2025-11-23T18:46:13.862+0900 INFO sync sync/sync.go:312 Connected to replica {"from": "192.168.10.3", "to": "192.168.10.5", "version": "v0.107.69"}
2025-11-23T18:46:13.863+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.5", "method": "GET", "path": "/profile", "username": "<USERNAME>"}
2025-11-23T18:46:13.937+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.5", "method": "GET", "path": "/profile", "username": "<USERNAME>", "status": 200, "body": "{\"name\":\"<USERNAME>\",\"language\":\"en\",\"theme\":\"dark\"}\n", "content-type": ["application/json"]}
2025-11-23T18:46:13.940+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.5", "method": "GET", "path": "/parental/status", "username": "<USERNAME>"}
2025-11-23T18:46:14.022+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.5", "method": "GET", "path": "/parental/status", "username": "<USERNAME>", "status": 200, "body": "{\"enabled\":false}\n", "content-type": ["application/json"]}
2025-11-23T18:46:14.023+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.5", "method": "GET", "path": "/safesearch/status", "username": "<USERNAME>"}
2025-11-23T18:46:14.098+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.5", "method": "GET", "path": "/safesearch/status", "username": "<USERNAME>", "status": 200, "body": "{\"enabled\":false,\"bing\":true,\"duckduckgo\":true,\"ecosia\":true,\"google\":true,\"pixabay\":true,\"yandex\":true,\"youtube\":true}\n", "content-type": ["application/json"]}
2025-11-23T18:46:14.099+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.5", "method": "GET", "path": "/safebrowsing/status", "username": "<USERNAME>"}
2025-11-23T18:46:14.173+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.5", "method": "GET", "path": "/safebrowsing/status", "username": "<USERNAME>", "status": 200, "body": "{\"enabled\":true}\n", "content-type": ["application/json"]}
2025-11-23T18:46:14.174+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.5", "method": "GET", "path": "/dns_info", "username": "<USERNAME>"}
2025-11-23T18:46:14.251+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.5", "method": "GET", "path": "/dns_info", "username": "<USERNAME>", "status": 200, "body": "{\"upstream_dns\":[\"https://3r1ecxbrv6.cloudflare-gateway.com/dns-query\",\"https://dns.cloudflare.com/dns-query\"],\"upstream_dns_file\":\"\",\"bootstrap_dns\":[\"9.9.9.10\",\"149.112.112.10\",\"2620:fe::10\",\"2620:fe::fe:10\"],\"fallback_dns\":[\"1.1.1.1\"],\"protection_enabled\":true,\"ratelimit\":20,\"ratelimit_subnet_len_ipv4\":24,\"ratelimit_subnet_len_ipv6\":56,\"upstream_timeout\":10,\"ratelimit_whitelist\":[],\"blocking_mode\":\"default\",\"edns_cs_enabled\":false,\"edns_cs_use_custom\":false,\"dnssec_enabled\":false,\"disable_ipv6\":false,\"upstream_mode\":\"parallel\",\"blocked_response_ttl\":10,\"cache_size\":4194304,\"cache_ttl_min\":0,\"cache_ttl_max\":0,\"cache_enabled\":true,\"cache_optimistic\":false,\"resolve_clients\":true,\"use_private_ptr_resolvers\":false,\"local_ptr_upstreams\":[],\"blocking_ipv4\":\"\",\"blocking_ipv6\":\"\",\"protection_disabled_until\":null,\"edns_cs_custom_ip\":\"\"}\n", "content-type": ["application/json"]}
2025-11-23T18:46:14.253+0900 INFO client client/client.go:417 Set dns config list {"host": "192.168.10.5"}
2025-11-23T18:46:14.253+0900 DEBUG client client/client-methods.go:54 do post {"host": "192.168.10.5", "method": "POST", "path": "/dns_config", "username": "<USERNAME>", "body": "{\"blocked_response_ttl\":10,\"blocking_ipv4\":\"\",\"blocking_ipv6\":\"\",\"blocking_mode\":\"default\",\"bootstrap_dns\":[\"9.9.9.10\",\"149.112.112.10\",\"2620:fe::10\",\"2620:fe::fe:10\"],\"cache_enabled\":false,\"cache_optimistic\":true,\"cache_size\":0,\"cache_ttl_max\":0,\"cache_ttl_min\":0,\"disable_ipv6\":false,\"dnssec_enabled\":false,\"edns_cs_custom_ip\":\"\",\"edns_cs_enabled\":false,\"edns_cs_use_custom\":false,\"fallback_dns\":[],\"local_ptr_upstreams\":[],\"protection_enabled\":true,\"ratelimit\":20,\"ratelimit_whitelist\":[],\"resolve_clients\":true,\"upstream_dns\":[\"https://dns10.quad9.net/dns-query\",\"https://3r1ecxbrv6.cloudflare-gateway.com/dns-query\",\"https://dns.cloudflare.com/dns-query\"],\"upstream_dns_file\":\"\",\"upstream_mode\":\"parallel\",\"upstream_timeout\":10,\"use_private_ptr_resolvers\":true}"}
2025-11-23T18:46:14.330+0900 DEBUG client client/client-methods.go:67 got response {"host": "192.168.10.5", "method": "POST", "path": "/dns_config", "username": "<USERNAME>", "status": 400, "body": "validating dns config: private upstream servers: no upstream specified\n", "content-type": "text/plain; charset=utf-8"}
2025-11-23T18:46:14.331+0900 ERROR sync sync/sync.go:337 Error syncing DNS server config {"from": "192.168.10.3", "to": "192.168.10.5", "error": "400 Bad Request(validating dns config: private upstream servers: no upstream specified\n)"}
github.com/bakito/adguardhome-sync/internal/sync.(*worker).syncTo
/go/src/app/internal/sync/sync.go:337
github.com/bakito/adguardhome-sync/internal/sync.(*worker).sync
/go/src/app/internal/sync/sync.go:279
github.com/bakito/adguardhome-sync/internal/sync.runOnStartAsync.func1
/go/src/app/internal/sync/sync.go:89
2025-11-23T18:46:14.331+0900 ERROR sync sync/sync.go:299 Sync done {"from": "192.168.10.3", "to": "192.168.10.5", "duration": "2.042e-06s"}
github.com/bakito/adguardhome-sync/internal/sync.(*worker).syncTo.func1
/go/src/app/internal/sync/sync.go:299
github.com/bakito/adguardhome-sync/internal/sync.(*worker).syncTo
/go/src/app/internal/sync/sync.go:340
github.com/bakito/adguardhome-sync/internal/sync.(*worker).sync
/go/src/app/internal/sync/sync.go:279
github.com/bakito/adguardhome-sync/internal/sync.runOnStartAsync.func1
/go/src/app/internal/sync/sync.go:89
2025-11-23T18:46:16.299+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "status", "username": "<USERNAME>"}
2025-11-23T18:46:16.691+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "status", "username": "<USERNAME>", "status": 200, "body": "{\"version\":\"v0.107.69\",\"language\":\"en\",\"dns_addresses\":[\"192.168.10.3\"],\"dns_port\":53,\"http_port\":80,\"protection_disabled_duration\":0,\"protection_enabled\":true,\"dhcp_available\":true,\"running\":true}\n", "content-type": ["application/json"]}
2025-11-23T18:46:16.692+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.5", "method": "GET", "path": "status", "username": "<USERNAME>"}
2025-11-23T18:46:16.773+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.5", "method": "GET", "path": "status", "username": "<USERNAME>", "status": 200, "body": "{\"version\":\"v0.107.69\",\"language\":\"en\",\"dns_addresses\":[\"192.168.10.5\"],\"dns_port\":53,\"http_port\":80,\"protection_disabled_duration\":0,\"protection_enabled\":true,\"dhcp_available\":true,\"running\":true}\n", "content-type": ["application/json"]}
2025-11-23T18:46:16.990+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "status", "username": "<USERNAME>"}
2025-11-23T18:46:17.384+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "status", "username": "<USERNAME>", "status": 200, "body": "{\"version\":\"v0.107.69\",\"language\":\"en\",\"dns_addresses\":[\"192.168.10.3\"],\"dns_port\":53,\"http_port\":80,\"protection_disabled_duration\":0,\"protection_enabled\":true,\"dhcp_available\":true,\"running\":true}\n", "content-type": ["application/json"]}
2025-11-23T18:46:17.385+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.5", "method": "GET", "path": "status", "username": "<USERNAME>"}
2025-11-23T18:46:17.478+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.5", "method": "GET", "path": "status", "username": "<USERNAME>", "status": 200, "body": "{\"version\":\"v0.107.69\",\"language\":\"en\",\"dns_addresses\":[\"192.168.10.5\"],\"dns_port\":53,\"http_port\":80,\"protection_disabled_duration\":0,\"protection_enabled\":true,\"dhcp_available\":true,\"running\":true}\n", "content-type": ["application/json"]}
2025-11-23T18:46:32.800+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.3", "method": "GET", "path": "status", "username": "<USERNAME>"}
2025-11-23T18:46:33.197+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.3", "method": "GET", "path": "status", "username": "<USERNAME>", "status": 200, "body": "{\"version\":\"v0.107.69\",\"language\":\"en\",\"dns_addresses\":[\"192.168.10.3\"],\"dns_port\":53,\"http_port\":80,\"protection_disabled_duration\":0,\"protection_enabled\":true,\"dhcp_available\":true,\"running\":true}\n", "content-type": ["application/json"]}
2025-11-23T18:46:33.198+0900 DEBUG client client/client-methods.go:17 do get {"host": "192.168.10.5", "method": "GET", "path": "status", "username": "<USERNAME>"}
2025-11-23T18:46:33.280+0900 DEBUG client client/client-methods.go:41 got response {"host": "192.168.10.5", "method": "GET", "path": "status", "username": "<USERNAME>", "status": 200, "body": "{\"version\":\"v0.107.69\",\"language\":\"en\",\"dns_addresses\":[\"192.168.10.5\"],\"dns_port\":53,\"http_port\":80,\"protection_disabled_duration\":0,\"protection_enabled\":true,\"dhcp_available\":true,\"running\":true}\n", "content-type": ["application/json"]}
I hope this can help! Otherwise, I may suggest to replicate this locally, as I have also shared Docker configuration.
Regards,
I am experiencing the same issue as well. my setup is an origin of a proxmox lxc adguard instance. This successfully syncs to the other LXC instance. I have one other instance it syncs with which is a docker image from adguard/adguardhome:latest. This syncs everything, but the upstream dns servers. I could disable and the error goes away, but the main thing im trying to sync is the upstream servers which is part of that config.
Thank you for your contribute @bleeblonks. Hopefully @bakito can take a look at this asap!