blacksun
Goto Top

Netzwerk-Bonding am RaspberryPI mit 2 WLAN-Adaptern im Bond-Modus 0

Hallo,


ich bräuchte mal eure Hilfe.

Ich habe einen rPI4 der bekanntlich einen WLAN-Adapter onboard hat. Zusätzlich habe ich per USB einen WLAN-Stick angeschlossen. Der Pi hängt mit diesen beiden WLAN-Interfaces im private LAN hinter einer Fritzbox. Die Fritzbox ist DHCP-Server, DNS-Server, Router und Switch

Auf dem Pi läuft Raspian Buster.

Die Konfiguration der beiden WLAN-Adapter habe ich geschafft. Die beiden Adapter bekommen eine statische IP-Adresse mittels DHCPCD über die dhcpcd.conf

wlan0 ist der Onboard-Adapter mit 192.168.50.50
wlan1 ist der WLAN-Stick mit 192.168.50.51
Die Fritzbox ist 192.168.50.200


Jetzt erst einmal die grundsätzliche Frage, kann ich mit 2 WLAN-Adaptern überhaupt Bonding betreiben?

Ich habe mehrere Konfig-Beispiele gefunden die alle relativ ähnlich sind. In allen wird der Bond-Modus 1, also active-backup, eingesetzt. Ich würde aber gerne den Modus 0, also balance-rr, nutzen um auf laufend etwas vom zweiten Adapter zu haben, nicht nur wenn einer ausfällt. Ist dies möglich?

Bei den Konfigurationsbeispielen, bei denen 2 eth-Interfaces zusammengeschaltet werden, wird davon gesprochen dass der Switch bei Bond-Modus 0 und 1 nichts können muss, also auch unmanaged sein kann.
Daraus habe ich für mich abgeleitet dass 2 wlan-Interfaces genauso funktionieren müssten da die Fritzbox die LAN-Ports und die verbundenen WLAN-Geräte gleich switched.


Meine /etc/network/interfaces siehe so aus:

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf' 

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

# auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
#iface wlan0 inet dhcp
#iface wlan0 inet static
#    address 192.168.50.50
#    netmask 255.255.255.0
#    network 192.168.50.0
#    broadcast 192.168.50.255
#    gateway 192.168.50.200
#    dns-nameservers 192.168.50.200
# post-up iw dev wlan0 set power_save off
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
bond-master bond0
#bond-mode 0

# auto wlan1
allow-hotplug wlan1
iface wlan1 inet manual
#iface wlan1 inet dhcp
#iface wlan1 inet static
#    address 192.168.50.101
#    netmask 255.255.255.0
#    network 192.168.50.0
#    broadcast 192.168.50.255
#    gateway 192.168.50.200
#    dns-nameservers 192.168.50.200
#    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
bond-master bond0
#bond-mode 0

#auto bond0
allow-hotplug bond0
#iface bond0 inet static
#iface bond0 inet manual
#iface bond0 inet dhcp
#    address 192.168.50.100
#    netmask 255.255.255.0
#    network 191.168.50.0
#    broadcast 192.168.50.255
#    gateway 192.168.50.200
#    dns-nameservers 192.168.50.200
bond-slaves wlan0 wlan1
bond-mode balance-rr
bond-miimon 100
bond-updelay 200
bond-downdelay 200

An den auskommentierten Einträgen seht ihr was ich schon versucht habe, also die verschiedenen Kombinationsmöglichkeiten zwischen static, manual und dhcp.
Leider funktioniert keine davon.
Sobald das bond0-Interface in's Spiel kommt ist keine Verbindug mehr möglich.

Wo liegt der Fehler?


Ich habe es auch versucht mit

a) etc/modules
mit dem Eintrag bonding


b) /etc/modprobe.d/bonding.conf
mit dem Eintrag
alias bond0 bonding
options bonding mode=0
all_slaves_active=1

Geändert hat dies leider nichts.


Was mache ich falsch?


Vielen Dank schonmal.

