collegare switch VBox a LAN reale.

9 risposte [Ultimo contenuto]
Ritratto di whitetiger
whitetiger
(Geek)
Offline
Geek
Iscritto: 15/12/2012
Messaggi: 88

In VMware c'è la possibilità di mettere in Bridge/NAT non solo le NIC delle macchine virtuali, ma le reti virtuali che fanno capo ai loro switch virtuali.

Come si fa in VBox?
Io non vedo nessuna funzionalità di questo tipo.
Devo collegare più VM ad un apparto esterno, quindi tutte le VM sono collegate tra di loro su uno switch virtuale, ma come collego questo allo switch fisico al quale è collegato l'apparato?
Dovrei installare una VM che funga da gateway, un server Debian che si limita a mettere in condivisione la NIC del server Host con la sua NIC virtuale ed avendo una seconda NIC virtuale collegata allo switch virtuale dove sono collegate tutte le altre VM, ma questa sarebbe una complicazione inutile ed uno spreco di risorse sul server host.

Appunto, ci dovrebbe essere un modo per virtualizzare lo switch e collegarlo all'esterno direttamente (sempre attraverso la NIC del server Host.

Grazie in anticipo

Ritratto di homeless
homeless
(Guru)
Offline
Guru
Iscritto: 21/10/2011
Messaggi: 1325

Puoi fornire uno schema della topologia ?

Ritratto di whitetiger
whitetiger
(Geek)
Offline
Geek
Iscritto: 15/12/2012
Messaggi: 88

homeless ha scritto:

Puoi fornire uno schema della topologia ?

Ops, controllo tutti i giorni e non mi ero mai accorto della tua risposta.
Strano. Che sia la cache di Squid?

Comunque, rispondenti a mia volta, guarda la cosa da un punto di vista più generale.

Ho 3 Server VM "guests", ovviamente il server "host" ed una seconda macchina fisica che si deve connettere soltanto alle 3 VM.
La logica vorrebbe che le 3 VM siano collegate ad uno switch virtuale il quale a sua volta è in bridge con una scheda fisica del Host. Questa è poi connessa ad uno switch vero e proprio sul quale, infine, c'è la macchina esterna.

Quindi,se le 3 VM dialogano tra di loro lo fanno attraverso lo switch virtuale; se invece devono dialogare con la macchina esterna lo fanno attraverso i due switch, quello virtuale e quello reale, "collegati" attraverso il bridge dell'host.

In VMWare questo è fattibilissimo.
Crei lo switch virtuale e lo metti in bridge con la scheda dell'Host.

In VBox, no! Lo switch virtuale serve per creare delle reti private tra i Guest o al massimo tra queste e l'host, ma non verso l'esterno.

Io ho risolto la cosa mettendo tutte le macchine virtuali in bridge con la scheda dell'Host, senza creare lo switch virtuale.
Sarei curioso però di sapere a livello di traffico che succede perché a naso la scheda adesso funge da Hub.

La soluzione c'è con un tool che ho trovato in giro, ma richiede di creare una LAN virtuale nel Host per collegare questa allo switch virtuale.
Solo che si dà per scontato che lo si sappia fare, ma io non ho trovato in giro doc per creare la LAN virtuale in Debian.
Mi ripromettevo di cercare meglio, poi me la sono cavata mettendo tutto in bridge.

Ma il problema è ancora aperto. Se trovassi una qualche guida di riferimento, riprendo volentieri il discorso.

Fin qui il problema nei suoi aspetti generali.
Nel concreto ciò che ho da fare è mettere delle VM in una DMZ dove c'è già un'altra macchina fisica.

Le strade percorribili erano due.
1) Creare il Server firewall con le tre schede: verso la WAN, la LAN e la DMZ. Nella DMZ creavo il server VBox con le VM.
In questo modo però creavo un server fisico in più da tenere sempre acceso.

2) VBox lo carico sul server con le tre schede, però poi devo collegare le VM con la macchina esterna. Da lì il problema sopra descritto.
Aggiungevo solo un'ulteriore VM Guest che fungeva da firewall, ammesso che non valesse la pena gestire le Iptables nel server hosts. Da qui la necessità di capire come funzionasse la LAN virtuale creata.

Ritratto di pietro
pietro
(Collaboratore)
Offline
Collaboratore
Iscritto: 30/06/2005
Messaggi: 1123

Allora: non mi intendo molto di networking, ma secondo me fai un po' di confusione sulla terminologia. Se hai due LAN differenti, la comunicazione tra le due reti avviene attraverso il routing e non il bridging. Il primo agisce al livello 3 della terminologia OSI, il secondo al livello 2.

