Communication entre un hote et une VM

Fermé
rwikus Messages postés 871 Date d'inscription lundi 29 décembre 2008 Statut Membre Dernière intervention 18 mai 2012 - 1 oct. 2010 à 23:33
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 - 6 oct. 2010 à 01:01
Bonjour,

voila j'utilise "virtualbox" sur mon pc qui a comme os "windows 7"
j'ai créé un serveur debiant avec virtualbox,
j'ai remarqué que lorseque je fais sur ma vm:
"ifconfig"
j'ai ça qui s'affiche:

lo link encap:boucle locale
inet adr:127.0.0.1 masque:255.0.0.0
up loopbacj running mtu:16436 metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:560(560.0 B) TX bytes:560 (560.0 B)
et la communication entre le hote (machine local sous win 7)et la machine virtuel (debian)
était impossible par exemple si je faisais :
pour aller sur le port 22 de la VM en passant par le port 2222 de l'hôte :
vboxmanage modifyvm "ServeurVirtuel" --natnet1 "guestssh,tcp,,2222,,22"
une fois que je démare la vm j'ai une erreur qui s'affiche.

et si je fais "dhclient", lorsque j'ai fait a nouveau "ifconfig" ,ce qui s'affiche c'est:
eth3 link encap:Ethernet HWaddr 08:00:27:24:88:02
inet adr:10.0.2.15 Bcast:10.2.0.255 masque:255.0.0.0
up BROADCAST RUNNING MULTICAST mtu:1500 metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:590(590.0 B) TX bytes:342 (342.0 B)

maintenant pour aller sur le port 22 de la VM en passant par le port 2222 de l'hôte :
ça marche

j'aimerai comprendre ce qui a changé exactement

merci pour votre aide

9 réponses

mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
Modifié par mamiemando le 2/10/2010 à 01:30
Oublions le temps d'un paragraphe la machine virtuelle. Quand tu branches un PC en réseau, celui-ci émet souvent une requête DHCP en vue de configurer le réseau (routes IP, adresse IP, DNS...). Sous linux ceci peut se faire grâce à la commande dhclient.

On peut typiquement voir ces informations sous Linux avec les commandes :

/sbin/ifconfig -a 
/sbin/route -n 
cat /etc/resolv.conf


De plus, d'un point de vue réseau, un serveur (par exemple ssh) écoute sur un port. Les ports servent a séparer le trafic reçu par une machine vers ses différents serveurs réseau. Concrètement l'association entre un port et une application est arbitraire, mais on suit pour pouvoir sous entendre les ports côté client des associations "normalisées" (typiquement 22 pour ssh, 21 pour ftp etc... cf /etc/services sous linux).

À ce stade tu as redirigé le port 2222 du système hôte (celui dans lequel tu as installé virtualbox) vers le port 22 du système invité (celui qui est installé dans virtualbox) avec ta commande vboxmanage...

En effet, dans le mode que tu utilises (mode NAT je crois), tout se passe comme si ton système hôte était à la frontière :
- d'un réseau local (typîquement les machines connectées à ta box), dont les IP commencent souvent par 192.168....
- et d'un autre réseau local (regroupant le système hôte et invité), dont les IP commencent sous virtualbox par 10.1.2....

Ainsi le système hôte est une sorte de "pont" entre les deux.

Internet 
   | 
   | 
@ip publique 
box 
192.168.1.1 
   | 
   |--- 192.168.1.10 Système hôte 
                              10.1.2.???
                                 |
                                 |---- 10.1.2.15 Système invité


Ainsi, tout le trafic reçu par ton système hôte sur le port 2222 est redirigé vers le port 22 de ta machine virtuelle. C'est exactement le même principe que quand tu fais une redirection de port sur ton routeur pour pouvoir héberger une partie dans un jeu. Le trafic associé au jeu n'est pas destiné à ta box mais bien à ton PC. Or les autres joueurs émettent le trafic à destination de ton IP publique (donc de ta box). Il faut donc que ce trafic soit propagé jusqu'à ton PC sinon il ne l'atteint jamais (car il est adressé à la box qui ne sait quoi en faire... et qui donc le jette).

Pour établir le lien entre le système hôte et invité, de la même façon que ton système hôte a effectué une requête DHCP pour se connecter à ta box, ton système invité à fait de même auprès du système hôte. En réalité, Virtualbox a fait croire au système invité que la requête DHCP avait été bien traitée et a renvoyé une réponse au système invité pour qu'il se configure avec l'IP 10.1.2.15.

Dès lors, comme les deux systèmes sont "connectés", la redirection de port peut se faire.

Note que virtualbox permet dans les paramètres réseaux de relayer les signaux réseaux pour que le système invité se comporte comme s'il s'agissait d'un système réel à part entière (et utiliser une IP du réseau local de ta box). Il suffit de changer dans les paramètres réseaux 'Accès NAT' en 'Accès par pont'.

Bonne chance
5
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
2 oct. 2010 à 13:04
Si, car du coup ta VM utiliserait une IP en 192.168.1.... Et au niveau du réseau tout se passerait comme indiqué ci-dessous :


Internet 
   | 
   | 
@ip publique 
box 
192.168.1.1 
   | 
   |--- 192.168.1.10 Système hôte 
   |
   |--- 192.168.1.11 Système invité