Content-ID: 587014

Url: https://administrator.de/contentid/587014

Ausgedruckt am: 25.11.2024 um 15:11 Uhr

aqui
aqui 11.07.2020 aktualisiert um 13:47:30 Uhr
Goto Top
Jetzt erst einmal die grundsätzliche Frage, kann ich mit 2 WLAN-Adaptern überhaupt Bonding betreiben?
Nein, das ist auf WLAN Adaptern grundsätzlich technisch nicht möglich.
Der zugrundeliegende 802.3ad IEEE Link Aggregation Standard verbietet grundsätzlich das Bonding von Adaptern die unterschiedliche Link Speeds haben !
Der technische Grund dafür ist einfach, denn der 802.3ad Standard hat keinerlei interne Paket Reassembling Algorithmen. Sprich er kann Layer 2 Pakete die z.B. aufgrund unterschiedlicher Laufzeiten (Speeds) nicht mehr in der gesendten Reihenfolge am Ziel ankommen nicht mehr "zusammenbauen".
Da die Linkspeeds auf allen WLAN Ports bekanntlich aber immer hochdynamisch sind aufgrund der unterschiedlichen Feldstärke Situation ist ein Bonding deshalb auf WLAN Ports generell ausgeschlossen und führt zur Fehlfunktion.
Deshalb scheitert dein Vorhaben schon von Grund auf.
Solche simplen Basics sollte man aber als Netzwerker auch kennen. face-wink

Alle Grundlagen zum .ad Bonding auf dem RasPi findest du auch hier:
Netzwerk Management Server mit Raspberry Pi
blacksun
blacksun 11.07.2020 aktualisiert um 15:38:07 Uhr
Goto Top
Danke für die Rückmeldung.

Den Link kenne ich und habe ich auch gelesen.
Du erwähnst 802.3ad IEEE. Ist es nicht so dass dieser erst beim Bond Modus ab 4 zum Einsatz kommt?
Soweit ich weiß funktioniert der Bond-Modus 0 und 1 mit jedem Switch. Bei mir ist die Fritzbox der unmanaged Switch.

Ich habe das so verstanden dass durch die Software im Paket ifenslave ein virtuelles Interface bond0 geschaffen wird. Durch die Konfigration wird der Software gesagt dass es die echten Interfaces wlan0 und wlan1 benutzen soll. Wird bond0 aktiv, sieht das Betriebssystem die interfaces wlan0 und 1 nicht mehr, sondern nur noch bond0

Der bond0 teilt im Modus 0 die Kommunikation nur auf die echten Interfaces auf. Ein Download kann also immer nur so schnell sein wie das echte Interface über den er läuft.

Zum Thema unterschiedliche Link-Speed.
Das Internet ist voll von Anleitungen bei dem beim PI eth0 und wlan0 zu einem bond zusammengefasst werden. Das würde ja dann genausowenig funktionieren.

Daher nochmal die Frage, bist du sicher dass das nicht funktioniert?

Ich habe ISO-OSI-Modell mit Layer3 im Kopf und das was z.B. hier unter Layer3
https://en.wikipedia.org/wiki/Link_aggregation
beschrieben wird.
aqui
aqui 11.07.2020 aktualisiert um 15:52:52 Uhr
Goto Top
Das würde ja dann genausowenig funktionieren.
Richtig. Jedenfalls wenn man damit versucht einen 802.3ad / LACP Bond zu realisieren.
Die statischen Active / Passive Bonds funktionieren natürlich. Und das auch mit unterschiedlichen Infrastrukturen. Das ist ja auch kein Load Sharing sondern rein nur ein Backup.
Das Problem wird dort aber bei WLAN Adaptern sicher die Link Signalisierung sein.
Die Ausführungen von oben beziehen sich rein nur auf 802.3ad / LACP Bondings und nicht auf die anderen Varianten.
blacksun
blacksun 11.07.2020 um 16:15:40 Uhr
Goto Top
Zitat von @aqui:
Die statischen Active / Passive Bonds funktionieren natürlich. Und das auch mit unterschiedlichen Infrastrukturen. Das ist ja auch kein Load Sharing sondern rein nur ein Backup.
Richtig, es geht mir bei meinem Vorhaben nur um Statische Bonds.
Für dynamische Bonds, da braucht es natürlich managed Hardware, und natürlich eine Sprache und Standards damit die verschiedenen beteiligten miteinander kommunizieren.


