wlan mit systemd-networkd und wpa_supplicant

Started by hendrikL, 2015/06/04, 10:56:58

Previous topic - Next topic

hendrikL

Moin,
da bluelupo angefangen hat hier seine Netzwerk Umstellung auf systemd-networkd zu erklären, habe ich mich dazu auch entschlossen.

EDIT: dies ist eher für die, die:
1. keine Gui nutzen wollen
2. Neugierig sind
3. oder so wie ich, etwas spinnert sind ;)
Für alle anderen:
4. Nutzt lieber nm oder conman
6. Ich habe Euch gewarnt

Als erstes möchte ich anfügen, dass alles was ich hier schreibe geklaut ist und zwar von folgenden Quellen:

https://www.joachim-breitner.de/blog/664-Switching_to_systemd-networkd
http://beaveris.me/systemd-networkd-with-roaming/
https://www.debinux.de/2014/12/debian-basics-mit-systemd/
https://wiki.archlinux.org/index.php/Wireless_network_configuration#Part_II:_Wireless_management
https://blog.volcanis.me/2014/06/01/systemd-networkd/

Ich gehe hier nur auf die wichtigsten Schritte ein funktionierendes wlan einzurichten ein, alles weitere ist in bluelupos Beitrag zu finden:
http://forum.siduction.org/index.php?topic=5570.0

Alle Vorarbeiten wie das stoppen vom networking.service umbenennen der /e/n/i findet Ihr in jenem Beitrag,
auch das starten von networkd ist dort beschrieben.

Auch gehe ich davon aus, dass wpa_supplicant eingerichtet ist und funktioniert!
Auch nehme ich an, dass die Bezeichnung des wlan-interfaces wlan0 lautet, es kann aber auch jeden anderen Namen haben.
Ich werde dies mit <INTERFACE> bezeichnen wo es nötig ist.

Und ab geht es.

Altes entsorgen:



# systemctl stop networking.service
# mv  /etc/network/interfaces /etc/network/interfaces.ORIG
# systemctl disable networking.service



Neues anlegen:

Im Verzeichnis /etc/systemd/system wird eine Datei namens network-wireless@.service erstellt.

# cat /etc/systemd/system/network-wireless@.service



[Unit]
Description=Wireless network connectivity (%i)
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
Type=oneshot
RemainAfterExit=yes

ExecStart=/sbin/ip link set dev %i up
ExecStart=/sbin/wpa_supplicant -B -i %i -c /etc/wpa_supplicant/wpa_supplicant-%i.conf
ExecStart=/sbin/dhclient %i

ExecStop=/sbin/ip link set dev %i down

[Install]
WantedBy=multi-user.target



Nun wird noch eine einfache config Datei in
/etc/systemd/network angelegt und zwar:
wlan.network, ich habe noch die Priorität  gesetzt mit 10-wlan.network und 20-eth.network.
Also wir legen eine wlan.network mit folgendem Inhalt an. für statische ip-.adressen, schaut kurz in die howto's



[Match]
# Name=<INTERFACE>
Name=wlan0

[Network]
DHCP=yes



Hier einige Alternativen für die Section [Network]

## für DHCP
DHCP=ipv4
DHCP=ipv6
DHCP=both

## für statisches ein Beispiel
DNS=192.168.1.254
Address=192.168.1.87/24
Gateway=192.168.1.254



So nun bennen wir noch die /etc/wpa_wpa_supplicant/wpa_supplicant.conf um



# mv wpa_supplicant.conf  wpa_supplicant-<INTERFACE>.conf



wobei bei mir <INTERFACE>==wlan0 ist.

Nun noch abschließend:


# rm /etc/resolv.conf
# ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
## wpa_suplicant.service wird in diesem Falle nicht gebraucht,
## da wpa_supplicant durch
## network-wireless@<INTERFACE>.service gestartet wird
# systemctl mask wpa_supplicant.service
# systemctl enable systemd-resolved
# systemctl enable systemd-networkd
# systemctl enable network-wireless@<INTERFACE>.service
# systemctl start systemd-networkd
# systemctl start systemd-resolved
# systemctl start network-wireless@<INTERFACE>.service


Sollte wieder erwarten das wlan mal nicht laufen so könnte ein



systemctl start network-wireless@<INTERFACE>.service


helfen.

So nun sollte alles laufen, vielleicht ist ein Neustart (systemctl reboot) nötig.

