====== USV Zweiten Ubuntu-Server als NUT-Client einrichten ======
===== Ziel =====
Der zweite Ubuntu-Server wird als NUT-Netzwerkclient eingerichtet.
Er besitzt keine direkte USB-Verbindung zur USV. Stattdessen verbindet er sich über das Netzwerk mit dem ersten Ubuntu-Server, der als NUT-Master beziehungsweise NUT-Primary arbeitet.
Der NUT-Client übernimmt folgende Aufgaben:
* USV-Status vom NUT-Master abrufen\\
* Stromausfälle erkennen\\
* Kritischen Batteriestatus erkennen\\
* Den zweiten Server kontrolliert herunterfahren\\
* Shutdown-Anweisungen des NUT-Masters verarbeiten
===== Beispielkonfiguration =====
^ System ^ IP-Adresse ^ Aufgabe ^\\
| NUT-Master | ''192.168.1.20'' | Direkt per USB mit der USV verbunden |\\
| NUT-Client | ''192.168.1.21'' | Zweiter geschützter Ubuntu-Server |\\
| USV-Name | ''apc'' | Name der USV in ''/etc/nut/ups.conf'' |
\\
Die Beispiel-IP-Adressen müssen durch die tatsächlichen IP-Adressen der Server ersetzt werden.\\
===== Voraussetzungen =====
* NUT-Master ist bereits eingerichtet\\
* USV wird auf dem Master korrekt erkannt\\
* NUT-Server läuft auf dem Master\\
* TCP-Port ''3493'' ist vom Client erreichbar\\
* Der Client besitzt eine feste IP-Adresse\\
* Root- oder sudo-Berechtigung auf beiden Servern
===== 1. USV-Name auf dem Master prüfen =====
Auf dem NUT-Master den Namen der konfigurierten USV anzeigen:
\\
upsc -l localhost\\
Erwartete Ausgabe:
\apc
Der Name ''apc'' stammt aus dem Abschnitt in der Datei ''/etc/nut/ups.conf'':
[apc]
driver = usbhid-\ups
port = \auto
vendorid = \051d
desc = "APC Smart-UPS SMC1500IC"
Der Name in den eckigen Klammern muss später auch auf dem Client verwendet werden.
===== 2. Clientbenutzer auf dem Master anlegen =====
Auf dem NUT-Master die Datei öffnen:
sudo nano /etc/nut/upsd.\users
==== Ubuntu 22.04 beziehungsweise NUT 2.7 ====
Folgenden Benutzer eintragen:
[monclient]
password = \CLIENT_PASSWORT_HIER_EINTRAGEN
upsmon \slave
==== Ubuntu 24.04 beziehungsweise NUT 2.8 ====
Folgenden Benutzer eintragen:
[monclient]
password = \CLIENT_PASSWORT_HIER_EINTRAGEN
upsmon \secondary
Ein sicheres Passwort kann mit folgendem Befehl erzeugt werden:
openssl rand -hex \24
Das Passwort muss später auf dem Client exakt gleich in ''/etc/nut/upsmon.conf'' eingetragen werden.
Das Passwort sollte nicht in einer öffentlich zugänglichen Dokumentation gespeichert werden.
Nach der Änderung den NUT-Server neu starten:
sudo systemctl restart nut-\server
Status prüfen:
sudo systemctl status nut-server --no-\pager
===== 3. Netzwerkzugriff auf dem Master konfigurieren =====
Auf dem Master die Datei öffnen:
sudo nano /etc/nut/upsd.\conf
Beispielkonfiguration:
LISTEN 127.0.0.1 \3493
LISTEN 192.168.1.20 \3493
Dabei ist ''192.168.1.20'' die LAN-IP-Adresse des NUT-Masters.
Nach der Änderung den Dienst neu starten:
sudo systemctl restart nut-\server
Prüfen, ob NUT auf Port ''3493'' lauscht:
sudo ss -ltnp | grep \3493
Eine mögliche Ausgabe lautet:
LISTEN 0 16 127.0.0.1:\3493
LISTEN 0 16 192.168.1.20:\3493
===== 4. Firewall auf dem Master konfigurieren =====
Falls UFW aktiviert ist, sollte nur der zweite Server Zugriff auf den NUT-Port erhalten.
Beispiel:
sudo ufw allow from 192.168.1.21 to any port 3493 proto \tcp
Firewallstatus prüfen:
sudo ufw \status
Eine mögliche Regel lautet:
3493/tcp ALLOW 192.168.1.\21
Die Firewallregel wird auf dem NUT-Master eingerichtet, nicht auf dem Client.
===== 5. Netzwerkverbindung vom Client zum Master prüfen =====
Auf dem zweiten Server prüfen, ob der Master erreichbar ist:
ping -c 4 192.168.1.\20
Danach prüfen, ob der NUT-Port erreichbar ist:
nc -zv 192.168.1.20 \3493
Falls ''nc'' nicht installiert ist:
sudo apt install netcat-\openbsd
Bei erfolgreicher Verbindung erscheint beispielsweise:
Connection to 192.168.1.20 3493 port [tcp/nut] succeeded!
===== 6. NUT-Client installieren =====
Auf dem zweiten Ubuntu-Server die Paketquellen aktualisieren:
sudo apt \update
NUT-Client installieren:
sudo apt install nut-\client
Installierte Version anzeigen:
dpkg-query -W -f='${Version}\n' nut-\client
Alternativ:
apt-cache policy nut-\client
===== 7. Verbindung zum NUT-Master testen =====
Auf dem Client den USV-Status vom Master abfragen:
upsc apc@192.168.1.\20
Bei erfolgreicher Verbindung werden zahlreiche Werte angezeigt.
Beispiel:
battery.charge: \100
battery.runtime: \2400
device.mfr: American Power \Conversion
device.model: Smart-UPS C \1500
ups.load: \25
ups.status: \OL
Wichtige Werte:
^ Wert ^ Bedeutung ^
| ''battery.charge'' | Ladezustand der Batterie in Prozent |\\
| ''battery.runtime'' | Geschätzte Restlaufzeit in Sekunden |\\
| ''ups.load'' | Auslastung der USV in Prozent |\\
| ''ups.status'' | Aktueller Status der USV |\\
| ''ups.model'' | Erkanntes USV-Modell |
===== 8. Client-Betriebsart konfigurieren =====
Auf dem zweiten Server die Datei öffnen:
\\
sudo nano /etc/nut/nut.conf\\
Folgenden Inhalt eintragen:
MODE=\netclient
Bei ''MODE=netclient'' wird kein lokaler USV-Treiber gestartet.
Der Server überwacht ausschließlich eine entfernte USV über das Netzwerk.
Beim Eintrag dürfen keine Leerzeichen um das Gleichheitszeichen stehen.
Richtig:
MODE=\netclient
Falsch:
MODE = \netclient
===== 9. Vorhandene Clientkonfiguration sichern =====
Vor der Änderung sollte die Datei ''upsmon.conf'' gesichert werden:
sudo cp -a /etc/nut/upsmon.conf "/etc/nut/upsmon.conf.backup.$(date +%F-%H%M%S)"
Eine mögliche Sicherungsdatei lautet:
/etc/nut/upsmon.conf.backup.2026-07-19-\120000
===== 10. NUT-Monitor auf dem Client konfigurieren =====
Die Datei öffnen:
sudo nano /etc/nut/upsmon.\conf
Vorhandene aktive ''MONITOR''-Zeilen auskommentieren oder entfernen.
==== Ubuntu 22.04 beziehungsweise NUT 2.7 ====
Folgende Konfiguration verwenden:
MONITOR apc@192.168.1.20 1 monclient CLIENT_PASSWORT_HIER_EINTRAGEN slave
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
FINALDELAY \5
==== Ubuntu 24.04 beziehungsweise NUT 2.8 ====
Folgende Konfiguration verwenden:
MONITOR apc@192.168.1.20 1 monclient CLIENT_PASSWORT_HIER_EINTRAGEN secondary
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
FINALDELAY \5
Das Passwort muss exakt mit dem Passwort des Benutzers ''monclient'' auf dem Master übereinstimmen.
===== 11. Bedeutung der Clientkonfiguration =====
^ Einstellung ^ Bedeutung ^
| ''apc@192.168.1.20'' | USV ''apc'' auf dem NUT-Master |\\
| ''1'' | Power-Wert des überwachten Stromsystems |\\
| ''monclient'' | Benutzername aus ''upsd.users'' auf dem Master |\\
| ''CLIENT_PASSWORT_HIER_EINTRAGEN'' | Passwort des Clientbenutzers |\\
| ''slave'' | Bezeichnung für einen Client unter NUT 2.7 |\\
| ''secondary'' | Bezeichnung für einen Client unter NUT 2.8 |\\
| ''MINSUPPLIES 1'' | Mindestens eine Stromversorgung muss verfügbar sein |\\
| ''SHUTDOWNCMD'' | Befehl zum Herunterfahren des Clients |\\
| ''FINALDELAY 5'' | Wartezeit vor dem lokalen Herunterfahren |
===== 12. POWERDOWNFLAG auf einem Client =====
Auf einem reinen Netzwerkclient ist normalerweise kein Eintrag erforderlich:
POWERDOWNFLAG /etc/killpower\
Der ''POWERDOWNFLAG'' wird vor allem auf dem NUT-Master beziehungsweise Primary verwendet.
Der Master kann damit nach dem Herunterfahren der Server das Abschalten des USV-Ausgangs veranlassen.
Der Client besitzt keine direkte USB-Verbindung zur USV und kann die USV daher normalerweise nicht selbst ausschalten.
===== 13. Dateirechte absichern =====
Die Datei ''upsmon.conf'' enthält das NUT-Passwort und sollte geschützt werden.
Eigentümer setzen:
sudo chown root:nut /etc/nut/upsmon.\conf
Dateirechte setzen:
sudo chmod 640 /etc/nut/upsmon.\conf
Dateirechte prüfen:
ls -l /etc/nut/upsmon.\conf
Erwartete Ausgabe:
-rw-r----- 1 root nut /etc/nut/upsmon.\conf
===== 14. NUT-Monitor aktivieren und starten =====
Dienst beim Systemstart aktivieren:
sudo systemctl enable nut-\monitor
Dienst neu starten:
sudo systemctl restart nut-\monitor
Status anzeigen:
sudo systemctl status nut-monitor --no-\pager
Der Dienst sollte folgenden Zustand anzeigen:
Active: active (running)
===== 15. Verbindungsstatus prüfen =====
USV-Status vom Client aus abfragen:
upsc apc@192.168.1.20 ups.\status
Bei normaler Netzversorgung sollte erscheinen:
OL
Weitere Werte abfragen:
upsc apc@192.168.1.20 battery.\charge
upsc apc@192.168.1.20 battery.\runtime
upsc apc@192.168.1.20 ups.\load
===== 16. Wichtige USV-Statuswerte =====
^Status^Bedeutung| | | | | | | | | | | | | | | | | | | | | | | | |
|''OL'' |Online: Netzversorgung vorhanden| |''OB'' |On Battery: USV läuft auf Batterie| |''LB'' |Low Battery: Batterie fast leer| |''RB'' |Replace Battery: Batterie sollte ersetzt werden| |''CHRG'' |Batterie wird geladen| |''DISCHRG'' |Batterie wird entladen| |''OVER'' |USV ist überlastet| |''OFF'' |USV-Ausgang ist ausgeschaltet| |''FSD'' |Forced Shutdown wurde ausgelöst|
Mehrere Statuswerte können gleichzeitig angezeigt werden.
Beispiel:
OB DISCHRG
Das bedeutet:
* USV läuft auf Batterie\\
* Batterie wird entladen
===== 17. Protokoll des Clients kontrollieren =====
Die letzten Meldungen des NUT-Monitors anzeigen:
sudo journalctl -u nut-monitor -n 100 --no-pager\
Protokoll laufend beobachten:
sudo journalctl -u nut-monitor -f\
Bei einer erfolgreichen Verbindung sollten keine wiederkehrenden Fehlermeldungen erscheinen.
Mögliche Fehlermeldungen:
Login on UPS [apc] failed\
Communications with UPS apc@192.168.1.20 lost\
UPS apc@192.168.1.20 is unavailable\
===== 18. Anmeldung auf dem Master kontrollieren =====
Auf dem Master können die NUT-Protokolle geprüft werden:
sudo journalctl -u nut-server -n 100 --no-pager\
Bei einer erfolgreichen Anmeldung kann beispielsweise folgende Meldung erscheinen:
Client monclient@192.168.1.21 logged into UPS [apc]\
Je nach NUT-Version und Protokollkonfiguration kann die Meldung anders aussehen oder fehlen.
===== 19. Sicheren Stromausfalltest durchführen =====
Auf dem Client die Statuswerte laufend anzeigen:
watch -n 2 'upsc apc@192.168.1.20 ups.status; upsc apc@192.168.1.20 battery.charge; upsc apc@192.168.1.20 battery.runtime'\
Danach nur den Netzeingang der USV kurz vom Stromnetz trennen.
Erwarteter Status bei vorhandener Netzspannung:
OL
Erwarteter Status bei Batteriebetrieb:
OB
Nach Wiederherstellung der Netzspannung:
OL
\\
Bei diesem kurzen Test darf der Client noch nicht herunterfahren.
Der Server fährt normalerweise erst bei einem kritischen Batteriestatus oder einem Forced Shutdown herunter.\\
===== 20. Verhalten bei einem längeren Stromausfall =====
Bei einem Stromausfall läuft die USV zunächst auf Batterie.
Der typische Ablauf lautet:
- USV wechselt von ''OL'' auf ''OB''\\
- Batterie wird entladen\\
- Client und Master bleiben zunächst eingeschaltet\\
- USV meldet bei niedrigem Batteriestand zusätzlich ''LB''\\
- NUT-Master löst die Abschaltsequenz aus\\
- NUT-Client fährt kontrolliert herunter\\
- NUT-Master fährt anschließend herunter\\
- USV-Ausgang kann danach abgeschaltet werden
===== 21. Vollständigen Shutdown nur im Wartungsfenster testen =====
Ein vollständiger Test kann auf dem NUT-Master mit folgendem Befehl ausgelöst werden:
sudo upsmon -c fsd\
\\
Dieser Befehl löst eine echte Abschaltsequenz aus.
Dabei können der Client, der Master und anschließend der USV-Ausgang abgeschaltet werden.
Der Befehl sollte nur in einem geplanten Wartungsfenster verwendet werden.\\
Vor einem vollständigen Test sollten folgende Punkte geprüft werden:
* Laufende Datenbanken können sauber herunterfahren\\
* Docker-Container besitzen geeignete Stop-Timeouts\\
* Virtuelle Maschinen werden kontrolliert beendet\\
* Dateisysteme sind fehlerfrei\\
* Netzwerkdienste können beendet werden\\
* Beide Server können nach Rückkehr der Netzspannung wieder starten
===== 22. Fehler: Connection refused =====
Fehlermeldung:
Error: Connection failure: Connection refused\
Auf dem Master prüfen:
sudo systemctl status nut-server --no-pager\
Port prüfen:
sudo ss -ltnp | grep 3493\
Firewall prüfen:
sudo ufw status\
Konfiguration prüfen:
grep -v '^[[:space:|]]*#' /etc/nut/upsd.conf\
===== 23. Fehler: Unknown UPS =====
Fehlermeldung:
Error: Unknown UPS\
Auf dem Master den USV-Namen prüfen:
upsc -l localhost\
Falls die Ausgabe beispielsweise lautet:
smc1500
muss auf dem Client statt ''apc'' folgender Name verwendet werden:
MONITOR smc1500@192.168.1.20 1 monclient CLIENT_PASSWORT_HIER_EINTRAGEN secondary\
===== 24. Fehler: Login failed =====
Fehlermeldung im Protokoll:
Login on UPS [apc] failed\
Folgende Punkte prüfen:
* Benutzername auf Client und Master identisch\\
* Passwort auf Client und Master identisch\\
* Rolle korrekt eingetragen\\
* Datei ''upsd.users'' korrekt gespeichert\\
* NUT-Server nach Änderung neu gestartet
Master neu starten:
sudo systemctl restart nut-server\
Client neu starten:
\
sudo systemctl restart nut-monitor\
===== 25. Fehler: Communications lost =====
Fehlermeldung:
Communications with UPS apc@192.168.1.20 lost\
Netzwerkverbindung prüfen:
ping -c 4 192.168.1.20\
NUT-Port prüfen:
nc -zv 192.168.1.20 3493\
Direkte Statusabfrage versuchen:
upsc apc@192.168.1.20\
Protokoll auf dem Master prüfen:
sudo journalctl -u nut-server -n 100 --no-pager\
===== 26. Fehler: NUT-Monitor startet nicht =====
Dienststatus anzeigen:
sudo systemctl status nut-monitor --no-pager\
Protokoll anzeigen:
sudo journalctl -u nut-monitor -n 100 --no-pager\
Konfiguration auf aktive Einträge prüfen:
grep -v '^[[:space:|]]*#' /etc/nut/upsmon.conf\
Betriebsart prüfen:
cat /etc/nut/nut.conf\
Erwartete Ausgabe:
MODE=netclient\
===== 27. Komplette Clientkonfiguration =====
==== /etc/nut/nut.conf ====
MODE=netclient\
==== /etc/nut/upsmon.conf für Ubuntu 22.04 ====
MONITOR apc@192.168.1.20 1 monclient CLIENT_PASSWORT_HIER_EINTRAGEN slave
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
FINALDELAY 5
==== /etc/nut/upsmon.conf für Ubuntu 24.04 ====
MONITOR apc@192.168.1.20 1 monclient CLIENT_PASSWORT_HIER_EINTRAGEN secondary
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
FINALDELAY 5
===== 28. Abschlusskontrolle =====
Auf dem Client folgende Befehle ausführen:
cat /etc/nut/nut.conf
sudo systemctl status nut-monitor --no-pager\
upsc apc@192.168.1.20 ups.status\
upsc apc@192.168.1.20 battery.charge\
sudojournalctl -unut-monitor -n50–no-pager\
Bei normalem Betrieb sollte der Status lauten:
O
===== Ergebnis =====
Der zweite Ubuntu-Server ist nun als NUT-Client eingerichtet.
Er kann:
* die APC-USV über den ersten Server überwachen\\
* Stromausfälle erkennen\\
* den Batteriestatus auslesen\\
* einen kritischen Batteriezustand erkennen\\
* bei einer NUT-Abschaltmeldung kontrolliert herunterfahren