Das Problem wird dort aber bei WLAN Adaptern sicher die Link Signalisierung sein.

Was genau meinst du damit?
aqui
aqui 11.07.2020 um 16:17:13 Uhr
Goto Top
Der redundante Link wird bei den statischen Bonds nur aktiviert wenn der primäre einen Link Loss hat. Bei WLAN ist das nicht einfach..
blacksun
blacksun 11.07.2020 um 17:12:16 Uhr
Goto Top
Zitat von @aqui:

Der redundante Link wird bei den statischen Bonds nur aktiviert wenn der primäre einen Link Loss hat. Bei WLAN ist das nicht einfach..

???

Du redest von bond modus 1
Ich meine aber modus 0
Laut Beschreibung sind da alle beteiligten Interfaces immer aktiv, und der Bond verteilt dann auf die einzelnen Interfaces
aqui
aqui 11.07.2020 aktualisiert um 22:25:39 Uhr
Goto Top
Ich meine aber modus 0
Sorry, hatte ich missverstanden. Stimmt, das ist statisches Round Robin. Hier muss man aber aufpassen mit den arp_interval und arp_ip_target Parametern das man die richtig setzt bei Mode 0
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7 ...
blacksun
blacksun 12.07.2020 um 09:11:08 Uhr
Goto Top
ich habe scheinbar noch ein anderes Problem.
Kann man den bond nur in der /etc/network/interfaces konfigurieren?

Ich habe bei mir festgestellt dass, noch bevor ich dort den bond konfiguriere, dass bei mir dhcpcd nicht mehr funktioniert sobald ich irgend ein Interface mit iface wlan1 inet static konfiguriere.
Alles zum Thema Bond habe ich noch auskommentiert.
Dann habe ich für einen Test wlan1 über die Interface die statische IP gegeben und natürlich in der dhcpcd.conf die Parameter dafür auskommentiert.
Laut
https://www.elektronik-kompendium.de/sites/raspberry-pi/1912151.htm
ist aber ein Kombi-Betrieb von Interface und dhcpcd möglich.

Ist das bei dir auch so?
Hast du eine Idee wo die Ursache sein könnte?
aqui
aqui 12.07.2020 aktualisiert um 09:23:42 Uhr
Goto Top
Kann man den bond nur in der /etc/network/interfaces konfigurieren?
Nein, nicht nur. Lies die Red Hat Dolu oben.
dass bei mir dhcpcd nicht mehr funktioniert sobald ich irgend ein Interface mit iface wlan1 inet static konfiguriere.
Das ist normal und erwartbar. Wenn du statische IP Adressen vergibst in der /etc/network/interfaces ist der dhcpcd (DHCP Client) ja überflüssiger Unsinn.
Benutze stattdessen immer statische Profile im dhcpcd !
# It is possible to fall back to a static IP if DHCP fails:
# define static profile
profile static_eth0
static ip_address=192.168.1.23/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1 
#
# fallback to static profile on eth0
interface eth0
fallback static_eth0 
Das ist viel sinnvoller. Wenn kein DHCP Server im Netz ist nimmt er automatisch die statischen IPs des Profils. face-wink
blacksun
blacksun 12.07.2020 um 11:03:17 Uhr
Goto Top
Zitat von @aqui:

dass bei mir dhcpcd nicht mehr funktioniert sobald ich irgend ein Interface mit iface wlan1 inet static konfiguriere.
Das ist normal und erwartbar. Wenn du statische IP Adressen vergibst in der /etc/network/interfaces ist der dhcpcd (DHCP Client) ja überflüssiger Unsinn.
In meinem Fall nicht, ich benötige beides.
wlan0 und wlan1 benötigt eine feste ip, der bond0 dann auch, aber auf eth hätte ich gerne dhcp.
Das hat den Hintergrund dass ich den PI beliebig irgendwo per Kabel einstecken kann und er dann sofort auch im Netz ist ohne irgendwelche Konfig-Änderungen

Benutze stattdessen immer statische Profile im dhcpcd

Das habe ich gleich zu Beginn bemerkt als ich angefangen habe mich mit Linux zu beschäftigen dass das über dhcpcd viel cremiger läuft.
Mein erster Versuch mit dem bond0 war dass ich es genau identisch mache wie bei den beiden wlan-Interfaces, also
interface bond0
static ip_address=192.168.50.100/24
static routers=192.168.50.200
static domain_name_servers=192.168.50.200

Das hat leider nicht funktioniert.

Diese Konfig-Beispiele, die ich ergoogelt habe, die können einen aber auch durcheinander bringen. Ich muss mir doch mal die ganze Doku reinziehen.

2 Fragen noch vorweg
Wenn der Bond0 konfiguriert ist, muss ich dann die festen IP-Adressen von wlan0 und wlan1 abkonfigurieren oder nicht?
Ich habe gelesen dass die dann keine haben dürfen, und dass man mit die beiden in der dhcpcd.conf mit denyinferfaces ausschließen muss.
Denk dran, bei mir statisches Bonding, Bond-Modus 0, unmanaged Switch.

wegen
https://www.elektronik-kompendium.de/sites/raspberry-pi/1912151.htm
Ich habe gelesen dass systemd-networkd der Standard werden wird für die Netzwerkkonfig und es bei jedem Debian fest mit dabei sei.
Soll ich dann lieber gleich alles auf systemd-networkd umstellen oder ist dhcpcd immer noch ok?
blacksun
blacksun 21.07.2020 um 21:34:36 Uhr
Goto Top
ich habe mich weiter mit dem Thema beschäftigt.

dhcpcd und bonding scheint sich nicht zu vertragen. Daher habe ich dhcpcd deaktiviert.

Meine /etc/network/interfaces sieht nun so aus:

auto bond0
iface bond0 inet static
	address 192.168.50.100
	netmask 255.255.255.0
	network 191.168.50.0
	broadcast 192.168.50.255
	gateway 192.168.50.103
	dns-nameservers 192.168.50.103
        dns-search fritz.box
    bond-slaves none
    bond-mode balance-rr
    bond-miimon 200
    bond-updelay 200
    bond-downdelay 200

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
    bond-give-a-chance 40
    wpa-bridge bond0
    bond-master bond0
    bond-primary wlan0 wlan1
    bond-mode balance-rr
    #post-up iw dev wlan0 set power_save off

allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
    bond-give-a-chance 60
    wpa-bridge bond0
    bond-master bond0
    bond-primary wlan0 wlan1
    bond-mode balance-rr

allow-hotplug eth0
iface eth0 inet dhcp

die Datei bonding.conf unter /etc/modprob.d habe ich wieder gelöscht da ich gelesen habe dass es die nicht geben darf wenn man bonding in der interfaces konfiguriert

bond0 wird auch angelegt.
Aber die beiden interfaces wlan0 und wlan1 starten nicht.

Wenn ich im Journal schaue, dann heißt es da dass ifup die beiden interfaces wlan0 und wlan1 nicht starten kann.

Weiß jemand woran das liegt?
aqui
aqui 22.07.2020 um 09:50:54 Uhr
Goto Top
Im "Laptop" Mode findet man hier:
https://wiki.debian.org/Bonding
ein Beispiel mit Kupfer und WLAN. Ggf. greift das ja auch für 2 WLANs ?!
blacksun
blacksun 24.07.2020 um 20:06:00 Uhr
Goto Top
das kenne ich.
das Problem daran ist dass dieses Beispiel im Modus 1 ist.