Detto questo, evidentemente VMware abilita il routing tra le due sottoreti, quella dell'host e quella del guest, mentre VirtualBox non lo fa. Nulla pero' vieta di farlo a mano!

Se vai nelle preferenze di VirtualBox (hypervisor, non guest) puoi impostare le sottoreti. Te ne crei una se gia' non l'hai fatto ed imposti la VM in modalita' host-only. Una volta fatta partire la VM vedrai una nuova NIC virtuale sull'host, col nome che le hai dato in configurazione (solitamente vboxnet0).

A questo punto con un paio di comandi iptables crei le opportune regole di routing tra la NIC fisica del PC (es. eth0) e quella virtuale dell'hypervisor (vboxnet0).

I comandi da dare sull'host (assumendo che le interfacce fisica e vbox si chiamino rispettivamente eth0 e vboxnet0) sono piu' o meno i seguenti:

echo "1"> /proc/sys/net/ipv4/ip_forward
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface vboxnet0 -j ACCEPT

Ma non li ho provati, sto andando al 'buio', prova ad eseguirli e se non riesci cerca un po' in Internet, ma spero che almeno il concetto sia chiaro. Il primo comando serve per abilitare l'ip forwarding nel kernel.

Ciao
Pietro

Debian. Be unique.

Ritratto di whitetiger
whitetiger
(Geek)
Offline
Geek
Iscritto: 15/12/2012
Messaggi: 88

Allora, sono messo male con ciò che ho in mano e mi devo arrangiare con quello che passa il convento.
Di solito lavoro con VMWare, ma ora ho solo questo server; è ben carrozzato, ma piuttosto vecchiotto.
VMWare non è installabile perché il processore non ha il VT.
Quindi ho buttato tutto su VBox.

Più che alla differenza bridging/routing io facevo riferimento alle modalità di VBox per connettere le VM.
C'è il NAT, il Bridge, la modalità che crea una rete isolata e quella che consente il collegamento solo con l'host.
Questa è probabilmente quella che dici tu.

Più tardi provo, ma se non ho preso fischi per fiaschi, serve proprio per isolare la rete VBox dalla rete fisica, permettendo di dialogare solo con l'host.
Mi sembra strano che poi si riesca a scavalcarla con delle regole iptables.
Poi ci provo.

Intanto grazie

Ritratto di pietro
pietro
(Collaboratore)
Offline
Collaboratore
Iscritto: 30/06/2005
Messaggi: 1123

whitetiger ha scritto:

Più tardi provo, ma se non ho preso fischi per fiaschi, serve proprio per isolare la rete VBox dalla rete fisica, permettendo di dialogare solo con l'host.
Mi sembra strano che poi si riesca a scavalcarla con delle regole iptables.

Non scavalchi nulla: la rete e' isolata perche' non e' "routata" verso l'esterno, ma se usi iptables puoi usare l'host come router. Se poi c'e' qualche blocco fisico nel driver della virtual lan, questo non posso saperlo.

Pietro

Debian. Be unique.

Ritratto di harada83
harada83
(Junior)
Offline
Junior
Iscritto: 17/03/2013
Messaggi: 25

Io ho "copiato" in parte quello che fa vmware.

Tramite i bridge-utils ho creato N bridge

esempio di bridge in /etc/network/interfaces

auto vmbr10
iface vmbr10 inet static
address 192.168.10.254
netmask 255.255.255.0
bridge_ports none

auto vmbr150
iface vmbr150 inet static
address 192.168.150.254
netmask 255.255.255.0
bridge_ports none

poi grazie ad una regola iptables come quelle consigliate da pietro

# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE

permetto l'uscita dei pacchetti dai bridge verso verso la porta eth0, in piu grazie al primo comando permetto il routing tra le interfaccie.

Da virtual box collego le macchine ad uno dei bridge ottendo sia la possibilità di instradare i pacchetti verso l'estrno del pc, inoltre posso amministrare direttamente le macchine via ssh, e rendere le macchine "private" ovvero non visibili dall'esterno del mio pc.

Le macchine virtuali dovranno avere un ip compatibile con l'ip del bridge scelto e come gateway l'ip del bridge.

Inoltre nella mia soluzione utilizzo dnsmasq come server dns e dhcp (similente a quello che fa vmware).

Spero di essere stato chiaro.

