ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

Dispatcher

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

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

Achtung!

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 der Besitzer der Skripte root 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

Dispatcher Aktionen
AktionBedeutungAnwendungsbeispiel
pre-up(*) Aktionen, die vor dem Aufbau der Netzwerkverbindung ausgeführt werden Üblicherweise führt man iptables-Regeln aus, bevor ein Verbindung aufgebaut wurde, so ist beispielsweise ein Netzwerkdienst nie aus dem Netz erreichbar.
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.
post-down(*) Aktionen, die nach dem Abbau der Netzwerkverbindung ausgeführt werden Hier kann man beispielsweise die bei "pre-up" ausgeführten iptables Regeln wieder rückgängig machen,
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

*) Die Aktionen pre-up und post-down stehen nur bis Ubuntu Hardy Heron 8.04 zur Verfügung. Ab Ubuntu Intrepid Ibex 8.10 (mit NetworkManager 0.7) sind diese also obsolet.

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-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".

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/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]:

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 überpüft, ob man sich zu einem WLAN mit dem Namen "VPN/WEB" verbindet und fer alls dies der Fall ist automatisch eine VPN-Verbindung mittels VPNC ausgeführt.

Setzen von Mode/Rate

Achtung!

Dieses Beispiel funktioniert nur bis einschließlich Ubuntu Hardy Heron 8.04, da die Unterstützung der Aktionen pre-up und post-down mit Ubuntu Intrepid Ibex 8.10 eingestellt wurde!

Das folgende Skript setzt das Protokoll eines Atheros Devices auf 802.11b und auf 11M. Dies ist sinnvoll wenn der Router nur 802.11b unterstützt hilft aber auch bei einer größeren Entfernung zum Router oder bei Interferenzen. Der Router sollte dann nur auf 802.11b gesetzt sein. Mixed mode b/g gilt es im Allgemeinen sowieso zu vermeiden. Das ganze sollte auch für andere Arten von WLAN-Karten funktionieren, diese unterstützen unter Umständen dann sogar die wlan-extension:

iwconfig <IFACE> modu 11b 
cat /etc/NetworkManager/dispatcher.d/03iwconfig_iwpriv: 
1
2
3
4
5
6
7
8
9
#!/bin/sh
INTERFACE=$1
ACTION=$2
RATE=11M

if [ "$ACTION" = "pre-up" -a "$(echo $INTERFACE|grep ath)" ];then
  iwpriv $INTERFACE mode 2
  iwconfig $INTERFACE rate $RATE 
fi

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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/bash

REQUIRED_CONNECTION_NAME="<LanConnection1>"
VPN_CONNECTION_NAME="<VpnConnection1>"


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 <LanConnection1> und der Name der VPN-Verbindung <VpnConnection1> eingetragen werden. Das Skript wird unter beliebigen Namen (z.B. 02VPN1) in den Ordner des Dispacher /etc/NetworkManager/dispatcher.d/ kopiert und ausführbar gemacht.

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.

Diese Revision wurde am 4. Mai 2011 18:03 von Multimeter erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, Internet, VPN