De netwerkconfiguratie van virtuele machines is niet zo eenvoudig als het lijkt. Je hebt immers de keuze uit heel wat netwerktypes, zoals NAT, bridged of host only. Maar wat zijn nou precies de verschillen? En voor welke toepassingen is elk type het meest geschikt? In deze workshop kom je het te weten!

In dit artikel leggen we de verschillende netwerkinstellingen in VirtualBox uit aan de hand van een aantal voorbeelden. Wil je die voorbeelden ook zelf uitproberen? Installeer dan minstens twee nieuwe virtuele machines in VirtualBox. Zo test je niet alleen of je virtuele machine aan je LAN of het internet kan, maar ook of communicatie tussen de virtuele machines onderling mogelijk is. De netwerkinstellingen van een VM vind je in Virtualbox door op het onderdeel ‘Network’ te klikken. In het venster dat nu verschijnt, configureer je tot vier virtuele netwerkkaarten per VM. (Mocht dat niet volstaan, dan kan je nog vier extra netwerkkaarten toevoegen via de commandline vboxmanage-tool.) Standaard kiest VirtualBox voor ‘NAT’ als netwerktype, omdat dat voor de meeste toepassingen de beste optie is. Maar wij willen alle opties verkennen, dus wijzigen we dit om te beginnen in ‘Internal network’. Die wijziging kan je doorvoeren terwijl je VM al gestart is. Extra netwerkkaarten toevoegen is dan weer enkel mogelijk als de VM niet draait. Voor de voorbeelden in deze workshop heb je slechts één netwerkkaart per VM nodig.

 

Enkel intern

‘Internal network’ van VirtualBox is alleen zinvol wanneer je minstens twee virtuele machines met die optie configureert. Gebruik ook dezelfde naam voor het interne netwerk van beide VM’s (standaard is dit ‘intnet’). Virtuele machines kunnen immers enkel communiceren met andere VM’s in hetzelfde interne netwerk. Het host operating system kan niet aan het netwerk van de virtuele machines en ook omgekeerd zien de VM’s niets van jouw LAN of van het internet. Op het eerste gezicht lijkt dat niet erg praktisch. Zonder internettoegang kan je immers geen software installeren in de guests of bestanden kopiëren tussen de host en de guests. Anderzijds is dit wel de enige manier om het netwerk van jouw guest volledig af te schermen van de host en andere machines op je LAN. Dat is ideaal wanneer je tests wilt uitvoeren met bepaalde netwerkservices, bijvoorbeeld een DHCP- of DNS-server. In een afgeschermd netwerk experimenteer je naar hartenlust zonder het host OS of andere clients in je LAN in de war te brengen.

 

DHCP-server

Na het booten van een VM met een intern netwerk heeft de netwerkkaart in de guest nog geen IP-adres. De ontwikkelaars van VirtualBox gaan ervan uit dat je het guest netwerk in dit geval manueel wilt configureren. Vind je dat toch wat veel werk? VirtualBox bevat gelukkig een ingebouwde DHCP-server om de netwerkconfiguratie te automatiseren. Die DHCP-server is standaard enkel actief bij NAT-netwerken, maar je kan hem ook inschakelen voor een intern netwerk. Daarvoor moet je wel even naar de commandline: met het commando in afbeelding 1 definieer je een DHCP-server voor het intern netwerk ‘intnet’. De DHCP-server krijgt het IP-adres 192.168.20.1 en deelt IP-adressen uit vanaf 192.168.20.2 tot en met 192.168.20.10.

 

 

De configuratie van de DHCP-server(s) vraag je nadien op met het commando ‘vboxmanage list dhcpservers’ en pas je aan met ‘vboxmanage dhcpserver modify –netname <network name>’. ‘vboxmanage dhcpserver’ toont je daarna de beschikbare opties om de configuratie te wijzigen. VirtualBox start de nieuwe DHCP-server echter pas op wanneer een VM gestart wordt met hetzelfde intern netwerk. Draaien je VM’s op dit moment al, dan moet je ze dus even rebooten. Indien het guest OS al geconfigureerd was om via DHCP een IP-adres op te vragen, dan krijgen de VM’s na een reboot de adressen 192.168.20.2 en 192.168.20.3. Beide machines kunnen elkaar pingen, maar tussen de host en de guests is geen communicatie mogelijk (zie afbeelding 2).

 

 

