Skip to content

Step 6: Verification & Monitoring

This step verifies the entire deployment is working correctly, establishes monitoring, and configures backups for the management server.

Open the NetBird Dashboard at https://netbird.gsisg.com and navigate to the Peers tab.

Peers view showing all connected machines
CheckHow to Verify
Total peer countShould match deployed machine count (~200 laptops + 4 routing peers)
Routing peers onlinegsi-nb-hnl-01, gsi-nb-hnl-02, gsi-nb-bld-01, gsi-nb-bld-02 all show “Connected”
Group assignmentsRouting peers in their respective groups; laptops in Company-Laptops
No stale peersNo peers stuck in “Disconnected” state for extended periods

On any connected Windows client, run:

Terminal window
& "C:\Program Files\NetBird\netbird.exe" status --detail

Look for:

  • Management: Connected
  • Signal: Connected
  • Relays: X/X Available
  • Connection type: P2P (for same-network peers) or Relayed (for cross-NAT)

On routing peers (Linux):

Terminal window
sudo netbird status --detail

Run these tests from a Windows laptop that is not on either office LAN (simulates a remote worker).

Terminal window
# Honolulu DCs
ping 10.100.7.10 # AD0
ping 10.100.7.11 # AD1
# Boulder DCs
ping 10.15.0.10 # AD1
ping 10.15.0.11 # AD2
Terminal window
nslookup gsisg.local 10.100.7.10
nslookup gsisg.local 10.15.0.10
Terminal window
# Honolulu file server
net use \\10.100.7.15\ShareName /user:GSISG\username
dir \\10.100.7.15\ShareName
# Or use UNC path in File Explorer
Terminal window
mstsc /v:10.100.7.15

Or use Remote Desktop Connection to connect to a server IP through the NetBird tunnel.

Verify the SAGE application is accessible at 10.100.7.40 from a remote machine. The specific test depends on SAGE’s client requirements (TCP port, thick client, etc.).

From a machine on the Boulder LAN (or the Boulder routing peer):

Terminal window
ping 10.100.7.10 # Honolulu AD0

From a machine on the Honolulu LAN (or the Honolulu routing peer):

Terminal window
ping 10.15.0.10 # Boulder AD1

If using Azure AD Self-Service Password Reset with password writeback to on-prem AD:

  1. From a remote laptop connected via NetBird, navigate to https://aka.ms/sspr
  2. Complete a password reset
  3. Verify the new password works for on-prem AD authentication (sign out and back in, or test with net use)

Review these Dashboard sections:

NetBird Dashboard overview
SectionWhat to Check
PeersAll expected peers connected, correct group assignments
Network RoutesBoth routes active, routing peers healthy
Access ControlAll 6 policies present, Default policy deleted
Setup KeysKeys show correct usage counts
ActivityRecent activity shows peer connections and policy evaluations

Monitor the Azure management VM and routing peers with Zabbix (Zabbix server at 10.15.0.34).

Install the Zabbix agent on vm-netbird-mgmt-01:

Terminal window
# On the Azure VM
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update
sudo apt install -y zabbix-agent2
# Configure
sudo sed -i "s/Server=127.0.0.1/Server=10.15.0.34/" /etc/zabbix/zabbix_agent2.conf
sudo sed -i "s/ServerActive=127.0.0.1/ServerActive=10.15.0.34/" /etc/zabbix/zabbix_agent2.conf
sudo sed -i "s/Hostname=Zabbix server/Hostname=vm-netbird-mgmt-01/" /etc/zabbix/zabbix_agent2.conf
sudo systemctl enable --now zabbix-agent2
MetricThresholdAlert
Docker container statusAny container not runningCritical
Disk usage on /var/lib/docker> 80%Warning
CPU usage> 90% sustained 5 minWarning
Memory usage> 85%Warning
TLS certificate expiry< 14 daysWarning
Process netbird on routing peersNot runningCritical

Install Zabbix agent on each routing peer VM and add a UserParameter to check NetBird status:

/etc/zabbix/zabbix_agent2.d/netbird.conf
UserParameter=netbird.status,netbird status 2>&1 | grep -c "Management: Connected"

Expected value: 1 (connected). Alert if 0.

