So kommunizieren Sie zwischen zwei VirtualBox-VMs, die auf demselben Host ausgeführt werden

25271
somnathchakrabarti

Ich führe zwei VM-Instanzen von RHEL / CentOS auf meiner VirtualBox-Instanz aus, die unter Windows 7 ausgeführt wird. Das Problem ist, wenn ich es ausführe VBoxManage list vms -l | moreund dann VBoxManage guestproperty get <uuid> "/VirtualBox/GuestInfo/Net/0/V4/IP"kann ich die gleiche IP für beide VMs sehen. Ich habe das interne Netzwerk intnetfür beide VMs mithilfe von Networks -> Adapter 2 -> PCnet-FAST III (internes Netzwerk, 'intnet') festgelegt. Mein Verständnis war, dass eth0 die private Netzwerkschnittstelle für die VMs war. Beide zeigen jedoch ihre IP als 10.0.2.15. Gibt es eine Möglichkeit, auf unterschiedliche IPs im privaten VM-Netzwerk für die beiden VMs zuzugreifen?

ANMERKUNG: Beim Zugriff über den Putty SSH-Client kann ich auch nur auf eine einzige VM-Instanz zugreifen. Und es wird immer eine Verbindung zum Proxy 127.0.0.1:2222 hergestellt. Daher kann ich die VMs nicht unterscheiden. Ich benötige separate Instanzzugriffe, um Server- und Clientcodes auf separaten Instanzen in einer Client-Server-Architektur auszuführen. Sehen Sie sich meinen anderen Thread an. So konfigurieren Sie putty für ssh für mehrere virtuelle Maschinen mit demselben Host, wodurch das Problem detailliert erklärt wird.

So kommunizieren Sie zwischen zwei VirtualBox-VMs, die auf demselben Host ausgeführt werden

Ich füge die VBoxManage-Befehlszeilenausgaben so hinzu, wie sie auf dem Host ausgeführt werden. Ich verwende 1.3_2- und 1.3_3-Sandboxen, aber beide haben dieselbe IP-Adresse wie unten dargestellt:

C:\Program Files\Oracle\VirtualBox>VBoxManage list vms "Hortonworks Sandbox 1.3"  "Hortonworks Sandbox 1.3_1"  "Hortonworks Sandbox 1.3_2"  "Hortonworks Sandbox 1.3_3"  C:\Program Files\Oracle\VirtualBox>VBoxManage guestproperty get fc2b9f50-bf4a-4a 5d-8189-22d62c7e1d67 "/VirtualBox/GuestInfo/Net/0/V4/IP" **Value: 10.0.2.15**  C:\Program Files\Oracle\VirtualBox>VBoxManage guestproperty get 5976fff1-7a0d-4e ca-bedf-7756f7076dbd "/VirtualBox/GuestInfo/Net/0/V4/IP" **Value: 10.0.2.15** 

Auf der VM-Sandbox 1.3_2 habe ich den folgenden Befehl ausgeführt, um die lokale IP für eth0 wie folgt abzurufen:

[hue@sandbox ~]$ arp -an ? (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0 [hue@sandbox ~]$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.2.0 * 255.255.255.0 U 0 0 0 eth0 link-local * 255.255.0.0 U 1002 0 0 eth0 default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0 

Irgendwelche Ideen, wie ich die unterschiedlichen IPs für die verschiedenen Sandboxen finden kann?

Ich sehe einen ähnlichen Thread zur Vorgehensweise beim Networking zwischen virtuellen Maschinen in Virtualbox? Hier soll der dhcpserver für die IP-Auflösung der Gast-VMs verwendet werden. Es fragt jedoch nach --ip ANMERKUNG: Ich habe versucht, den VBoxManage-Dhcpserver auszuführen, fragt jedoch nach einer --ipOption, --netmaskdie ich wie folgt mit der folgenden Ausgabe bereitgestellt habe:

C:\Program Files\Oracle\VirtualBox>VBoxManage dhcpserver add --netname intnet -- netmask 10.0.2.* Oracle VM VirtualBox Command Line Management Interface Version 4.3.0 (C) 2005-2013 Oracle Corporation All rights reserved.  Usage:  VBoxManage dhcpserver add|modify --netname <network_name> | --ifname <hostonly_if_name> [--ip <ip_address> --netmask <network_mask> --lowerip <lower_ip> --upperip <upper_ip>] [--enable | --disable]  VBoxManage dhcpserver remove --netname <network_name> | --ifname <hostonly_if_name>   Syntax error: You need to specify --ip option  

Beim Versuch, den dhcpserver zu aktivieren, existiert er bereits:

C:\Program Files\Oracle\VirtualBox>VBoxManage dhcpserver add --netname intnet -- ip 10.0.2.15 --netmask 255.255.255.0 --lowerip 10.0.2.101 --upperip 10.0.2.254 - -enable VBoxManage.exe: error: DHCP server already exists 

Die Ausgaben für route -nund sudo ss -lntplauten wie folgt: (wie von MariusMatiae angefordert)

[hue@sandbox ~]$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.56.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0 [hue@sandbox ~]$ sudo ss -lntp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 10 *:8651 *:* users:(("gmetad",1046,0)) LISTEN 0 128 *:50060 *:* users:(("java",2797,86)) LISTEN 0 10 *:8652 *:* users:(("gmetad",1046,1)) LISTEN 0 128 10.0.2.15:50030 *:* users:(("java",2834,84)) LISTEN 0 128 127.0.0.1:34927 *:* users:(("java",2797,70)) LISTEN 0 50 *:10000 *:* users:(("java",1690,130)) LISTEN 0 128 :::80 :::* users:(("httpd",1282,4),("httpd",1414,4),("httpd",1415,4),("httpd",1416,4),("htt pd",1417,4),("httpd",1418,4),("httpd",1419,4),("httpd",1420,4),("httpd",1421,4)) LISTEN 0 128 ::ffff:10.0.2.15:60020 :::* users:(("java",3513,121)) LISTEN 0 128 10.0.2.15:8020 *:* users:(("java",1886,76)) LISTEN 0 128 10.0.2.15:50070 *:* users:(("java",1886,99)) LISTEN 0 128 :::22 :::* users:(("sshd",1191,4)) LISTEN 0 128 *:22 *:* users:(("sshd",1191,3)) LISTEN 0 100 :::11000 :::* users:(("java",2237,35)) LISTEN 0 128 :::5432 :::* users:(("postmaster",1550,4)) LISTEN 0 128 *:5432 *:* users:(("postmaster",1550,3)) LISTEN 0 128 *:8888 *:* users:(("python",1064,5),("python",5540,5)) LISTEN 0 1 ::ffff:127.0.0.1:11001 :::* users:(("java",2237,39)) LISTEN 0 100 127.0.0.1:25 *:* users:(("master",1272,12)) LISTEN 0 50 *:50010 *:* users:(("java",1884,75)) LISTEN 0 128 *:50075 *:* users:(("java",1884,76)) LISTEN 0 50 *:9083 *:* users:(("java",1797,125)) LISTEN 0 128 10.0.2.15:50300 *:* users:(("java",2834,74)) LISTEN 0 50 *:50111 *:* users:(("java",3142,261)) LISTEN 0 50 *:8000 *:* users:(("python2.6",3770,3),("python2.6",3843,3),("python2.6",3843,22)) LISTEN 0 50 *:8002 *:* users:(("java",3772,136)) LISTEN 0 50 :::2181 :::* users:(("java",2197,52)) LISTEN 0 128 10.0.2.15:51111 *:* users:(("java",2820,74)) LISTEN 0 50 :::48231 :::* users:(("java",2197,43)) LISTEN 0 128 127.0.0.1:199 *:* users:(("snmpd",1179,8)) LISTEN 0 50 *:9290 *:* users:(("java",2834,88)) LISTEN 0 128 *:8010 *:* users:(("java",1884,81)) LISTEN 0 128 10.0.2.15:50090 *:* users:(("java",1888,76)) LISTEN 0 50 *:3306 *:* users:(("mysqld",1460,10)) 
3
Verwenden diese NAT? Ich verstehe, dass Virtualbox-Gäste, die NAT-Netzwerke verwenden, nicht direkt miteinander kommunizieren können. Sie können über die Portweiterleitung (die den Verkehr durch das Hostbetriebssystem leitet) miteinander kommunizieren. Sie können miteinander kommunizieren, wenn sie für die Verwendung eines anderen Netzwerktyps als NAT konfiguriert sind. Mark Plotnick vor 10 Jahren 0
@ Mark Plotnick: Ja, stimmt. Ich versuche jedoch, zwischen zwei VMs zu kommunizieren, die im privaten Netzwerk 'intnet' laufen, das über 'internes Netzwerk' verbunden wird und bei Bedarf Nachrichten über den Gerätetreiber des Host-Adapters senden kann. Sie können den Abschnitt 6.6 Interne Netzwerke in https://www.virtualbox.org/manual/ch06.html#networkingmodes überprüfen somnathchakrabarti vor 10 Jahren 0
@ Mark Plotnick: Ich habe in beiden VM-Instanzen den Internen Netzwerkadapter als zweiten Adapter hinzugefügt (dies wurde mit dem VM-Netzwerkadapter erwähnt, den ich verwendet habe). Siehe http://open-source-experiments.blogspot.com/2008/04/virtualbox-case-study-making-host-only.html somnathchakrabarti vor 10 Jahren 0
Ich werde versuchen zu reproduzieren. Ich bin nicht sicher, ob eth0 mit den Intnet-Schnittstellen verbunden ist, da Intnet der NIC-Adapter 2 ist. Ich würde erwarten, dass Eth0 mit dem NIC-Adapter 1 verbunden ist. Ein paar Dinge, die Sie prüfen sollten: (a) ist das DHCP-Servernetzwerk, das Sie möchten erstellen - 10.0.2. * - unterscheidet sich von der Netzwerkadresse, die vbox bereits für das NAT-Netzwerk verwendet? (2) Haben die beiden VMs möglicherweise die gleichen MAC-Adressen für die Schnittstellen im Intnet-Netz? Mark Plotnick vor 10 Jahren 0
@somnathchakrabarti Können Sie die Ausgabe dieser beiden Befehle auf den Gast-VMs bereitstellen? route -n; sudo ss -lntp. MariusMatutiae vor 10 Jahren 1
@MariusMatutiae: habe die Ausgaben im Thread hinzugefügt. Mein Szenario wird in meinem anderen Thread http://superuser.com/questions/682318/how-to-configure-putty-to-ssh-to-multiple-vm-using-same-host beschrieben somnathchakrabarti vor 10 Jahren 0

1 Antwort auf die Frage

7
MariusMatutiae

Sie haben zwei Möglichkeiten:

  1. Verwenden Sie überbrückte Verbindungen für beide VMs. Auf diese Weise haben beide IP-Adressen in Ihrem LAN, als wären sie physische Maschinen.
  2. Richten Sie ein Host-Only-Netzwerk ein. Dies erfordert die folgenden Schritte:

    a) Datei -> Einstellungen -> Netzwerk -> Host-Only-Netzwerke.

    b) Fügen Sie eine hinzu, indem Sie auf das PlusZeichen klicken .

    c) Schlagen Sie den Schraubendreher -> DHCP-Server an. PrüfenEnable DHCP sever

    d) Füllen Sie die Maske wie gewünscht aus. Angemessene Werte sind: Serveradresse 192.168.56.254 Servermaske 255.255.255.0 Untere Adressgrenze 192.168.56.100 Obere Adressgrenze 192.168.56.200

