[RESOLU] Multiple passerelle pour plusieurs IP publiques

Bonjour à tous,

je rencontre un souci technique sur lequel je ne vois pas comment procéder pour le traiter :

Sur mon interface eth0 je dispose de plusieurs IP publiques (eth0:0, eth0:1 etc…)

Sur mon interface eth1 j’ai mon lan et sur eth2 ma dmz.

Toutes mes machines sortent par défaut avec l’IP défini sur eth0 juste là pas de souci.

Mon besoin aujourd’hui de faire sortir certaines machines sur Internet avec une ip publique différente de celle d’eth0 :

LAN ou DMZ -----> gateway ---------> IP publique d’eth0

Objectif:
Certaines machines du LAN ou DMZ -------> gateway ------> IP publique autre qu’eth0 par exemple eth0:2

Pour le moment j’écume les forums et autres pour trouver un tuto, une piste de comment procéder mais j’ai certainement un souci de mot clef dans mes recherches sur les moteurs de recherches.

Est-ce que je dois créer des interfaces supplémentaires sur eth1 (ex eth1:0 avec une ip autre que eth1) et eth2 pour pouvoir les indiquer comme passerelle à mes machines du LAN ou DMZ et avec iptables je peux forcer la sortie de mes requêtes sur eth0:xx ?

Merci d’avance pour votre aide ou piste d’approche pour traiter mon souci

Cordialement,
Guedz

Il faut regarder du coté de snat avec iptables et oui il te faudra des interfaces supplementaires, une par ip publique dispo

IPTABLES -t nat -A POSTROUTING -o eth0.0 -p tcp -d xxx.xxx.xxx.xxx -j SNAT --to-source xxx.xxx.xxx.xxx

Pas besoin de tutoriel ; ce que tu cherches à faire est trivial.

Note : Les “alias IP” (eth0:0…) sont obsolètes. Il y a très longtemps qu’on n’en a plus besoin pour affecter plusieurs adresses IP à une même interface.

Non, strictement aucun intérêt.
Note : Les alias IP ne sont pas des interfaces. Ils ne sont reconnus ni dans les les tables de routage ni dans les règles iptables.

Non.

Attention : Ne pas confondre une interface VLAN IEEE 802.1Q (eth0.0) et un alias IP (eth0:0). Comme je l’ai déjà écrit, les alias IP ne sont pas des interfaces donc ne sont pas reconnus par les règles iptables. L’interface de sortie est simplement eth0.
D’autre part, la règle ne doit pas se baser sur l’adresse de destination mais sur l’adresse source.
Exemple :

iptables -t nat -A POSTROUTING -o eth0 -s adresse.ip.privee -j SNAT --to adresse.ip.publique

A placer avant la règle générale qui applique l’adresse IP publique par défaut.
La source peut également être un préfixe, un groupe d’adresses ayant un certain nombre de bits de poids fort en commun. Exemple : 192.168.25.128/28 = 192.168.25.128 à 192.168.25.143.

PS : où est-il question de “multiples passerelles” là-dedans ?

1 J'aime

Bonjour

j’avais bookmarker un article sur ce que tu cherche surement.

voici le lien : https://www.bggofurther.com/fr/2014/04/setup-multiple-default-routes-on-linux/

Bonjour à tous,

d’abord merci pour toutes ces réponses et aux vues de ces dernières je pense que j’ai certainement mal qualifié mon souci.

Pour moi le fait de pouvoir sortir sur une IP publique de mon pool spécifique pour 1 ou plusieurs machines devait passer par la définition d’une passerelle spécifique pour ce flux.

Me reste maintenant à tester la règle IPTABLES pour cloturer le sujet par contre je suis étonné des propos sur les “Alias IP” qui seraient obsolètes.

Pourriez vous me dire comment on fait maintenant ?

Cordialement,
Guedz

Quelle drôle d’idée. D’autre part, c’est contradictoire avec le contenu de ton message initial.

Une passerelle (ou plutôt un routeur car le terme “passerelle”, jugé trop vague, a été abandonné depuis longtemps) est une machine. Plusieurs routeurs, c’est donc plusieurs machines ayant chacune une ou plusieurs adresses IP publiques. Or tu ne parles que d’une seule machine qui a plusieurs adresses IP publiques.

