MY211
Anmeldungsdatum: 31. Oktober 2009
Beiträge: Zähle...
|
Hallo, in meinem Haushalt habe ich 2 verschiendene WLAN in Betrieb. 1. WLAN (Beispielname: Fritz) Von der Fritzbox, die im Keller steht. Vorteil: Immer verfügbar Nachteil: Relativ schwaches Signal im Erd- und Obergeschoss 2. WLAN (Beispielname: Devolo) WLAN von dem einem sog. dLAN Wireless extender Vorteil: Starkes Signal im Erd- und Obergeschoss Nachteil: Nur verfügbar, wenn dLAN Wireless extender in die Steckdose gesteckt wird Beide Netze funktionieren einwandfrei, alle PCs/Notebooks verbinden sich automatisch. Allerdings ist es so, dass sich alle Rechner immer erst automatisch mit dem Netz "Fritz" verbinden, auch wenn das WLAN "Devolo" verfügbar ist. Gibt es eine Möglichkeit, dass System so zu konfigurieren, dass sobald das "Devolo" verfügbar ist, sich alle Rechner beim Neustart mit diesem verbinden? Oder noch besser: Kann man das System so einstellen, dass sich alle Rechner automatisch mit dem WLAN verbinden, das das stärkste Signal hat? Vielen Dank und viele Grüße mischa
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21734
Wohnort: Lorchhausen im schönen Rheingau
|
Normalerweise sollte das passieren, wenn das gleiche Netz ausgestrahlt wird. (Stichwort ROAMING). Dazu müssen aber SSID, zugang (Verschlüsselung) und kanal gleich sein. Ich hab vergessen was noch, aber ein Suchwort ist hierbei "Repeater"
|
MY211
(Themenstarter)
Anmeldungsdatum: 31. Oktober 2009
Beiträge: 86
|
Hallo, danke für die Antwort. Vermutlich habe ich mich unklar ausgedrückt, sorry. Aber es handelt sich um 2 völlig getrennte WLAN. Die haben keine gemeinsame SSID und sollen auch weiterhin getrennt bleiben. Somit kann der eine auch nicht als Repeater des anderen genutzt werden. VG mischa
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21734
Wohnort: Lorchhausen im schönen Rheingau
|
Verstehe. Dann ist dein Anliegen schwer bis unmöglich umzusetzen, denn Roaming wird nicht funktionieren und die Priorisierung von Netzwerken funktioniert nur VOR dem Verbindungsaufbau. Du könntest natürlich ein Skript schreiben, das bei Verbindung zu Netz A automatisch nach Netz B sucht. Ob man allerdings skriptbasiert ein Neuverbinden anstoßen kann, weiß ich nicht.
|
elektronenblitz63
Anmeldungsdatum: 16. Januar 2007
Beiträge: 29307
Wohnort: NRW
|
Hallo, so etwas kann man über ein Skript regeln. Der Network-Manager wird dabei aber abgeschaltet. Was für eine Verschlüsselung genau wird verwendet?
|
MY211
(Themenstarter)
Anmeldungsdatum: 31. Oktober 2009
Beiträge: 86
|
Hallo, das hört sich ja vielversprechend an. ☺ Die Verschlüsselung der beiden Netze ist WPA2 bzw. "WPA & WPA2 Personal" im Network Manager. Wie könnte denn so ein Script aussehen? Vielen Dank und viele Grüße mischa
|
elektronenblitz63
Anmeldungsdatum: 16. Januar 2007
Beiträge: 29307
Wohnort: NRW
|
Teste folgendes Skript auf einem der Rechner. Das Skript sucht nach den beiden bekannten Accesspoints und verbindet sich vorzugsweise mit "B". Sollte dieser nicht in Reichweite oder abgeschaltet sein wird mit "A" verbunden. Alle sechzig Sekunden wird geprüft ob "B" erreichbar ist bzw. die Verbindung noch besteht. Wenn nicht, wird nach zehn Sekunden versucht erneut eine Verbindung mit "A" oder "B" aufzubauen. Edit: überarbeitetes und fehlerbereinigtes Skript weiter unten. Variablen im Deklarationsblock für die WLAN-Schnittstelle und die beiden AP's anpassen (SSID, MAC-Adresse, Verschlüsselung). Starten:
Bei Verbindungsproblemen optional im Debug-Modus. Der Supplicant gibt dann in einem zweiten Terminalfenster Meldungen aus.
sudo ./wlan_ap_switch.sh -D
Der Network-Manager wird automatisch deaktiviert und kann nach Beenden des Skripts wieder gestartet werden.
sudo service network-manager start
Edit: markierte Bereiche enthielten Fehler und wurden korrigiert.
|
MY211
(Themenstarter)
Anmeldungsdatum: 31. Oktober 2009
Beiträge: 86
|
Hallo, vielen Dank für das Skript. ☺ Habe es - wie von Dir beschrieben - angepasst. Die Verbindung mit WLAN B - also dem stärkeren Netz, dem Devolo Wireless Extender - klappt einwandfrei. Bei WLAN A - der Fritzbox - hakt es noch. Die Debug-Ausgabe des Supplicants dazu: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | RTM_NEWLINK: operstate=0 ifi_flags=0x1003 ([UP])
RTM_NEWLINK, IFLA_IFNAME: Interface 'wlan0' added
Wireless event: cmd=0x8b06 len=8
RTM_NEWLINK: operstate=0 ifi_flags=0x1003 ([UP])
RTM_NEWLINK, IFLA_IFNAME: Interface 'wlan0' added
Wireless event: cmd=0x8b1a len=8
State: DISCONNECTED -> SCANNING
Starting AP scan for wildcard SSID
Scan requested (ret=0) - scan timeout 5 seconds
EAPOL: disable timer tick
EAPOL: Supplicant port status: Unauthorized
RTM_NEWLINK: operstate=0 ifi_flags=0x1003 ([UP])
RTM_NEWLINK, IFLA_IFNAME: Interface 'wlan0' added
Wireless event: cmd=0x8b19 len=8
Received 4064 bytes of scan results (10 BSSes)
BSS: Start scan result update 1
BSS: Add new id 0 BSSID XX:XX:XX:XX:XX:XX SSID '[NAME_DES_SCHWAECHEREN_WLANS]'
New scan results available
Selecting BSS from priority group 0
Try to find WPA-enabled AP
0: 00:24:fe:42:d9:cf ssid='[NAME_DES_SCHWAECHEREN_WLANS]' wpa_ie_len=22 rsn_ie_len=20 caps=0x11
skip RSN IE - GTK cipher mismatch
No suitable network found
Setting scan request: 5 sec 0 usec
|
Habe aufgrund der Fehlermeldung "GTK cipher mismatch" nochmal das Passwort überprüft. Das ist richtig. Woran kann das liegen, dass sich das Skript weigert, sich mit dem WLAN der Fritzbox zu verbinden? Vielen Dank und viele Grüße mischa
|
elektronenblitz63
Anmeldungsdatum: 16. Januar 2007
Beiträge: 29307
Wohnort: NRW
|
"GTK cipher mismatch"
Die Einstellungen zur Verschlüsselung stimmen nicht. Vermutlich verwendet die FB eine gemischte Verschlüsselung (WPA1/2) und nicht rein WPA2. Scanne mal
sudo iwlist scan
|
MY211
(Themenstarter)
Anmeldungsdatum: 31. Oktober 2009
Beiträge: 86
|
Jau, danke. Fehler gefunden. Eintrag angepasst, jetzt klappt's. Super Sache, vielen, vielen Dank! ☺ mischa
|
elektronenblitz63
Anmeldungsdatum: 16. Januar 2007
Beiträge: 29307
Wohnort: NRW
|
Das Ding ist ja noch nicht richtig ausgereift.
so direkt kein Autostart Network-Manager wieder aktivieren Ausgaben für das Log nur vorbereitet Skript kontrollieren. Ich habe ein paar fehlerhafte Zeilen (gelb markiert) verbessert.
Werden die Rechner nur vor Ort verwendet oder auch unterwegs?
|
MY211
(Themenstarter)
Anmeldungsdatum: 31. Oktober 2009
Beiträge: 86
|
Hallo Rainer, die Rechner werden - wenn auch selten - auch unterwegs (z.B. Hotel) genutzt. Viele Grüße mischa
|
elektronenblitz63
Anmeldungsdatum: 16. Januar 2007
Beiträge: 29307
Wohnort: NRW
|
Ok, dann wäre es sinnvoll das über einen Klickbutton bei Bedarf zu steuern. Das Skript habe ich entsprechend überarbeitet. Es werden jetzt zusätzliche Pop-Up's mit Systemmeldungen ausgegeben. Dazu wird ein zusätzliches Paket benötigt.
sudo apt-get install libnotify-bin
Siehe auch Benachrichtigungsdienst - Shell/Bash-Skripting-Guide für Anfänger Bei Bedarf kann man auch noch ein Info-Icon für verschiedene Netzwerkschnittstellen zum Gnome Panel hinzufügen.
sudo apt-get install gnome-netstatus-applet Überarbeitetes Skript: Anlegen und ausführbar machen.
touch wlan_ap_switch.sh
chmod +x wlan_ap_switch.sh Inhalt einfügen:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258 | #!/bin/bash
## WLAN Verbindungsskript
## automatische Erkennung und Umschaltung zwischen zwei WLAN Access-Points
## elektronenblitz63 ubuntuusers.de 2011
## published under GPL v3
##
## Skript
##
## freie Variablen
#
## Schnittsetllenkonfiguration
wlaniface="wlan0"
## DHCP-Client
dhcpclient="dhclient"
## Konfiguration der Accesspoints
#
## Accesspoint A (schwaches Signal)
ssid_a="Fritz_Box"
mac_a="xx:xx:xx:xx:xx:xx"
proto_a="RSN"
key_mgmt_a="WPA-PSK"
pairwise_a="CCMP"
group_a="CCMP"
psk_a="das_Kennwort_in_Klartext"
## Accesspoint B (starkes Signal)
ssid_b="Devolo"
mac_b="xx:xx:xx:xx:xx:xx"
proto_b="RSN"
key_mgmt_b="WPA-PSK"
pairwise_b="CCMP"
group_b="CCMP"
psk_b="das_Kennwort_in_Klartext"
## Pause Programmschleife in Sekunden
sleeptimer=60
## Pause bevor eine IP-Adresse angefordert wird
connectsleep=15
## ping-Check aktiv (1) (default) / abgeschaltet (0)
## zusätzliche Überwachung der Verbindung über ping
pingcheck=1
## Terminalprogramm
# kde > konsole
# xfce > mousepad
term=gnome-terminal
## libnotify Ausgaben
TITLE="WLAN Autoswitch"
KILLSERVICES="beende Systemdienste ..."
SCAN="Suche WLAN Accesspoints ..."
CONNECT_A="Accesspoint A gefunden"
CONNECT_B="Accesspoint B gefunden"
ERROR="Verbindung wurde getrennt ..."
TRYTOCONNECT="baue Verbindung auf ..."
CONNECT="Verbindung hergestellt"
LOGO=/usr/share/icons/gnome/scalable/devices/network-wireless.svg
## Ende freie Variablen
datum="`date`"
home="`pwd`"
logpath="/var/log/wlan_ap_switch_log"
notifycount=0
## Konfiguration wpa_supplicant
#
configfile=$home/wpa_supplicant.tmp
ctrliface="ctrl_interface=/var/run/wpa_supplicant"
eapolv="eapol_version=1"
apscan="ap_scan=1"
wpadriver=wext
success=0
## Textausgaben
foundap_0="Kein bekannter Accesppoint in Reichweite"
foundap_1="Accesppoint A (Fritz-Box) gefunden, verbinde mit "$ssid_a
foundap_2="Accesppoint B (Devolo) gefunden, verbinde mit "$ssid_b
foundap_3="Accesppoint A+B gefunden, verbinde mit "$ssid_b
## Network-Manager stoppen
## aufräumen
echo "Beende Systemdienste ..."
notify-send -i $LOGO "$TITLE" "$KILLSERVICES"
killall wlan_ap_switch_control.sh
service network-manager stop
sleep 1
killall wpa_supplicant
killall $dhcpclient
sleep 2
/sbin/ifconfig $wlaniface down
sleep 1
/sbin/ifconfig $wlaniface up
sleep 1
echo starte ...
sleep 6
## Loop
while true
do
availablenet=0
## Scan
echo "suche Accesspoints ..."
if [ "$notifycount" = 0 ]; then
notify-send -i $LOGO "$TITLE" "$SCAN"
fi
scanresult="`iwlist wlan0 scan | grep -o $mac_a`"
if [ "$scanresult" = $mac_a ]; then
availablenet=$[$availablenet+1]
sleep 2
fi
scanresult="`iwlist wlan0 scan | grep -o $mac_b`"
if [ "$scanresult" = $mac_b ]; then
availablenet=$[$availablenet+2]
sleep 2
fi
if [ $availablenet = 0 ]; then
echo $foundap_0
elif [ $availablenet = 1 ]; then
echo $foundap_1
elif [ $availablenet = 2 ]; then
echo $foundap_2
elif [ $availablenet = 3 ]; then
echo $foundap_3
fi
## WLAN-Verbindung vorbereiten
if [ "$success" = 1 ]; then
sleep 1
elif [ $availablenet = 1 ]; then
echo $ctrliface | tee $configfile
echo $eapolv | tee -a $configfile
echo $apscan | tee -a $configfile
echo 'network={' | tee -a $configfile
echo ssid='"'$ssid_a'"' | tee -a $configfile
echo bssid=$mac_a | tee -a $configfile
echo proto=$proto_a | tee -a $configfile
echo key_mgmt=$key_mgmt_a | tee -a $configfile
echo pairwise=$pairwise_a | tee -a $configfile
echo group=$group_a | tee -a $configfile
echo psk='"'$psk_a'"' | tee -a $configfile
echo '}' | tee -a $configfile
connect=1
notify-send -i $LOGO "$TITLE" "$CONNECT_A"
elif [ "$availablenet" -ge 2 ]; then
echo $ctrliface | tee $configfile
echo $eapolv | tee -a $configfile
echo $apscan | tee -a $configfile
echo 'network={' | tee -a $configfile
echo ssid='"'$ssid_b'"' | tee -a $configfile
echo bssid=$mac_b | tee -a $configfile
echo proto=$proto_b | tee -a $configfile
echo key_mgmt=$key_mgmt_b | tee -a $configfile
echo pairwise=$pairwise_b | tee -a $configfile
echo group=$group_b | tee -a $configfile
echo psk='"'$psk_b'"' | tee -a $configfile
echo '}' | tee -a $configfile
connect=2
notify-send -i $LOGO "$TITLE" "$CONNECT_B"
fi
sleep 4
## wpa_supplicant starten
if [ "$success" = 1 ]; then
echo "Verbindung wurde hergestellt."
## Debug-Modus
else if [ "$1" = "-D" ]; then
/usr/bin/$term -e "/sbin/wpa_supplicant -i $wlaniface -D $wpadriver -c $configfile -d" &> /dev/null &
sleep $connectsleep
/sbin/dhclient $wlaniface
## Daemon-Modus
else if [ "$availablenet" -ge 1 ]; then
echo "Starte wpa_supplicant-Daemon"
echo "warte ..."
if [ "$notifycount" = 0 ]; then
notify-send -i $LOGO "$TITLE" "$TRYTOCONNECT"
fi
/sbin/wpa_supplicant -i $wlaniface -D $wpadriver -c $configfile -B
sleep $connectsleep
echo "Fordere IP-Adresse an ..."
/sbin/dhclient $wlaniface
fi
fi
fi
## Verbindungstest
if [ "$pingcheck" = 1 ] && [ "$availablenet" -ge 1 ]; then
echo "Starte Verbindungstest ..."
apaddress="`cat /etc/resolv.conf | grep -w nameserver | awk {'print $2'}`"
pingout="`ping -c1 $apaddress | grep -w '0% packet loss,' | awk {'print $6,$7,$8'} | tr -d ','`"
echo "Pingtest an "$apaddress "Ergebnis: "$pingout
if [ "$pingout" = "0% packet loss" ]; then
success=1
echo "Verbindungstest erfolgreich"
if [ "$notifycount" = 0 ]; then
notify-send -i $LOGO "$TITLE" "$CONNECT"
notifycount=1
fi
else
success=0
fi
fi
if [ "$connect" = 1 ] && [ "$availablenet" -ge 2 ] ; then
success=0
fi
if [ "$success" = 0 ]; then
notify-send -i $LOGO "$TITLE" "$ERROR"
killall wpa_supplicant
sleep 2
/sbin/ifconfig $wlaniface down
sleep 1
/sbin/ifconfig $wlaniface up
sleep 1
echo "Verbindungstest gescheitert. Versuche erneut eine Verbindung herzustellen"
trytoconnect=0
cuttimer=1
notifycount=0
fi
if [ "$cuttimer" = 1 ]; then
sleep 10
cuttimer=0
else
sleep $sleeptimer
fi
done
exit 0
|
Steuerskript anlegen:
touch wlan_ap_switch_control.sh
chmod +x wlan_ap_switch_control.sh Inhalt:
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
38
39
40
41
42 | #!/bin/bash
## WLAN Verbindungsskript / Steuerung
## automatische Erkennung und Umschaltung zwischen zwei WLAN Access-Points
## elektronenblitz63 ubuntuusers.de 2011
## published under GPL v3
##
## Skript
##
## freie Variablen
script="wlan_ap_switch.sh"
path="/usr/sbin/"
subpath="`pwd`"
wlaniface="wlan0"
dhcpclient="dhclient"
## Skript
## prüfen / starten / beenden
scriptrun="`cat $subpath/wlan_ap_switch_info`"
if [ "$scriptrun" = 1 ]; then
echo 0 | tee $subpath/wlan_ap_switch_info
scriptrun=1
killall $script
killall wpa_supplicant
killall $dhcpclient
sleep 2
/sbin/ifconfig $wlaniface down
sleep 1
/sbin/ifconfig $wlaniface up
sleep 1
service network-manager start
killall wlan_ap_switch_control.sh
else
echo 1 | tee $subpath/wlan_ap_switch_info
$path$script
fi
exit 0
|
beide Skripte nach /usr/sbin kopieren
sudo cp wlan_ap_switch_control.sh /usr/sbin
sudo cp wlan_ap_switch.sh /usr/sbin
Dafür jetzt einen Anwendungsstarter im Panel anlegen (siehe Screenshot). Ein passendes Logo dafür in /usr/share/icons suchen und auswählen. Das Skript kann jetzt über den Starter im Panel ein- und ausgeschaltet werden. Der Network-Manager wird automatisch gesteuert.
- Bilder
|
MY211
(Themenstarter)
Anmeldungsdatum: 31. Oktober 2009
Beiträge: 86
|
Hallo Rainer, das klappt hervorragend, vielen Dank. ☺ Habe das Skript sowohl im Panel als auch unter "Startprogramme" angelegt und den Network-Manager dort entfernt, so dass das Skript schon beim Starten des Rechners ausgeführt wird. Sollte ich mal im Hotel sein, muss ich nur daran denken, das einmalig rückgängig zu machen. ☺ Gibt es die Möglichkeit, das Skript so anzupassen, dass nicht jedes Mal beim Ausführen das root-Passwort verlangt wird? Vielen Dank und viele Grüße mischa P.S. Ich glaube, das Ausführbarmachen des Control-Skripts erfolgt mit +x ?!
|
elektronenblitz63
Anmeldungsdatum: 16. Januar 2007
Beiträge: 29307
Wohnort: NRW
|
MY211 schrieb: Hallo Rainer, das klappt hervorragend, vielen Dank. ☺
Bitteschön.
Gibt es die Möglichkeit, das Skript so anzupassen, dass nicht jedes Mal beim Ausführen das root-Passwort verlangt wird?
Ja, nicht im Skript sondern über sudo/Konfiguration. Hinweise dazu auch hier (ähnliche Steuerung). Dann kann man das Skript über sudo ohne Kennwortabfrage starten, nicht gksu.
P.S. Ich glaube, das Ausführbarmachen des Control-Skripts erfolgt mit +x ?!
Ja, ein Tippo meinerseits. Ist korrigiert.
|