ItemLocationFrequencyMethod
Configuration filesVM working directoryAfter any config changeFile copy
NetBird databasesnetbird_data Docker volumeDailyDocker volume copy
Encryption keyconfig.yaml (server.store.encryptionKey)Once (store securely)Password manager / Key Vault
TLS certificatesnetbird_traefik_letsencrypt volumeWeeklyDocker volume copy

Create this script on the Azure VM at /opt/netbird-backup.sh:

#!/bin/bash
# NetBird Backup Script
# Run daily via cron: 0 2 * * * /opt/netbird-backup.sh
BACKUP_DIR="/opt/netbird-backups"
DATE=$(date +%Y%m%d-%H%M%S)
DEST="$BACKUP_DIR/$DATE"
mkdir -p "$DEST"
# 1. Copy configuration files
cp ~/docker-compose.yml ~/config.yaml ~/dashboard.env "$DEST/"
# 2. Stop server and copy databases
cd ~/
docker compose stop netbird-server
docker compose cp -a netbird-server:/var/lib/netbird/ "$DEST/data/"
docker compose start netbird-server
# 3. Copy TLS certificates (Traefik Let's Encrypt)
docker run --rm -v netbird_traefik_letsencrypt:/source -v "$DEST":/backup alpine \
cp -a /source/. /backup/letsencrypt/
# 4. Compress
tar czf "$BACKUP_DIR/netbird-backup-$DATE.tar.gz" -C "$BACKUP_DIR" "$DATE"
rm -rf "$DEST"
# 5. Retain last 30 days of backups
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +30 -delete
echo "Backup completed: $BACKUP_DIR/netbird-backup-$DATE.tar.gz"
Terminal window
chmod +x /opt/netbird-backup.sh
sudo crontab -e
# Add: 0 2 * * * /opt/netbird-backup.sh >> /var/log/netbird-backup.log 2>&1

Copy backups to Azure Blob Storage or another off-site location:

Terminal window
# Install Azure CLI on the VM (if not already installed)
# Then use azcopy or az storage blob upload
az storage blob upload \
--account-name gsisgstorage \
--container-name netbird-backups \
--file /opt/netbird-backups/netbird-backup-$DATE.tar.gz \
--name "netbird-backup-$DATE.tar.gz"

If you need to rebuild the management server:

  1. Provision a new VM with the same specs
  2. Install Docker and prerequisites (Step 1.4)
  3. Copy the backup files to the new VM
  4. Extract: tar xzf netbird-backup-YYYYMMDD-HHMMSS.tar.gz
  5. Restore config files to the working directory
  6. Restore the data volume:
    Terminal window
    docker compose up -d # Creates volumes
    docker compose stop netbird-server
    docker compose cp -a backup/data/ netbird-server:/var/lib/netbird/
    docker compose start netbird-server
  7. Update DNS to point netbird.gsisg.com to the new VM’s IP
  8. Verify dashboard access and peer connectivity

To upgrade NetBird to a new version:

  1. Read the release notes for breaking changes:

  2. Run a backup (Section 6.5)

  3. Pull new images:

    Terminal window
    docker compose pull
  4. Restart with new images:

    Terminal window
    docker compose up -d --force-recreate
  5. Verify the Dashboard loads and peers reconnect

The complete NetBird deployment is verified when all of the following are true:

  • Azure VM running, Docker healthy, all 3 containers up
  • DNS netbird.gsisg.com resolves correctly
  • TLS certificate valid (check in browser)
  • Entra ID SSO login works
  • Local admin break-glass accounts work
  • All 4 routing peers connected (2 per site, including HA)
  • Network routes for 10.100.7.0/24 and 10.15.0.0/24 active
  • Site-to-site routing works between offices
  • Default policy deleted
  • All 6 custom policies active
  • IT Admins can access all resources at both sites
  • Engineers can access their respective site resources
  • All staff can authenticate against DCs
  • All ~200 machines enrolled and showing in Dashboard
  • NetBird service running as Windows service on all endpoints
  • No conflicts with GlobalProtect during coexistence
  • Users can access file shares, RDP, and applications through NetBird
  • Daily backups configured and tested
  • Encryption key stored in at least 2 secure locations
  • Zabbix monitoring configured for VM and routing peers
  • Client secret expiration date calendared for renewal
  • Upgrade process documented and tested