Host-only

Een variant op het  interne netwerk van VirtualBox is ‘Host-only’. Dat netwerktype is identiek aan het voorgaande, met het enige verschil dat ook de host deel uitmaakt van het virtuele netwerk. Eerst moet je echter een Host-only netwerk definiëren via File > Preferences > Network > Host-only Networks. Na een klik op het +-icoontje maakt VirtualBox standaard het netwerk ‘vboxnet0’ aan met IP-adres 192.168.56.1 en een DHCP-server met adres 192.168.56.100 die IP-adressen uitdeelt vanaf 192.168.56.101. Die instellingen kan je eventueel nog aanpassen via het schroevendraaier-icoontje. Open nu terug de netwerkinstellingen van je VM’s en wijzig die naar ‘Host-only Adapter’ met ‘vboxnet0’ als netwerk. In de host verschijnt nu een extra netwerkadapter met die naam en IP-adres 192.168.56.1. De guests krijgen nieuwe IP-adressen via DHCP: 192.168.56.101 en 192.168.56.102. Een host-only netwerk is in de praktijk veel handiger dan een intern netwerk. Je kan immers eenvoudig inloggen op de guests via ssh of configuratiebestanden kopiëren via scp. Ook netwerkservices op de guests zijn beschikbaar voor de host. Maar let wel op dat je voor het host-only netwerk een subnet kiest dat niet overlapt met een bestaand netwerk op je host (dus geen 192.168.0.1 of 192.168.1.1)!

 

NAT

Een nadeel van bovenstaande netwerktypes is dat de guests volledig afgesneden zijn van de buitenwereld. Wil je vanaf de guest aan het internet kunnen, bijvoorbeeld om software te downloaden? Selecteer dan ‘NAT’ als netwerktype voor je VM’s. NAT of Network Address Translation ken je misschien van je router. Het is dankzij NAT dat verschillende machines vanuit jouw LAN op het internet kunnen, ook al heb je maar één publiek IP-adres. VirtualBox’ NAT werkt bijna hetzelfde, maar met één groot verschil: elke virtuele machine bevindt zich in een afzonderlijk netwerk. Er is dus geen communicatie mogelijk tussen de virtuele machines onderling. Sterker nog: elke virtuele machine krijgt hetzelfde IP-adres, nl. 10.0.2.15 met default gateway 10.0.2.2. Omdat NAT geen extra configuratie nodig heeft in het host of guest OS, is dit het standaard netwerktype voor nieuwe VM’s. NAT is meteen ook het meest geschikte type voor virtuele machines die als desktop of client machine dienen. Vanaf de virtuele machine kan je immers probleemloos met de rest van je netwerk of het internet verbinden, terwijl dit omgekeerd niet mogelijk is.

 

Port forwarding

Wil je tóch nog bij de virtuele machine vanaf je LAN, dan zijn er twee opties. De eerste optie is om over te schakelen op bridged networking (zie verder) of configureer je port forwarding. Ook die term klink je misschien bekend in de oren. Met port forwarding zorgt VirtualBox ervoor dat verbindingen op een bepaalde poort in het host OS geforward worden naar de guest. Op die manier kunnen zowel de host als andere machines in je LAN een netwerkservice gebruiken van je VM. Configureer je daarbij nog eens port forwarding van je router naar de host, dan kan je zelfs vanaf het internet aan je virtuele machine. Bij virtuele machines met NAT-networking verschijnt er een extra knop ‘Port forwarding’ in VirtualBox’ netwerkinstellingen onder het kopje ‘Advanced’. Voor elke port forwarding rule geef je een naam op, samen met host IP/host port en guest IP/guest port. In afbeelding 3 zie je een eenvoudig voorbeeld waarbij we verbindingen naar poort 2222 op de host forwarden naar port 22 op de guest. Wil je de VM enkel openstellen voor de host en niet voor je LAN? Gebruik dan 127.0.0.1 als host IP. Let wel op dat je als host port geen poortnummers onder 1024 gebruikt, want dat werkt niet (enkel root kan op die poorten services starten).

 

 

NAT network

