Zwei Wireless Karten mit WPA

hessijens

Well-Known Member
ich hätte da mal so ein Problem, vielleich kann mir jemand helfen. Für mein Notebook (FreeBSD RELENG 6) habe ich zwei Wirelesskarten (beide Atheros). Mit der ersten möchte ich mich mit dem Internetrouter verbinden. Die zweite soll mit dem VDR eine Verbindung aufbauen. Beide Verbindungen funktionieren auch mittels WPA-EAP TKIP, gegen den Freeradiusserver mit dem Befehl:

wpa_supplicant -i ath0 -c /etc/wpa1.conf -N -i ath1 -c /etc/wpa2.conf

Wenn ich aber in rc.conf folgendes eintrage:

ifconfig_ath0="DHCP WPA"
ifconfig_ath1="DHCP WPA"

hat nur die erste Karte eine Verbindung. Das WPA Startscript /etc/rc.d/wpa_supplicant sieht nämlich nur eine Karte vor. Da die Anmeldung aber mittels Kerberos am Internetrouter erfolgt muss das Interface beim Start gestartet werden.

Für Vorschläge was, wie, wo zu ändern ist bin ich sehr dankbar. Ich kann leider nicht nachvollziehen wann und wo beim Booten WPA gestartet wird.

P.S.: Den oberen Befehl einfach als Startscript einzutragen geht nicht. Die zweite Karte ist im Cardbus und nicht immer eingesteckt.
 
Ich werde mir das Startskript mal ansehen und korrigieren. Du kannst das ja dann testen.

Ich habe eh schon länger kein PR mehr eröffnet.

Update:
So wie es aussieht ist das Skript darauf ausgelegt für jedes Interface eine eigene Instanz von wpa_supplicant zu starten. Worin liegt denn dein Problem?
 
Zuletzt bearbeitet:
Jede Instanz wird die gleiche .conf benutzen
/etc/rc.d/wpa_supplicant:
Code:
conf_file="/etc/wpa_supplicant.conf"
Er will für jedes Interface eine andere .conf.
 
Ich dachte man könnte in der wpa_supplicant.conf festlegen was für welches Interface gilt. Ist aber tatsächlich nichts in der Manpage zu finden.

wpa_supplicant.patch
Code:
--- wpa_supplicant.orig	Fri Aug 17 15:12:57 2007
+++ wpa_supplicant	Fri Aug 17 15:39:32 2007
@@ -31,6 +31,11 @@
 
 load_rc_config $name
 
+wpa_supplicant_conf="$(echo "$(echo "\$wpa_supplicant_conf_${ifn}")")"
+if [ -e "${wpa_supplicant_conf}" ]; then
+	conf_file="${wpa_supplicant_conf}"
+fi
+
 pid_file="/var/run/${name}/${ifn}.pid"
 command_args="-B -q -i $ifn -c $conf_file -D $driver -P $pid_file"
 required_files=$conf_file

Probier's mal mit dem Patch. Dann kannst du in der rc.conf mit
Code:
wpa_supplicant_conf_ath0=foo
wpa_supplicant_conf_ath1=bar
verschiedene Konfigurationen verwenden.
 
Danke für den Patch, der leider nicht funktioniert. Das Problem ist meiner Meinung nach nicht die Config. Die könnte auch in einer Datei stehen und mittels SSID=video bzw SSID=mylink über ifconfig erledigt werden. Sowohl

1: wpa_supplicant -i ath0 -c /etc/wpa.conf -N -i ath1 -c /etc/wpa2.conf

