http://www.pronix.de -> Tutorials -> OpenVPN Tutorial -> Advanced -> Eigene Scripte

Eigene Scripte

OpenVPN bietet einige Schnittstellen, die es erlauben eigene Scripte/Programme/Befehle beim Ändern des Verbindungsstatus auszuführen.
Durch diese Schnittstellen können z.B. Nameserver-Einträge oder Paketfilter-Einstellungen vorgenommen werden, sobald sich ein Client verbindet, oder die Verbindung löst. Im UDP-Modus gilt eine Verbindung als gelöst, wenn die keepalive-time überschritten wurde und der Client nicht mehr reagiert hat. Diese Option wird mit dem Server mit der Direktive keepalive ping timeout in der Konfigurationsdatei übergeben.

Die folgenden Befehle können bei Statusänderungen genutzt werden:

  • learn-address
    Durch den Parameter learn-address in der Serverkonfigurationsdatei wird der Server angewiesen beim Verbindungsaufbau, bei Verlust der Verbindung und bei erneuter Anfrage ein Skript auszuführen. Die Syntax:
    learn-address ./learn_address-skript.sh
    Dem Skript werden beim Aufruf folgende Parameter übergeben:
    • Verbindungsaufbau(add)
      add IP-Adresse CommonName
    • Erneuter Verbindungsaufbau(update)
      update IP-Adresse CommonName
    • Verlust der Verbindung(delete)
      delete IP-Adresse
  • ipchange
    In einer Umgebung mit dynamischen IP-Adressen wird auf dem Client dieses Kommando ausgeführt, wenn sich die Adresse des Servers ändert. Die Syntax:
    ipchange ./ipchange-skript.sh
    Dem Skript werden als Argumente die neue IP-Adresse des Servers sowie der Port übergeben. ipchange sollte nicht auf dem OpenVPN-Server genutzt werden.
  • client-connect, client-disconnect
    Die Skripte werden ausgeführt, wenn sich ein Client mit dem Server verbindet, wenn die Verbindung beendet (keepalive-Timeout) oder der Server heruntergefahren wird.
    Die Syntax:
    client-connect ./client_connect-skript.sh
    client-disconnect ./client_disconnect-skript.sh

    Bei client-connect wird dem Skript als erstes Argument der Name einer temporären Datei übergeben, die das Skript anlegen kann. Diese Datei kann zum dynamischen Erzeugen von Konfigurationen für den Client genutzt werden und wird vom Server genauso behandelt wie eine clientspezifische Datei im client-config-dir. Der Name zeigt auf einen Pfad, der in der Serverkonfigurationsdatei mit der Option tmp-dir angegeben wurde.
    Bei client-connect ist der Rückgabewert von Bedeutung. Wenn der Rückgabewert des Skriptes nicht 0 ist, wird der Client nicht verbunden und client-disconnect wird aufgerufen. Für beide Skripte stellt der Server die Umgebungsvariable $common_name zur Verfügung. Beim client-disconnect existieren zusätzlich die Umgebungsvariablen $bytes_received und $bytes_sent.
  • up, up-restart, down-pre, down
    Durch die Optionen up und up-restart kann ein eigenes Skript im Kontext des User ausgeführt werden, der den OpenVPN Server startet. Das Skript wird direkt nach der Konfiguration des tun/tap-Interfaces ausgeführt.
    Die Syntax:
    up ./up-skript.sh
    up-restart ./up_restart-skript.sh

    Dieses Skript kann zum Erstellen spezieller Routen, Firewallregeln usw. genutzt werden, da der ausführende User in den meisten Fällen root sein wird.
    Durch die Optionen down-pre und down können eigene Skripte beim Beenden des Servers im Kontext des OpenVPN Users ausgeführt werden, wobei das down-pre-Skript vor dem Schliessen des tun/tap-Interfaces und das down-Skript nach dem Schliessen ausgeführt wird.
    Die Syntax:
    down-pre ./down_pre-skript.sh
    down ./down-skript.sh

    Den Skripten werden bei Nutzung des tun-Interfaces andere Argumente übergeben, als bei der Benutzung des tap-Interfaces.
    Bei tun
    • $1 der Name des tun Interfaces(tun0)
    • $2 die MTU des tun Interfaces
    • $3 die link-mtu des tun Interfaces
    • $4 die locale IP des tun Interfaces
    • $5 die remote IP des tun Interfaces
    • $6 init, falls das Skript von der Option up aufgerufen wurde; restart, wenn das Skript von der Option up-restart aufgerufen wurde
    Bei tap:
    • $1 der Name des tap Interfaces(tap0)
    • $2 die MTU des tap Interfaces
    • $3 die link-mtu des tap Interfaces
    • $4 die locale IP des tap Interfaces
    • $5 die Netzwerkmaske tap Interfaces
    • $6 init, falls das Skript von der Option up aufgerufen wurde; restart, wenn das Skript von der Option up-restart aufgerufen wurde

Weiter mit Absichern eines WLAN-Netzes mit OpenVPN