Dashboard

Everything at a glance

Device status rail one cell per device — click a cell to jump to it
Day-wise backup report outcome of each cycle · the tiles above show each device's current status, which changes with later manual backups
RunGroups SucceededFailedSkipped
Backup status by group
Recent failures
TimeDeviceError

Devices

Inventory synced from LibreNMS · assign backup groups

Device IP Vendor / OS Firmware Group Last backup Status

Scripts & bindings

What runs on each platform, and which script each vendor/OS or device uses

Backup files

Every stored backup, grouped by device IP · click a device to expand

7z archives (full daily runs)

Version lifecycle

Every backup as v1 → latest · compare any two versions

HostVendorVersions v‑4v‑3v‑2v‑1latest

Access & authentication log

Every sign-in to this server — web UI, SSH and administrative changes

Query conditions
DateSource UsernameSource IP ActionDetail
Active sessions signed-in browsers, with the one you are using marked
UserIPBrowserStarted Last seenExpires

Syslog alert rules

Raise an alert when a message matches — by text, device and severity

RuleMatchScopeSeverity CooldownHitsState

Offline repository

Every installer and image archive kept locally, so a rebuild never needs the internet

VersionFileKindSize SHA-256Stored

CPE devices

Customer equipment as the ACS knows it

⇩ Export CSV
DevicePPPoE usernameModel FirmwareWAN IP Public IP Optical Rx / Tx Last informSnapshot

CPE

Parameters

Every TR-069 parameter path seen across the fleet

Loading…

Parameter pathDevices

Faults

Tasks and provisions the ACS could not complete

DeviceChannelCodeMessage RetriesWhen

ACS servers

GenieACS northbound endpoints Plexus reads from

The northbound API has no authentication of its own. Keep it bound to 127.0.0.1 and let these page permissions be the access control — anything that can reach it directly can read every CPE and reboot the fleet.

NameNBI URLCPEsLast sync ResultDiscovery preset

TR-069 settings

How Plexus polls the ACS, and how the ACS itself is configured

Plexus polling and retention

These take effect immediately. They govern how Plexus reads the ACS — not the ACS itself.

Every sync writes each CPE's receive and transmit power and transceiver temperature to InfluxDB, one point per inform; the Graphs tab on a CPE draws them. The history is kept for the time above and older points expire on their own; the change applies at the next sync.

A bulk disappearance above the removal safety share is always held for review, whichever action is chosen — a truncated response must not be able to erase the estate.

GenieACS server configuration

Every option GenieACS documents. These are read once when each service starts, so a change needs a restart — which drops CWMP sessions in flight. CPEs retry, so the cost is a short gap rather than lost devices.

Blank means “use the default”. Options owned by docker-compose.yml are shown with their running value but cannot be edited here, because a container that disagrees with its own port mapping or database URL simply fails to work.

Fiber rings

Each ring is a set of spans; both ends of every span are read for optical power on a fixed clock

Optical analytics

Every ring port against its own baseline — worst first, with where the loss most likely is

StatusRingPort endFar end Rx nowBaselineChangeTrend /wkFar-end Tx SinceLikely cause

Status changes

Every time a ring port's status changed — what it was, what it became, and why

WhenRingPort endChangeRxΔ dBDetail

IP pools

Managed ranges and how much of each is in use

⇩ Export allocations
PoolPrefixGatewaySite / VRF UtilisationFree

Addresses

Allocate, release and track every address

AddressStatusCustomerService ID SinceHistory

Customers

Who holds addresses, and everything they have ever held

CustomerCodeContactActive IPs Ever held

Lookup & lifecycle

Search by address, customer or service ID — see the full history from day one

Changelog

Every field change detected on sync, plus UI actions and alerts

TimeDeviceFieldChangeSource
Alert log
TimeKindMessageMailed

Alert templates

Every alert the system can send · toggle email / Telegram per template · edit wording with {placeholders}

Available placeholders use them as {name} in any subject or body
Placeholder MeaningUsed by
Add a custom alert

Custom templates can be fired from the API: POST /api/alert-templates/<key>/fire with a JSON body {"context": {...}}.

Device syslog

Live messages received from your network devices

Export syslog

Leave the host empty for every device. Leave the dates empty for the last 30 days.

Time range

Showing the last 24 hours by default. You can go back at most 720 hours (30 days).

Severity breakdown last 24 hours · click to filter
TimeDevice SeverityModuleMessage

Storage manager

Host-wise consumption for configuration backups and syslog

Backups
—
HostFilesSize
Syslog (Loki)
—
HostLinesSize

Network configuration

