Wie kann ich nahtlos zwischen kabelgebundenem und kabellosem Netzwerk wechseln?

2

Mein Laptop ist normalerweise über WLAN verbunden (altes T61 mit Intel WM3945ABG). Für die meisten meiner Arbeiten ist das ausreichend. Ab und zu möchte ich mich mit meinem guten 1 GB kabelgebundenen Ethernet verbinden. Aber wenn ich es naiv mache, fangen nfs-Reittiere an zu hängen. (Wenn ich alle nfs vor der Änderung aushänge, ist alles in Ordnung).

Zum Beispiel startet mein Backup über anacron. Dadurch wird das Backup-Laufwerk auf meinem Server über NFS4 gemountet. Höchstwahrscheinlich bin ich im WLAN, wenn dies passiert. Wenn ich jetzt mein Ethernet-Kabel einstecke, führt jeder Zugriff auf das Sicherungslaufwerk zu einem unterbrechungsfreien Ruhezustand. Da das Backup einige Zeit in Anspruch nimmt (langsames WLAN, erinnerst du dich?), Kann ich das Backup-Laufwerk nicht aushängen und erneut einbinden.

Dies betrifft blockierte Dialoge und Shells (vielleicht scannen sie beim Öffnen alle Mountpunkte, ich weiß nicht).

Ich bin mit Linux seit Kernel 2.0.2 und um ehrlich zu sein, ist dies das / einzige / Ding mit Linux, das mich wirklich verrückt macht, weil ich es nicht lösen kann.

Gibt es eine Möglichkeit, drahtgebundene und drahtlose Netzwerke transparent auszutauschen?

Oh, einige fehlende Fakten: Derzeit verwende ich WICD, habe es aber schon einmal mit NetworkManager versucht. Ich denke über einen systemd-only Ansatz nach ...

% /sbin/iwconfig wlan0

wlan0     IEEE 802.11  ESSID:"the-grue"
      Mode:Managed  Frequency:2.422 GHz  Access Point: 64:70:02:A2:67:DE
      Bit Rate=54 Mb/s   Tx-Power=15 dBm
      Retry short limit:7   RTS thr:off   Fragment thr:off
      Power Management:off
      Link Quality=70/70  Signal level=-33 dBm
      Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
      Tx excessive retries:0  Invalid misc:476   Missed beacon:0

% mount | grep nfs
zem:/backup on /media/backup type nfs4
(rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,soft,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.178.63,local_lock=none,addr=192.168.178.2)

Beide Netzwerke verwenden dieselbe IP und so weiter ...

Bitte teilen Sie mir mit, wenn Sie weitere Informationen benötigen!

Markus
quelle

Antworten:

1

Ohne Hilfe auf der anderen Seite, entweder dort, wo Ihr WLAN und Ihr GB LAN zusammenlaufen (dh Ihr Heimrouter), oder dort, wo sich der andere Kommunikationspunkt befindet, können Sie dies nicht.

Und das ist wirklich kein Linux-Problem, weil Netzwerkprotokolle so sind, wie sie sind (aus historischen Gründen): Sowohl TCP als auch UDP unterstützen kein Failover-Multihoming, dh es gibt mehrere Schnittstellen mit unterschiedlichen IP-Adressen an einem Ende, die alles können gleichwertig verwendet werden.

Das heißt, es gibt ein paar Möglichkeiten, um so etwas zum Laufen zu bringen, aber keine von ihnen ist einfach, ich habe nicht versucht, eine davon selbst zu implementieren, und es wird beträchtliche Anstrengungen erfordern, um sie zum Laufen zu bringen, wenn sie überhaupt funktionieren :

1) Verwenden Sie anstelle von TCP und UDP ein Protokoll, das ein Failover-Multihoming ermöglicht, z. B. SCTP . SCTP ist zwar im Linux-Kernel von Haus aus verfügbar, wird jedoch nur von wenigen verwendet. Sie müssen also eine Anwendung finden, die das tut, was Sie wollen und SCTP auf beiden Seiten unterstützt, und viel Glück damit. Oder Sie müssen vorhandene Anwendungen wie NFS oder Ihr Backup ändern, um SCTP zu unterstützen, und nochmals viel Glück damit.

