OVH propose une offre de serveur "Cheap", le RPS. Ces serveurs ont la particularité de fonctionner sans disque dur, tout le stockage étant déporté sur un SAN (storage via le réseau).
Deux problèmes se posent, dont un qui est vrai avec tous les serveurs OVH.
-
Le Premier est l'existence, sur ces serveurs, de 2 adresses IP publiques, celle physique du serveur, et celle qui vous est attribuée (IP failover).
-
Le second est le stockage sur un disque réseau, pouvant perturber la mise en place d'un firewall.
Contourner l'IP physique du serveur
L'IP physique du serveur est une IP qui appartient à OVH. Cette IP publique est l'IP de l'interface réseau physique du serveur. Si vous changez de machine, en gardant le même contrat, cette IP change (contrairement à l'IP failover qui vous est attribué, et qui n'est pas rattachée à une machine en particulier).
L'IP failover quant à elle, est un alias réseau sur l'interface physique du serveur.
Le problème de cette configuration est dès lors qu'un traffic sort de la machine, ce traffic est attribué à l'IP physique de la machine, et non l'IP failover. Ceci peut poser le problème suivant: vous ne pouvez mettre un reverse DNS que sur l'IP failover (la votre), et non sur l'IP physique (qui peut changer si votre serveur à besoin d'une opération de maintenance, qui peut amener à changer de matériel).
Régler Iptables pour réécrire le traffic sortant
Une des solution consiste à réécrire tous les paquets sortant en leur réattribuant votre adresse IP failover.
Pour ceci, nous allons utiliser le flux SNAT de Iptables (Source NAT).
Commençons par écire une règle de réécriture des paquet (nous supposons que l'interface réseau est eth0, que votre IP physique est 21.22.23.24 et que votre IP failover est 13.14.15.16):
% /sbin/iptables -t nat -A POSTROUTING -o eth0 -s 21.22.23.24 -j SNAT --to 13.14.15.16
Maintenant, tout le traffic réseau sortant se verra attribuer votre IP failover comme étant votre IP failover (13.14.15.16).
Nouvelle problématique: le SAN
En réécrivant tous les paquets sortant comme provenant de l'IP failover, nous créons un nouveau problème: nous récrivons les paquet à destination du SAN avec cette IP.
D'après un technicien de chez OVH, que j'ai réussi à contacter via leur support en ligne, réécrire les paquet à destination du SAN ne pose aucun problème. Cependant, ce n'est pas vrai. Ce qui arrive au bout d'un certain temps, c'est que le SAN devient progressivement de plus en plus lent, jusqu'à ne plus répondre du tout. Ceci peut prendre de 2 à 4 jours en moyenne, vous laissant alors aucun autre choix que de rédémarrer votre serveur.
Je n'ai aucune idée de la raison de ceci, mais une chose est sûre, le SAN attend un traffic réseau provenant d'une machine physique OVH, et par conséquent il est plus prudent de ne pas réécrire les paquets qui lui sont destinés.
Premièrement, nous avons besoin de l'IP réelle de notre SAN. La meilleure solution est d'utiliser cette commande:
% netstat -al | grep iscsi
Vous aurez alors un retour de la sorte:
% netstat -al | grep iscsi
tcp 0 0 rps4072.ovh.net:34220 iscsi41.rps.ovh.ne:3260 ESTABLISHED
On retrouve ainsi le nom de machine du serveur SAN, ainsi que le port utilisé. Le port pourrait être utile, mais nous n'allons pas nous en servir pour l'instant.
Note: Pour les gens qui aiment bien faire confiance à OVH, vous pouvez vous connecter sur leur interface web (le Manager), dans la section à propos de votre serveur vous retrouverez le nom de machine de votre serveur iSCSI.
Nous allons donc maintenant récupérer son IP:
% host iscsi41.rps.ovh.net
iscsi41.rps.ovh.net has address 91.121.191.66
Et nous en servir pour compléter notre règle Iptables:
% /sbin/iptables -t nat -A POSTROUTING -o eth0 -s 21.22.23.24 -d ! 91.121.191.66 -j SNAT --to 13.14.15.16
Et voilà, avec cette règle Iptables, vous devriez pouvoir dormir tranquille :)
Dans un peut-être futur post, je décrirais le script configurable que j'ai réaliser pour rendre plus "humain" mon Iptables.
#1 – Petite précision
Je tiens à rajouter qu'il est aussi probablement possible de s'en sortir avec des routes intelligentes.
Je testerais, et en cas d'essai concluant, je ferais un nouveau post.
#2 – Très bon sujet
Merci pour le tuto, effectivement, j'ai testé et ça marche nickel ;)
J'attends tes prochains tests :)
Salutations amicales
#3 – Merci pour les infos cher
Merci pour les infos cher ButterflyOfFire
Cependant moi j'utiliserai la chaîne OUTPUT plutôt que POSTROUTING car le problème se pose pour les paquets générés localement...
#4 – Désolé pour le temps de mise
Désolé pour le temps de mise en ligne du commentaire, j'ai des contraintes de temps qui m'éloignent un peu de ce site en ce moment.
Pour la chaîne OUTPUT, tu as sûrement raison, il faudrait faire l'essai. Ça fait quelques années que j'ai pas fait d'IPTables avancé, j'ai pas cherché plus loin après avoir trouvé cette solution.
Je suis curieux d'avoir un feedback si tu y arrives.
#5 – Iptables
Existe-t-il un texte bien détaillé pour la configuration Iptables, pour un vrai débutant ?
Donald
#6 – Table de routage
Bonjour :)
Ce type de règles permettrait d'avoir à repasser derrière un lookup dans la table de routage :
ip route add default gw via src
ip route add via src
Normalement la seconde route est plus fine que la première et est donc prise en compte :)
#7 – Merci! C'est exactement ce
Merci! C'est exactement ce que je cherchais le jour ou j'ai posté cet article! Pour infos je tourne toujours avec la vieille solution :)
#8 – Tout à fait
Tout à fait :
http://www.frozentux.net/documents/iptables-tutorial/
Poster un nouveau commentaire