Tout se passe donc "comme si" pour ta box il y avait réellement deux machines connectées directement à elle.

En outre il n'y aurait pas besoin de faire de redirections de port au niveau du système hôte puisqu'il ne ferait plus office d'intermédiaire entre la box et le système invité et en conséquence, on pourrait tout à fait imaginer avoir un serveur ssh sur le système hôte ET le système invité écoutant tout les deux sur le port 22.

Ceci n'est pas possible en l'état en accès NAT, car il faudrait par exemple le port 22 pour le système hôte et rediriger le port 2222 pour le système invité pour distinguer au niveau du système hôte le trafic ssh destiné au système hôte et invité.
2
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
3 oct. 2010 à 01:40
C'est normal lo est l'interface de boucle locale (loopback) et n'a rien à voir avec ta carte réseau (typiquement eth0 pour de l'ethernet). Virtualbox simule auprès de l'OS invité une interface réseau virtuelle ethernet qui n'a rien à voir avec ce que ton PC peut contenir en réalité, mais ça reste néanmoins elle qui est utilisée par l'OS invité pour accéder au réseau.

En d'autre termes, lo et 127.0.0.1 tu oublies, c'est pour travailler en local (http://localhost par exemple utilise lo), ce qui nous intéresse, c'est l'état de la carte "eth".

Bonne chance
2
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
4 oct. 2010 à 23:02
Ton interface lo aura effectivement toujours une IP en 127.0.0.1. C'est le principe de l'interace de loopback.

Seules les interfaces réseaux ethernet, usb ou wifi peuvent récupérer auprès de ton routeur une adresse IP en 192.168....

Bonne chance
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rwikus Messages postés 871 Date d'inscription lundi 29 décembre 2008 Statut Membre Dernière intervention 18 mai 2012 56
2 oct. 2010 à 10:27
merci bcp pour ton explication, ça me parait plus clair,
en effet j'utilise "nat" mais la machine dans laquelle j'ai installé "virtualbox" est connectée a un réseau public (wifi) et non a une box, dans mon tp y'a mentionné que je dois utilisé "nat", ça change rien si je met "accès par pont"?
ça permettra a la machine de sauvegarder son ip lorsque je ferai dhclient?
0
rwikus Messages postés 871 Date d'inscription lundi 29 décembre 2008 Statut Membre Dernière intervention 18 mai 2012 56
2 oct. 2010 à 19:26
le probléme c'est que j'ai utilisé ça dans un autre pc ça a marche sous nat:
j'ai fait dhclient et ça a changé son adresse ip de façon permanante (10.0.2.15) au lieu de 127.0.0.1
moi j'ai tjr 127.0.0.1 qui s'affiche dans "lo" et j'ai pas de "eth"
0
rwikus Messages postés 871 Date d'inscription lundi 29 décembre 2008 Statut Membre Dernière intervention 18 mai 2012 56
3 oct. 2010 à 10:56
c'est ce que j'ai compris d'aprés tes explication,
mais d'aprés toi en mode nat c'est impossible de configurer une carte reseau virtuel?
parceque j'ai demandé a des collégue ça marche chez eux, ils ont fait un dhclient et quand ils ferment leur vm puis la réouvre, la carte est tjr configurés
0
rwikus Messages postés 871 Date d'inscription lundi 29 décembre 2008 Statut Membre Dernière intervention 18 mai 2012 56
5 oct. 2010 à 23:02
oui mais moi je veux que mon adresse eth0 de ma carte virtuel garde la méme adresse ip que le dhcp m'attribue lorsque je fais "dhclient"
le problème lorseque je ferme ma vm et que je la redémarre je pert cette ip et j'ai "0.0.0.0"
vous m'avez compris?
0
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
6 oct. 2010 à 01:01
Oui c'est normal. Quel que soit l'OS (windows linux...) qu'il soit virtualisé ou pas, quand tu éteins ta machine, celle-ci envoie au serveur DHCP un "realease" et donc cette IP devient à nouveau distribuable à une autre machine par le serveur DHCP.

De plus à ce stade, rien n'est configuré pour que la machine fasse implicitement une requête DHCP au démarrage. Ceci se configure dans /etc/network/interfaces.

sudo nano /etc/network/interfaces


Typiquement on y mettrait :

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp


En tant qu'interface marquée "auto", eth0 serait configurée au démarrage (ici en DHCP).

Ceci dit, ceci ne garantit en rien que tu recevras la même IP, même si c'est assez probable. Tout dépend de la longueur du bail DHCP (il ne faut pas que celui-ci ait eu le temps d'expirer entre un release et la requête DHCP suivante). Ceci se configurerait côté serveur DHCP (typiquement au niveau de ton routeur). Tout ceci n'a d'intérêt que si la VM est sur le réseau local réel (accès par pont).

Généralement un routeur peut se configurer via une interface web. Typiquement si ton routeur utilise l'IP 192.168.1.1 :
http://192.168.1.1

Autre possibilité, on demande au serveur DHCP d'attribuer systématiquement une IP donnée en fonction de l'adresse MAC de la carte (cf commande ifconfig).

Dernière possibilité, on utilise un adressage statique en dehors de la plage d'adresse IP gérées par le serveur DHCP.
0