Dateinhalt zwischen zwei Systemen synchronisieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Knogle
Beiträge: 466
Registriert: 06.05.2016 19:29:00
Lizenz eigener Beiträge: MIT Lizenz

Dateinhalt zwischen zwei Systemen synchronisieren

Beitrag von Knogle » 20.10.2021 10:20:04

Hey ich grüße euch.
Ich bin aktuell aktiv im OpenWrt Bereich, oder schon länger, und dort haben wir nun gemeinsam an einem Shell Script gearbeitet.
Dieses soll im redundanten VRRP Betrieb, die DHCP Leases des Master Routers, mit denene des Backup Routers synchronisieren, und umgekehrt auch.
Beide Router sind aktiv, und antworten auf DHCP Anfragen. Daher landen einige auf dem Master Router, und einige auf dem Backup Router.
Das Problem dabei: Um eine korrekte DNS Auflösung, der Hostnames im Regelbetrieb, und im Failover zu realisieren, müssen beide Router in ihrer

Code: Alles auswählen

/tmp/dhcp.leases
Datei über die eigenen Inhalte, UND des jeweils anderen Routers verfügen.

Also angenommen, Router 1 hat folgende Einträge in der

Code: Alles auswählen

/tmp/dhcp.leases
Datei:

Code: Alles auswählen

Host a.a.a.a IP a.a.a.a
Und Router 2:

Code: Alles auswählen

Host x.x.x.x IP x.x.x.x
Host y.y.y.y IP y.y.y.y
Am Ende sollen beide Router die folgenden Einträge haben:

Code: Alles auswählen

Host a.a.a.a IP a.a.a.a
Host x.x.x.x IP x.x.x.x
Host y.y.y.y IP y.y.y.y

Code: Alles auswählen

#!/bin/sh
#syncs contents of dnsmasq dhcp leases

SSH_USER="root"
SSH_HOST="172.20.32.2"
SSH_KEY="/etc/dropbear/dropbear_ed25519_host_key"
scp -i "${SSH_KEY}" "${SSH_USER}"@"${SSH_HOST}":/tmp/dhcp.leases /tmp/dhcp_lease_temp


cat /tmp/dhcp.leases /tmp/dhcp_lease_temp | sort -u > /tmp/dhcp_lease_new

mv /tmp/dhcp_lease_new /tmp/dhcp.leases
Der erste Approach sieht so aus, jedoch funktioniert das ganze nicht wirklich zuverlässig. Das ganze wird als Cronjob minütlich ausgeführt. Gibt es vielleicht eine bessere Lösung als diese? Hier wird in einigen Fällen der Inhalt nicht synchronisiert, und wenn z.B. Router B keine DHCP Leases hat, und Router A schon, dann lernt Router B die nicht von Router A.
Vielleicht gibt es ja Bash Gurus hier :D Freue mich auf eure Hilfe.

Benutzeravatar
Blackbox
Beiträge: 4289
Registriert: 17.09.2008 17:01:20
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Dateinhalt zwischen zwei Systemen synchronisieren

Beitrag von Blackbox » 20.10.2021 22:34:45

Warum so umständlich?
Ich würde eher diesen Konstrukt:

Code: Alles auswählen

cat File Host A >> File Host B
Dann wird der Inhalt vom Host A zur Datei auf Host B hinzugefügt.
Das sollte auch mit harmonieren.
Eigenbau PC: Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Desktop PC: Dell Inspiron 530 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Notebook: TUXEDO BU1406 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Alles Minimalinstallationen und ohne sudo/PA/PW.
Rootserver: Rocky Linux 9.3 - Kernel: 5.14

Freie Software unterstützen, Grundrechte stärken!

Knogle
Beiträge: 466
Registriert: 06.05.2016 19:29:00
Lizenz eigener Beiträge: MIT Lizenz

Re: Dateinhalt zwischen zwei Systemen synchronisieren

Beitrag von Knogle » 20.10.2021 22:55:52

Hey das klingt eigentlich nach einer guten Idee, leider kann ich mir das noch nicht so genau vorstellen. Kannst du das vielleicht im Script mal testweise einfügen, wie genau du das machen würdest?
Klingt prinzipiell aber durchaus besser als die bisherige Bastelei.

Ah ich denke ich habe verstanden, ich setze es mal eben hier rein.

Code: Alles auswählen

#!/bin/sh
#syncs contents of dnsmasq dhcp leases

SSH_USER="root"
SSH_HOST="172.20.32.2"
SSH_KEY="/etc/dropbear/dropbear_ed25519_host_key"
scp -i "${SSH_KEY}" "${SSH_USER}"@"${SSH_HOST}":/tmp/dhcp.leases /tmp/dhcp_lease_temp


cat /tmp/dhcp.leases >> /tmp/dhcp_lease_temp 
cat /tmp/dhcp_lease_temp | sort -u > /tmp/dhcp_lease_new

mv /tmp/dhcp_lease_new /tmp/dhcp.leases
Oder geht sowas?

Code: Alles auswählen