Trying to associate with 00:11:6b:39:08:fc (SSID='VIDEO' freq=2432 MHz)
Associated with 00:11:6b:39:08:fc
CTRL-EVENT-EAP-STARTED EAP authentication started
OpenSSL: pending error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error
OpenSSL: pending error: error:140C800D:SSL routines:SSL_use_certificate_file:ASN1 lib
CTRL-EVENT-EAP-METHOD EAP method 13 (TLS) selected
CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully
Trying to associate with 00:50:04:ed:3a:1c (SSID='MYLINK' freq=2447 MHz)
Associated with 00:50:04:ed:3a:1c
CTRL-EVENT-EAP-STARTED EAP authentication started
OpenSSL: pending error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error
OpenSSL: pending error: error:140C800D:SSL routines:SSL_use_certificate_file:ASN1 lib
CTRL-EVENT-EAP-METHOD EAP method 13 (TLS) selected
CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully
WPA: Key negotiation completed with 00:11:6b:39:08:fc [PTK=TKIP GTK=TKIP]
CTRL-EVENT-CONNECTED - Connection to 00:11:6b:39:08:fc completed (auth)
WPA: Key negotiation completed with 00:50:04:ed:3a:1c [PTK=TKIP GTK=TKIP]
CTRL-EVENT-CONNECTED - Connection to 00:50:04:ed:3a:1c completed (auth)

als auch:

2: wpa_supplicant -i ath0 -c /etc/wpa_supplicant.conf -N -i ath1 -c /etc/wpa_supplicant.conf

Trying to associate with 00:11:6b:39:08:fc (SSID='VIDEO' freq=2432 MHz)
Associated with 00:11:6b:39:08:fc
CTRL-EVENT-EAP-STARTED EAP authentication started
OpenSSL: pending error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error
OpenSSL: pending error: error:140C800D:SSL routines:SSL_use_certificate_file:ASN1 lib
CTRL-EVENT-EAP-METHOD EAP method 13 (TLS) selected
CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully
Trying to associate with 00:11:6b:39:08:fc (SSID='VIDEO' freq=2432 MHz)
Associated with 00:11:6b:39:08:fc
CTRL-EVENT-EAP-STARTED EAP authentication started
OpenSSL: pending error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error
OpenSSL: pending error: error:140C800D:SSL routines:SSL_use_certificate_file:ASN1 lib
CTRL-EVENT-EAP-METHOD EAP method 13 (TLS) selected
CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully
WPA: Key negotiation completed with 00:11:6b:39:08:fc [PTK=TKIP GTK=TKIP]
CTRL-EVENT-CONNECTED - Connection to 00:11:6b:39:08:fc completed (auth)
WPA: Key negotiation completed with 00:11:6b:39:08:fc [PTK=TKIP GTK=TKIP]
CTRL-EVENT-CONNECTED - Connection to 00:11:6b:39:08:fc completed (auth)

