View previous topic :: View next topic |
Author |
Message |
Tony Clifton l33t
Joined: 07 Jul 2004 Posts: 686 Location: Rennes
|
Posted: Fri Sep 25, 2009 9:04 pm Post subject: [RESEAU] Partage de charge sur 2 FAI (résolu) |
|
|
Bonsoir,
je dois mettre en place au boulot un routeur soekris qui se chargera de partager deux connexions internet : une connexion orange (en ip dynamique) et une connexion free (en ip fixe).
Après quelques recherches, je suis tombé sur plusieurs tutoriels traitant de virtual server et quelques configurations à base de shorewall ou iptables. Mais je n'ai pas vraiment trouvé de tutoriel (en français notament) ayant la même problématique que moi. J'ai donc légèrement l'impression de faire fausse route avec ces deux solutions. Car virtual server me semble (comme son nom l'indique) plus adapté à partager la charge entre plusieurs serveurs, et iptables ne me semble pas (avec le peu de connaissances que j'ai sur cet outil) pouvoir gérer une telle tâche.
Avez-vous déjà mis en place de telle solution ? Dois-je essayer de persister dans une de ces deux voies ou fais-je fausse route ?
Merci. _________________ La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges
Last edited by Tony Clifton on Thu Oct 15, 2009 8:30 pm; edited 2 times in total |
|
Back to top |
|
|
guilc Bodhisattva
Joined: 15 Nov 2003 Posts: 3326 Location: Paris - France
|
|
Back to top |
|
|
Tony Clifton l33t
Joined: 07 Jul 2004 Posts: 686 Location: Rennes
|
Posted: Sat Sep 26, 2009 8:16 am Post subject: |
|
|
Merci pour ta réponse. J'étais effectivement aussi tombé sur des tuto qui parlaient (en anglais) du bonding mais j'avais juste compris que ça permettait de relier deux cartes réseaux d'un même serveur à un même switch. Donc merci pour le liens (en français en plus ). _________________ La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges |
|
Back to top |
|
|
El_Goretto Moderator
Joined: 29 May 2004 Posts: 3169 Location: Paris
|
Posted: Sat Sep 26, 2009 10:13 am Post subject: |
|
|
Si le bonding peut faire ce qu'il demande en partie... il ne sera pas efficace du tout.
Je m'explique: si un lien internet tombe, concrètement il se passe quoi sur la machine routeur linux en bonding? Rien. Car le lien entre lui et la box du FAI est toujours up, donc il va quand même lui envoyer des paquets qui finiront à la poubelle.
Pour de la redondance de lien internet, on ne peut pas se passer d'une solution plus "lourde".
-
edit:
Sans aller jusqu'à un cluster, sur cette page il y a un script pour 2 FAI (veinard ) qui permet de jouer simplement sur la table de routage. A tester. Logiquement, je vais me pencher sur le sujet d'ici quelques temps, et peut être adapter ce script pour supporter + de FAI.
Un dernier lien sur la théorie (lartc.org). _________________ -TrueNAS & jails: µ-serv Gen8 E3-1260L, 16Go ECC + µ-serv N40L, 10Go ECC
-Réseau: APU2C4 (OpenWRT) + GS726Tv3 + 2x GS108Tv2 + Archer C5v1 (OpenWRT)
Last edited by El_Goretto on Sat Sep 26, 2009 10:32 am; edited 1 time in total |
|
Back to top |
|
|
Tony Clifton l33t
Joined: 07 Jul 2004 Posts: 686 Location: Rennes
|
Posted: Sat Sep 26, 2009 10:31 am Post subject: |
|
|
C'est une problématique à laquelle j'avais (mal) pensé. Pour la connexion orange, j'utilise un modem DM111P de Netgear : mon interface eth (configurée en client DHCP) a donc mon adresse IP publique lorsque la connexion est active et une adresse de classe C lorsque que la connexion est interrompue. Par contre je ne sais pas comment il configure ma route par défaut lorsque la connexion est inactive.
Cependant je peux configurer mon modem (même si je préférais l'éviter) pour activer ppp sur mon routeur et ainsi n'avoir d'interface ppp0 que lorsque la connexion est active. Par contre je n'ai fait aucun tests sur la freebox (en mode modem), peut-être devrais-je la remplacer par le même modem (DM111P) pour pallier ce problème. _________________ La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges |
|
Back to top |
|
|
ultrabug Developer
Joined: 24 Jan 2005 Posts: 698 Location: Paris
|
|
Back to top |
|
|
Tony Clifton l33t
Joined: 07 Jul 2004 Posts: 686 Location: Rennes
|
Posted: Tue Sep 29, 2009 5:57 pm Post subject: |
|
|
Merci ultrabug pour ton article et pour ton soutien . J'ai déjà une première question bien que je n'ai toujours pas commencé la mise en place du routeur. Mes deux interfaces reliées à internet sont configurées en DHCP : pour la Freebox pas trop dramatique (je peux éventuellement la passer en statique) mais pour la connexion Orange je ne peux pas me passer du DHCP car j'ai une adresse IP dynamique. La solution à laquelle j'ai donc pensée est de spécifier au client DHCP de ne pas configurer de route par défaut (je pense que c'est réalisable). Puis ensuite de configurer ma route par défaut en utilisant les interfaces plutôt que les passerelles. Ce qui donnerait quelque chose comme : Code: | ip route add default equalize \
nexthop dev eth2 weight 1 \
nexthop dev eth3 weight 1 |
Je crois me rappeler l'avoir déjà fait mais c'était pour un tunnel et il ny avait qu'une seule route. _________________ La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges |
|
Back to top |
|
|
Tony Clifton l33t
Joined: 07 Jul 2004 Posts: 686 Location: Rennes
|
Posted: Thu Oct 01, 2009 6:27 pm Post subject: |
|
|
J'ai mis le routeur en place aujourd'hui et le partage de charge fonctionne très bien, voire même trop bien : il fait vraiment n'importe quoi. Par exemple, lorsque je me connecte depuis l'extérieur en SSH sur l'adresse IP de free, il essaye de me répondre par la connection Orange forcement ça passe pas trop. De même lorsque j'essaye en interne de me connecter à un serveur SSH externe ; il se connecte bien au serveur, me demande mon mot de passe que je saisie puis il décide d'envoyer le mot de passe par l'autre connexion, là encore ça bloque.
Avez-vous des idées d'où cela pourrait provenir ? _________________ La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges |
|
Back to top |
|
|
ultrabug Developer
Joined: 24 Jan 2005 Posts: 698 Location: Paris
|
|
Back to top |
|
|
Tony Clifton l33t
Joined: 07 Jul 2004 Posts: 686 Location: Rennes
|
Posted: Fri Oct 02, 2009 9:33 am Post subject: |
|
|
Merci pour ta réponse.
Pour ma première question, la réponse est que ça peut marcher : sur la freebox, ça ne marche pas mais en revanche sur le modem Netgear ça fonctionne bien (mais je n'ai pas cherché à comprendre pourquoi ça marche dans un cas et pas dans l'autre). Cependant j'ai quand même passé le modem en mode routeur afin de faire toute la configuration de mes interfaces en statique.
Ensuite pour le deuxième problème voici quelques explications de ce que j'ai fait :
* J'ai créer deux tables de routage (une table orange et une table free) dans lesquelles j'ai spécifié les routes de chaque interface réseau puis les routes par défaut (via la passerelle orange pour la table orange et via la passerelle free pour la table free).
* Dans ma table principale (main) j'uilise la connexion orange comme route par défaut (pour l'instant)
* Puis j'ai mis des reglès de routage pour utiliser la table orange quand l'ip source est l'ip orange et idem pour la table free lorsque l'ip source est celle de free
=> Ca fonctionne très bien : lorsque que je me connecte au serveur SSH (de ma passerelle) depuis l'extérieur en utilisant l'@ ip free, il utilise bien la table free (et donc la connexion free) au lieu de prendre la route par défaut de la table main (qui est pour l'instant orange).
Mais le problème est le suivant : quand on se connecte de l'extérieur au serveur SSH on doit atterrir sur un autre serveur (pas la passerelle). J'ai donc ajouté une règle iptables : Code: | $IPTABLES -A PREROUTING -i $FREE_DEV -p tcp -m tcp --dport 22 -j DNAT --to-destination $SSH_IP -t nat |
Et là ça ne fonctionne pas ma passerelle reçoit bien la demande de connexion SSH mais ne la transmet pas au serveur SSH.
EDIT : je viens de refaire des tests et maintenant il essaye d'envoyer la réponse via la connexion orange avec l'ip source de free _________________ La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges |
|
Back to top |
|
|
ultrabug Developer
Joined: 24 Jan 2005 Posts: 698 Location: Paris
|
Posted: Fri Oct 02, 2009 9:12 pm Post subject: |
|
|
Tony Clifton wrote: | EDIT : je viens de refaire des tests et maintenant il essaye d'envoyer la réponse via la connexion orange avec l'ip source de free |
Juste pour être sûr, tu utilises bien le connection tracking ? Je pense que le fichier /proc/net/ip_conntrack peut aider à comprendre ce qu'il se passe, tu vois quoi là dedans lors de tes tentatives ?
edits: typo, fatigue... |
|
Back to top |
|
|
Tony Clifton l33t
Joined: 07 Jul 2004 Posts: 686 Location: Rennes
|
Posted: Sat Oct 03, 2009 11:07 am Post subject: |
|
|
Voici les tests que j'ai effectués :
* En mettant /proc/sys/net/ipv4/conf/*/rp_filter à 1 :
Je me connecte de l'extérieur (avec l'ip 81.81.81.81) en SSH, la passerelle reçoit bien la demande mais il ne la retransmet pas au serveur SSH. Le fichier /proc/net/ip_conntrack ne contient aucune occurrence de l'adresse ip 81.81.81.81.
* En mettant /proc/sys/net/ipv4/conf/*/rp_filter à 0 :
Je me connecte toujours depuis l'ip 81.81.81.81 en SSH, la passerelle transmet bien les paquets au serveur SSH mais lorsque la passerelle transmet la réponse elle utilise la mauvaise route. Le fichier /proc/net/ip_conntrack laisse bien paraître des traces de la connexion : Code: | tcp 6 55 SYN_RECV src=81.81.81.81 dst=87.163.160.30 sport=54153 dport=22 packets=1 bytes=60 src=192.168.1.100 dst=81.81.81.81 sport=22 dport=54153 packets=7 bytes=420 mark=0 use=2 |
ip correspondantes :
81.81.81.81 adresse de l'émetteur de la demande de connexion en SSH
87.163.160.30 adresse IP de Free
192.168.1.100 adresse du serveur SSH en interne
Dans ce deuxième cas je comprends bien le problème : la passerelle reçoit bien la demande de connexion qu'elle retransmet au serveur SSH. Mais lorsque le serveur SSH émet sa réponse, la passerelle la retransmet en utilisant la route par défaut (qui est par la connexion orange) puis fait son postrouting en lui collant l'ip de free en ip source.
La seule solution que je vois serait de faire le NAT en prerouting, ce qui permettrait de faire une règle ip en fonction de l'ip source pour qu'il utilise la bonne table de routage. Mais ce n'est pas possible avec iptables :-'(.
EDIT : même pas, le NAT en prerouting poserait bien d'autres problèmes, donc je ne vois vraiment pas LA solution. _________________ La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges |
|
Back to top |
|
|
El_Goretto Moderator
Joined: 29 May 2004 Posts: 3169 Location: Paris
|
Posted: Sat Oct 03, 2009 7:45 pm Post subject: |
|
|
Il y a 2 façon pour dire à iptables de sourceNATer un paquet qui sort: masquerading (the way of the ip pas fixe ninja) ou source routing en sur une adresse WAN (celle de free a priori, the way of ip fixe samouraï)? _________________ -TrueNAS & jails: µ-serv Gen8 E3-1260L, 16Go ECC + µ-serv N40L, 10Go ECC
-Réseau: APU2C4 (OpenWRT) + GS726Tv3 + 2x GS108Tv2 + Archer C5v1 (OpenWRT) |
|
Back to top |
|
|
Tony Clifton l33t
Joined: 07 Jul 2004 Posts: 686 Location: Rennes
|
Posted: Sat Oct 03, 2009 11:49 pm Post subject: |
|
|
Oui effectivement, j'ai essayé les deux méthodes sans succès. _________________ La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges |
|
Back to top |
|
|
ultrabug Developer
Joined: 24 Jan 2005 Posts: 698 Location: Paris
|
Posted: Sun Oct 04, 2009 9:27 pm Post subject: |
|
|
Bonsoir,
Déjà avant de tenter de répondre à ta question, il me semble (de mon point de vue extérieur bien sûr) que tu t'éloignes de ton but initial non ? D'un simple balancing sur deux routes, tu te retrouves a jouer avec des tables de routages distinctes pour scinder tes connexions alors qu'il me semblait que tu voulais au contraire les balancer.
Ceci étant dit, le fait que tu sois obligé de désactiver rp_filter pour que la connexion arrive bien vers le serveur NATé prouve que ton routeur sait a l'avance que la réponse ne reviendra pas par la bonne liaison. Sans avoir tes règles exactes en main ça va devenir un peu complexe a élucider mais je me suis demandé ce qu'il adviendrait si tu faisais ceci :
Code: | echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind |
Cela permet a une interface d'envoyer un paquet avec une IP source qu'elle n'a pas, et pourrait donc permettre a ton interface orange de répondre avec l'IP free. |
|
Back to top |
|
|
Tony Clifton l33t
Joined: 07 Jul 2004 Posts: 686 Location: Rennes
|
Posted: Mon Oct 05, 2009 3:27 pm Post subject: |
|
|
ultrabug wrote: | Déjà avant de tenter de répondre à ta question, il me semble (de mon point de vue extérieur bien sûr) que tu t'éloignes de ton but initial non ? D'un simple balancing sur deux routes, tu te retrouves a jouer avec des tables de routages distinctes pour scinder tes connexions alors qu'il me semblait que tu voulais au contraire les balancer. |
Je cherche effectivement toujours à partager la charge entre mes deux connexions internet. Mais les problèmes que je rencontre lorsque je l'active de manière simple sont que je ne peux plus faire de connexions SSH vers l'extérieur et que les services (interne) accessibles depuis l'extérieur sont très aléatoirement disponibles. Mais à part ces points là ça fonctionne très bien.
=> La solution à laquelle j'ai pensé et que j'essaye donc de mettre en oeuvre est de toujours utiliser le même FAI pour une connexion active et c'est là que je bloque sérieusement.
ultrabug wrote: | Ceci étant dit, le fait que tu sois obligé de désactiver rp_filter pour que la connexion arrive bien vers le serveur NATé prouve que ton routeur sait a l'avance que la réponse ne reviendra pas par la bonne liaison. Sans avoir tes règles exactes en main ça va devenir un peu complexe a élucider |
Voici mes règles iptables : Code: | $IPTABLES -A POSTROUTING -o $FREE_DEV -j SNAT --to-source $FREE_IP -t nat
$IPTABLES -A INPUT -i $FREE_DEV -p tcp -m tcp --dport 22 -j ACCEPT
$IPTABLES -A PREROUTING -i $FREE_DEV -p tcp -m tcp --dport 22 -j DNAT --to-destination $SSH_IP -t nat |
Pour la connexion Orange, le NAT est géré au niveau du modem.
ultrabug wrote: | mais je me suis demandé ce qu'il adviendrait si tu faisais ceci : Code: | echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind |
Cela permet a une interface d'envoyer un paquet avec une IP source qu'elle n'a pas, et pourrait donc permettre a ton interface orange de répondre avec l'IP free. |
Je viens de faire le test et j'ai le même résultat, le paquet n'est jamais reçu par le destinataire. _________________ La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges |
|
Back to top |
|
|
El_Goretto Moderator
Joined: 29 May 2004 Posts: 3169 Location: Paris
|
Posted: Tue Oct 13, 2009 12:23 pm Post subject: |
|
|
Hop là!
Tombé sur une doc sysrescuecd (en fait yen a plein qui n'ont pas un rapport direct), qui parle de load balancing e lien WAN...
Du genre comment il faut marquer avec connmark les paquets entrant par un lien pour faire le masquerading correct quand ils ressortent.
Bref, ici: http://www.sysresccd.org/Sysresccd-networking_en_Iptables-and-netfilter-load-balancing-using-connmark _________________ -TrueNAS & jails: µ-serv Gen8 E3-1260L, 16Go ECC + µ-serv N40L, 10Go ECC
-Réseau: APU2C4 (OpenWRT) + GS726Tv3 + 2x GS108Tv2 + Archer C5v1 (OpenWRT) |
|
Back to top |
|
|
Tony Clifton l33t
Joined: 07 Jul 2004 Posts: 686 Location: Rennes
|
Posted: Tue Oct 13, 2009 4:28 pm Post subject: |
|
|
EXCELLENT, merci, ça m'a l'air fort intéressant. J'vais lire ça dès que j'aurais l'temps
Quelle CD magique ce SystemRescueCD... _________________ La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges |
|
Back to top |
|
|
Tony Clifton l33t
Joined: 07 Jul 2004 Posts: 686 Location: Rennes
|
Posted: Thu Oct 15, 2009 8:33 pm Post subject: |
|
|
Voila, j'ai fini de mettre ça en place aujourd'hui et ça marche nickel !
J'ai rajouté quelques petites règles et ça m'a permis de faire exactement ce que je voulais. _________________ La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges |
|
Back to top |
|
|
sympaval n00b
Joined: 06 Jun 2010 Posts: 6
|
Posted: Sun Jun 06, 2010 9:12 pm Post subject: Gérer le trafic entrant avec un routeur en entrée et un fire |
|
|
Un nouveau thread a été ouvert avec mon post et est plutôt suivi ici:
https://forums.gentoo.org/viewtopic-p-6308846.html#6308846
Merci
Last edited by sympaval on Tue Jun 08, 2010 9:05 am; edited 2 times in total |
|
Back to top |
|
|
Tony Clifton l33t
Joined: 07 Jul 2004 Posts: 686 Location: Rennes
|
Posted: Mon Jun 07, 2010 5:32 pm Post subject: |
|
|
Effectivement, tu peux réaliser sans problème ton partage de charge. Le fonctionnement est assez simple : tu fais ton partage de charge avec iproute2 et ensuite iptables se charge de ne pas mélanger tout ça, à grand coup de marquage de paquet. Tu peux donc marquer tes paquets en PREROUTING, POSTROUTING, INPUT... afin de contrôler ton réseau comme tu le désir.
Par contre je comprends pas trop pourquoi tu veux ajouter un nouveau routeur, il suffit simplement de connecter ton nouveau lien internet à ton routeur existant et de lui apprendre a gérer tout ça. _________________ La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges |
|
Back to top |
|
|
sd44 Apprentice
Joined: 21 Jul 2007 Posts: 277 Location: Nantes 44
|
Posted: Sat Jun 12, 2010 8:24 am Post subject: |
|
|
je suis aussi interressé par ce systeme, est ce que tu pourrais nous donner la conf que tu as mis en place ?
merci d'avance. _________________ Pourquoi faire simple quand on peut faire compliqué ? |
|
Back to top |
|
|
Tony Clifton l33t
Joined: 07 Jul 2004 Posts: 686 Location: Rennes
|
Posted: Thu Jun 24, 2010 5:55 pm Post subject: |
|
|
Salut sd44,
si tu as des questions précises, je peux essayer d'y répondre.
Pour le fonctionnement, c'est assez simple :
* le partage de charge s'effectue grâce à iproute2 :
Code: | ip route add default scope global nexthop via $IP1 dev eth1 weight 1 nexthop via $IP2 dev eth2 weight 1 |
* ensuite les paquets sont marqués à la sortie avec iptables ;
* puis pour finir lorsque ces paquets reviennent, on récupère le marquage qu'ils avaient.
Et voila on ne s'emèle pas les pinceaux et tout est routé par le bon tuyau. _________________ La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges |
|
Back to top |
|
|
sd44 Apprentice
Joined: 21 Jul 2007 Posts: 277 Location: Nantes 44
|
Posted: Thu Jun 24, 2010 6:15 pm Post subject: |
|
|
merci pour ta reponse,
as tu aussi les commandes iptable ?
merci d'avance. _________________ Pourquoi faire simple quand on peut faire compliqué ? |
|
Back to top |
|
|
Tony Clifton l33t
Joined: 07 Jul 2004 Posts: 686 Location: Rennes
|
Posted: Thu Jun 24, 2010 6:25 pm Post subject: |
|
|
voici quelques commandes
Code: |
############### CREATION DES CHAINES DE MARQUAGE DES PAQUETS ###############
# Connexion Orange
$IPTABLES -t mangle -N CONNMARK_ORANGE
$IPTABLES -t mangle -A CONNMARK_ORANGE -j MARK --set-mark $ORANGE_MARK
$IPTABLES -t mangle -A CONNMARK_ORANGE -j CONNMARK --save-mark
#$IPTABLES -t mangle -A CONNMARK_ORANGE -j LOG --log-prefix "iptables-mark$ORANGE_MARK: " --log-level info
# Connexion Free
$IPTABLES -t mangle -N CONNMARK_FREE
$IPTABLES -t mangle -A CONNMARK_FREE -j MARK --set-mark $FREE_MARK
$IPTABLES -t mangle -A CONNMARK_FREE -j CONNMARK --save-mark
#$IPTABLES -t mangle -A CONNMARK_FREE -j LOG --log-prefix "iptables-mark$FREE_MARK: " --log-level info
# Récupération du marqueur
$IPTABLES -t mangle -N RESTOREMARK
$IPTABLES -t mangle -A RESTOREMARK -j CONNMARK --restore-mark
#$IPTABLES -t mangle -A RESTOREMARK -j LOG --log-prefix 'restore-mark: ' --log-level info
############### CREATION DES CHAINES POUR LE NAT ###############
# NAT de la connexion Orange
$IPTABLES -t nat -N SNAT_ORANGE
#$IPTABLES -t nat -A SNAT_ORANGE -j LOG --log-prefix "snat-to-$ORANGE_IP: " --log-level info
$IPTABLES -t nat -A SNAT_ORANGE -j SNAT --to-source $ORANGE_IP
# NAT de la connexion Free
$IPTABLES -t nat -N SNAT_FREE
#$IPTABLES -t nat -A SNAT_FREE -j LOG --log-prefix "snat-to-$FREE_IP: " --log-level info
$IPTABLES -t nat -A SNAT_FREE -j SNAT --to-source $FREE_IP
############### APPLICATION DES MARQUAGES ###############
# Récupération du marquage pour les connexions qui ont déjà été etablies
$IPTABLES -t mangle -A PREROUTING -p tcp -m state --state ESTABLISHED,RELATED -j RESTOREMARK
# Partage des connexions Internet
$IPTABLES -t nat -A POSTROUTING -o $ORANGE_DEV -j SNAT_ORANGE
$IPTABLES -t nat -A POSTROUTING -o $FREE_DEV -j SNAT_FREE
|
Après tu n'as plus qu'à ajouter tes règles spécifiques _________________ La seule certitude que j'ai, c'est d'être dans le doute ! P. Desproges |
|
Back to top |
|
|
|