Konfigurieren Sie nun Ihre VMs so, dass mindestens ein Adapter im Host-Only-Netzwerk vorhanden ist.

Starten Sie Ihre VMs, und jetzt verfügt Ihr Host über IP 192.168.56.1, und die verschiedenen VMs befinden sich unter 192.168.56.100, 192.168.56.101, ... Sie können jetzt Ping und sssh und vnc von einer Maschine zur anderen starten.

BEARBEITEN:

Im Hinblick auf Ihre Routingtabelle funktioniert Lösung 2, wenn Sie diese Befehle auf beiden VMs angeben:

 sudo route delete default gw 10.0.2.2 sudo route add default gw 192.168.56.1 
Ich habe es mit der zweiten Option versucht, aber wie in meinem anderen Thread erwähnt http://superuser.com/questions/682318/how-to-configure-putty-to-ssh-to-multiple-vm-using-same-host, fällig für einige interne Einstellungen der Hortonwork-Sandbox-Gastinstanzen ist SSH nur bei 127.0.0.1:2222 aktiviert. Muss ich jedoch auf die einzelnen Gast-VMs separat zugreifen? somnathchakrabarti vor 10 Jahren 0
Vielen Dank MariusMatutiae für Ihre ausführliche Antwort! Es hat mir sehr geholfen, weiterzukommen. Ich habe es mit der zweiten Option versucht, aber wie in meinem anderen Thread erwähnt http://superuser.com/questions/682318/how-to-configure-putty-to-ssh-to-multiple-vm-using-same-host, fällig für einige interne Einstellungen der Hortonwork-Sandbox-Gastinstanzen ist SSH nur bei 127.0.0.1:2222 aktiviert. Muss ich jedoch auf die einzelnen Gast-VMs separat zugreifen? somnathchakrabarti vor 10 Jahren 0
@somnathchakrabarti Ich habe meine obige Antwort geändert, um auf Ihr Problem einzugehen. MariusMatutiae vor 10 Jahren 0
Ich kann jedoch über 127.0.0.1:2222 auf eine einzelne VM-Instanz zugreifen. Ich kann das SSH-Terminal nicht öffnen, damit mehrere VMs von der Befehlszeile aus ausgeführt werden können! Meinen Sie damit, dass ich Ihren erwähnten Befehl in der einzigen VM-Instanz ausführt, die ich SSH kann? somnathchakrabarti vor 10 Jahren 0
@somnathchakrabarti Nein, ich schlage vor, dass Sie vom Host aus ssh me@192.168.56.10 .. verwenden, um auf Ihre VM zuzugreifen. MariusMatutiae vor 10 Jahren 0
Ich habe versucht, über den Putty-Client (läuft auf dem Host) ssh mit der Ziel-IP zu ssh: 192.168.56.101; Port: 2222; Es ist jedoch mit der Nachricht "Network Error: Connection lehnt" fehlgeschlagen. Bitte beachten Sie, dass auf meinem Host beide Gast-VMs mit einem Host-Only-Adapter zusätzlich zu ihrem Standard-NAT-Adapter ausgeführt wurden somnathchakrabarti vor 10 Jahren 0
@somnathchakrabarti Warum Port 2222 ??? Sie haben sshd auf Port 22, versuchen Sie es bitte. Richtige IP-Adresse, falscher Port. Ich wiederhole: Schauen Sie sich die Ausgabe von ss -lntp an. Sie haben sshd an Port 22 und nicht an 2222. MariusMatutiae vor 10 Jahren 0
lasst uns [diese Diskussion im Chat fortsetzen] (http://chat.stackexchange.com/rooms/11747/discussion-between-somnathchakrabarti-and-mariusmatutiae) somnathchakrabarti vor 10 Jahren 0