Schritte zur Linux-Bridge-Methode zum Überbrücken zweier virtueller VirtualBox-Netzwerke

Schritte zur Linux-Bridge-Methode zum Überbrücken zweier virtueller VirtualBox-Netzwerke

Wie registriert der Switch die Mac-Adresse? Mit anderen Worten: Wo kann ich sehen, bei welchem ​​Mac eine Netzwerkkarte einer virtuellen Maschine registriert ist?

Bitte siehe „Virtuelle Maschine -> Einstellungen -> Netzwerk“:

Bildbeschreibung hier einfügen

Erweitern Sie jedes Mal, wenn Sie eine Netzwerkkarte aktivieren, unten „Erweitert“, um die registrierte Mac-Adresse der Netzwerkkarte anzuzeigen.

Jetzt ist klar, warum das obige Experiment nicht funktioniert hat. Wenn H1 H2 anpingt, kann die ARP-Anforderung über die Linux Bridge an H2 gesendet werden. In der von H2 empfangenen ARP-Übertragung ist die Quell-MAC natürlich die MAC-Adresse von H1. Wenn H2 auf die ARP-Antwort antwortet, ist die Ziel-MAC die MAC-Adresse von H1. Die MAC-Adresse von H1 ist jedoch nicht im virtuellen Switch von intnet2 registriert, sodass der Switch von intnet2 diesen Frame nicht weiterleitet. Also macht es natürlich keinen Sinn!

Okay, als nächstes werde ich seine Ren- und Du-Meridiane öffnen und freigeben! Es ist Zeit, das Wie zu zeigen.

Es sind nur drei Schritte erforderlich:

  • Registrieren Sie die MAC-Adresse von H1 auf Intnet auf der Intnet2-Netzwerkkarte enp0s10 von Linux Bridge.
  • Registrieren Sie die MAC-Adresse von H2 auf intnet2 auf der Intnet-Netzwerkkarte enp0s9 von Linux Bridge.
  • Nachdem der Linux Bridge-Host aktiv ist, ändern Sie die MAC-Adressen der Netzwerkkarten enp0s9 und enp0s10 mit dem Befehl ifconfig in andere.

Bildbeschreibung hier einfügen

Ich zeige Ihnen, wie es geht.

Wir können sehen, dass es in der Konfigurationsschnittstelle der Netzwerkkarte anscheinend keine Option zum Angeben einer MAC-Adresse gibt, sondern nur eine Schaltfläche zum zufälligen Generieren einer MAC:

Bildbeschreibung hier einfügen

was zu tun?

Benutzen Sie die Kommandozeile!

Wir verwenden den Befehl VBoxManage, um die MAC-Adresse einer bestimmten Netzwerkkarte wie folgt anzugeben:

zhaoyadeMacBook-Pro:~ $ VBoxManage modifyvm "ubuntu new" --macaddress4 0800279ff0e6
zhaoyadeMacBook-Pro:~ $ VBoxManage modifyvm "ubuntu new" --macaddress3 080027bb3d67

Die 0800279ff0e6 im obigen Beispiel ist die MAC-Adresse von H1 enp0s9 und 080027bb3d67 ist die MAC-Adresse von H2 enp0s9. In ihrer Netzwerkkonfigurationsschnittstelle können wir Folgendes sehen:

Bildbeschreibung hier einfügen

OK, starten Sie nun die Linux Bridge-Maschine und führen Sie den dritten Schritt aus. Dieser Schritt ist erforderlich, um zu verhindern, dass Adresskonflikte die Weiterleitungstabelle der Bridge vergiften:

  • 0800279ff0e6 kann aus dem Internet von H1 abgerufen werden.
  • 0800279ff0e6 ist auf seinem eigenen enp0s10 konfiguriert.

Sind Sie verwirrt? Daher müssen die MAC-Adressen der beiden Netzwerkkarten enp0s9 und enp0s10 der Linux Bridge in andere geändert werden. Der interne Netzwerkschalter von VirtualBox erkennt diese Änderung nicht (nur das Aktivieren einer neuen Netzwerkkarte oder die Neuregistrierung einer neuen MAC ändert die Weiterleitungstabelle, d. h. das Klicken auf die kleine Schaltfläche oder das Ausführen des Befehls VBoxManage ändert die MAC-Adresse), sodass dies keine Auswirkungen auf die Weiterleitungstabelle hat.

Ok, los geht’s:

ifconfig enp0s9 hw ether 08:00:27:bb:3d:68
ifconfig enp0s10 hw ether 08:00:27:9f:f0:e7

OK, alle Schritte sind erledigt, lasst uns testen:

brctl addbr br0;
brctl addif br0 enp0s9;
brctl addif br0 enp0s10;
ifconfig br0 hoch;

Nochmal pingen?

Bildbeschreibung hier einfügen

Ist das nicht die Lösung...

Tatsächlich ähnelt die Überbrückung im HostOnly-Modus der im internen Netzwerk und weist dasselbe Problem und dieselbe Lösung auf.

Ich weiß nicht, ob dieses Problem, dass zwei Netzwerke nicht überbrückt werden können, von VirtualBox beabsichtigt ist oder ob es sich tatsächlich um einen Implementierungsfehler handelt, aber ich bin bei der tatsächlichen Arbeit tatsächlich auf diese Anforderung gestoßen, sodass es meiner persönlichen Meinung nach ein Fehler ist! Dies ist dem LAN-Segment von VMWare offensichtlich unterlegen.

Oder hat VirtualBox dieses Problem nur unter Mac OS? Ist es unter Windows in Ordnung? Das kann ich nicht mit Sicherheit sagen. Es ist fast zwei Jahre her, seit ich die Windows-Plattform verlassen habe.

Dieses Problem wurde innerhalb von fast einem Tag gelöst.

Zuerst dachte ich, es läge an einem Problem mit meiner brctl-Konfiguration. Wie konnte eine so offensichtliche Operation nicht funktionieren? Ich war verwirrt. Ich habe HostOnly verwendet, um das Experiment durchzuführen, und dann durch Paketerfassung festgestellt, dass das Rückgabepaket von H1 direkt an die vboxnet1-Netzwerkkarte des Mac OS-Hosts zurückgegeben wurde und vboxnet1 das Paket nicht an die Linux Bridge weiterleitete. Ich vermutete zunächst, dass es sich um einen Fehler in VirtualBox handelte. Nachdem ein Neustart des Systems erfolglos blieb, konnte ich ungefähr erraten, was es bedeutete. Was den Begriff „registrierter Switch“ betrifft, so ist das nur meine eigene Vermutung. Wie auch immer, es kommt dem ziemlich nahe, und ich habe es offensichtlich gelöst, indem ich dieses Problem befolgt habe.

Ich bin schon lange nicht mehr auf diese Art von Problem gestoßen, aber ich mag es immer noch und bin gut darin, diese Art von schwierigen Problemen zu lösen. Ich bin nicht sehr gut darin, Tutorials zu herkömmlichem Wissen zu schreiben, aber für diese Art von seltsamen Problemen, denen die Leute nicht sehr oft begegnen, habe ich hier meine eigene Zaubermedizin.

Bevor ich die Antwort fand, habe ich lange gegoogelt und nach Dingen gesucht, die dem LAN-Segment in VirtualBox entsprechen, und nach dem Unterschied zwischen internem Netzwerk und LAN-Segment. Ich wollte sogar einen virtuellen Switch in Mac OS finden, um selbst ein virtuelles und reales Ethernet zu erstellen ... Wenn ich ihn wirklich nicht finden kann, kann ich nur selbst einen herstellen.

Glücklicherweise fiel mir, bevor ich mit dieser extrem unrealistischen großen Szene begann, plötzlich die Lösung für das in diesem Artikel beschriebene Problem ein. Gott sei Dank~

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Lösung für VirtualBox, bei der die zu überbrückende Netzwerkschnittstelle nicht angegeben wird

Dieser Artikel entstand aus meinen Beschwerden über die Arbeitsweise dieser Zeit, bei der man Peter ausraubte, um Paul zu bezahlen.

Erstens ist nicht genügend Speicherplatz vorhanden. Der bereitgestellte Computer hat nur noch 12 GB Speicherplatz. Ich kann keine externe Festplatte anschließen und kann vorerst keine Backups hochladen. Es entspricht einem Offline-Computer. Ich musste eine 4.19-Version des Linux-Kernels kompilieren … also begann ich, ihn Tag und Nacht manuell zu komprimieren und freizugeben, und ich war sehr unzufrieden. Irgendwann habe ich es herausgefunden, aber es war keine elegante Lösung für das Speicherplatzproblem, zumindest nicht in einer Weise, die die Leute hätten denken lassen, ich würde angeben.

Im Vergleich zu Beschwerden über den Speicherplatz ist die folgende Frage etwas interessanter.

Beim Einsatz virtueller Maschinen zum Aufbau einer Netzwerktestumgebung treten immer wieder seltsame Probleme auf, die oft durch Defekte in verschiedenen Plattformen der virtuellen Maschinen verursacht werden. (Vielleicht verstehe ich es zu eng, aber meiner Meinung nach ist ein Mechanismus, der die Arbeit behindert, ein Defekt.)

