Je m’excuse par avance pour mon titre qui je l’avoue n’est pas très clair.
Mon but est de tester l’installation d’une Debian via un boot par le réseau.
Pour m’éviter de jongler avec deux claviers, deux souris, deux moniteurs etc… j’ai choisi de tester le tout sous VirtualBox avant de le faire en vrai.
Pour recevoir les fichiers nécessaires à l’installation, le PC invité (virtualisé) à besoin de recevoir une configuration réseau (via un serveur DHCP) du PC hôte.
mais le PC invité indique qu’il ne reçoit aucune offre de DHCP alors qu’il y a bien des “DHCPOFFER from <@MAC> via eth0” dans les logs.
Remarquez que j’ai tout fait en root pour être sûr que le problème ne vienne pas des droits.
Notez aussi que si je remplace ‘ifconfig br0 192.168.1.102’ par ‘dhclient br0’ alors j’obtiens “No DHCPOFFERS received. No working leases in persistent database - sleeping.”
Je poste ici mes fichiers de configurations : + /etc/default/dhcp3-server
#Si je met INTERFACES="eth0", DHCP rétorque "Not configured to listen on any interfaces"
INTERFACES=""
Il n’y a pas que le titre qui n’est pas très clair !
Pourquoi créer un pont entre tap0 et eth0 ?
De quel serveur DHCP eth0 obtient-elle sa configuration IP ?
Si eth0 doit être intégrée au pont br0, il ne faut pas lui attribuer une configuration IP dans /etc/network/interfaces, c’est à br0 qu’il faut l’attribuer. En fait eth0 doit quasiment disparaître partout au profit de br0.
Le serveur DHCP est sur la machine hôte ? Sert-il d’autres machines que la machines virtuelle ?
Si le serveur DHCP doit être accessible par la machine virtuelle, il doit écouter sur br0 et non eth0. Mais l’adresse IP 192.168.1.102 configurée sur br0 ne correspond pas au sous-réseau 192.168.0.0/24 défini dans dhcpd.conf.
VirtualBox offre quatre ‘modes’ réseau à savoir
[ul][li]Non attaché donc aucune connexion[/li]
[li]NAT qui permet l’utilisation d’Internet depuis le PC invité
Mais ceci ne marche pas pour les serveurs dont DHCP.[/li]
[li]Réseau interne qui permet de mettre en réseau (uniquement) plusieurs machines virtuelles[/li]
[li]et adaptateur réseau qui (si j’ai bien compris) permet d’avoir le PC invité présent dans le LAN (comme un vrai PC donc)[/li][/ul]
Effectivement, si ce que je raconte est faux, ça change tout.
Le serveur DHCP est présent sur le PC hôte.
Donc il faudrait que je remplace
allow-hotplug eth0
iface eth0 inet dhcp
par
allow-hotplug br0
iface br0 inet dhcp
Oui // Non
J’ai deux PCs, deux moniteurs, deux claviers, deux souris, un câble type RJ45 et un modem USB pour l’accès au net, pas plus.
Dois-je donc mettre INTERFACES=“br0” dans /etc/default/dhcp3-server ?
Argg. Pas fait attention, désolé.
À force de lire plusieurs tutos par ci par là, je finis par faire les commandes sans réfléchir.
Les deux :
DHCPDISCOVER from <@MAC_vBox_Adaptateur0> via eth0
DHCPOFFER on <@IP_inconnue> to <@MAC_vBox_Adaptateur0> via eth0
avec @IP_inconnue qui vaut 192.168.0.6 (adresse ip de eth0 ?) mais qui change à chaque fois. Je soupçonne DHCP mais si c’est le cas, cela signifie qu’il fait son boulot. Enfin, ça serait mieux si ifconfig me l’indiquait.
Mais comme ils ne sont pas dans le même réseau, c’est normal que ça ne marche pas.
Je vais faire les modifications que tu proposes et je reviendrait poster les résultats.
Je ne me souviens pas que VirtualBox gérait tout ça. Quand je l’avais utilisé, tout ce qu’il faisait c’était une liaison entre une paire d’interfaces ethernet virtuelles entre la machine hôte (tapX) et la machine virtuelle, et il fallait se débrouiller soi-même pour gérer les interfaces. Tu ne confondrais pas avec VMware ?
[quote]Les deux :
DHCPDISCOVER from <@MAC_vBox_Adaptateur0> via eth0
DHCPOFFER on <@IP_inconnue> to <@MAC_vBox_Adaptateur0> via eth0
[/quote]
D’accord mais le message avec “from <@MAC>” était bien un DHCPDISCOVER, pas un DHCPOFFER.
C’est l’adresse IP que le serveur DHCP propose au client (la machine virtuelle). Je suppose que c’est bon.
Par contre l’interface n’est pas bonne. Je suppose qu’il se passe la chose suivante :
La machine virtuelle envoie une requête DHCPDISCOVER en broadcast, qui est reçue par la machine hôte sur son interface tap0. Comme tap0 est pontée avec eth0 dans br0, le paquet est retransmis en sortie par eth0.
dhcpd écoute à bas niveau sur eth0 (un peu comme ferait tcpdump ou wireshark) et voit passer le paquet (en sortie, mais peu importe apparemment) et y répond en envoyant un DHCPOFFER… mais sur eth0 et non br0. Du coup le paquet n’est pas retransmis sur tap0 et ne parvient pas à la machine virtuelle. Oui, c’est un peu compliqué les relations entre un pont et ses interfaces.
Tu peux créer un pont entre tap0 et eth0, mais comme je l’ai dit il faudra qu’il remplace eth0 partout (accessoirement je trouve bizarre d’utiliser allow-hotplug avec un pont et de configurer une interface en DHCP avec un serveur qui tourne sur la machine elle-même).
Mais tu peux aussi laisser les deux interface eth0 et tap0 indépendantes, avec deux réseaux séparés, configurer tap0 en statique et faire écouter dhcpd dessus.
Le pontage ne se justifie que si la machine virtuelle doit être dans le même réseau que ce qui est connecté à eth0.
Ce qui est bien avec le monde du libre c’est que ça ne peut qu’évoluer.
Je ne sais pas quelle version tu as utilisée mais celle que j’ai (v 1.5.6) propose cela :
Ah ben oui, l’adresse IP de la machine virtuelle, évidemment.
Créer un pont entre tap0 et eth0 … c’est pas ce que je fais avec br0 ?
Le système de boot par réseau implique la présence d’un serveur DHCP (attend un DHCPACK) même si ce dernier ne servira qu’une fois et pour une seule machine.
Quant au “allow-hotplug”, il permet la configuration de l’interface uniquement lorsque celle-ci devient active (au démarrage de la machine virtuelle).
Maintenant, lorsque la machine virtuelle démarre j’ai :
DHCPDISCOVER from <@MAC_VBox> via br0
DHCPOFFER on <@IP_Vbox> to <@MAC_br0> via br0
mais elle ne reçoit aucun des DHCPOFFER.
Pourtant s’ils sont envoyés sur br0, eth0 et tap0 devraient les recevoir, non ?
Oups, ma mémoire me joue des tours. VirtualBox 1.3.8 dont j’ai retrouvé le manuel dans mes archives avait bien toutes ces options de gestion réseau. C’est certainement moi qui avais fait l’impasse à cause de leur faible intérêt.
Ce que j’essaie de dire, c’est que d’après ce que je comprends tu n’as pas besoin de créer un pont entre eth0 et tap0, c’est se compliquer la vie pour rien. Je ne sais pas à quoi est connectée eth0 de la machine hôte, mais tout ce dont tu as besoin est une connexion réseau entre la machine hôte et la machine virtuelle, avec un serveur DHCP qui écoute sur tap0 de la machine hôte. Le serveur DHCP n’a pas besoin d’écouter sur eth0, il ne fournit pas de bail à des machines extérieures. La machine virtuelle n’a pas besoin de communiquer avec l’extérieur. Dis-moi si je me trompe.
J’ai bien compris le but du serveur DHCP sur la machine hôte qui est de fournir une configuration à la machine virtuelle, mais je trouve curieux que eth0 ou br0 de la machine hôte soit configurée par ce serveur.
Quant au “allow-hotplug” sur br0, je doute que br0 change d’état au démarrage de la machine virtuelle.
[quote]DHCPDISCOVER from <@MAC_VBox> via br0
DHCPOFFER on <@IP_Vbox> to <@MAC_br0> via br0[/quote]
DHCPOFFER to <@MAC_br0> ? Normalement ça devrait être l’adresse MAC de la machine virtuelle.
[quote]mais elle ne reçoit aucun des DHCPOFFER.
Pourtant s’ils sont envoyés sur br0, eth0 et tap0 devraient les recevoir, non ?[/quote]
Non, normalement le DHCPOFFER devrait être retransmis seulement par tap0 car le pont devrait associer l’adresse MAC de la machine virtuelle à cette interface dans son cache MAC.
Tu pourrais faire une capture de paquets avec adresse MAC sur tap0 pour voir ce qui passe ? Ex: tcpdump -nvtei tap0
Pourquoi faire simple quand on peut faire compliqué ?
Euh… non
Pourquoi faire compliqué quand on peut faire simple ?
Pour faire une connexion réseau entre les deux machines, il nous faut juste une interface.
Donc j’ai juste besoin de tap0 ?
Oui oui c’est ça.
Inutile en effet.
Mais si je met “auto”, au démarrage, il va vouloir configurer br0… qui n’existe pas. C’est “brctl addbr br0” qui la créé et DHCP n’aime pas configurer des interfaces qui ne sont pas actives.
Enfin bon, c’est toi qui vois.
Étourderie de ma part ?
eth0 n’est reliée à rien donc pour l’instant oui elle ne sert à rien.
Bon alors je résume :
Nous avons deux machines, une hôte et une virtuelle.
Cette dernière a besoin de recevoir une configuration réseau en provenance de la machine hôte.
Pour relier les deux, nous avons besoin d’une interface virtuelle tap0.
Le serveur DHCP ainsi que la machine virtuelle écouterons sur cette interface.
Est-ce que maintenant ce qui s’affiche dans la console de la machine virtuelle diffère de la capture précédente ?
Il se trouve que j’avais justement testé le boot réseau avec VirtualBox, mais c’est fou comme on oublie quand on ne pratique pas. Il me semble qu’un client BOOTP a besoin que le serveur BOOTP/DHCP spécifie un fichier de démarrage et le serveur où le récupérer (par TFTP généralement). Or je ne vois pas de déclarations “filename” et “next-server” dans ton dhcpd.conf. C’est peut-être pour cela que la machine virtuelle ignore le DHCPOFFER.