Files
2026-09-14 00:02:17 +00:00

6208 lines
107 KiB
HTML

<!DOCTYPE html><html lang="en" class="no-js"><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="The main documentation resource for NetAlertX - Network visibility &amp; Asset intelligence application">
<link rel="canonical" href="https://docs.netalertx.com/plugins/sync/">
<link rel="prev" href="../snmp_discovery/">
<link rel="next" href="../ui_settings/">
<link rel="icon" href="../../img/netalertx_docs.png">
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.21">
<title>Sync Hub (SYNC) - Documentation</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.66ac8b77.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&amp;display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../stylesheets/custom.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.1/css/all.min.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<!-- Google Tag Manager -->
<!-- Google tag (gtag.js) -->
<script async="" src="https://www.googletagmanager.com/gtag/js?id=G-KCRSGLP8J2"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-KCRSGLP8J2');
</script>
<!-- End Google Tag Manager -->
<link href="../../assets/stylesheets/glightbox.min.css" rel="stylesheet"><script src="../../assets/javascripts/glightbox.min.js"></script><style id="glightbox-style">
html.glightbox-open { overflow: initial; height: 100%; }
.gslide-title { margin-top: 0px; user-select: text; }
.gslide-desc { color: #666; user-select: text; }
.gslide-image img { background: white; }
.gscrollbar-fixer { padding-right: 15px; }
.gdesc-inner { font-size: 0.75rem; }
body[data-md-color-scheme="slate"] .gdesc-inner { background: var(--md-default-bg-color); }
body[data-md-color-scheme="slate"] .gslide-title { color: var(--md-default-fg-color); }
body[data-md-color-scheme="slate"] .gslide-desc { color: var(--md-default-fg-color); }
</style></head>
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="deep-purple">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#sync-hub-sync" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KCRSGLP8J2" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="Documentation" class="md-header__button md-logo" aria-label="Documentation" data-md-component="logo">
<img src="../../img/netalertx_docs.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"></path></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Documentation
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Sync Hub (SYNC)
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="deep-purple" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden="">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a7 7 0 0 0-7 7c0 2.38 1.19 4.47 3 5.74V17a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-2.26c1.81-1.27 3-3.36 3-5.74a7 7 0 0 0-7-7M9 21a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1v-1H9v1Z"></path></svg>
</label>
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="black" data-md-color-accent="deep-purple" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_0" hidden="">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a7 7 0 0 1 7 7c0 2.38-1.19 4.47-3 5.74V17a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-2.26C6.19 13.47 5 11.38 5 9a7 7 0 0 1 7-7M9 21v-1h6v1a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1m3-17a5 5 0 0 0-5 5c0 2.05 1.23 3.81 3 4.58V16h4v-2.42c1.77-.77 3-2.53 3-4.58a5 5 0 0 0-5-5Z"></path></svg>
</label>
</form>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"></path></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required="">
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"></path></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"></path></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard="" data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"></path></svg>
</a>
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"></path></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix="">
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/netalertx/NetAlertX/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"></path></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../.." class="md-tabs__link">
Home
</a>
</li>
<li class="md-tabs__item">
<a href="../../INSTALLATION/" class="md-tabs__link">
Installation
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../../SUBNETS/" class="md-tabs__link">
Setup
</a>
</li>
<li class="md-tabs__item">
<a href="../../DEVICE_MANAGEMENT/" class="md-tabs__link">
Device guides
</a>
</li>
<li class="md-tabs__item">
<a href="../../PIHOLE_GUIDE/" class="md-tabs__link">
Other guides
</a>
</li>
<li class="md-tabs__item">
<a href="../../DEBUG_TIPS/" class="md-tabs__link">
Troubleshooting
</a>
</li>
<li class="md-tabs__item">
<a href="../../DEV_ENV_SETUP/" class="md-tabs__link">
Development
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="Documentation" class="md-nav__button md-logo" aria-label="Documentation" data-md-component="logo">
<img src="../../img/netalertx_docs.png" alt="logo">
</a>
Documentation
</label>
<div class="md-nav__source">
<a href="https://github.com/netalertx/NetAlertX/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"></path></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2">
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-ellipsis">
Installation
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Installation
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../INSTALLATION/" class="md-nav__link">
<span class="md-ellipsis">
Installation options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../INITIAL_SETUP/" class="md-nav__link">
<span class="md-ellipsis">
Quick setup
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3">
<label class="md-nav__link" for="__nav_2_3" id="__nav_2_3_label" tabindex="0">
<span class="md-ellipsis">
Docker
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_3">
<span class="md-nav__icon md-icon"></span>
Docker
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../DOCKER_INSTALLATION/" class="md-nav__link">
<span class="md-ellipsis">
Docker guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DOCKER_COMPOSE/" class="md-nav__link">
<span class="md-ellipsis">
Docker Compose
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../FILE_PERMISSIONS/" class="md-nav__link">
<span class="md-ellipsis">
Docker file permissions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../UPDATES/" class="md-nav__link">
<span class="md-ellipsis">
Docker updates
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DOCKER_MAINTENANCE/" class="md-nav__link">
<span class="md-ellipsis">
Docker maintenance
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4">
<label class="md-nav__link" for="__nav_2_4" id="__nav_2_4_label" tabindex="0">
<span class="md-ellipsis">
Docker startup troubleshooting
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
Docker startup troubleshooting
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../docker-troubleshooting/arp-flux-sysctls/" class="md-nav__link">
<span class="md-ellipsis">
ARP flux sysctls
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker-troubleshooting/aufs-capabilities/" class="md-nav__link">
<span class="md-ellipsis">
Aufs capabilities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker-troubleshooting/excessive-capabilities/" class="md-nav__link">
<span class="md-ellipsis">
Excessive capabilities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker-troubleshooting/file-permissions/" class="md-nav__link">
<span class="md-ellipsis">
File permissions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker-troubleshooting/incorrect-user/" class="md-nav__link">
<span class="md-ellipsis">
Incorrect user
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker-troubleshooting/missing-capabilities/" class="md-nav__link">
<span class="md-ellipsis">
Missing capabilities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker-troubleshooting/mount-configuration-issues/" class="md-nav__link">
<span class="md-ellipsis">
Mount issues
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker-troubleshooting/network-mode/" class="md-nav__link">
<span class="md-ellipsis">
Network mode
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker-troubleshooting/nginx-configuration-mount/" class="md-nav__link">
<span class="md-ellipsis">
Nginx mount
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker-troubleshooting/port-conflicts/" class="md-nav__link">
<span class="md-ellipsis">
Port conflicts
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker-troubleshooting/read-only-filesystem/" class="md-nav__link">
<span class="md-ellipsis">
Read only
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker-troubleshooting/running-as-root/" class="md-nav__link">
<span class="md-ellipsis">
Running as root
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5">
<label class="md-nav__link" for="__nav_2_5" id="__nav_2_5_label" tabindex="0">
<span class="md-ellipsis">
Other
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_5">
<span class="md-nav__icon md-icon"></span>
Other
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../SYNOLOGY_GUIDE/" class="md-nav__link">
<span class="md-ellipsis">
Synology guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DOCKER_PORTAINER/" class="md-nav__link">
<span class="md-ellipsis">
Portainer Stacks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../COMMUNITY_GUIDES/" class="md-nav__link">
<span class="md-ellipsis">
Community guides
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../HW_INSTALL/" class="md-nav__link">
<span class="md-ellipsis">
Bare-metal (Experimental)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../MIGRATION/" class="md-nav__link">
<span class="md-ellipsis">
Migration guide
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_6">
<label class="md-nav__link" for="__nav_2_6" id="__nav_2_6_label" tabindex="0">
<span class="md-ellipsis">
Help
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_6">
<span class="md-nav__icon md-icon"></span>
Help
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../COMMON_ISSUES/" class="md-nav__link">
<span class="md-ellipsis">
Common issues
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked="">
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
<span class="md-ellipsis">
Setup
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Setup
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_1" checked="">
<label class="md-nav__link" for="__nav_3_1" id="__nav_3_1_label" tabindex="">
<span class="md-ellipsis">
Getting started
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_1_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_3_1">
<span class="md-nav__icon md-icon"></span>
Getting started
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../SUBNETS/" class="md-nav__link">
<span class="md-ellipsis">
Subnets
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../PLUGINS_OVERVIEW/" class="md-nav__link">
<span class="md-ellipsis">
Enable Plugins
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_1_3" checked="">
<label class="md-nav__link" for="__nav_3_1_3" id="__nav_3_1_3_label" tabindex="0">
<span class="md-ellipsis">
Plugins reference
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_1_3_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_3_1_3">
<span class="md-nav__icon md-icon"></span>
Plugins reference
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../_publisher_apprise/" class="md-nav__link">
<span class="md-ellipsis">
Apprise publisher (APPRISE)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../_publisher_email/" class="md-nav__link">
<span class="md-ellipsis">
Email publisher (SMTP) (SMTP)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../_publisher_mqtt/" class="md-nav__link">
<span class="md-ellipsis">
MQTT publisher (MQTT)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../_publisher_ntfy/" class="md-nav__link">
<span class="md-ellipsis">
NTFY publisher (NTFY)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../_publisher_pushover/" class="md-nav__link">
<span class="md-ellipsis">
Pushover publisher (PUSHOVER)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../_publisher_pushsafer/" class="md-nav__link">
<span class="md-ellipsis">
Pushsafer publisher (PUSHSAFER)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../_publisher_telegram/" class="md-nav__link">
<span class="md-ellipsis">
Telegram publisher (TELEGRAM)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../_publisher_webhook/" class="md-nav__link">
<span class="md-ellipsis">
Webhook publisher (WEBHOOK)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../adguard_export/" class="md-nav__link">
<span class="md-ellipsis">
AdGuard (Device Export) (ADGUARDEXP)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../adguard_import/" class="md-nav__link">
<span class="md-ellipsis">
AdGuard (Device import) (ADGUARDIMP)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../arp_scan/" class="md-nav__link">
<span class="md-ellipsis">
Arp-Scan (Network scan) (ARPSCAN)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../asuswrt_import/" class="md-nav__link">
<span class="md-ellipsis">
AsusWRT device import (ASUSWRT)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../avahi_scan/" class="md-nav__link">
<span class="md-ellipsis">
AVAHISCAN (Naming) (AVAHISCAN)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../csv_backup/" class="md-nav__link">
<span class="md-ellipsis">
CSV backup (CSVBCKP)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../custom_props/" class="md-nav__link">
<span class="md-ellipsis">
Custom properties (CUSTPROP)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../db_cleanup/" class="md-nav__link">
<span class="md-ellipsis">
DB cleanup (DBCLNP)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ddns_update/" class="md-nav__link">
<span class="md-ellipsis">
DDNS update (DDNS)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dhcp_leases/" class="md-nav__link">
<span class="md-ellipsis">
DHCP Leases (Device import) (DHCPLSS)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dhcp_leases/ASUS_ROUTERS/" class="md-nav__link">
<span class="md-ellipsis">
Configuring the DHCPLSS plugin to import clients from the YazFi plugin
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dhcp_servers/" class="md-nav__link">
<span class="md-ellipsis">
Rogue DHCP (DHCPSRVS)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dig_scan/" class="md-nav__link">
<span class="md-ellipsis">
Dig (Name resolution) (DIGSCAN)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../freebox/" class="md-nav__link">
<span class="md-ellipsis">
Freebox (FREEBOX)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../fritzbox/" class="md-nav__link">
<span class="md-ellipsis">
FRITZ!Box (FRITZBOX)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../icmp_scan/" class="md-nav__link">
<span class="md-ellipsis">
ICMP (Status check) (ICMP)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../internet_ip/" class="md-nav__link">
<span class="md-ellipsis">
Internet check (INTRNT)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../internet_speedtest/" class="md-nav__link">
<span class="md-ellipsis">
Internet speedtest (INTRSPD)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ipneigh/" class="md-nav__link">
<span class="md-ellipsis">
IP Neigh (IPNEIGH)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../kea_api/" class="md-nav__link">
<span class="md-ellipsis">
Kea DHCP API (KEALSS)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../luci_import/" class="md-nav__link">
<span class="md-ellipsis">
Luci rpc import (Device import) (LUCIRPC)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../maintenance/" class="md-nav__link">
<span class="md-ellipsis">
Maintenance (MAINT)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../mikrotik_scan/" class="md-nav__link">
<span class="md-ellipsis">
Mikrotik (Device discovery) (MTSCAN)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../nbtscan_scan/" class="md-nav__link">
<span class="md-ellipsis">
NBTSCAN (Naming) (NBTSCAN)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../newdev_template/" class="md-nav__link">
<span class="md-ellipsis">
New Devices (NEWDEV)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../nmap_dev_scan/" class="md-nav__link">
<span class="md-ellipsis">
NMAP Device discovery (NMAPDEV)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../nmap_scan/" class="md-nav__link">
<span class="md-ellipsis">
Services &amp; Ports (NMAP) (NMAP)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../notification_processing/" class="md-nav__link">
<span class="md-ellipsis">
Notification Processing (NTFPRCS)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../nslookup_scan/" class="md-nav__link">
<span class="md-ellipsis">
NSLOOKUP (Naming) (NSLOOKUP)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../omada_sdn_imp/" class="md-nav__link">
<span class="md-ellipsis">
OMADA SDN import (do not use) (OMDSDN)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../omada_sdn_openapi/" class="md-nav__link">
<span class="md-ellipsis">
Omada SDN using OpenAPI (OMDSDNOPENAPI)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../pihole_api_scan/" class="md-nav__link">
<span class="md-ellipsis">
PiHole API scan (PIHOLEAPI)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../pihole_monitor/" class="md-nav__link">
<span class="md-ellipsis">
Pi-hole Monitor (PIHOLEMON)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../pihole_scan/" class="md-nav__link">
<span class="md-ellipsis">
PiHole (Device sync) (PIHOLE)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../rest_import/" class="md-nav__link">
<span class="md-ellipsis">
REST Import (RSTIMPRT)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../set_password/" class="md-nav__link">
<span class="md-ellipsis">
Set password (SETPWD)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../snmp_discovery/" class="md-nav__link">
<span class="md-ellipsis">
SNMP discovery (SNMPDSC)
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Sync Hub (SYNC)
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Sync Hub (SYNC)
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix="">
<li class="md-nav__item">
<a href="#overview-sync-hub-for-msp-multi-site-deployments" class="md-nav__link">
<span class="md-ellipsis">
Overview: Sync Hub for MSP &amp; Multi-Site Deployments
</span>
</a>
<nav class="md-nav" aria-label="Overview: Sync Hub for MSP &amp; Multi-Site Deployments">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#synchronization-modes" class="md-nav__link">
<span class="md-ellipsis">
Synchronization Modes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#settings" class="md-nav__link">
<span class="md-ellipsis">
Settings
</span>
</a>
<nav class="md-nav" aria-label="Settings">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#node-source-settings-n" class="md-nav__link">
<span class="md-ellipsis">
Node (Source) Settings [n]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#hub-target-settings-h" class="md-nav__link">
<span class="md-ellipsis">
Hub (Target) Settings [h]
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#usage" class="md-nav__link">
<span class="md-ellipsis">
Usage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#notes" class="md-nav__link">
<span class="md-ellipsis">
Notes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#hub-device-write-behavior-sync_behavior" class="md-nav__link">
<span class="md-ellipsis">
Hub Device-Write Behavior (SYNC_BEHAVIOR)
</span>
</a>
<nav class="md-nav" aria-label="Hub Device-Write Behavior (SYNC_BEHAVIOR)">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#copy-new-default" class="md-nav__link">
<span class="md-ellipsis">
copy-new (default)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#carbon-copy" class="md-nav__link">
<span class="md-ellipsis">
carbon-copy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#hub-defaults" class="md-nav__link">
<span class="md-ellipsis">
hub-defaults
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#example-use-case-network-setup-with-multiple-vlans-and-vm-scanning" class="md-nav__link">
<span class="md-ellipsis">
Example use case: Network Setup with Multiple VLANs and VM Scanning
</span>
</a>
<nav class="md-nav" aria-label="Example use case: Network Setup with Multiple VLANs and VM Scanning">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#summary" class="md-nav__link">
<span class="md-ellipsis">
Summary
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#example-setup" class="md-nav__link">
<span class="md-ellipsis">
Example Setup
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#how-to-set-it-up" class="md-nav__link">
<span class="md-ellipsis">
How to Set It Up
</span>
</a>
<nav class="md-nav" aria-label="How to Set It Up">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#server-vm1" class="md-nav__link">
<span class="md-ellipsis">
Server (VM1)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#clients-vm2-vm3-vm4-vm5-vm6" class="md-nav__link">
<span class="md-ellipsis">
Clients (VM2, VM3, VM4, VM5, VM6)
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../ui_settings/" class="md-nav__link">
<span class="md-ellipsis">
UI Settings (UI)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../unifi_api_import/" class="md-nav__link">
<span class="md-ellipsis">
UniFi import (API) (UNIFIAPI)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../unifi_import/" class="md-nav__link">
<span class="md-ellipsis">
UniFi import (UNFIMP)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../vendor_update/" class="md-nav__link">
<span class="md-ellipsis">
Vendor update (VNDRPDT)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../wake_on_lan/" class="md-nav__link">
<span class="md-ellipsis">
Wake on Lan (WOL) (WOL)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../website_monitor/" class="md-nav__link">
<span class="md-ellipsis">
Services &amp; Web monitor (WEBMON)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../workflows/" class="md-nav__link">
<span class="md-ellipsis">
Workflows (WORKFLOWS)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../BACKUPS/" class="md-nav__link">
<span class="md-ellipsis">
Backups
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../SECURITY_FEATURES/" class="md-nav__link">
<span class="md-ellipsis">
Security features
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../SECURITY/" class="md-nav__link">
<span class="md-ellipsis">
Security considerations
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2">
<label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="">
<span class="md-ellipsis">
Advanced guides
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_2">
<span class="md-nav__icon md-icon"></span>
Advanced guides
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../REMOTE_NETWORKS/" class="md-nav__link">
<span class="md-ellipsis">
Remote networks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../NOTIFICATIONS/" class="md-nav__link">
<span class="md-ellipsis">
Notifications guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../NOTIFICATION_TEMPLATES/" class="md-nav__link">
<span class="md-ellipsis">
Notification text templates
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../PUID_PGID_SECURITY/" class="md-nav__link">
<span class="md-ellipsis">
Custom PUID/GUID
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../NAME_RESOLUTION/" class="md-nav__link">
<span class="md-ellipsis">
Name resolution
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../AUTHELIA/" class="md-nav__link">
<span class="md-ellipsis">
Authelia guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../PERFORMANCE/" class="md-nav__link">
<span class="md-ellipsis">
Performance guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../REVERSE_DNS/" class="md-nav__link">
<span class="md-ellipsis">
Reverse DNS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../REVERSE_PROXY/" class="md-nav__link">
<span class="md-ellipsis">
Reverse proxy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../WORKFLOWS/" class="md-nav__link">
<span class="md-ellipsis">
Workflows
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../WORKFLOW_EXAMPLES/" class="md-nav__link">
<span class="md-ellipsis">
Workflow examples
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DOCKER_SWARM/" class="md-nav__link">
<span class="md-ellipsis">
Docker Swarm
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3">
<label class="md-nav__link" for="__nav_3_3" id="__nav_3_3_label" tabindex="">
<span class="md-ellipsis">
Best practice guides
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_3">
<span class="md-nav__icon md-icon"></span>
Best practice guides
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../ADVISORY_EYES_ON_GLASS/" class="md-nav__link">
<span class="md-ellipsis">
NOC / Eyes-on-glass dashboard
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../ADVISORY_MULTI_NETWORK/" class="md-nav__link">
<span class="md-ellipsis">
Multi-network (VLAN / routing) monitoring
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../ADVISORY_MULTI_SITE_MONITORING/" class="md-nav__link">
<span class="md-ellipsis">
Multi-site (MSP / customer / branch) monitoring
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4">
<label class="md-nav__link" for="__nav_3_4" id="__nav_3_4_label" tabindex="">
<span class="md-ellipsis">
Help
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_4">
<span class="md-nav__icon md-icon"></span>
Help
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../COMMON_ISSUES/" class="md-nav__link">
<span class="md-ellipsis">
Common issues
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../RANDOM_MAC/" class="md-nav__link">
<span class="md-ellipsis">
Random MAC
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4">
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-ellipsis">
Device guides
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Device guides
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_1">
<label class="md-nav__link" for="__nav_4_1" id="__nav_4_1_label" tabindex="0">
<span class="md-ellipsis">
Editing devices
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_1">
<span class="md-nav__icon md-icon"></span>
Editing devices
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../DEVICE_MANAGEMENT/" class="md-nav__link">
<span class="md-ellipsis">
Management
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DEVICES_BULK_EDITING/" class="md-nav__link">
<span class="md-ellipsis">
Bulk editing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../CUSTOM_PROPERTIES/" class="md-nav__link">
<span class="md-ellipsis">
Custom properties
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DEVICE_DISPLAY_SETTINGS/" class="md-nav__link">
<span class="md-ellipsis">
Device display settings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DEVICE_FILTERS/" class="md-nav__link">
<span class="md-ellipsis">
Device views filtering
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../SESSION_INFO/" class="md-nav__link">
<span class="md-ellipsis">
Session info
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DEVICE_FIELD_LOCK/" class="md-nav__link">
<span class="md-ellipsis">
Field Lock/Unlock
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2">
<label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0">
<span class="md-ellipsis">
Device auditing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Device auditing
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../DEVICE_CHANGE_LOG/" class="md-nav__link">
<span class="md-ellipsis">
Change log
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DEVICE_PRESENCE/" class="md-nav__link">
<span class="md-ellipsis">
Presence
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DEVICE_SOURCE_FIELDS/" class="md-nav__link">
<span class="md-ellipsis">
Device source fields
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3">
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0">
<span class="md-ellipsis">
Icons and network topology
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Icons and network topology
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../ICONS/" class="md-nav__link">
<span class="md-ellipsis">
Icons
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../NETWORK_TREE/" class="md-nav__link">
<span class="md-ellipsis">
Network topology
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5">
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-ellipsis">
Other guides
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Other guides
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../PIHOLE_GUIDE/" class="md-nav__link">
<span class="md-ellipsis">
Pi-hole guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../HOME_ASSISTANT/" class="md-nav__link">
<span class="md-ellipsis">
Home Assistant
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../SMTP/" class="md-nav__link">
<span class="md-ellipsis">
Common email services
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../REST_IMPORT/" class="md-nav__link">
<span class="md-ellipsis">
Rest import
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../WEBHOOK_N8N/" class="md-nav__link">
<span class="md-ellipsis">
Webhooks (n8n)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6">
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
<span class="md-ellipsis">
Troubleshooting
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Troubleshooting
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../DEBUG_TIPS/" class="md-nav__link">
<span class="md-ellipsis">
General tips
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../COMMON_ISSUES/" class="md-nav__link">
<span class="md-ellipsis">
Common issues
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../LOGGING/" class="md-nav__link">
<span class="md-ellipsis">
Inspecting logs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DEBUG_API_SERVER/" class="md-nav__link">
<span class="md-ellipsis">
API server issues
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DEBUG_INVALID_JSON/" class="md-nav__link">
<span class="md-ellipsis">
Invalid JSON issues
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DEBUG_PHP/" class="md-nav__link">
<span class="md-ellipsis">
PHP backend issues
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DEBUG_PLUGINS/" class="md-nav__link">
<span class="md-ellipsis">
Plugin issues
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../WEB_UI_PORT_DEBUG/" class="md-nav__link">
<span class="md-ellipsis">
Web UI port issues
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../WORKFLOWS_DEBUGGING/" class="md-nav__link">
<span class="md-ellipsis">
Workflows issues
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../FIX_OFFLINE_DETECTION/" class="md-nav__link">
<span class="md-ellipsis">
Incorrect offline detection
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7">
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Development
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Development
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7_1">
<label class="md-nav__link" for="__nav_7_1" id="__nav_7_1_label" tabindex="0">
<span class="md-ellipsis">
Plugin and app development
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7_1">
<span class="md-nav__icon md-icon"></span>
Plugin and app development
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../DEV_ENV_SETUP/" class="md-nav__link">
<span class="md-ellipsis">
Environment setup
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../BUILDS/" class="md-nav__link">
<span class="md-ellipsis">
Builds
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DEV_DEVCONTAINER/" class="md-nav__link">
<span class="md-ellipsis">
Devcontainer
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DEV_PORTS_HOST_MODE/" class="md-nav__link">
<span class="md-ellipsis">
Devcontainer ports
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7_1_5">
<label class="md-nav__link" for="__nav_7_1_5" id="__nav_7_1_5_label" tabindex="0">
<span class="md-ellipsis">
Custom plugins
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_7_1_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7_1_5">
<span class="md-nav__icon md-icon"></span>
Custom plugins
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../PLUGINS_DEV/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../PLUGINS_DEV_QUICK_START/" class="md-nav__link">
<span class="md-ellipsis">
Quick start
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../PLUGINS_DEV_DATA_CONTRACT/" class="md-nav__link">
<span class="md-ellipsis">
Data contract
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../PLUGINS_IMPORT_BEHAVIOR/" class="md-nav__link">
<span class="md-ellipsis">
Import behavior
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../PLUGINS_DEV_SETTINGS/" class="md-nav__link">
<span class="md-ellipsis">
Settings system
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../PLUGINS_DEV_DATASOURCES/" class="md-nav__link">
<span class="md-ellipsis">
Data sources
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../PLUGINS_DEV_UI_COMPONENTS/" class="md-nav__link">
<span class="md-ellipsis">
UI components
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../PLUGINS_DEV_CONFIG/" class="md-nav__link">
<span class="md-ellipsis">
Config lifecycle
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../FRONTEND_DEVELOPMENT/" class="md-nav__link">
<span class="md-ellipsis">
Frontend development
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DATABASE/" class="md-nav__link">
<span class="md-ellipsis">
Database
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../SETTINGS_SYSTEM/" class="md-nav__link">
<span class="md-ellipsis">
Settings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../VERSIONS/" class="md-nav__link">
<span class="md-ellipsis">
Versions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../DEVICE_HEURISTICS/" class="md-nav__link">
<span class="md-ellipsis">
Icon and type guessing
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7_2">
<label class="md-nav__link" for="__nav_7_2" id="__nav_7_2_label" tabindex="0">
<span class="md-ellipsis">
API
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7_2">
<span class="md-nav__icon md-icon"></span>
API
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../API/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_DEVICES/" class="md-nav__link">
<span class="md-ellipsis">
Devices collection
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_DEVICE/" class="md-nav__link">
<span class="md-ellipsis">
Device
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_DEVICE_FIELD_LOCK/" class="md-nav__link">
<span class="md-ellipsis">
Device field Lock
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_SESSIONS/" class="md-nav__link">
<span class="md-ellipsis">
Sessions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_SETTINGS/" class="md-nav__link">
<span class="md-ellipsis">
Settings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_EVENTS/" class="md-nav__link">
<span class="md-ellipsis">
Events
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_MESSAGING_IN_APP/" class="md-nav__link">
<span class="md-ellipsis">
Messaging in-app
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_METRICS/" class="md-nav__link">
<span class="md-ellipsis">
Metrics
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_NETTOOLS/" class="md-nav__link">
<span class="md-ellipsis">
Net tools
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_ONLINEHISTORY/" class="md-nav__link">
<span class="md-ellipsis">
Online history
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_SYNC/" class="md-nav__link">
<span class="md-ellipsis">
Sync
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_LOGS/" class="md-nav__link">
<span class="md-ellipsis">
Logs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_SSE/" class="md-nav__link">
<span class="md-ellipsis">
SSE
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_GRAPHQL/" class="md-nav__link">
<span class="md-ellipsis">
GraphQL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_DBQUERY/" class="md-nav__link">
<span class="md-ellipsis">
DB query
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_MCP/" class="md-nav__link">
<span class="md-ellipsis">
MCP
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_TESTS/" class="md-nav__link">
<span class="md-ellipsis">
Tests
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../API_OLD/" class="md-nav__link">
<span class="md-ellipsis">
SUPERSEDED OLD API Overview
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7_3">
<label class="md-nav__link" for="__nav_7_3" id="__nav_7_3_label" tabindex="0">
<span class="md-ellipsis">
Integrations
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7_3">
<span class="md-nav__icon md-icon"></span>
Integrations
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../../WEBHOOK_SECRET/" class="md-nav__link">
<span class="md-ellipsis">
Webhook secret
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../HELPER_SCRIPTS/" class="md-nav__link">
<span class="md-ellipsis">
Helper scripts
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix="">
<li class="md-nav__item">
<a href="#overview-sync-hub-for-msp-multi-site-deployments" class="md-nav__link">
<span class="md-ellipsis">
Overview: Sync Hub for MSP &amp; Multi-Site Deployments
</span>
</a>
<nav class="md-nav" aria-label="Overview: Sync Hub for MSP &amp; Multi-Site Deployments">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#synchronization-modes" class="md-nav__link">
<span class="md-ellipsis">
Synchronization Modes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#settings" class="md-nav__link">
<span class="md-ellipsis">
Settings
</span>
</a>
<nav class="md-nav" aria-label="Settings">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#node-source-settings-n" class="md-nav__link">
<span class="md-ellipsis">
Node (Source) Settings [n]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#hub-target-settings-h" class="md-nav__link">
<span class="md-ellipsis">
Hub (Target) Settings [h]
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#usage" class="md-nav__link">
<span class="md-ellipsis">
Usage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#notes" class="md-nav__link">
<span class="md-ellipsis">
Notes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#hub-device-write-behavior-sync_behavior" class="md-nav__link">
<span class="md-ellipsis">
Hub Device-Write Behavior (SYNC_BEHAVIOR)
</span>
</a>
<nav class="md-nav" aria-label="Hub Device-Write Behavior (SYNC_BEHAVIOR)">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#copy-new-default" class="md-nav__link">
<span class="md-ellipsis">
copy-new (default)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#carbon-copy" class="md-nav__link">
<span class="md-ellipsis">
carbon-copy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#hub-defaults" class="md-nav__link">
<span class="md-ellipsis">
hub-defaults
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#example-use-case-network-setup-with-multiple-vlans-and-vm-scanning" class="md-nav__link">
<span class="md-ellipsis">
Example use case: Network Setup with Multiple VLANs and VM Scanning
</span>
</a>
<nav class="md-nav" aria-label="Example use case: Network Setup with Multiple VLANs and VM Scanning">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#summary" class="md-nav__link">
<span class="md-ellipsis">
Summary
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#example-setup" class="md-nav__link">
<span class="md-ellipsis">
Example Setup
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#how-to-set-it-up" class="md-nav__link">
<span class="md-ellipsis">
How to Set It Up
</span>
</a>
<nav class="md-nav" aria-label="How to Set It Up">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#server-vm1" class="md-nav__link">
<span class="md-ellipsis">
Server (VM1)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#clients-vm2-vm3-vm4-vm5-vm6" class="md-nav__link">
<span class="md-ellipsis">
Clients (VM2, VM3, VM4, VM5, VM6)
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/netalertx/NetAlertX/blob/main/server/plugins/sync/README.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"></path></svg>
</a>
<a href="https://github.com/netalertx/NetAlertX/raw/main/server/plugins/sync/README.md" title="View source of this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"></path></svg>
</a>
<h1 id="sync-hub-sync">Sync Hub (SYNC)</h1>
<div class="admonition note">
<p class="admonition-title">Generated page</p>
<p>This page mirrors <a href="https://github.com/netalertx/NetAlertX/blob/main/server/plugins/sync/README.md"><code>server/plugins/sync/README.md</code></a> and is regenerated on every docs build.</p>
</div>
<h2 id="overview-sync-hub-for-msp-multi-site-deployments">Overview: Sync Hub for MSP &amp; Multi-Site Deployments</h2>
<p>The synchronization plugin is designed to synchronize data across multiple instances of the app. It supports the following data synchronization modes:</p>
<ol>
<li><strong>💻 Devices</strong>: Sends an encrypted <code>table_devices.json</code> file to synchronize the entire Devices database table.</li>
<li><strong>🔌 Plugin Data</strong>: Sends encrypted <code>last_result.log</code> files for individual plugins.</li>
</ol>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>This plugin is usually used if you need to monitor inaccessible networks (WAN, VLAN etc.). Read the <a href="https://docs.netalertx.com/REMOTE_NETWORKS">Remote networks documentation</a> for more details about these scenarios.</p>
</div>
<h3 id="synchronization-modes">Synchronization Modes</h3>
<p>The plugin operates in three different modes based on the configuration settings.</p>
<blockquote>
<p><strong>Note:</strong> <code>[n]</code> indicates a setting specified for the node instance, and <code>[n,h]</code> indicates a setting used on both the node and the hub instances.</p>
</blockquote>
<ol>
<li><strong>Mode 1: PUSH (NODE)</strong> - Sends data from the node to the hub.</li>
<li>This mode is activated if <code>SYNC_hub_url</code> is set and either <code>SYNC_devices</code> or <code>SYNC_plugins</code> is enabled.</li>
<li>
<p><strong>Actions</strong>:</p>
<ul>
<li>Sends <code>table_devices.json</code> to the hub if <code>SYNC_devices</code> is enabled.</li>
<li>Sends individual plugin <code>last_result.log</code> files to the hub if <code>SYNC_plugins</code> is enabled.</li>
</ul>
</li>
<li>
<p><strong>Mode 2: PULL (HUB)</strong> - Retrieves data from nodes to the hub.</p>
</li>
<li>This mode is activated if <code>SYNC_nodes</code> is set.</li>
<li>
<p><strong>Actions</strong>:</p>
<ul>
<li>Retrieves data from configured nodes using the API and saves it locally for further processing.</li>
</ul>
</li>
<li>
<p><strong>Mode 3: RECEIVE (HUB)</strong> - Processes received data on the hub.</p>
</li>
<li>Activated when data is received in Mode 2 and is ready to be processed.</li>
<li><strong>Actions</strong>:<ul>
<li>Decodes received data files, processes them, and updates the Devices table accordingly.</li>
</ul>
</li>
</ol>
<h3 id="settings">Settings</h3>
<h4 id="node-source-settings-n">Node (Source) Settings <code>[n]</code></h4>
<ul>
<li>
<p><strong>API Token</strong> <code>[n,h]</code>: <code>API_TOKEN</code> (has to be same across all nodes)</p>
</li>
<li>
<p><strong>When to Run</strong> <code>[n,h]</code>: <code>SYNC_RUN</code></p>
</li>
<li><strong>Schedule</strong> <code>[n,h]</code>: <code>SYNC_RUN_SCHD</code></li>
<li><strong>Encryption Key</strong> <code>[n,h]</code>: <code>SYNC_encryption_key</code></li>
<li><strong>Node Name</strong> <code>[n]</code>: <code>SYNC_node_name</code></li>
<li><strong>Hub URL</strong> <code>[n]</code>: <code>SYNC_hub_url</code> + <code>GRAPHQL_PORT</code> of the target</li>
<li><strong>Sync Devices</strong> <code>[n]</code>: <code>SYNC_devices</code></li>
<li><strong>Sync Plugins</strong> <code>[n]</code>: <code>SYNC_plugins</code></li>
</ul>
<h4 id="hub-target-settings-h">Hub (Target) Settings <code>[h]</code></h4>
<ul>
<li>
<p><strong>API Token</strong> <code>[n,h]</code>: <code>API_TOKEN</code> (has to be same across all nodes)</p>
</li>
<li>
<p><strong>When to Run</strong> <code>[n,h]</code>: <code>SYNC_RUN</code></p>
</li>
<li><strong>Schedule</strong> <code>[n,h]</code>: <code>SYNC_RUN_SCHD</code></li>
<li><strong>Encryption Key</strong> <code>[n,h]</code>: <code>SYNC_encryption_key</code></li>
<li><strong>Nodes to Pull From</strong> <code>[h]</code>: <code>SYNC_nodes</code> + <code>GRAPHQL_PORT</code> of the source nodes</li>
<li><strong>Hub Behavior</strong> <code>[h]</code>: <code>SYNC_BEHAVIOR</code> - controls how the hub writes devices received from nodes (see <a href="#hub-device-write-behavior-sync_behavior">below</a>)</li>
</ul>
<h3 id="usage">Usage</h3>
<ol>
<li><strong>Adjust Settings</strong>:</li>
<li>Navigate to <strong>Settings</strong> &gt; <strong>Sync Hub</strong> to modify default settings.</li>
<li><strong>Data Flow</strong>:</li>
<li>Nodes send or receive data based on the specified modes, either pushing data to the hub or pulling from nodes.</li>
</ol>
<h3 id="notes">Notes</h3>
<ul>
<li>How existing and new devices are handled on the hub depends on the <code>SYNC_BEHAVIOR</code> setting (see below).</li>
<li>It is recommended to use Device synchronization primarily. Plugin data synchronization is more suitable for specific use cases.</li>
</ul>
<p><a class="glightbox" data-type="image" data-width="auto" data-height="auto" href="sync_hub.png" data-desc-position="bottom"><img alt="Sync Hub Setup Diagram" src="sync_hub.png"></a></p>
<hr>
<h3 id="hub-device-write-behavior-sync_behavior">Hub Device-Write Behavior (<code>SYNC_BEHAVIOR</code>)</h3>
<p>The <code>SYNC_BEHAVIOR</code> setting - configured on the <strong>hub only</strong> - controls how the hub writes devices received from nodes.</p>
<table>
<thead>
<tr>
<th>Value</th>
<th>Default?</th>
<th>Devices written</th>
<th>Source of truth</th>
<th>Recommended when</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>copy-new</code></td>
<td></td>
<td>New devices only (INSERT OR IGNORE)</td>
<td>Node (first sync), then Hub</td>
<td>You want the hub to start with the node's existing config and manage devices from there.</td>
</tr>
<tr>
<td><code>carbon-copy</code></td>
<td></td>
<td>All devices on every sync (UPSERT)</td>
<td>Node</td>
<td>The node owns device config end-to-end. <strong>All</strong> hub fields are overwritten on every sync, including LOCKED. Do not customize devices on the hub.</td>
</tr>
<tr>
<td><code>hub-defaults</code></td>
<td></td>
<td>None — hub pipeline handles insertion</td>
<td>Hub</td>
<td>Nodes provide presence data only; all device config is set and maintained on the hub.</td>
</tr>
</tbody>
</table>
<h4 id="copy-new-default"><code>copy-new</code> (default)</h4>
<p>New devices are inserted using all available column values from the node's existing record (name, alert settings, vendor, etc.). If the device already exists on the hub, the INSERT is silently skipped.</p>
<p>Subsequent syncs update only empty/unknown fields on the hub (e.g., if the hub's <code>devName</code> is <code>(unknown)</code> and the node now has a resolved name, it propagates). Fields customized by a user on the hub (fields with source set to <code>USER</code> or <code>LOCKED</code>) are never overwritten.</p>
<div class="highlight"><pre><span></span><code>First sync: INSERT with node's full config
Next syncs: empty fields updated only (name, vendor) via scan pipeline
User edits: protected — never overwritten
</code></pre></div>
<h4 id="carbon-copy"><code>carbon-copy</code></h4>
<p>All received devices are upserted on every sync. The node is treated as fully authoritative: its values overwrite <strong>all</strong> hub fields on every sync cycle, including fields with <code>USER</code> or <code>LOCKED</code> source.</p>
<blockquote>
<p>⚠️ Do not customize devices on the hub when using <code>carbon-copy</code>. Any hub-side changes will be overwritten on the next sync.</p>
</blockquote>
<div class="highlight"><pre><span></span><code>First sync: UPSERT with node config
Next syncs: UPSERT — node values win (all fields, no exceptions)
User edits: overwritten on next sync
</code></pre></div>
<h4 id="hub-defaults"><code>hub-defaults</code></h4>
<p><strong>The hub is the source of truth.</strong> Nodes contribute only presence data (MAC, IP, vendor from scans). All device configuration — name, alerts, notes, group — should be set on the hub. Node-side values for those fields are ignored.</p>
<p>Use this mode when you want the hub to behave as a fully independent instance — it receives presence data from nodes but manages its own device configuration.</p>
<div class="highlight"><pre><span></span><code>First sync: NEWDEV defaults applied
Next syncs: empty fields updated only via scan pipeline
User edits: set and maintained on the hub — never overwritten
</code></pre></div>
<h3 id="example-use-case-network-setup-with-multiple-vlans-and-vm-scanning">Example use case: Network Setup with Multiple VLANs and VM Scanning</h3>
<blockquote>
<p>Thank you to <a href="https://github.com/richtj999">@richtj999</a> for the use case 🙏</p>
</blockquote>
<p>I have 6 VLANs, all isolated by a firewall, except for one VLAN that has access to all the others.</p>
<p>Initially, I had one virtual machine (VM) with 6 network cards, one for each VLAN. While this setup worked, it introduced delays due to other concurrent scans. To optimize this, I switched to a multi-VM setup:</p>
<ul>
<li>I created 6 VMs, each attached to a single VLAN.</li>
<li>One VM acts as the "server," and the other 5 as "clients."</li>
<li>The server has access to all VLANs (via firewall rules) and collects data from the client VMs, which each scan their own VLAN.</li>
</ul>
<h4 id="summary">Summary</h4>
<ul>
<li><strong>Single VM on six VLANs</strong>: Slower because one VM scans all networks.</li>
<li><strong>Six VMs on six VLANs</strong>: Faster because each VM scans its own network, sending the results to the server.</li>
</ul>
<h4 id="example-setup">Example Setup</h4>
<ul>
<li>
<p><strong>VM1 ("Server")</strong>: Network 1 (can access all networks) - IP: <code>10.10.10.106</code>
Receives data from all NetAlertX clients and scans network 1.</p>
</li>
<li>
<p><strong>VM2 ("Client")</strong>: Network 2 (can access only network 2) - IP: <code>192.168.x.x</code>
Scans network 2; VM1 retrieves this data.</p>
</li>
<li>
<p><strong>VM3 ("Client")</strong>: Network 3 (can access only network 3) - IP: <code>192.168.x.x</code>
Scans network 3; VM1 retrieves this data.</p>
</li>
<li>
<p><strong>VM4 ("Client")</strong>: Network 4 (can access only network 4) - IP: <code>192.168.x.x</code>
Scans network 4; VM1 retrieves this data.</p>
</li>
<li>
<p><strong>VM5 ("Client")</strong>: Network 5 (can access only network 5) - IP: <code>192.168.x.x</code>
Scans network 5; VM1 retrieves this data.</p>
</li>
<li>
<p><strong>VM6 ("Client")</strong>: Network 6 (can access only network 6) - IP: <code>192.168.x.x</code>
Scans network 6; VM1 retrieves this data.</p>
</li>
</ul>
<hr>
<h4 id="how-to-set-it-up">How to Set It Up</h4>
<h5 id="server-vm1">Server (VM1)</h5>
<ol>
<li>Go to <strong>Settings &gt; System &gt; Sync Hub</strong>.</li>
<li>Set the schedule (5 minutes works for me).</li>
<li><strong>API Token</strong>: Use any string, but it must match the clients (e.g., <code>abc123</code>).</li>
<li><strong>Encryption Key</strong>: Use any string, but it must match the clients (e.g., <code>abc123</code>).</li>
<li>Under <strong>Nodes</strong>, add the full URL for each client, e.g., <code>http://192.168.1.20.20212/</code>, where the port <code>20212</code> is the value of the <code>GRAPHQL_PORT</code> setting of the given node (client)</li>
<li><strong>Node Name</strong>: Leave blank.</li>
<li>Check <strong>Sync Devices</strong>.</li>
</ol>
<h5 id="clients-vm2-vm3-vm4-vm5-vm6">Clients (VM2, VM3, VM4, VM5, VM6)</h5>
<ol>
<li>Go to <strong>Settings &gt; System &gt; Sync Hub</strong>.</li>
<li>Set <strong>When to run</strong> to "Always after scan."</li>
<li><strong>API Token</strong>: Use the same token as the server (e.g., <code>abc123</code>).</li>
<li><strong>Encryption Key</strong>: Use the same key as the server (e.g., <code>abc123</code>).</li>
<li>Leave <strong>Nodes</strong> blank.</li>
<li>Set <strong>Node Name</strong> to a unique, memorable name for each client.</li>
<li>Check <strong>Sync Devices</strong>.</li>
</ol>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden="">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"></path></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../snmp_discovery/" class="md-footer__link md-footer__link--prev" aria-label="Previous: SNMP discovery (SNMPDSC)">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"></path></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
SNMP discovery (SNMPDSC)
</div>
</div>
</a>
<a href="../ui_settings/" class="md-footer__link md-footer__link--next" aria-label="Next: UI Settings (UI)">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
UI Settings (UI)
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"></path></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": ["announce.dismiss", "content.action.edit", "content.action.view", "content.code.annotate", "content.code.copy", "content.tooltips", "navigation.footer", "navigation.indexes", "navigation.sections", "navigation.tabs", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "search.suggest", "toc.follow"], "search": "../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../assets/javascripts/bundle.a7c05c9e.min.js"></script>
<script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
document$.subscribe(()=>{ lightbox.reload(); });
</script></body></html>