Interfaces, addressing, gateway and DNS of this server

Edit configuration applied immediately · persistence depends on the host's network manager
Add an address to an interface
InterfaceIPv4NetmaskGateway MACStateSpeed / MTUTraffic

Ping

Reachability test from this server to any IP or hostname


      

Traceroute

Path this server takes to reach a host

Hop AddressRTTRaw

SNMP agent

Expose this server to LibreNMS so it graphs like any other device

Agent settings
SNMPv3 credentials
Generated snmpd.conf

        

Config overrides

Devices whose connection settings differ from the defaults

DeviceIPVendor / OSGroup What is overridden

TACACS+ devices

Network devices allowed to authenticate against this server

NameAddressShared secretGroup DescriptionState

TACACS+ users

Accounts engineers use to log into network devices

UsernameNameGroupPassword EnableExpiresState

TACACS+ groups

Privilege level and command authorisation profiles

Command sets

Reusable permit/deny rules attached to groups

Authentication report

Every login attempt against the TACACS+ server

Query conditions
DateNAC (client IP)NAS (device IP)UsernamePortTypeActionReasonServer

Authorization report

Every command and shell authorisation decision

Query conditions
DateNAC (client IP)NAS (device IP)UsernamePrivCommandActionReasonServer

TACACS+ event log

Every configuration change, validation and listener restart

Query conditions
DateWhoActionObjectNameDetailFrom IP

TACACS+ accounting

Every command run on your devices, by whom and where

⇩ Export
Query conditions
DateNAC (client IP)NAS (device IP) UsernamePortActionPrivCommand

TACACS+ settings

Daemon configuration and shared secrets

Daemon

Usernames separated by commas or new lines. Their authentication, authorisation and accounting rows are still recorded and exported by name, but the three reports, the accounting tiles and the device-activity view leave them out, so the account Plexus backs up with does not bury the engineers. Each report has a "show hidden" switch for when they are wanted.

Device configuration example (Huawei):
hwtacacs-server template nb
hwtacacs-server authentication <this-server-ip>
hwtacacs-server shared-key cipher <secret>

Cisco IOS:
tacacs server NB
 address ipv4 <this-server-ip>
 key <secret>

MikroTik RouterOS does its AAA over RADIUS, not TACACS+, so it does not authenticate against this server — point it at a RADIUS server instead:
/radius add service=login address=<radius-server-ip> secret=<secret>
/user aaa set use-radius=yes

Test a login checks the live policy without a device
Effective policy

        

Server

Live utilisation of the backup server · alerts above threshold are mailed

Cache (Redis) query results shared by every worker
CPU %
Memory %
Disk %
Network KB/s
Server (box) backup

Database + credential encryption key + config — what S3 device archives do not contain. Restore instructions are inside each archive.

FileCreatedSize

Integrations

External systems: inventory source and alert channels

LibreNMS servers
Add a LibreNMS server

Devices keep the server they came from; the dashboard Sync button can sync one server or all at once.

Default device credentials (telnet)
Default SSH credentials

The connection method (telnet/SSH) now lives on each script binding — see Devices → Scripts → Bindings, or override it per device with its Config button.

ZeptoMail alerts
Telegram alerts

Create a bot with @BotFather, then message the bot (or add it to a group) and use @userinfobot / getUpdates to find the chat ID.

AWS S3 — archive off-site upload

Uploads every 7z archive created since the last successful upload. Minimal IAM policy: s3:PutObject + s3:ListBucket on the bucket.

Cloudflare — SSL auto-renewal

Uses DNS-01 (no port 80 needed). Host must have: apt install -y certbot python3-certbot-dns-cloudflare. Checked weekly (Mon 05:00); certbot renews inside 30 days of expiry and reloads nginx.

Google Drive

Personal Gmail: use Connect account below — a service account has no Drive storage of its own. Google Workspace with a Shared Drive can use a service-account JSON instead.

Connect account (OAuth) — personal Gmail
…

In Google Cloud → APIs & Services → Credentials, create an OAuth client ID (type: Web application) and add this exact redirect URI:
…

Service account — Workspace / Shared Drive

Paste the folder ID (or URL) of the Drive folder to upload into. For a service account, also share that folder with the account's e-mail.

FTP / FTPS push
TFTP push (third-party server)
Default upload destinations

Used by any group that doesn't choose its own. Pick as many as you like.

Upload schedule when pending archives are uploaded to the destinations above

Firewall

Host UFW managed from the GUI — rules apply to the whole server

