Pour bien commencer l’année (que je vous souhaite bonne au passage), me voilà confronté à une problématique de routage
Le contexte
Une passerelle à 4 interfaces:
eth0 - interface LAN sur laquelle tourne un DHCP
eth1 - interface WAN_1 (ip publique Free)
eth2 - interface WAN_2 (ip publique SFR)
eth2:0 - interface WAN_3 (ip publique SFR)
note: eth2 et eth2:0 sont reliées au même modem SDSL et utilise donc la même passerelle
Deux hôtes (hote_1) et hote_2) sur lesquelles tournent un service, ces hôtes récupèrent une ip privée via l’interface eth0.
Via shorewall j’ai fait en sorte, que toute requête arrivant sur l’ip publique de la WAN_1 soit redirigé vers l’ip locale de l’hote_1, et que toute requête arrivant sur l’ip publique de la WAN_2 soit redirigé vers l’ip locale de l’hote_2.
Celà fonctionne bien, j’ai installé un pti serveur ftp sur l’hote 1 et un pti serveur web sur l’hote 2 et ils sont parfaitement accessibles que ce soit depuis le LAN ou le WAN.
MAIS, celà fonctionne depuis le WAN car j’ai changé la gateway par défaut de ma passerelle (en spécifiant la passerelle SFR).
J’aimerais que ca puisse fonctionner en laissant la passerelle par défaut de l’interface eth1, mais faire en sorte que pour le reste celà utilise la passerelle (SFR) des interfaces eth2 et eth2:0
Vous l’aurez compris le but est bien de séparer le traffic.
Quel est le moyen le plus simple de le faire? dois je absolument passer par un paquet comme iproute?
Les détails de ta config sont un peu confus pour moi (ça manque de schémas et j’ai lu en travers) mais j’ai compris l’essentiel : tu veux faire du routage sélectif.
Et là… isalo.org/wiki.debian-fr/ind … s_internet
Vu ce que tu as déjà mis en place, je pense que tu n’auras pas besoin de beaucoup d’explications additionnelles…
Exactement, du routage sélectif tu as trouvé le mot!
Je vais y jeter un oeil, ca m’a l’air on ne peut plus clair
ouh là c’est bien le problème avec moi, j’arrive à faire des choses sans vraiment les comprendre. Si jte dis que je suis admin reseau depuis 3 ans mais que je suis infoutu de calculer un masque ca te donnera une petite idée
J’essaie de faire tourner ca demain et jvous dirais quoi…
Cette phrase est absurde. eth2:0 n’est pas une interface, même pas virtuelle. C’est un artifice obsolète et totalement facultatif pour affecter une adresse IPv4 supplémentaire à la seule interface qui est eth2. Techniquement c’est juste une “étiquette” (label) associée à l’adresse IPv4 correspondante. Cf.
Ta machine a trois interfaces (sans compter l’interface de loopback, lo), pas quatre, et quatre adresses IPv4 (sans compter l’adresse de loopback) dont deux affectées à eth2.
Si tu n’as pas utilisé iproute pour mettre en place du routage avancé, je ne vois pas comment ça peut marcher. Sans routage avancé, la machine utilise une seule et même route par défaut pour router tout le trafic sortant non destiné à une adresse joignable directement, quelle que soit l’origine du trafic. Selon la route par défaut active tout sort soit par Free soit par SFR, mais pas tantôt l’un et tantôt l’autre selon que ça vient du serveur FTP ou du serveur HTTP. Et en général ça ne marche pas, car les FAI bloquent le trafic sortant s’il n’a pas la bonne adresse IP source, donc il faut que le trafic entrant et le trafic sortant d’une même communication passent par la même liaison. Pour cela il faut obligatoirement du routage avancé.
Dans ton cas, on doit pouvoir faire simplement avec du routage basé sur l’adresse source, sans devoir recourir à du marquage de paquets par iptables.
La seule explication pour que ça marche est que SFR ne filtre pas le trafic sortant (mais Free oui), ce qui m’étonne quelque peu.
Aucune importance. On a autre chose à faire de notre cerveau que des calculs. Pour cela il y a des calculatrices qui le font beaucoup mieux. Pour les masques de réseau, il y a ipcalc et ses variantes. L’important est de savoir se servir d’une calculatrice, ou d’ipcalc.
Je savais que tu pourrais pas t’empêcher de réagir… Mouahaha
Tant que t’es dans le coin, Pascal, je me demandais : quelle différence précise entre deux interfaces physiques sur le même sous-réseau (je connais ton opinion là dessus), et deux IPs du même sous-réseau sur une seule interface physique (je m’attendais un peu à te voir faire une réflexion à ce sujet, je suis presque déçu ) ? Je soupçonne que c’est encore une question de routes mais c’est pas très clair pour moi là, j’aurais pensé que les deux étaient aussi mauvais mais vu que tu ne relèves pas particulièrement je m’interroge…
Ah, on peut faire sans fwmark ?.. Bon, j’ai plus qu’a retourner fouiller dans le man quand j’aurai un moment.
Les deux n’ont rien à voir. Il n’y a aucun problème a affecter plusieurs adresses à une même interface. D’ailleurs on fait ça couramment en IPv6, avec une adresse de portée locale au lien (en fe80::/10) et une adresse de portée globale (en 2000::/3 actuellement). Que les deux adresses soient du même sous-réseau ou pas n’y change rien. Ça ne change rien au niveau des routes non plus : l’interface a une route directe vers chaque sous-réseau présent sur le lien, quel que soit le nombre d’adresses (qui peut être 0, 1, 2…) que l’interface a dans chaque sous-réseau.
En fait j’ai une approche un peu radicale : il y a d’une part les adresses qui sont affectées globalement à la machine et pas spécifiquement aux interfaces, et d’autre part les routes qui sont attachées aux interfaces. La notion de sous-réseau n’a pas de sens au niveau opérationnel mais organisationnel. Mais ce n’est pas le propos.
Oui, voir les autres options disponibles de la commande “ip rule add” ; notamment "from " qui permet de sélectionner la table de routage en fonction de l’adresse source du paquet à router.
Ok, merci pour ces précisions.
Effectivement la vision assez stricte “d’une part les IPs de la machine, d’autre part les routes des interfaces” doit pas mal simplifier les choses dans certains cas, je retiens.
En effet j’ai “menti” mais uniquement dans le but de mieux me faire comprendre, j’avoue que sur le coup c’est raté. Quand tu dis qu’un alias d’interface est obsolète et facultatif, que me conseilles tu comme alternative?
En tous cas merci de me corriger j’ai tendance à tout appeler interface et pourtant je déteste ce mot ^^.
J’ai mal expliqué, ca a fonctionné uniquement lorsque la route par défaut de ma passerelle était celle de SFR. Si les deux services tournant sur les hôtes étaient accessibles via le WAN c’est que via Shorewall j’ai redirigé les requêtes qui arrivaient sur eth2 (1ere IP SFR) vers l’ip locale de l’hôte 1, et même chose pour les requetes arrivant sur eth2:0 (2eme IP SFR)vers l’ip locale de l’hôte 2. Tu as raison ca a du se faire via du routage avancé, d’ailleurs je te confirme que le paquet iproute est bien installé (je pense qu’il s’installe automatiquement avec shorewall), c’est donc shorewall qui a du faire ca “tout seul”. A noter que j’ai aussi masqué les interfaces locales des deux hôtes.
Voilà la conf pour être plus clair: (109.3.136.33: passerelle SFR, attention c’est une conf de test surement bourrée de trou de secu )
#################################################################################################################################################### #ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK CONNLIMIT TIME
PORT PORT(S) DEST LIMIT GROUP
#SECTION ESTABLISHED #SECTION RELATED
SECTION NEW
DNS/ACCEPT loc $FW
DNS/ACCEPT:info loc net
ACCEPT loc net tcp 21,80,443
Ping/ACCEPT all all
SSH/ACCEPT all $FW
SSH/ACCEPT loc all
#test dnat
DNAT net loc:10.0.1.2 tcp 21 - 109.3.136.43
DNAT net loc:10.0.1.4 tcp 80 - 109.3.136.44
[/code]
Je suis totalement d’accord avec toi, malheureusement c’est le genre de questions éliminatoires qui ressort en entretien d’embauches, ta réponse me fait d’ailleurs penser à une des miennes qui a finit dans un questionnaire d’embauche…
On peut ajouter une adresse IP supplémentaire à une interface avec ifconfig add ou ip addr add. L’inconvénient est qu’ifconfig n’affiche pas les adresses supplémentaires qui n’ont pas d’alias (sauf amélioration récente qui m’aurait échappé). La commande ip addr n’a pas cette limitation. D’autre part la syntaxe du fichier de configuration /etc/network/interfaces ne permet pas d’affecter plusieurs adresses IP à une interface, il faut donc utiliser un alias ou une option “up” pour exécuter une commande ifconfig ou ip. Bref, pas vraiment de solution satisfaisante.
Non, pas besoin de routage avancé : les communications pour les deux serveurs arrivent par la liaison SFR sur eth2, donc en envoyant tout le trafic sortant par la même liaison tout va bien.
Notes :
On ne voit pas eth2:0 dans la table de routage car ce n’est pas une interface.
Petite remarque sur les deux lignes de masquerading suivantes
eth2 10.0.1.2/24 109.3.136.43
eth2:0 10.0.1.4/24 109.3.136.44
La seconde ligne est sans effet car eth2:0 n’est pas une interface.
Sur la première ligne, la plage d’adresses source 10.0.1.2/24 est équivalente à 10.0.1.0/24 : compte tenu de la longueur de préfixe /24, la valeur du dernier octet est ignorée. Donc cette ligne est utilisée pour toutes les adresses 10.0.1.x, ce qui n’est probablement pas ce que tu veux. Pour associer des adresses publiques différentes aux deux serveurs, il faut une longueur de préfixe /32 (ou pas de longueur, juste l’adresse), et les deux sur eth2 :
eth2 10.0.1.2 109.3.136.43
eth2 10.0.1.4 109.3.136.44
Par contre, je pense qu’il faut que tu précises un peu ce que tu veux faire exactement concernant la répartition entre la connexion Free et la connexion SFR.
Merci pour ces précisions. Tu as tout à fait raison pour les valeurs de masque , heureusement que shorewall est assez “permissif” et ne sanctionne pas ce genre d’erreur.
Voilà ce que je veux faire exactement:
Je dois mettre en place des systèmes de visioconférence dont un à l’ile Maurice. Pour que ces systèmes puissent être contactés il leur faut une ip publique. Le prix d’une nouvelle connexion internet assez véloce pour assurer une qualité correcte à une visioconférence étant trop élevé à l’ile Maurice nous avons choisi une autre solution. Cette solution est d’utiliser une ip publique dispo sur une de nos connexions SDSL en France et de forwarder tous les appels qui arrivent sur cette ip publique à travers notre liaison VPN France-Ile Maurice existante vers la visio Maurice qui elle aura une ip ip sur le réseau local Mauricien . L’ennui c’est que la passerelle France-Ile Maurice n’a plus qu’une interface physique disponible c’est pourquoi j’ai affecté deux ip à une seule interface…
Et c’est là que je me suis compliqué la vie puisque j’étais persuadé que l’Ile Maurice aller s’équiper de deux visioconférences mais en fait il n’y en a qu’une…
Bref je me suis compliqué la tâche mais ce n’est pas grave j’ai appris des choses
A noter que je suis quand même allé au bout de ce que je voulais faire à la base, le tout dans un environnement de test bien sûr, les deux visios ont été simulés par un serveur web et un serveur ftp