Ou bien tu commets un abus de langage et veux parler de plusieurs “adresses de passerelle” (ou plutôt de routeur) affectées à une même interface de l’unique routeur (eth0 ou eth2). Cela n’aurait strictement aucun intérêt : l’adresse de routeur ne sert qu’à résoudre l’adresse MAC de l’interface de destination des paquets à envoyer au routeur. Tous les paquets envoyés à une interface donnée ont la même adresse MAC, quelle que soit l’adresse de routeur utilisée, donc l’adresse de routeur ne peut pas être un critère suffisant pour sélectionner l’adresse IP publique de sortie.

On ajoute simplement chaque adresse IP à l’interface avec ip addr add...
Dans une configuration avec le fichier /etc/network/interfaces, on peut définir plusieurs strophes pour une même interface avec chaque adresse IP statique.

2 J'aime

comme toujours PascalHambourg est une bibliothèque ambulante :wink:

La connaissance des mécanismes sous-jacents est un avantage certain pour la compréhension de ce qui se passe. Le rôle exact d’une adresse de passerelle (ou plutôt de routeur) n’est pas évident. Un paquet IP envoyé à router à un routeur ne contient pas l’adresse IP du routeur mais seulement l’adresse MAC.

Bonjour,

PI J’ai pas encore pris le temps de tester la solution du SNAT

ma situation est la suivante :

iface eth0 inet static
    address x.x.x.4
    netmask 255.255.255.240
    gateway x.x.x.1
    up   ip addr add x.x.x.5/28 dev eth0 label eth0:0
    down ip addr del x.x.x.5/28 dev eth0 label eth0:0
    up   ip addr add x.x.x.11/28 dev eth0 label eth0:1
    down ip addr del x.x.x.11/28 dev eth0 label eth0:1
    up   ip addr add x.x.x.12/28 dev eth0 label eth0:2
    down ip addr del x.x.x.12/28 dev eth0 label eth0:2 

Pour ma part j’ai toujours suivi les tutos du wiki debian : https://wiki.debian.org/NetworkConfiguration

et sans passer par un alias je ne comprends pas comment tu peux faire

Concernant mon souci je souhaite que mon serveur email et autres machines de mon lan sortent avec l’ip publique eth0:2 et non mon eth0

Tu peux faire avec ip addr add si tu veux, mais les options label eth0:N sont inutiles. Elles ne servent qu’à rendre les adresses IPv4 supplémentaires visibles avec ifconfig (au moins avec les anciennes versions jusqu’à Jessie ; la version de Stretch a visiblement été retravaillée et semble avoir plus de points communs avec ip, donc n’en a peut-être plus besoin - pas testé).

Sinon, avec les versions récentes de Debian tu peux maintenant faire :

iface eth0 inet static
 address x.x.x.4/28
 gateway x.x.x.1

iface eth0 inet static
 address x.x.x.5/28
...

eth0:2 et eth0 ne sont pas des adresses IP. Ce sont une interface et un “alias IP” (en fait une simple étiquette). Tu veux dire “avec l’adresse IP publique de eth0:2” ou bien “avec l’adresse IP publique x.x.x.12” car on se fiche totalement qu’elle soit associée à l’étiquette eth0:2.

Merci pour ton retour
C’est intéressant d’échanger avec toi
Je me coucherai moins c… :slight_smile:

Update : sur le lien que j’ai communiqué sur le wiki on peut lire pour la méthode proposée par PascalHambourg

Note however that this method is dangerous! Certain driver/hardware combinations may sometimes fail to bring the link up if no labels are assigned to the alias interfaces.

Je suis très dubitatif au sujet de cette réserve, car à ma connaissance ni le matériel ni les pilotes ne sont concernés par les alias IP.

Bonjour,

Merci beaucoup je confirme que la solution suivante m’a permis de traiter mon besoin

Merci beaucoup pour votre aide et vos explications

Cordialement,
Guedz

Merci du retour. Il y a une case à cocher quelque part pour marquer le sujet comme résolu plutôt que dans le titre.

En effet, la commande ip fait partie du package iproute2 . La commande ifconfig fait partie, elle, du package net-tools .
Or, sous Stretch on peut voir que le package iproute2 est installé avec le système de base alors que le package net-tools est optionnelle.

Sous Jessie les deux packages étaient installés avec le système de base.

On peut le vérifier avec l’information priority dans les informations concernant un package.
Par exemple :
apt-cache show iproute2

Et il était temps ! Cela fait depuis 2002 que iproute2 est censé être la manière dont le réseau se gère.

Plus qu’à éradiquer la dépendance à net-tools du package bind9 et je serais un debianiste content !


AnonymousCoward

1 J'aime