Met NAT komen virtuele machines op je netwerk en via port forwarding stel je specifieke services op je VM open voor andere hosts in je LAN. Maar communicatie tussen verschillende guests is nog steeds niet mogelijk. Die beperking wordt opgeheven door ‘NAT Network’, een nieuwe feature in VirtualBox 4.3. Net zoals bij NAT, neemt VirtualBox de rol van DHCP-server én router op zich, maar nu kan je meerdere guests in hetzelfde netwerk plaatsen. Vergeet niet om eerst een NAT netwerk te definiëren in File > Preferences > Network > NAT Networks. Standaard maakt VirtualBox een netwerk met de naam NatNetwork aan en network range 10.0.2.0/24. Port forwarding stel je nu in per netwerk en niet meer per VM, maar voor de rest is dit niet anders dan wat hierboven is uitgelegd. Uiteraard kan je virtuele machines groeperen in verschillende NAT-netwerken. Je hoeft dus niet alle VM’s in slechts één netwerk te plaatsen.

 

Zodra het NAT netwerk klaar is, kan je dit instellen bij de verschillende virtuele machines. Een reboot is in principe niet nodig: normaal detecteert het guest OS de gewijzigde netwerkconfiguratie en vraagt het een nieuw IP-adres aan. Je eerste VM behoudt het IP-adres 10.0.2.15, maar je tweede VM krijgt een ander adres, bijvoorbeeld 10.0.2.4. Op die manier kunnen services op verschillende VM’s samenwerken, bijvoorbeeld een webserver op één VM met een database op een tweede VM. Een NAT network is dus een prima optie om een afzonderlijk netwerk van virtuele machines op te zetten. Clients in je bestaande netwerk hebben géén toegang tot die virtuele machines, tenzij tot die services die je expliciet beschikbaar stelt via port forwarding. Anderzijds kunnen de VM’s wél aan de rest van je netwerk en aan het internet.

 

Bridged

Tot nu toe hebben we netwerkconfiguraties bekeken die vooral nuttig zijn voor twee toepassingen:

·        tests met VM’s die losstaan van je netwerk: internal en host-only;

·        client VM’s met uitgaand netwerkverkeer naar jouw LAN en het internet: NAT en NAT network.

 

In combinatie met port forwarding is het bij de twee laatste netwerktypes ook mogelijk om netwerkservices op een virtuele machine te hosten. Maar ben je echt van plan om een virtuele machine als server in te zetten, dan is VirtualBox’ laatste netwerktype een betere optie. Een zogenaamde ‘Bridged adapter’ zorgt er namelijk voor dat de virtuele machine rechtstreeks aan een bestaande netwerkkaart op het host OS gekoppeld wordt. Op die manier krijgt de VM een IP-adres van de DHCP-server in je LAN en gaat ‘ie ook rechtstreeks via je router naar het internet. Er is geen omweg meer via NAT binnen VirtualBox en ook port forwarding behoort tot het verleden. Met een bridged adapter heeft elke virtuele machine dus dezelfde netwerkmogelijkheden als een fysieke machine. Het enige wat je daarvoor nog hoeft te doen, is de juiste fysieke netwerkinterface van je host kiezen. De meeste machines hebben maar één of twee netwerkkaarten: eth0 voor een bekabelde verbinding en wlan0 voor een draadloze verbinding. Kort samengevat, is bridged networking dus de beste keuze voor servertoepassingen, terwijl NAT/NAT Network prima volstaan voor client-toepassingen. Internal network en host-only zijn dan weer uitermate geschikt om de meeste gekke experimenten uit te voeren zonder enige impact op je LAN. In tabel 1 zie je een korte samenvatting van het type netwerkverkeer dat in elke configuratie mogelijk is.

 

 

 

 

Geavanceerde instellingen

VirtualBox’ netwerkinstellingen bevatten nog enkele andere opties onder het ‘Advanced’-menu. Niet alle opties zijn beschikbaar bij elk netwerktype. We lopen kort de verschillende opties door:

·        Adapter Type: het type netwerkkaart dat VirtualBox moet emuleren. Niet elk guest OS ondersteunt zonder bijkomende drivers elk type netwerkkaart. Standaard kiest VirtualBox een Intel Pro/1000 MT Desktop, omdat dit de beste performance biedt in de meeste besturingssystemen. Voor Linux guests kies je echter beter de optie ‘Paravirtualized Network (virtio-net)’.

