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:
root@host:~# ip link add link eth0 macvlan0 type macvlan mode bridge
root@host:~# ip addr show dev macvlan0
#: macvlan0@eth0: mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1
link/ether 12:34:56:78:90:ab brd ff:ff:ff:ff:ff:ff
...
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:
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
Un exemple de script init Upstart à cet effet serait:
start on starting networking
script
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
end script
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:
auto eth0
iface eth0 inet manual
auto macvlan0
iface macvlan0 inet dhcp
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
net.ipv6.conf.eth0.disable_ipv6=1
à /etc/sysctl.conf
, en créant un fichier /etc/sysctl.d/
avec cette ligne, ou en ajoutant
sysctl -w net.ipv6.conf.eth0.disable_ipv6=1
à 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.