funktionieren. Allerding verbindet die zweite Variante immer mit dem ersten Accesspoint. Hier muss man vielleicht was mit ifconfig ssid ändern. (ssid VIDEO und ssid MYLINK reichen jedenfalls nicht! Daher habe ich zwei "conf" Files!

wpa_supplicant -i ath0 -c /etc/wpa1.conf & wpa_supplicant -i ath1 -c /etc/wpa2.conf

nacheinander geht übrigens auch. Das bringt mich auf die Vermutung, dass es an der Cardbuskarte liegt, die beim Hochfahren noch nicht ansprechbar ist?

Ich werde mit Deinem Patch ein wenig probieren. Bei Erfolg melde ich mich wieder.

Vielen Dank erstmal
 
Zuletzt bearbeitet:
Was passiert denn, wenn du die Cardbus Karte einsteckst? Ist das Kernel Modul dann bereits geladen?
 
In die rc.conf kannst du mit ifconfig_ath* zusätzlich die bssid xx:xx:xx:xx:xx:xx deiner Accesspoints sowie unterschiedliche channels oder Frequenzen je Accesspoint und NIC eingeben.

z.B.:

ifconfig_ath0="DHCP ssid zzzzzzzz bssid xx:xx:xx:xx:xx:xx channel 3 WPA"
ifconfig_ath1="DHCP ssid 77777777 bssid yy:yy:yy:yy:yy:yy channel 7 WPA"
 
Die Kernelmodule sind bereits gestartet, bzw. diese sind fest in den Kernel einkompiliert. Auch werden ath0 sowie ath1 device vom kernel beim Start erkannt (auch wenn ich die Cardbuskarte später einstecke). Auch beim Netzwerksetup versuchen beide per DHCP eine Adresse zu bekommen. Stutzig macht mich allerdings die Meldung:

wpa_supplicant already running (pid xxx)

beim Setup von ath1, der zweiten Karte. Irgendwie startet keine zweite Instanz von wpa_supplicant. Ich habe nur einen PID in /var/run/wpa-supplicant. Wenn ich jedoch später wpa-supplicant wie oben beschrieben von Hand starte laufts aber.

Ich habe versucht Debug beim start einzuschalten. In welche Datei gehen die Meldungen, würde das gerne mal posten, vielleicht hilft's. /var/log/messages ist jedenfalls "wpa" frei.

Übrigens, die Idee mit channel X hatte ich natürlich auch schon, macht aber keinen Unterschied, sobald wpa aktiv wird sucht er alle durch und nimmt "VIDEO", die erste SSID.

UPDATE:
Habe gerde mal versucht was passiert wenn ich die Karte einfach herausnehme und wieder einstecke. Dann habe ich plotzlich die Verbindung auf ath1, einen PID /var/run/wpa_supplicant/ath1, allerding ist die Erste ath0 ist dann völlig weg, kein PID, kein WPA und kein Connect. Es scheint, das tatsächlich nur eine Instanz gestartet wird.
 
Zuletzt bearbeitet:
OK, jetzt verstehe ich das. In meinen Patch hat sich leider ein Fehler eingeschlichen...

Code:
--- wpa_supplicant.orig	Fri Aug 17 15:12:57 2007
+++ wpa_supplicant	Fri Aug 17 15:39:32 2007
@@ -31,6 +31,11 @@
 
 load_rc_config $name
 
+wpa_supplicant_conf="$(eval echo "$(echo "\$wpa_supplicant_conf_${ifn}")")"
+if [ -e "${wpa_supplicant_conf}" ]; then
+	conf_file="${wpa_supplicant_conf}"
+fi
+
 pid_file="/var/run/${name}/${ifn}.pid"
 command_args="-B -q -i $ifn -c $conf_file -D $driver -P $pid_file"
 required_files=$conf_file

Wenn das immer noch nicht funktioniert, dann änder mal die Letzte Zeile folgendermaßen:
Code:
run_rc_command "fast$1"
 
Gbt es eigentlich auch eine Möglichkeit dem System direkt den Channel mit anzugeben, wenn man die wpa_supplicant nutzt?

Der sucht sich bei mir im Moment beim Booten noch einen Wolf.

Idiotische Frage, steht doch oben ifconfig und den channel in die rc.conf rein. :o
 
Zuletzt bearbeitet:
Zitat von hessijens:
Übrigens, die Idee mit channel X hatte ich natürlich auch schon, macht aber keinen Unterschied, sobald wpa aktiv wird sucht er alle durch und nimmt "VIDEO", die erste SSID.

Über den MAC-Address-Filter deiner APs kannst du Fehlverbindungen zwischen den WLAN-Netzwerkgeräten und den APs verhindern. z. B. bei der FritzBox die Einstellung: "neue WLAN-Netzwerkgeräte zulassen" oder "keine neuen WLAN-Netzwerkgeräte zulassen". Ähnliche Einstellungen ermöglichen auch die APs anderer Hersteller.
In der rc.conf solltest du über ifconfig die bssid (die MAC-Adresse des AP mit dem sich das entsprechende WLAN-Netzwerkgerät verbinden soll bzw. darf) eintragen.
Wenn deine APs und WLAN-Netzwerkgeräte sowohl den 802.11b-Modus als auch den 802.11g-Modus unterstützen, stelle ein Funknetzwerk (im AP, und in der NIC über ifconfig in der rc.conf) auf den "nur"-b-Modus ein und das andere Funknetzwerk auf den "nur"-g-Modus ein.

Zusätzliche Sicherheit und Klarheit darüber wer (AP und NIC) sich mit wem verbinden darf bzw. soll, ergibt der Eintrag der MAC-Adresse des entsprechenden AP in den Netzwerkblock des entsprechenden Funknetzwerkes (bei dir VIDEO und MYLINK) deiner wpa_supplicant.conf (bei dir wpa1.conf und wpa2.conf) als bssid. Selbstverständlich sind die passphrasen, für die zwei Funknetzwerke VIDEO und MYLINK, in den Netzwerkblöcken der wpa_supplicant.conf, nicht identisch.
 
Zuletzt bearbeitet:
Zurück
Oben