·        Promiscuous Mode: dit bepaalt of de guest ook netwerkverkeer voor andere machines mag zien of niet. Standaard is dit uitgeschakeld: deze optie is enkel nuttig voor geavanceerde network troubleshooting.

·        MAC Address: om zelf een specifiek MAC-adres in te stellen. Dit is zelden nodig (VirtualBox kiest automatisch een uniek MAC-adres).

·        Cable Connected: om de ‘virtuele’ netwerkkabel even in- en uit te trekken. Dat is soms handig om een herconfiguratie van de netwerkinstellingen in de guest af te dwingen.

 

VLAN’s

Op zogenaamde smart switches kan je je netwerk onderverdelen in meerdere virtuele LAN’s ofwel VLAN’s. Dat is handig om bijvoorbeeld al het netwerkverkeer van een WLAN voor gasten netjes af te schermen van jouw eigen LAN. Je wilt toch niet dat gasten plots je netwerkprinter of NAS beginnen te gebruiken? Maar misschien wil je tóch een beperkt aantal netwerkservices aanbieden aan je gasten. Wat dacht je dan van een aparte virtuele machine in die afgescheiden VLAN? We leggen hier kort uit hoe dat in zijn werk gaat. De precieze procedure hangt uiteraard af van het type smart switch. Voor onze test gebruikten we een Netgear GS724Tv4. Om te beginnen plaats je de switch port van de VM host in beide VLAN’s: VLAN 1 is ons eigen LAN en VLAN 10 is het gastnetwerk. Let ook op dat de VLAN membership voor beide VLAN’s op Tagged (en niet op Untagged) staat.

 

Vervolgens configureer je twee extra virtuele interfaces op de host. In principe kan dat vanuit Network Manager: rechtsklik op het netwerkicoontje in de statusbalk, kies “Edit Connections”, klik op “Add”, selecteer: “VLAN” in het onderdeel “Virtual” en klik op “Create”. In afbeelding 5 zie je de benodigde instellingen voor een VLAN met ID 10. Herhaal de procedure voor VLAN 1 en schakel tot slot de IP-configuratie van de oorspronkelijke netwerkinterface (eth0) uit. Je hebt nu twee interfaces: eth0.1 in jouw LAN en eth0.10 in het gastnetwerk. Helaas was tijdens onze test in Linux Mint 17 slechts één van de twee VLAN’s actief, wellicht omdat ze allebei hetzelfde MAC-adres probeerden te gebruiken. We hebben dit niet direct kunnen oplossen, ook al vulden we zelf een verschillend MAC-adres in. Een andere manier om de VLAN’s te configureren is het “vlan”-pakket installeren, Network Manager uitschakelen en de VLAN interfaces in het bestand /etc/network/interfaces te configureren (zie afbeelding 6). We gaan ervan uit dat je router op beide VLAN’s via DHCP IP-adressen uitdeelt. Op dit moment zou je host dus twee IP-adressen in twee verschillende network ranges moeten hebben (bv. 192.168.1.47 in VLAN 1 en 192.168.10.17 in VLAN 10).

 

 

 

 

Uiteindelijk selecteer je in VirtualBox voor je VM één van de twee nieuwe interfaces, afhankelijk van de VLAN waarin hij terecht moet komen. De VLAN-configuratie is volledig transparant voor de guest. Je ziet dus gewoon een eth0-interface, die in de ene VM een IP-adres in de VLAN1-range zal krijgen en in de andere VM een IP-adres in de VLAN10-range. In afbeelding 7 zie je de VirtualBox-configuratie voor VLAN 10 en het resultaat in een Debian-guest.

 

 

We hopen alvast dat je door bovenstaande voorbeelden een goed inzicht hebt gekregen in VirtualBox’ netwerkmogelijkheden. Op het eerste zicht lijken die misschien erg overweldigend, maar daardoor is VirtualBox geschikt voor heel uiteenlopende toepassingen. Ben je toch even het overzicht kwijt, dan vind je in tabel 1 snel terug welk netwerktype voor jouw behoeften in aanmerking komt.