Gruß hendrikL

Ps:: Ach ja, der Nachteil, also wie soll ich es sagen, es gibt keine GUI dafür, jetzt ist es raus, puh ;)
Neue Addressen müssen manuell eingetragen werden.
Oder auf jenem Wege:

wpa_passphrase <ESSID> <passphrase> >> wpa_supplicant-<INTERFACE>.conf

EDIT: stimmt hatte wpa_gui ganz vergessen, thx reinob

PPs.: Wenn dieser und bluelupos Betrag ins Englische von Jemanden der dieser Sprache gut mächtig ist Übersetzt würde, wäre ich und viele Andere sehr dankbar dafür, Danke!

Geier0815

Sei doch so nett und halte uns auf dem Laufenden ob das Ganze bei dir stabil läuft. Nachdem ich einstmals versucht hatte systemd und wpa_supplicant unter einen Hut zu bekommen mußte ich damals feststellen das es nicht stabil lief und bin dann zu network-manager abgewandert. Wäre ja schön wenn es jetzt funktionieren würde.
Wenn Windows die Lösung ist...
kann ich dann bitte das Problem zurück haben?

reinob

Hallo,

Ich nutze networkd und wpa_supplicant seit mehreren Monaten ohne Probleme. Als "GUI" kann man, wenn nötig, wpa_gui (package "wpagui") nutzen.

Dort kann man z.B. neue Netze definieren. (Option "update_config=1" in wpa_supplicant.conf nicht vergesen!).


Edit: @Geier0815: Du hattest wpa_supplicant aber nicht systemd-networkd. Vielleicht war das dein Problem?


(and sorry if my German is bad!)


bluelupo

Mal eine Verständnisfrage zum Thema. Kann der networkd das nicht ohne wpa_supplicant regeln?

reinob

Quote from: bluelupo on 2015/06/04, 15:51:56
Mal eine Verständnisfrage zum Thema. Kann der networkd das nicht ohne wpa_supplicant regeln?


Nein (noch nicht). Networkd ist nicht dafür gedacht (mehr für containers und so).


Es wäre eigentlich eine gute Idee..
(Ob Herr Poettering & co. *auch* *das* übernehmen wollen.. :)

melmarker

Those who would give up essential Liberty, to purchase a little temporary Safety, deserve neither Liberty nor Safety. (Benjamin Franklin, November 11, 1755)
Never attribute to malice that which can be adequately explained by stupidity. (Hanlons razor)

hendrikL

#6
Hallo Geier 0815, ich hätte dieses hier nicht gepostet, wenn es buggy wäre.
Ich nutze diese Methode schon einige Monate und bin zufrieden.

@reinob, thx for the hints

@ bluelupo in der wpa_supplicant-xyz.conf werden die Daten/Konfigurationen des wlan-zugangs hinterlegt, das ist alles, es reicht ja eine home/office-config dort unterzubringen.
Wie das jetzt ginge, dass bei jeder Neuanmeldung das Passwort eingeben werden muß, weiß ich nicht.
wpa_gui? Ansonsten wie agaida anmerkte nimm conman.

der_bud

Bisher habe ich mein 99% nur zu Hause genutztes Notebook ohne wpa_supplicant genutzt, eine /e/n/interfaces mit fixer IP drin und gut. Hatte eigentlich gehofft die paar Zeilen 'einfach' in eine wlan.network übertragen zu können, aber dann muß ich mich doch mal mit wpa_supplicant beschäftigen. Dank eurer Posts hier scheint das ja doch kein Hexenwerk zu sein... :)
Du lachst? Wieso lachst du? Das ist doch oft so, Leute lachen erst und dann sind sie tot.

hendrikL

Könnte zB. so aussehen


# cat /etc/wpa_supplicant/wpa_supplicant-wlan0.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="<SSID>"
        scan_ssid=1
        psk="<pssst Geheim>"
        proto=RSN
        key_mgmt=WPA-PSK
        pairwise=TKIP
        group=TKIP WEP104 WEP40
        auth_alg=OPEN
        priority=15
        id_str="home"
}

network={
        ssid="<noch eine ssid>"
        psk="<G123#eh456Heim>"
        proto=RSN
        key_mgmt=WPA-PSK
        pairwise=CCMP
        auth_alg=OPEN
}

network={
        ssid="HotelNET"
        key_mgmt=NONE
        auth_alg=OPEN
}