Ritratto di MariusMatutiae
MariusMatutiae
(Junior)
Offline
Junior
Iscritto: 10/09/2013
Messaggi: 15

whitetiger ha scritto:

In VMware c'è la possibilità di mettere in Bridge/NAT non solo le NIC delle macchine virtuali, ma le reti virtuali che fanno capo ai loro switch virtuali.

Come si fa in VBox?

La risposta precedente ti dice come collegare le due reti (quella alla quale è connesso il tuo pc, chiamiamola LAN1, e quella costruita dalla tua VM, LAN2), se vuoi nattare le due. In altre parole, la tua macchina virtuale agisce come un router, rispetto alla rete LAN2: vede la LAN1 come se fosse internet, e non risulta accessibile dalla LAN1.

Puoi, come giustamente suggerisci tu, anche decidere di mettere le due in bridge: e cioè, far partecipare anche le macchine connesse alla LAN2, alla LAN1, a pieno titolo. A questo punto, le machhine delle due LAN avranno numeri IP appartenenti alla medesima subnet, potranno parlarsi liberamente, e accedere alle medesime risorse.

Se è questo che vuoi ottenere, devi:

1) mettere in bridge l'IF fisica del tuo pc e quella ethernet della tua macchina virtuale. VBox è perfettamente attrezzata a far ciò.
2) da dentro la VM, metti in bridge l'IF ethernet (e cioè, quella della VM che parla con la LAN1) con l'altra IF, quella che gestisce la LAN2. Assicurati di non avere dnsmasq/dhcp sulla LAN2, perchè il router della LAN1 si prende cura di tutto. Et voilà.

Per esempio, se la VM controlla una pennetta wifi USB, puoi installare hostapd per fare un AP, e mettere in bridge eth0 e wlan0 della VM; a questo punto tutto il traffico della VM è mandato all'interfaccia fisica del PC, e da questo al tuo router. Piece of cake.

Si può fare, ma non capisco il perchè di questa configurazione. Ammetti di avere n VM. In VBox puoi metterle in comunicazione con la LAN1 mediante bridge: a questo punto tutte le VM, al pari delle macchine fisiche, sono membri della stessa rete privata, e si parlano senza alcun bisogno di altro artificio. E' vero che i pacchetti escono dal tuo pc, per andare fino al router e ritorno, ma, vista la velocità delle reti di oggi, ti sfido a notare un ritardo.

Se non sai come si fa il bridge: seleziona la VM, senza avviarla; sulla colonna di destra, scegli fra le impostazioni, "Networking"; fra le opzioni, ove c'è scritto NAT, puoi scegliere invece Bridge. Fatto. Ciao.

Numquam latravit inepte

Ritratto di whitetiger
whitetiger
(Geek)
Offline
Geek
Iscritto: 15/12/2012
Messaggi: 88

Come sempre le cose si accavallano e non si riesce mai a portarle a termine. Devo riprendere tutto il discorso per bene anche perché si sono ricordati che c'era questo progetto in piedi ed ora ovviamente hanno fretta Phbbbbt! .

Lo so come si fa il bridge ed è il metodo classico che utilizzo.
Il punto è che ci sono tre tipi di macchine esterne.
1) Le macchine nella LAN le vedo con il bridge con una scheda di rete.
2) le macchine nella "WAN" (modem, ecc.) le vedo con un bridge su una seconda scheda.

Poi però ho delle macchine nella DMZ che sono sia macchine virtuali, che macchine reali.
Da come dite voi dovrei fare un terzo bridge su una terza scheda per mettere queste in comunicazione e lavorare con IPTables per instradare il tutto correttamente.

Ero partito proprio così, adesso non mi ricordo nemmeno più perché mi ero bloccato. Devo riprendere i miei appunti.
Visto che devo in ogni caso riprendere in mano il progetto lo farò senz'altro.

In ogni caso a VBox manca la gestione delle VLAN che mi risolverebbe un sacco di noie.

Grazie intanto.

Ritratto di pietro
pietro
(Collaboratore)
Offline
Collaboratore
Iscritto: 30/06/2005
Messaggi: 1123

whitetiger ha scritto:


In ogni caso a VBox manca la gestione delle VLAN che mi risolverebbe un sacco di noie.

Direttamente dentro VirtualBox no, ma utilizzando uno strato virtuale di rete esterno, come ad esempio VDE (Virtual Distributed Ethernet), dovresti essere in grado di gestire il VLAN tagging connettendo le VM allo switch virtuale dove definirai le varie VLAN.

Pietro

Debian. Be unique.