Status
—
⚠ Lockout warning: before enabling, make sure a rule allows your own access (SSH 22 and web 80/443 from your network). A wrong rule can cut you off — recovery then requires console access to the server.
Not covered here: the GenieACS ports (CWMP 7547, FS 7567, STUN 3478/udp) are published by Docker and bypass these rules. Scope them with iptables -I DOCKER-USER on the server — see docs/SECURITY-HARDENING.md.
Add rule
#ToActionFrom

Users & access

Your account, user administration, and access history

Account
Two-factor authentication

At login you can use an authenticator app or an e-mail one-time code. Set an e-mail below to enable the code option — a handy fallback if you don't have your authenticator.

User accounts
UserRole2FACreated
Add user

The user chooses a second factor at login — an authenticator app they enroll, or an e-mail one-time code (available whenever an e-mail address is set).

Permission manager
PageReadEdit DeleteExecuteExportAll
Login / logout history
TimeUserIPActionDetail

Update

Keep this server up to date

Scheduled check

Installing restarts the server, including this interface. It goes away for a minute or two while the update is applied, then comes back on its own. Pick a time when nothing is running — the backup cycle and the nightly archive are the ones to avoid.

Software version
Loading…
Recent update activity
TimeEventSource

Settings

Changes apply immediately · secrets stay masked until replaced

Schedule

"auto" uses cores × sessions-per-core. Telnet/SSH is I/O-bound, so 2–4 per core is usually safe and much faster.

Security policy

When on, every account must enroll an authenticator at first login, and users cannot disable their own 2FA. Lost phone → admin uses "Reset 2FA" on the Users page. If the only admin is locked out: docker compose exec backend python -m app.rescue admin

Syslog receiver

Point devices here, e.g. on Huawei VRP:
info-center enable
info-center loghost <server-ip> facility local4
info-center source default channel 2 log level warning
Port changes need a container restart. Open the port in the Firewall page for your device networks.

Retention / auto-delete

Runs after each backup cycle (daily backstop at 04:30). 7z archives never uploaded to S3 follow the local-days rule instead, so nothing is deleted before it could go off-site. History entries in Files/Versions remain, marked "file missing".

Session security

Session tokens are stored hashed, sent HttpOnly and marked Secure over HTTPS. Changing a password signs out that user's other sessions automatically.

Change detection (ignored lines)
Pattern modules tick every module to apply — they combine

Devices rewrite CRCs, digests and "last saved" timestamps on every save. Without this, each backup looks like a configuration change. Defaults cover Huawei VRP, Cisco IOS/NX-OS and JunOS.

Backup groups
GroupSchedule WhenCloud targetsDevices
Add a group
Public address hostname, certificate and expiry warnings
Loading…
Device policy

Re-enabling a device restores the group it came from. With the second option off, a subnet rule will pull disabled devices back into a scheduled group on the next sync.

LibreNMS sync behaviour

Backups and version history are always kept, even when a device row is deleted — the files stay on disk and remain browsable on the Files page.

Group rules (subnet → group)

Devices matching a CIDR are auto-assigned to the group on every sync — except the excluded IPs, which keep their manual group.

Backup enable / disable

Policy precedence — evaluated in this order, higher wins:
1️⃣ Vendor config (below): a disabled vendor locks all its devices to never, everywhere.
2️⃣ Group rules (subnet conditions): applied to the remaining devices, minus each rule's exceptions.
3️⃣ Manual assignment: whatever you set per device or per batch, for devices no rule touches.
At cycle time, "Pause all" and each device's Enabled flag are still respected on top.

Vendors included in backup cycles
Loading…

Unticked vendors are skipped during cycles (their devices show as skipped, no failure mails).

Login IP restriction

Applies to the whole interface, not just sign-in: addresses outside the list cannot even load the page or the application code. Internet scanners read the JS to learn the API before probing it — with a list set they get nothing. 127.0.0.1 is always allowed, so the server itself can never be locked out.

Your current IP: ? — include it before saving or you will be locked out (127.0.0.1 always works).

Backup attempts

Every failed attempt, CLI capture or TFTP push, is tried again after the delay, whatever the cause, until the attempts are used up. A wrong password is retried as well, so keep the attempts low on gear that locks an account after a few failed logins.

TFTP push (Huawei & friends)

How long to wait for the device's upload before the attempt counts as failed. A shorter wait (e.g. 20s) fails unreachable devices fast instead of holding a worker for two minutes.

Placeholders: {ip} {hostname} {ddmmyyyy} {hhmm} {date} {time}. Example result: 10.8.0.36_14082026_1400 — .zip is appended automatically for TFTP-push; the server verifies the zip, stores the extracted .cfg, then deletes the zip.