Bearbeiten : Ich habe festgestellt, dass es einen Wrapper-Befehl gibt withsctp, mit dem die umschlossene Anwendung SCTP anstelle von TCP verwendet. Ich habe mit ncund socatmit zwei Paaren von vethVerbindungen zu einem Netzwerk-Namespace getestet , und das Failover-Multihoming funktioniert sofort: Wenn Sie das Paar herunterfahren, bei dem die Verbindung hergestellt wurde, wird die Übertragung nicht unterbrochen, sondern auf das andere Paar verschoben. Es sieht jedoch so aus, als müssten beim Verbindungsaufbau beide Netzwerkschnittstellen sichtbar sein, da die verfügbaren Adressen Teil des SCTP-Handshakes sind.

Ich habe nicht getestet, aber dies funktioniert möglicherweise für Ihr Sicherungsprogramm oder für FUSE-Remote-Dateisysteme wie SSHFS oder sogar für Kernel-Dateisysteme wie NFS.

2) Sie können mehrere Schnittstellen miteinander verbinden, siehe linux/Documentation/networking/bonding.txtin den Kernel-Quellen. Dies ist eigentlich nur dazu gedacht, um zB parallele LAN-Verbindungen in einem Rechenzentrum zu verbinden. Sie müssen dies auf beiden Seiten tun, z. B. auf Ihrem PC und Ihrem Router (was bedeutet, dass Sie möglicherweise den Linux-Kernel Ihrer Firmware für den Router neu kompilieren müssen), und Sie müssen sicherstellen, dass beide Schnittstellen einigermaßen statisch sind ( insb. WLAN). Wenn Sie diese Arbeit bekommen, würde ich mich für die Details interessieren.

3) Sie können versuchen, den Router so einzurichten, dass sowohl Ihr WLAN als auch Ihre LAN-Schnittstelle genau die gleiche IP-Adresse haben und Ihre WLAN-Schnittstelle deaktiviert wird, sobald das LAN erkannt wird. Das wird einiges an Routereinbauten erfordern, und auch hier würde ich mich für die Details interessieren, wenn Sie diese Arbeit bekommen.

Es gibt wahrscheinlich andere, ebenso undurchsichtige Methoden. Es ist möglicherweise einfacher, ein Skript zu schreiben, mit dem die Bereitstellung von NFS aufgehoben / wieder aufgehoben wird und überprüft wird, ob Sie sich nicht mitten in einer Sicherung befinden, bevor Sie die LAN-Schnittstelle aktivieren.

dirkt
quelle
Ich verstehe und danke Ihnen vielmals für Ihre Erklärungen und Ratschläge. Aber eines verstehe ich immer noch nicht, leider klingt es nach Flammenfliegen, was es mit Sicherheit nicht ist : Bei der Arbeit habe ich einen Windows 7-Laptop in einer Dockingstation. Es werden immer mehrere Freigaben gemountet. Wenn ich meinen Laptop von der Dockingstation entferne und damit von kabelgebunden auf kabellos umschalte, bemerke ich überhaupt kein Problem. Was ist der Unterschied, seitdem Sie gesagt haben "Und das ist wirklich kein Linux-Problem"? Sollte ich CIFS anstelle von NFS verwenden?
Markus
Ja, CIFS verwendet ein ganz anderes Protokoll als NFS (viele Broadcasts, ein Master, der die Dinge koordiniert, Netbios über IP usw. anstelle von einfachem TCP). Schließlich wurde NFS für Hosts mit statischen IP-Adressen erstellt. Ich habe CIFS unter Linux noch nicht mit einem Host getestet, der die IP-Adressen geändert hat, aber ich wäre nicht überrascht, wenn es sofort funktioniert hätte. Es gibt auch andere, mehr Unix-spezifische verteilte FS, die ebenfalls funktionieren könnten (z . B. AFS ).
Dirkt
Edit: Erläuterter withsctpWrapper. Übrigens schätze ich positive Stimmen. :-)
dirkt
Nochmals vielen Dank - ich schaue mir withsctp an! Ich habe Ihren Beitrag positiv bewertet, aber nicht genug Ruf, um sofort gezählt zu werden ...
Markus