IP failover sur une machine virtuelle chez OVH

Voici une astuce si vous avez un serveur dédié chez OVH avec une IP failover, et que vous souhaitez utiliser cette IP pour taper directement dans une machine virtuelle (à exécuter dans la machine virtuelle bien sûr). Cette astuce peut se transposer bien sûr dans d’autres cas, mais c’est celui que j’ai été amené à confronter, c’est pourquoi je peux vous en parler.

#!/bin/bash
ifconfig eth0 down
ifconfig eth0 hw ether 00:aa:bb:cc:dd:ee
ifconfig eth0 123.45.213.153 netmask 255.255.255.255
route add -host 213.184.62.254 dev eth0
route add default gw 213.184.62.254
echo nameserver 213.186.33.99 > /etc/resolv.conf

Explications :

  1. On désactive l’interface pour pouvoir modifier l’adresse MAC
  2. On change l’adresse MAC pour celle de l’interface eth0 physique du dédié (car OVH bloque les MAC non autorisées)
  3. On donne l’IP failover à la machine virtuelle (notez le mask très limité)
  4. On ajoute une route forcée pour la passerelle OVH en direction de l’interface eth0
  5. On ajoute la route par défaut qui va bien
  6. On ajoute le serveur DNS OVH (ou tout autre) dans le resolv.conf

Notes : pas besoin de définir de route pour le sous-réseau de l’hôte, et pas besoin d’ajouter non plus l’adresse MAC de la passerelle OVH dans la table arp. Ici, toute l’astuce réside dans le changement de l’adresse MAC de la machine virtuelle (qui ne perturbe en rien le fonctionnement de la machine dans sa globalité, puisque c’est le même principe que les alias : eth0:0, eth0:1, etc). D’ailleurs, n’utilisez pas l’alias en même temps sur la machine hôte, car là il y aurait de fâcheuses interférences entre la machine hôte et la machine virtuelle (les deux machines vont répondre aux paquets qu’elles reçoivent, voyez le genre… « Mais, on t’as rien demandé ! » – « Je sais, mais bon… »).

Update : si vous activez l’ip forwarding sur cette même machine, vous allez avoir des surprises : connexions TCP de la machine hôte qui tombent par exemple. Le problème est simple : la machine virtuelle étant reliée directement à la machine hôte, elle reçoit aussi les paquets destinés à la machine hôte. Et faisant trop bien son travail de routeur, elle renvoie les paquets une seconde fois, d’où l’instabilité de la connexion dû au doublage des paquets. La solution : filtrer le forward, exemple, ajouter après avoir configuré l’ip de la machine :

iptables -t filter -I FORWARD 1 -i eth0 -j DROP

Update : La doc correspondante chez OVH semble se trouver ici, mais elle m’a l’air moins complète (notamment pour l’adresse MAC)… A vous de voir.