Schließlich sind virtuelle Netzwerke nicht real. Nach mehr als 40 Jahren Entwicklung der Netzwerktechnologie ist es für eine Software fast unmöglich, umfassende Tests zu bestehen, und es ist normal, dass das Design unvollständig ist.

Verwenden Sie beispielsweise VirtualBox, um eine Testumgebung zu erstellen, die die folgenden Anforderungen erfüllt:

Ich brauche einen Linux-Host, der als Brücke zwischen zwei Netzwerken fungiert. (Ich muss zwischendurch ein paar Regeln festlegen und möchte nicht das Routing durchlaufen)

Bildbeschreibung hier einfügen

Einfach, nicht wahr? Hast du es probiert?

Die Idee ist sehr direkt und einfach. Ähnlich wie das LAN-Segment von VMWare verfügt VirtualBox über ein virtuelles Netzwerk namens „Internes Netzwerk“, mit dem Sie ganz einfach ein internes privates Netzwerk erstellen können.

Host B fungiert als Bridge und die Netzwerkkartenkonfiguration ist wie folgt:

Bildbeschreibung hier einfügen

Als Brücke, die zwei Hosts in zwei Netzwerken verbindet, ist das Linux-System wie folgt konfiguriert:

brctl addbr br0;
brctl addif br0 enp0s9;
brctl addif br0 enp0s10;
ifconfig br0 hoch;

Stellen Sie enp0s9 des Hosts H1 auf den internen Modus ein und stellen Sie eine Verbindung zum Intnet her:

Bildbeschreibung hier einfügen

Die Linux-Systemkonfiguration von H1 ist wie folgt:

ifconfig enp0s9 40.40.40.201/24

Setzen Sie enp0s9 des Hosts H2 auf den internen Modus und stellen Sie eine Verbindung zu intnet2 her:

Bildbeschreibung hier einfügen

Die Linux-Systemkonfiguration von H2 ist wie folgt:

ifconfig enp0s9 40.40.40.100/24

Glauben Sie, dass H1 und H2 die Adressen des jeweils anderen anpingen können?

Wenn Sie es versuchen, werden Sie wissen, dass es nicht funktioniert!

Stand 8. November 2019 ist 6.0.14 die aktuellste Version:

Bildbeschreibung hier einfügen

Ja, nein!

Ich werde zuerst erklären, warum, und dann zeigen, wie.

Also warum?

Anders als das LAN-Segment von VMWare, das über einen virtuellen Lern-Switch verfügt (früher war es ein Broadcast-Hub) , ist der Switch im internen Netzwerk von VirtualBox kein Lern-Switch, sondern ein registrierter Switch!

Der sogenannte registrierte Switch bedeutet, dass der Datenverkehr für Sie nur dann weitergeleitet wird, wenn die Mac-Adresse registriert wurde! Dieser Switch-Typ verfügt nur über zwei Weiterleitungsstrategien:

Bei Broadcast-Frames senden alle Ports eine Kopie. Unicast-Frames werden nur an den Port gesendet, an dem die Ziel-Mac-Adresse registriert ist.

Offensichtlich wird vermutet, dass sich darin eine Tabelle befindet:

Port registrieren Mac-Adresse
Platz 1 Mac1
Platz 2 Mac2

<<:  Implementierung der Lese-/Schreibtrennung und des Lastenausgleichs von MySQL basierend auf OneProxy

>>:  Erfahren Sie in einem Artikel mehr über TypeScript-Datentypen

Artikel empfehlen

Einfaches Anwendungsbeispiel für MySQL-Trigger

Dieser Artikel veranschaulicht anhand von Beispie...

Detaillierte Erklärung des Prinzips des js-Proxys

Inhaltsverzeichnis Was ist der Proxy-Modus? Einfü...

Führt das Laden von CSS zu einer Blockierung?

Vielleicht weiß jeder, dass die JS-Ausführung die...

jQuery-Plugin zum Implementieren eines schwebenden Menüs

Lernen Sie jeden Tag ein schwebendes jQuery-Plug-...

CSS-Overflow-Wrap – Verwendung neuer Eigenschaftswerte überall

1. Verstehen Sie zunächst das Overflow-Wrap-Attri...

Details und Beispielcode der MySQL-Replikationstabelle

Detaillierte Erklärung der MySQL-Replikationstabe...

Detailliertes Tutorial zur Installation von MySQL 5.7.26 auf CentOS7.4

In CentOS ist standardmäßig MariaDB installiert, ...

JavaScript zum Erzielen digitaler Uhreffekte

In diesem Artikelbeispiel wird der spezifische Co...