Je migre une machine virtuelle kvm d'un ancien hôte (matériel et système d'exploitation) vers un nouveau.
Pour le réseautage, virt-manager m'a proposé une nouvelle option: macvtap . Cela semblait une bonne alternative à la mise en place d'un pont sur eth0.
Alors maintenant, l'invité démarre très bien, obtient une adresse IP de mon serveur DHCP de réseau local, peut accéder à Internet. L'invité voit également d'autres machines sur le réseau local, je peux les utiliser, etc.
Le problème est que l'hôte et l'invité ne se voient pas. Je ne peux pas atteindre l'invité à partir de l'hôte en utilisant l'IP invité, je ne peux pas non plus atteindre l'hôte depuis l'invité en utilisant l'IP hôte. Pas de ping, ssh, http, rien.
Voici la route -n
commande de l'hôte:
$ /sbin/route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
(même sortie de l'invité).
Je pourrais probablement mettre en place une nouvelle interface tun / tap dédiée à la communication entre l'hôte et l'invité, mais cela semble un peu exagéré. Existe-t-il un moyen de faire communiquer l'hôte et l'invité?
la source
Réponses:
J'ai posé cette question sur IRC et il semble que macvtap
La solution consiste alors à ajouter une interface réseau pour que l'invité et l'hôte communiquent, ou restent avec l'ancienne solution pontée ...
la source
virt-manager dit explicitement que macvtap ne fonctionne pas pour les communications réseau hôte-invité lorsque vous le configurez. J'ai simplement ajouté une deuxième interface basée sur nat, je l'ai installée dans l'invité et je l'utilise pour communiquer avec mon hôte.
la source
La solution consiste à configurer une interface macvlan sur l'hyperviseur, avec la même adresse IP que la véritable interface matérielle (très important), et à configurer le routage sur l'hôte pour l'utiliser. Dans Qemu / KVM, utilisez une interface macvtap sur l'interface matérielle comme d'habitude.
Pour ma config (réseau 192.168.1.0/24, interface matérielle p10p1 et passerelle 192.168.1.1), cela donne (sur l'hyperviseur):
la source
Comme cela a été mentionné dans les réponses précédentes, une solution à ce problème consiste à ajouter une carte réseau macvlan sur l'hôte. Cependant, je sentais que recâbler manuellement les routes vers l'adaptateur macvlan était un peu hacky, d'autant plus que je voulais la prise en charge d'IPv6 et que les routes définies manuellement peuvent devenir un problème lorsque le préfixe change. Voici donc ma configuration qui laisse le noyau sous contrôle de la table de routage:
(La configuration particulière ici est spécifique à Debian et Upstart, mais les étapes de base devraient fonctionner sur n'importe quel GNU / Linux.)
Création de l'adaptateur macvlan au démarrage
Tout d'abord, vous devez sélectionner une adresse MAC pour votre adaptateur. Vous pouvez peut-être simplement en utiliser un au hasard, mais je vous suggère de créer manuellement un adaptateur macvlan et d'utiliser son MAC. De cette façon, le MAC oblige à toutes les conventions qui pourraient exister.
La définition d'un MAC fixe est recommandée, car sinon il n'y a aucun moyen par exemple pour un serveur DHCP de reconnaître votre machine après un redémarrage et de lui attribuer la même adresse IP qu'auparavant.
Créez donc un adaptateur et recherchez le MAC:
Le nombre hexadécimal en surbrillance est votre adresse MAC.
Vous créez maintenant un script d'initialisation - qui doit être exécuté avant que la mise en réseau ne soit initialisée - pour créer l'adaptateur macvlan à chaque démarrage. La commande pour ce faire est:
Un exemple de script init Upstart à cet effet serait:
Mettez-le par exemple
/etc/init/macvlan.conf
.Mise en place de la configuration réseau
Dans
/etc/network/interfaces
, définissez votre carte réseau physique sur manuel (mais laissez-la automatique) et déplacez sa configuration précédente (généralement DHCP ou une adresse IP statique) vers votre carte macvlan. Par exemple:Désactivation d'IPv6 pour l'adaptateur physique
Enfin, vous ne souhaitez pas que l' adaptateur physique obtienne une adresse IP. Pour IPv4, le réglage manuel de l'adaptateur l'empêche d'obtenir une adresse. Cependant, je n'ai pas trouvé de configuration qui empêche le noyau d'obtenir / d'attribuer une adresse IPv6 pour / à l'adaptateur. Dans ce cas, il leur ajoute également des itinéraires, ce qui peut entraîner des problèmes. La meilleure façon semble donc être de désactiver IPv6 pour l'adaptateur physique. Vous pouvez le faire en ajoutant la ligne
à
/etc/sysctl.conf
, en créant un fichier/etc/sysctl.d/
avec cette ligne, ou en ajoutantà votre script init.
Lorsque vous redémarrez maintenant votre ordinateur, la communication entre l'hôte et l'invité devrait fonctionner avec IPv4 et IPv6.
Sachez que si vous faites une erreur lors de la configuration, votre hôte peut devenir inaccessible via le réseau même après un redémarrage. Ne faites cela que si vous avez un accès physique à la machine ou si d'autres protections sont en place afin de résoudre les problèmes potentiels.
la source
Vous voulez vous retrouver avec quelque chose comme ça:
Notez que la dernière colonne contient "macvlan0" au lieu de "eth0".
Pour y parvenir, vous pouvez utiliser ces commandes, en supposant 192.168.0.42 comme adresse IP:
Généralement similaire à la solution de npen. Si vous voulez un script plus sophistiqué, consultez ma page Web sur ce sujet.
la source
macvlan
module:modprobe macvlan
J'ai utilisé ce que Lazzaro a écrit sur Debian, mais je veux ajouter quelques notes.
Tout d'abord, l'interface invité doit être définie sur "Périphérique source" -> "Périphérique hôte eth0: macvtap"; "Mode source" -> " Pont ".
Deuxièmement, le script d'initialisation que vous avez n'a pas fonctionné pour moi ( il semble que l'interface macvlan0 ait été créée trop tard lors du démarrage ), j'ai donc utilisé ceci:
Remplacez le mac par celui qui a été attribué lors de la première création de l'interface:
Enregistrez et définissez le bit d'exécution:
et ajoutez tous les liens pour init:
la source