Affinché ogni VM risponda ad un indirizzo IP della LAN (indirizzo privato) è sufficiente configurare la sua interfaccia virtuale con l'indirizzo scelto (ad es. del tipo 192.168.0.X) come fosse, lato guest, una normale interfaccia di rete: VMware permette di fare il "bridging" tra la scheda virtuale della macchina guest e la scheda fisica della macchina host, ovvero utilizza la medesima scheda di rete fisica ma con indirizzi diversi. È come avere, a livello logico, più macchine differenti in rete.
Sulle interfacce di rete dell'host non vanno apportate modifiche, VMWare crea automaticamente un'interfaccia di bridging chiamata Vmnet0
. Su VMware selezioniamo appunto la modalità bridging.
Supponiamo che gli IP siano così impostati: guest_db (sul quale faremo un'installazione sicura di MySQL) 192.168.0.201 e guest_web (sul quale faremo un'installazione sicura di Apache e PHP) 192.168.0.202.
Esempio di un possibile guest_db che gira sull'host (qui sul mio PC di sviluppo, in modalità grafica):
Affichè MySQL possa comunicare con guest_web dobbiamo configurare il file my.cnf
e creare un utente abilitato alla connessione. Ecco come.
Nel file my.cnf
commentate la riga: bind-address = 127.0.0.1
e permettere a mysqld
di accettare connessioni dalla rete.
Per creare un utente abilitato alla connessione, dalla shell di guest_db digitate i seguenti comandi:
mysql -uutente_root -p <password_root> GRANT ALL ON dbase.* TO myuser@192.168.0.202 IDENTIFIED BY 'nuova.passuwch39r-p??.f-wru309vf43';
MySQL penserà a creare utente e permessi.
Su guest_web potremo, a questo punto, provare uno script PHP (di esempio) del tipo:
<?php $db_host = "192.168.0.201"; $db_user = "myuser"; $db_password = "nuova.passuwch39r-p??.f-wru309vf43"; $db_name = "dbase"; if ($db = @mysql_connect($db_host, $db_user, $db_password)) { if (@mysql_select_db($db_name, $db)) { if ($result = @mysql_query("SELECT * FROM tabella_utenti", $db)) while ($rslt = @mysql_fetch_array($result)) echo strip_tags($rslt['utente'])."
"; else die ("Sintassi SQL errata."); } else die ("No database."); @mysql_close($db); } else die ("Errore nella connessione al database."); ?>