#!/bin/sh
#syncs contents of dnsmasq dhcp leases

SSH_USER="root"
SSH_HOST="172.20.32.2"
SSH_KEY="/etc/dropbear/dropbear_ed25519_host_key"
cat /tmp/dhcp.leases | ssh -i "${SSH_KEY}" "${SSH_USER}"@"${SSH_HOST}" "cat >> /tmp/dhcp.leases"
ssh -i "${SSH_KEY}" "${SSH_USER}"@"${SSH_HOST}"  'cat /tmp/dhcp.leases | sort -u > /tmp/dhcp.leases'
scp -i "${SSH_KEY}" "${SSH_USER}"@"${SSH_HOST}":/tmp/dhcp.leases /tmp/dhcp.leases

Aber wie es scheint könnte ich diese Lösung auch so anpassen, dass das ganze nur auf einem Router nötig ist, und nicht auf beiden, also ein Router beide synchronisieren kann.

Benutzeravatar
Blackbox
Beiträge: 4289
Registriert: 17.09.2008 17:01:20
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Dateinhalt zwischen zwei Systemen synchronisieren

Beitrag von Blackbox » 20.10.2021 23:26:12

Mir ist noch nicht bewusst, warum du in dieser Zeile:

Code: Alles auswählen

cat /tmp/dhcp.leases | ssh -i "${SSH_KEY}" "${SSH_USER}"@"${SSH_HOST}" "cat >> /tmp/dhcp.leases"
das zweite cat ("cat >> /tmp/dhcp.leases") gesetzt hast, aber grundsätzlich sollte das erst einmal funktionieren.
Eigenbau PC: Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Desktop PC: Dell Inspiron 530 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Notebook: TUXEDO BU1406 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Alles Minimalinstallationen und ohne sudo/PA/PW.
Rootserver: Rocky Linux 9.3 - Kernel: 5.14

Freie Software unterstützen, Grundrechte stärken!

Knogle
Beiträge: 466
Registriert: 06.05.2016 19:29:00
Lizenz eigener Beiträge: MIT Lizenz

Re: Dateinhalt zwischen zwei Systemen synchronisieren

Beitrag von Knogle » 20.10.2021 23:34:03

Blackbox hat geschrieben: ↑ zum Beitrag ↑
20.10.2021 23:26:12
Mir ist noch nicht bewusst, warum du in dieser Zeile:

Code: Alles auswählen

cat /tmp/dhcp.leases | ssh -i "${SSH_KEY}" "${SSH_USER}"@"${SSH_HOST}" "cat >> /tmp/dhcp.leases"
das zweite cat ("cat >> /tmp/dhcp.leases") gesetzt hast, aber grundsätzlich sollte das erst einmal funktionieren.
Also kann ich das weglassen? Habe im Grunde schnell nach cat via SSH gegoogelt, und bin dann auf StackOverflow gestoßen, da habe ich das Beispiel entsprechend weggelassen.
Das ganze funktioniert erstaunlich gut! Ohne dich wäre ich niemals auf den Ansatz mit dem >> gekommen. Ich danke dir vielmals!

Benutzeravatar
unitra
Beiträge: 646
Registriert: 15.06.2002 21:09:38
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.128.129.130

Re: Dateinhalt zwischen zwei Systemen synchronisieren

Beitrag von unitra » 20.10.2021 23:36:12

Ganz schön kompliziert, und fehleranfällig.
Einfacher wäre es den DHCP Seeverdienst auf einem anderen Knoten laufen zu lassen. Und die DHCP Reqests per Unicast auf die IP weiter zu leiten. Dann entfällt das komplexe Synchronisieren, von einem Router auf den Anderen.

Knogle
Beiträge: 466
Registriert: 06.05.2016 19:29:00
Lizenz eigener Beiträge: MIT Lizenz

Re: Dateinhalt zwischen zwei Systemen synchronisieren

Beitrag von Knogle » 20.10.2021 23:48:49

unitra hat geschrieben: ↑ zum Beitrag ↑
20.10.2021 23:36:12
Ganz schön kompliziert, und fehleranfällig.
Einfacher wäre es den DHCP Seeverdienst auf einem anderen Knoten laufen zu lassen. Und die DHCP Reqests per Unicast auf die IP weiter zu leiten. Dann entfällt das komplexe Synchronisieren, von einem Router auf den Anderen.
Das stimmt, aber diesen muss man dann ebenfalls wieder redundant ausführen.

Benutzeravatar
Blackbox
Beiträge: 4289
Registriert: 17.09.2008 17:01:20
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Dateinhalt zwischen zwei Systemen synchronisieren

Beitrag von Blackbox » 21.10.2021 16:47:49

Es kommt nun wohl darauf an, wie viel Aufwand du betreiben möchtest, um dein Ziel zu erreichen.
Ich kann mir auch einen Lösungsweg - bei mir gibt es niemals schlüsselfertige Lösungen - für den anderen Vorschlag vorstellen, der ließe sich wahrscheinlich mit einem (günstigen) Raspberry Pi umsetzen.
Eigenbau PC: Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Desktop PC: Dell Inspiron 530 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Notebook: TUXEDO BU1406 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Alles Minimalinstallationen und ohne sudo/PA/PW.
Rootserver: Rocky Linux 9.3 - Kernel: 5.14

