pfSense OpenVPN Client Reihenfolge bestimmen und neustarten

John1271

Member
Hallo.

Ich habe ein Flussdiagram für pfSense erstellt, das nicht ganz perfekt ist.

Im Großen und Ganzen soll das Skript folgendes nach pfSense Neustart machen:

Flowchart2.jpg

Ich bin bereit 300€ für das Script zu bezahlen. Falls weitere Fragen bestehen, bitte stellen.

Grüße

John
 

TCM

Well-Known Member
Vergiss mal das Diagramm und erzähl, was du erreichen willst.

So a la "Ich hab X OpenVPN-Clients, die dieses und jenes Startverhalten haben sollen, z.B. es soll immer mind. einer laufen" oder sowas.
 

John1271

Member
Vergiss mal das Diagramm und erzähl, was du erreichen willst.

Gerne.

Das Skript soll nach pfSense Neustart permanent im Hintergrund laufen.
1. Als erstes soll das Skript die ganze Zeit prüfen, ob der OpenVPN Client 1 (Im Bild PP_Amsterdam1_Client) den Status "up" hat.

Hier ein Beispielbild:

*auf Wunsch von Moderator gelöscht*

Wenn der OpenVPN Client 1 den Status "up" hat, dann soll nichts passieren.
Sonst gibt es zwei andere Möglichkeiten. Wenn der OpenVPN Client 1 nich den Status "up" hat, dann kann der Status entweder "reconnecting" oder "down" haben.
Wenn also beim OpenVPN Client 1 etwas anderes, als "up" steht, dann soll folgendes passieren:

- Das Skript soll alle OpenVPN Clients beenden/stoppen.
- Wenn alle OpenVPN Clients beendet oder gestoppt wurden, dann soll das Skript alle OpenVPN Clients von oben nach unten nacheinander aktivieren.
Wenn also 3 OpenVPN Client konfiguriert wurden, dann soll zuerst Client3, dann Client2 und zum Schluss Client1 starten. Da die Clients nicht sofort starten, sondern Zeit brauchen, müsste man wahrscheinlich eine Pause einbauen.

Wenn alle Clients dann wieder laufen, also den Status "up" haben, dann soll es weiter mit Punkt1 in meiner Beschreibung laufen.
 
Zuletzt bearbeitet von einem Moderator:

mr44er

moderater Moderator
Teammitglied
Erstmal ein Tip: Ich würde die IP-Adressen zur Sicherheit schwärzen.

ich werd' dennoch nicht schlau daraus. Sollte das eine Fernbedienung werden oder eher Richtung Failover?

Wenn Letzteres, dann solltest du das über policy based routing lösen können bzw. spricht etwas gegen dauerhafte Verbindung bzw. auto-reconnect?
 

John1271

Member
Erstmal ein Tip: Ich würde die IP-Adressen zur Sicherheit schwärzen

Stimmt. Weiß aber nicht wie.

ich werd' dennoch nicht schlau daraus. Sollte das eine Fernbedienung werden oder eher Richtung Failover?

Eher Richtung Failover.

Genau gesagt soll das Skript für eine Tunnel in Tunnel Verbindung werden. Die Diskussion ist hier zu finden.
Die Tunnel in Tunnel Verbindung ist schon an der Grenze des machbaren. Trotzdem braucht man ein Skript, um die Reihenfolge zu bestimmen. Zum Beispiel Tunnel3-> Tunnel2-> Tunnel1. Solange Tunnel3 nicht aufgebaut worden ist, kann Tunnel2 und dann Tunnel1 nicht aufgebaut werden. Folglich reicht es aus, Tunnel1 Verbindung zu überwachen. Wenn Tunnel1 down ist, dann muss die Reihenfolge neugestartet werden.

Eine Person ist an dem Skript schon dran.
 

mr44er

moderater Moderator
Teammitglied
Weiß aber nicht wie.
Nachträglich nicht, die Editierzeit ist abgelaufen. Den Post kann ich dir aber dahingehend editieren, dass das Bild in aktueller Form gelöscht wird, wenn du das wünschst.

Ich hab den Thread ganz durchgelesen. Ich glaube, das Script ist von hinten durch die Brust, aber wenn es tut, dann ok bis 'naja'. Wer wartet das Script? Vertraust du demjenigen? Was ist, wenn derjenige ausfällt? Geht das Script noch beim nächsten Update von pfSense? usw. usf.

Für viel Hirnschmalz ists mir aktuell zu spät, aber dennoch bin ich überzeugt, dass du das mit PBR hinbekommen solltest. Der Trick sollte sein, dass man weder Client noch Server die route setzen lässt, sondern manuell (gw-group, priorität, PBR eben) und obendrein die OVPN-Verbindung als NIC definiert.

https://docs.netgate.com/pfsense/en/latest/vpn/openvpn/assign.html
https://docs.netgate.com/pfsense/en/latest/vpn/openvpn/multi-wan.html

Alles ohne Garantie, ohne Gewähr. ;)
 

John1271

Member
Den Post kann ich dir aber dahingehend editieren, dass das Bild in aktueller Form gelöscht wird, wenn du das wünschst.

Ja ich wünsche, dass das Bild mit WAN IP gelöscht wird.

Der Trick sollte sein, dass man weder Client noch Server die route setzen lässt, sondern manuell (gw-group, priorität, PBR eben) und obendrein die OVPN-Verbindung als NIC definiert.

Natürlich ist es immer besser mit dem zu arbeiten, was pfSense schon bieten kann.

Meine Erfahrung reicht gerade mal so aus, um im Sand rum zu stochern. :belehren: Links würden mir da nicht ausreichen.
Ich bräuchte schon ein konkretes Beispiel. :)

