Hilfe zu Skript bei OPENVPN Auto-Reconnect bei Abbruch über PID Auswertung oder tun0 gesucht

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Hilfe zu Skript bei OPENVPN Auto-Reconnect bei Abbruch über PID Auswertung oder tun0 gesucht

      Hallo zusammen,

      ich bin durch die Hilfe und die Beiträge dieses Forums sehr weit gekommen, leider stoße ich nun an meine Grenze meiner Kenntnisse.

      Was ich gerne hätte, wäre eine funktionierende Überwachung meiner OPENVPN Verbindung mit Automatischen Reconnect wenn sie abbricht (Zwangstrennung/Server Neustart usw.) über den Prozess an sich ohne PING oder dergleichen.

      Box ist eine VU+ UNO SE 4K mit Nord VPN Account und einer Fritz (alle Ports bin auf 1194 gesperrt) IPV6 ist abgeschalten.

      OpenVpn mit der resolve Lösung von Banana Joe läuft und nun zu den Configs:

      OPENVPNVTI.conf
      Spoiler anzeigen

      client
      dev tun
      proto udp
      remote x.x.x.x 1194
      resolv-retry infinite
      remote-random
      nobind
      tun-mtu 1500
      tun-mtu-extra 32
      mssfix 1450
      persist-key
      persist-remote-ip
      persist-tun
      reneg-sec 0
      comp-lzo no
      auth-retry nointeract
      auth-nocache
      keepalive 5 15

      remote-cert-tls server

      #mute 10000
      auth-user-pass /etc/openvpn/auth.txt
      log /etc/openvpn/LOG.txt
      verb 3
      pull
      fast-io
      cipher AES-256-CBC
      auth SHA512



      OPENVPN Version

      Spoiler anzeigen

      root@vuuno4kse:~# openvpn --version
      OpenVPN 2.4.6 arm-oe-linux-gnueabi [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH/PKTINFO] [AEAD] built on Jan 18 2019
      library versions: OpenSSL 1.1.1a 20 Nov 2018, LZO 2.09
      Originally developed by James Yonan
      Copyright (C) 2002-2018 OpenVPN Inc <sales@openvpn.net>
      Compile time defines: enable_async_push=no enable_comp_stub=no enable_crypto=yes enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dependency_tracking=no enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=yes enable_fragment=yes enable_iproute2=yes enable_libtool_lock=yes enable_lz4=yes enable_lzo=yes enable_management=yes enable_multihome=yes enable_pam_dlopen=no enable_pedantic=no enable_pf=yes enable_pkcs11=no enable_plugin_auth_pam=no enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_selinux=no enable_server=yes enable_shared=yes enable_shared_with_static_runtimes=no enable_silent_rules=no enable_small=no enable_static=yes enable_strict=no enable_strict_options=no enable_systemd=no enable_werror=no enable_win32_dll=yes enable_x509_alt_username=no with_aix_soname=aix with_broken_putenv=no with_crypto_library=openssl with_gnu_ld=yes with_libtool_sysroot=/home/matze/openvuplus_3.0/build/vuuno4k/tmp/sysroots/vuuno4k with_mem_check=no



      Nun habe ich in irgendeinem geladenen ZIP Ordner (teste und versuche schon seit paar Tagen) folgendes Skript gefunden welches die laufende PID von Openvpn ausliest und dann daraufhin entweder nichts macht oder die Openvpn mit einem Startbefehl startet da sie nicht scheinbar nicht läuft.

      (So lese ich die if else Prozedur jedenfalls.. Leider reichen meine Kenntnisse hierfür nicht mehr aus und ich hoffe auf euch...)

      Dies habe ich als cronjob alle 3 Minuten angelegt, der Job funktioniert aber.
      Leider funktioniert jedoch die Auswertung bei mir irgendwie nicht und daher startet Openvpn jedes mal erneut und legt zu dem vorhanden tun0 einen tun1 an, beim nächsten überprüfen kommt der tun2 dazu uns immer so weiter bis die Verbindung abbricht.

      Spoiler anzeigen

      #!/bin/sh

      ## Variables ##
      OPENVPN=/etc/init.d/openvpn
      LOGDIR=/home/root
      LOGFILE=$LOGDIR/vpn_emergency_restart.log
      LOGLINELIMIT=500


      # Logfile Begrenzung auf ca. 500-510 Zeilen
      # Bei Ueberschreitung wird ein neues angelegt
      if [ -e $LOGFILE ] ; then
      LOGLINES="$(wc -l $LOGFILE | cut -d" " -f1)"
      if [ "$LOGLINES" -gt "$LOGLINELIMIT" ] ; then
      rm -f $LOGFILE
      fi
      fi

      # Generelles Logging
      exec 3>&1 4>&2
      trap 'exec 2>&4 1>&3' 0 1 2 3
      exec 1>>$LOGFILE 2>&1


      ONE_TIMES=0
      message_one_times_enough() {
      ONE_TIMES=$((ONE_TIMES+1))
      if [ "$ONE_TIMES" -eq "1" ] ; then
      echo -e "\nDatum + Uhrzeit = $DATE\n"
      fi
      }

      OPENVPN_PID="$(ps aux | grep [o]penvpn | awk '{print $2}')"

      COUNT=0
      while [ -z $OPENVPN_PID ]
      do
      COUNT=$(( $COUNT + 1 ))

      if [ "$COUNT" -gt "3" ] ; then
      COUNT=$(( $COUNT - 1 ))
      echo -e "\n! OpenVPN Start Versuch $COUNT fehlgeschlagen !"
      echo -e "Start der naechsten 3 Versuche in einer Minute ...\n"
      break
      else
      DATE="$(date +%a.%d.%b.%Y-%H:%M)"
      message_one_times_enough
      echo -e "\nOpenVPN (wg. Zwangstrennung ?) nicht aktiv.\nOpenVPN Start Versuch $COUNT ..."
      $OPENVPN start
      fi

      if [ "$?" = "0" ] ; then
      echo -e "OpenVPN Start Versuch $COUNT erfolgreich.\n" && exit
      else
      echo -e "\n! OpenVPN Start Versuch $COUNT fehlgeschlagen !\nNaechster Start Versuch -> in drei Sekunden ...\n"
      sleep 3
      fi
      done


      exit



      Wenn ich diesen Befehl allein ausführe kommt die aktuelle PID falls OPENVPN läuft, wenn nicht kommt gar keine Ausgabe...

      root@vuuno4kse:~# (ps aux | grep [o]penvpn | awk '{print $2}')
      1082

      Hier wäre die PID 1082...

      Daraufhin sollte meiner Meinung nach nichts passieren da eine PID vorhanden und größer 0?!
      Ist hier die Überprüfung in der while Schleife falsch oder verstehe ich es nicht :)
      Was hat das mit dem -z $OPENVPN_PID auf sich?

      Alternativ habe ich mir gedacht ich könnte auf die vorhandene Verbindung einen Restart legen wenn das mit den PID's nicht klappt.

      (ifconfig tun0| grep inet | awk '{print $2}')
      addr:10.8.0.5

      Ich hoffe mein Anliegen ist verständlich ausgedrückt und Ihr könnt mir weiterhelfen.
      Sollte jemand weitere Daten oder infos benötigen gerne melden.

      Danke und Gruß

      Bernd
    • Bernd-VU schrieb:

      Was hat das mit dem -z $OPENVPN_PID auf sich?
      -z $STRING gibt true zurück, wenn Stringlänge Null ist.

      Die Zeile meldet aber auch einen Fehler. So ist richtig:

      Quellcode

      1. while [ -z "$OPENVPN_PID" ]


      Das Skript funktioniert dann bei mir. Nur macht es eigentlich überhaupt keinen Sinn, und ist total umständlich. OpenVPN kann selbstständig den Tunnel aufrecht erhalten, bzw. nach Beendigung neustarten. Oder endlos Verbindungsversuche machen.
      Wenn ich das richtig sehe, müsste deine Konfiguration das auch genau machen.
    • Vielen Dank dir für die Mühe und die Erklärung,
      eventuell kann das auch für andere Leute interessant sein wenn man den grep Filter ändert.

      Komischerweise bricht meine VPN Verbindung immer wieder mal ab obwohl die Fritzbox läuft.
      Daher auch dieser Weg der Sonderlösung, ich lasse das Skript einfach alle 20 Minuten prüfen, sollte ja nichts machen wenn eine Verbindung vorhanden ist. Zusätzlich habe ich alles was VPN betrifft deinstalliert und alles sauber per Konsole nachinstalliert.

      Teste mal bis morgen weiter

      Danke und Gruß
    • Jetzt muss ich dich nochmals etwas fragen, wie hast du den Fehler gefunden?
      Gibt es einen Debugger oder eine Datenanzeige (Liveview) dann sieht man wo es hängenbleibt bzw. welche Werte eingelesen werden?
      Sorry für die blöden Fragen aber alles Anfang ist schwer...

      Gruß