Freie Software unterstützen, Grundrechte stärken!

Benutzeravatar
bluestar
Beiträge: 2419
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: Dateinhalt zwischen zwei Systemen synchronisieren

Beitrag von bluestar » 21.10.2021 17:28:09

Also wir haben einen redundanten Router, DHCP Server und DNS Server einfach komplett in einen LXC Container gepackt und dessen Dateisystem liegt auf einem DRBD, dazu ein Heartbeat und wenn der Router auf Hardware A ausfällt, dann übernimmt Hardware B und startet dort den LXC Container, somit ist die komplette Konfiguration exakt gleich, egal wo der Router letztendlich läuft.

Benutzeravatar
unitra
Beiträge: 646
Registriert: 15.06.2002 21:09:38
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.128.129.130

Re: Dateinhalt zwischen zwei Systemen synchronisieren

Beitrag von unitra » 25.10.2021 09:13:30

Man könnte auf jedem Router einen eigenen DHCP Server installieren, und die DHCP Pools (oder Scopes) trennen. Sprich wenn /24 Pool zur Verfügung gestellt werden sollten, dann pro DHCP Server jeweils die Hälfte konfigurieren. Doppelter Konfigurationsaufwand initial. Aber dann entfällt die magische synchronisierung der Beiden DHCP Pools und jeder DHCP Server ist autark für sich.

Nur ein als Beispiel:

Code: Alles auswählen

DHCP Server 1
Pool 192.168.1.50 - 192.168.1.149

DHCP Server 2
Pool 192.168.1.150 - 192.168.1.249
So würde ich das lösen.

Knogle
Beiträge: 466
Registriert: 06.05.2016 19:29:00
Lizenz eigener Beiträge: MIT Lizenz

Re: Dateinhalt zwischen zwei Systemen synchronisieren

Beitrag von Knogle » 25.10.2021 17:56:05

Vielen Dank euch.
Das Problem ist leider etwas anders.
Die Problematik besteht in der DNS Auflösung der Hostnames, d.h. der Master Router muss auch über die Leases des Backup Routers informiert werden um eine Auflösung des entsprechend damit verknüpften Hostnames zu ermöglichen.
Ansonsten läuft das Setup mehr oder weniger gut, gibt leider keine fertigen HA Guides für OpenWrt, daher baue ich gerade in Zusammenarbeit mit anderen im OpenWrt Forum einen zusammen.
Scheinbar gibt es da auch 100 Möglichkeiten sowas zu vollziehen.
Ich denke ein externer DNS und DHCP wäre vom Prinzip natürlich einfacher.
Gibt es vielleicht irgendeinen DHCP und DNS Dienst außer dnsmasq, welcher von Haus aus Synchronisation für den Backup-Fall bereitstellt?
Ich mache eben einen Thread im Smalltalk dazu auf, ich denke die Diskussion wird umfangreicher.

Benutzeravatar
Tintom
Moderator
Beiträge: 3069
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: Dateinhalt zwischen zwei Systemen synchronisieren

Beitrag von Tintom » 25.10.2021 21:08:02

Hier hat jemand etwas ähnliches gebastelt. Wenn der Master nicht erreichbar ist, übernimmt automatisch der Backup-Server. Lässt sich im Prinzip auch mit Debiandnsmasq umsetzen. Suchst du so etwas?

Benutzeravatar
Blackbox
Beiträge: 4289
Registriert: 17.09.2008 17:01:20
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Dateinhalt zwischen zwei Systemen synchronisieren

Beitrag von Blackbox » 28.10.2021 07:30:47

Tintom hat geschrieben: ↑ zum Beitrag ↑
25.10.2021 21:08:02
Hier hat jemand etwas ähnliches gebastelt.
Das sieht erst einmal gut aus. - Will heißen, mach-/verwaltbar auch für einen Hobbyisten.
Tintom hat geschrieben: ↑ zum Beitrag ↑
25.10.2021 21:08:02
Wenn der Master nicht erreichbar ist, übernimmt automatisch der Backup-Server.
Für mein Dafürhalten der richtige Ansatz.
Tintom hat geschrieben: ↑ zum Beitrag ↑
25.10.2021 21:08:02
Lässt sich im Prinzip auch mit Debiandnsmasq umsetzen.
Bei der Anforderung des TS würde ich auch auf Debiandnsmasq zurückgreifen, alles andere wäre zu fett für das Szenario.
Vielleicht reicht sogar Debiandnsmasq-base für das Vorhaben aus?
Eigenbau PC: Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Desktop PC: Dell Inspiron 530 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Notebook: TUXEDO BU1406 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Alles Minimalinstallationen und ohne sudo/PA/PW.
Rootserver: Rocky Linux 9.3 - Kernel: 5.14

Freie Software unterstützen, Grundrechte stärken!

Antworten