[[Vorlage(getestet, precise)]] {{{#!vorlage Wissen [:Editor: Einen Editor öffnen] [:Rechte: Rechte von Ordnern und Dateien ändern] }}} [[Inhaltsverzeichnis(2)]] Der NetworkManager kann mehr als nur eine Verbindung auf- und wieder abbauen. Der NetworkManager kann bei Verbindungsauf- und -abbau Skripte ausführen. Diese Funktionen sind jedoch nicht von der grafischen Oberfläche aus erreichbar. Dies macht der NetworkManager über die Dispatcher-Skripte, die ausgeführt werden, wenn der NetworkManager eine Aktion durchführt, z.B. wenn er sich zu einem WLAN verbindet oder davon trennt. = Was ist ein Dispatcher-Skript = {{{#!vorlage Warnung Das Skript '''/etc/NetworkManager/dispatcher.d/01ifupdown''' sollte man niemals löschen oder modifizieren. Es ist ein grundlegender Bestandteil der Funktionalität des NetworkManagers und wird in unveränderter Form für die Funktion des NetworkManagers benötigt. }}} Grundsätzlich ist ein Dispatcher-Skript ein ganz normales Shellskript, das in dem Ordner '''/etc/NetworkManager/dispatcher.d/''' liegt. Diese Skripte werden dann vom NetworkManager bei einer Änderung an den Netzwerken mit zwei Parametern aufgerufen: Netzwerkschnittstelle und Aktion. Wichtig dabei ist, dass `root` der Besitzer der Skripte ist, da sie sonst nicht ausgeführt werden können. In dem Ordner können mehrere Skripte liegen, diese werden in alphabetischer Reihenfolge abgearbeitet. Ein Skript liegt bereits in dem Ordner, '''01ifupdown''', dieses ist das Grundskript des NetworkManagers und sorgt dafür, dass die Netzwerkschnittstellen richtig initialisiert werden. == Aktionen == ||<-3 tablestyle="width: 95%;" cellstyle="text-align: center; background-color: #E2C890;">'''Dispatcher Aktionen'''|| ||'''Aktion'''||'''Bedeutung'''||'''Anwendungsbeispiel'''|| || `up` || Aktionen, die nach dem Aufbau der Netzwerkverbindung ausgeführt werden || Mountet man Netzwerkfreigaben über ein Netzwerk, so kann man dieses an dieser Stelle ausführen lassen. || || `down` || Aktionen, die vor dem Abbau der Netzwerkverbindung ausgeführt werden || Hat man Netzwerkfreigaben eingebunden, so sollte man diese vor dem Verbindungsabbau aushängen. Erst dann kann man sicher gehen, dass alle Daten korrekt geschrieben wurden. || || `vpn-up` || Aktionen, die nach dem Aufbau einer VPN-Verbindung ausgeführt werden || || || `vpn-down` || Aktionen, die nach dem Abbau einer VPN-Verbindung ausgeführt werden || || = Was kann man damit machen? = Eigentlich alles was ein Skript so kann... man sollte aber nur sinnvolle Dinge wie z.B. automatischer Uhrzeitabgleich, Starten eines VPN-Clients oder Umschalten der [:iptables: iptables-Konfiguration] machen. == Beispiele == === VPNC starten === Man kann auch bei wechselnden WLAN-Umgebungen für einzelne Netze bestimmte Funktionen durchführen lassen. Dies wird hier gezeigt mit dem Beispiels "VPNC in der Uni". {{{#!code bash #!/bin/bash ## INITIALISIERUNG #Diese Werte werden vom NetworkManager an das Skript übergeben INTERFACE=$1 ACTION=$2 ## ESSID des Universitäts-Netzwerkes ESSID_VPN="VPN/WEB" ## ESSID des verbundenen Netzwerks bestimmen ESSID=$(iwconfig $INTERFACE | grep ESSID | cut -d":" -f2 | sed -e 's/"//g') ## Funktionen durchführen, je nach Aktion eine andere case "$2" in up) if [ "$ESSID" = "$ESSID_VPN" ]; then vpnc /etc/vpnc/uni.conf fi ;; down) if [ "$(pidof vpnc)" ]; then vpnc-disconnect killall vpnc fi ;; pre-up) ;; post-down) ;; *) echo $"Usage: $0 {up|down|pre-up|post-down}" exit 1 esac }}} Bei dieser Art, zu einem VPN-gesicherten WLAN zu verbinden, muss das Passwort im Klartext in der Datei '''/etc/vpnc/uni.conf''' gespeichert werden. Die Datei sollte daher `root` gehören und darf für andere nicht lesbar sein [2]: {{{#!vorlage Befehl sudo chown root:root /etc/vpnc/uni.conf sudo chmod 700 /etc/vpnc/uni.conf }}} Das Skript '''/etc/NetworkManager/dispatcher.d/02uni-vpnc''' muss außerdem noch ausführbar gemacht werden [2]. Nun wird beim Verbindungsaufbau überprüft, ob man sich zu einem WLAN mit dem Namen ''"VPN/WEB"'' verbindet und, falls dies der Fall ist, automatisch eine VPN-Verbindung mittels [:VPNC:] ausgeführt. === VPN netzwerkabhängig starten und automatischer Reconnect (mittels NetworkManager) === Möchte man, dass eine bestimmte VPN-Verbindung gestartet wird, sobald eine bestimmte WLAN-, LAN-, oder sonstige Verbindung hergestellt wurde, kann man dies mit der in Ubuntu 10.10 neu eingeführten API des NetworkManager leicht realisieren: {{{#!code bash #!/bin/bash REQUIRED_CONNECTION_NAME="" VPN_CONNECTION_NAME="" sleep "3s" activ_con=$(nmcli con status | grep "${REQUIRED_CONNECTION_NAME}") activ_vpn=$(nmcli con status | grep "${VPN_CONNECTION_NAME}") if [ "${activ_con}" -a ! "${activ_vpn}" ]; then nmcli con up id "${VPN_CONNECTION_NAME}" fi }}} In diesem Skript müssen noch die Namen der erforderlichen Verbindung `` und der Name der VPN-Verbindung `` eingetragen werden. Das Skript wird unter beliebigen Namen (z.B. '''02VPN1''') in den Ordner des Dispacher '''/etc/NetworkManager/dispatcher.d/''' kopiert und die Rechte gesetzt. {{{ chown root:root /etc/NetworkManager/dispatcher.d/02VPN1 chmod 700 /etc/NetworkManager/dispatcher.d/02VPN1 }}} Natürlich lassen sich mit gleichem Aufwand auch Skripte erstellen, die bei Fehlen einer LAN- und WLAN-Verbindung eine UMTS-Verbindung automatisch aufbauen und diese bei Aktivierung einer Verbindung auch wieder abschalten. ==== Zusatz ab Ubuntu 11.10 ==== Seit Ubuntu 11.10 reicht das alleine allerdings nicht mehr aus, denn die Passwörter der VPN Verbindung werden im "Schlüsselbund" des angemeldeten Benutzers gespeichert. Die Skripte in dispatcher.d werden allerdings von root ausgeführt, welcher aber keinen Zugriff auf diese Passwörter hat. Deswegen kommt es dann zur Fehlermeldung "Keine gültigen VPN-Geheimnisse". Um das zu ändern öffnet man die Konfigurationsdatei seiner VPN-Verbindung: {{{ gksudo gedit /etc/NetworkManager/system-connections/ }}} Dort passt man die beiden Schlüssel "Xauth password-flags" und "IPSec secret-flags" vom voreinstellten Wert "1" auf "0" an. Damit wird der Network-Manager angewiesen, die Passwörter direkt in die Konfigurationsdatei statt in den Schlüsselbund zu speichern. Diese Passwörten müssen nun auf diese neue Art noch gespeichert werden. Um das zu erreichen, schließt man die Datei wieder und öffnet die Konfiguration der VPN Verbindung über den Network-Manager. Dort schreibt man einmal das Gruppen- und das Benutzerpasswort hinein und schließt mit "Speichern" ab. Um zu überprüfen, ob es funktioniert hat, öffnet man noch einmal die Datei /etc/NetworkManager/system-connections/. Dort sollten nun gegen Ende der Datei zwei neue Zeilen mit den Passwörtern ähnlich wie hier hinzugefügt worden sein: {{{ [vpn-secrets] IPSec secret= Xauth password= }}} Ob der Verbindungsaufbau nun über root funktioniert, lässt sich mit folgendem Befehl im Terminal testen: {{{ nmcli con up id "" }}} #tag:Internet, Netzwerk, VPN