Habe immer ein offenes Ohr. :D
 

mr44er

moderater Moderator
Teammitglied
Bild gelöscht. ;)

In den Links sind Beispiele und Bilder wie das gemacht wird. Mich wunderts, dass du dort im Forum keinen Stupser darauf bekommen hast, weil das die Lösung sein sollte.

Eine Verbindung nach der anderen. Nach Einrichtung der zweiten dann testen uswusf. aber das Testen kann dir hier keiner abnehmen. ;)
 

John1271

Member
Der Trick sollte sein, dass man weder Client noch Server die route setzen lässt, sondern manuell (gw-group, priorität, PBR eben) und obendrein die OVPN-Verbindung als NIC definiert.

Hmm.

Meinst du vielleicht eine gw-group erstellen, mit:
VPN1-Tier1
VPN2-Tier2
VPN3-Tier3

Und dann unter Firewall Rule LAN als Gateway gw-group angeben?

Das würde funktionieren, wenn alle VPN-Clients ausfallen würden.

Problem wäre nach wie vor: Was passiert, wenn nur VPN1 oder VPN2 von allen drei ausfallen würde?

Bsp.:
VPN1,2 und 3 sind online.
VPN2 fällt aus.
Damit es funktioniert, müssen VPN1 und 3 beendet werden, dann würde die Verbindung mit gw-group wieder funktionieren.

Genauso, wenn VPN1,2 und 3 online sind.
Wenn VPN1 ausfällt, dann muss VPN2 und VPN3 beendet werden, damit die Verbindung mit gw-group wieder funktioniert.

Kann man überhaupt so etwas bei pfSense konfigurieren?
 

Yamagi

Possessed With Psi Powers
Teammitglied
Auf einem echten FreeBSD würde ich das devd machen. Ich weiß leider nicht, ob pfSense einen devd laufen hat, würde aber erstmal davon ausgehen:
  • Die drei VPNs werden jeweils auf ein festes tun-Interface konfiguriert. Also VPN 1 -> tun1, VPN 2 -> tun2 und VPN 3 -> tun3.
  • In der /etc/devfs.conf werden für jedes tun-Interface zwei Actions definiert:
    • Bei ifdown-Event wird das nächst höhere VPN beendet.
    • Bei ifup-Event wird das nächst höhere VPN gestartet.
Beim Systemstart muss nur das unterste VPN gestartet werden, durch die ifup-Events kaskadiert sich der Start bis oben durch. Umgekehrt muss beim herunterfahren nur das unterste VPN beendet werden. Zwar werden die höheren VPNs nicht mehr sauber beendet, da sie ihren Server nicht mehr erreichen können, aber ist nicht weiter schlimm. Dann laufen sie halt ins Timeout. Wenn ein VPN neu startet, gibt es erst ein ifdown-Event, was alle höheren VPNs beendet. Sobald es wieder aufgebaut ist, folgt ein ifup-Event, was die höheren VPNs wieder startet. Da es schnell gehen kann, müsste da eventuell noch eine Art von Lock-Mechanismus rein. Alternativ kann man eventuell auch was mit OpenVPNs ping-restart Option machen.
 

mr44er

moderater Moderator
Teammitglied
VPN2 fällt aus.
Damit es funktioniert, müssen VPN1 und 3 beendet werden, dann würde die Verbindung mit gw-group wieder funktionieren.
Ne, 'gwgroup' definiert die Logik/Reihenfolge.

Zunächst mal kannst du bei der gateway-Einzelauswahl unter erweitert Priorität (1-255) UND Gewichtung (1-5) setzen. (nutze opnsense, pfsense sollte das feature aber auch haben). Insbesondere die Sache mit der Gewichtung bezieht sich ausschließlich auf eine gwgroup.

Tier1 gw1
Tier2 gw2
Tier3 gw3

-> Failover, Wenn Tier1 platt, nimm nächsten (Tier2), wenn der auch platt, dann ab zu 3.

Tier1 gw1 gw2 gw3
Tier2 -leer-
Tier3 -leer-

-> Balancing, gw1 und gw3 sind platt, gw2 wird genommen.

Tier1 gw1 gw3
Tier2 gw2
Tier3

->Failover+Balancing, gw1 und gw3 sind platt, gw2 wird genommen.

Ob sich das so wie von dir gewünscht 1:1 einrichten lässt oder ob ich was übersehen habe, weiß ich nun nicht. So die Theorie. ;)
 

John1271

Member
VPN2 fällt aus.
Damit es funktioniert, müssen VPN1 und 3 beendet werden, dann würde die Verbindung mit gw-group wieder funktionieren.

Damit meinte ich, falls VPN2 ausfällt, aus welchen Gründen auch immer, dann muss man in meiner Konfiguration VPN1 und VPN3 beenden, damit man die Reihenfolge VPN3->VPN2->VPN1 wieder starten kann.

Und hier ist genau das Problem, wofür ich keine Lösung parat habe. Failover oder Balancing können zwar schön erkennen und gw wechseln wie man es möchte, aber ich brauche eine Funktion, die dazu bestimmte Clients beenden/stoppen kann, wenn es notwendig sein sollte und ich bin mir nicht sicher, ob pfSense in der Gui so etwas bieten kann.
 

John1271

Member
Wollte nur bescheid sagen, dass das Skript fertig ist und mit einer Anleitung im pfSense Forum steht.

Vielleicht hat noch jemand Ideen, wie man es verbessern kann.

Konstruktiver Input ist immer willkommen. :D

Grüße

John
 
Oben