VPN automatisch verbinden durch wpa_supplicant [SOLVED]

Servus,
ich verwende wpa_supplicant um mich mit Wlans zu verbinden. Bei einem besonderen, stammt von der Uni, muss ich danach noch eine VPN-Verbindung aufbauen. Das geschieht durch openconnect, bei mir gekapselt in einem Skript. Nur muss ich das immer per Hand ausführen, wenn ich leider nur besagtes Wlan zur Verfügung habe. Gibt es eine Möglichkeit nach einem erfolgreichen Verbindungsaufbau mit einem ganz bestimmten AP ein Skript auszuführen? Oder eine andere, elegante, Lösung von dem Problem?

mfg benediktibk
 
Zuletzt bearbeitet:
Pro Interface gibt es Up-/Down-Direktiven, und wpa_supplicant kann Interfaces abhängig vom Netz benennen (id_str ist das Stichwort.)

Damit kann man etwas in der Art hacken:

In die /etc/wpa_supplicant/wpa_supplicant.conf:
Code:
network={
  ssid="uni"
  id_str="uni0"
}
network={
  ssid="home"
  id_str="wlan0"
}

In die /etc/network/interfaces:
Code:
iface uni0 inet dhcp
  up /path/to/up-script.sh &
  down /path/to/down-script.sh
{up,down}-script.sh sind Shell-Scripte, die deinen VPN-Client starten und beenden.
Es ist wohl ein ziemlicher Hack, aber sollte mit Boardmitteln funktionieren. Vielleicht kriegt man auch etwas mit Guessnet hin.

Aber falls eduroam eine Option ist, dann vergiss das VPN.
 
Zuletzt bearbeitet:
Ich verwende eduroam wenn möglich, nur ist die Verbreitung davon noch nicht so gut. Manchmal gibt es eben leider nur unverschlüsseltes Wlan + VPN.

Erstmal danke für die Vorschläge, nur kann ich sie leider nicht 1:1 umsetzen. Bei mir läuft ein Gentoo mit openrc, dort wird das Netzwerk über /etc/conf.d/net konfiguriert. Es ist dort möglich spezifische Skripte einzubauen, zum Beispiel postup - genau das, was ich bräuchte. Nur habe ich noch keine Ahnung, wie ich dort dann unterscheiden soll mit welchem Wlan ich nun verbunden bin. Kann man den Wert für id_str elegant in einer Shell auslesen? Das würde schon alle Probleme lösen.

mfg benediktibk

Edit: Oder kann man über wpa_supplicant den Namen für das Interface für einen speziellen AP ändern? So was in der Art von wlan0 -> wlan0.lrz? Auf die Bezeichnung hätte ich über eine Variable Zugriff.
 
Zuletzt bearbeitet:
Vermute ich eher nicht:
Code:
Selected interface 'wlan0'
bssid=00:22:6b:7a:3a:61
ssid=Unknown
id=2
id_str=burse
mode=station
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.1.41

Code:
eth0      Protokoll:Ethernet  Hardware Adresse 04:7d:7b:35:a8:d5  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Protokoll:Lokale Schleife  
          inet Adresse:127.0.0.1  Maske:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:26134 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26134 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:0 
          RX bytes:3224823 (3.0 MiB)  TX bytes:3224823 (3.0 MiB)

wlan0     Protokoll:Ethernet  Hardware Adresse 74:e5:0b:86:50:b0  
          inet Adresse:192.168.1.41  Bcast:192.168.1.255  Maske:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:16369 errors:0 dropped:1537 overruns:0 frame:0
          TX packets:7200 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000 
          RX bytes:8581802 (8.1 MiB)  TX bytes:1367999 (1.3 MiB)

Zudem habe ich mir in der postdown-Routine den Wert von ${IFACE} in eine Datei schreiben lassen, das war ebenfalls nur wlan0, obwohl id_str auf burse gesetzt wäre.

mfg benediktibk
 
This will not work with WPA Supplicant ...
Habe ich soweit auch getestet, postassociate wird nicht aufgerufen. postup schon, nur ist dort ${ESSID} nicht gesetzt, hilft also auch nicht weiter.

Die Lösung mit iwconfig gefällt mir aber, da werde ich meine kaum vorhandenen Bash-Script-Fähigkeiten drauf los lassen.

Danke für die Hilfe,
benediktibk

PS: Die fertige Lösung liefere ich in bälde nach
 
Wäh, bash Skripte ...
Code:
modules="wpa_supplicant"
wpa_supplicant_wlan0="-Dwext"

ifplugd_eth0="dhcp"
config_wlan0="dhcp"

postup()
{
	if [ ${IFACE} == "wlan0" ]; then
		if iwconfig wlan0 | grep -q lrz; then
			/etc/init.d/openconnect start
		fi
	fi

	return 0
}

postdown()
{
	if [ ${IFACE} == "wlan0" ]; then
		/etc/init.d/openconnect stop
	fi

	return 0
}

mfg benediktibk
 
Geht auch kürzer:
Code:
postup() {
  [ "${IFACE}" == "wlan0" ] && iwconfig wlan0 | grep -q lrz && /etc/init.d/openconnect start || return 1
}
Anführungszeichen um ${IFACE} mal auf Verdacht, vermutlich wird der String nie whitespaces enthalten.
/edit: Returned natürlich nicht 0, wenn irgendwas fehlschlägt. Keine Ahnung, was man an der Stelle haben will.
/edit2: An der Stelle hast du vermutlich auch Gentoos Message-Functions für hübschen und informativen Output.
 
Zuletzt bearbeitet:
Zurück
Oben