# [RESEAU] répartition charge 2 adsl (resolu/contourné)

## dapsaille

Bonjour à tous.

 Voila j'ai monté POUR TEST (avant qu'on me déboite la tronche) un petit serveur debian brut de base de pomme avant de valider et de passer sous gentoo .. 

ouaips le P2 il aime pas trop les compilos ^^ 

 Bref, j'ai 3 interfaces :

eth2 = lan 192.168.1.1

eth0 = wan free ip fixe en mode modem

eth1 = idem

 Je souhaite faire une répartition de charge entre mes 2 connections adsl chez free 

 J'ai honteusement effectué un superbe copier/coller légèrement adapté de ce que j'ai pu glaner par çi par la mais bon cela ne semble pas fonctionner (tu m'étonnes Simone ...)

```

#!/bin/bash

echo 1 >| /proc/sys/net/ipv4/ip_forward

echo 0 >| /proc/sys/net/ipv4/conf/all/rp_filter

# flush all iptables entries

iptables -t filter -F

iptables -t filter -X

iptables -t nat -F

iptables -t nat -X

iptables -t mangle -F

iptables -t mangle -X

iptables -t filter -P INPUT ACCEPT

iptables -t filter -P OUTPUT ACCEPT

iptables -t filter -P FORWARD ACCEPT

# initialise chains that will do the work and log the packets

iptables -t mangle -N CONNMARK1

iptables -t mangle -A CONNMARK1 -j MARK --set-mark 1

iptables -t mangle -A CONNMARK1 -j CONNMARK --save-mark

iptables -t mangle -A CONNMARK1 -j LOG --log-prefix 'iptables-mark1: ' --log-level info

iptables -t mangle -N CONNMARK2

iptables -t mangle -A CONNMARK2 -j MARK --set-mark 2

iptables -t mangle -A CONNMARK2 -j CONNMARK --save-mark

iptables -t mangle -A CONNMARK2 -j LOG --log-prefix 'iptables-mark2: ' --log-level info

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

iptables -t nat -N SNAT1

iptables -t nat -A SNAT1 -j LOG --log-prefix 'snat-to-ipfree1: ' --log-level info

iptables -t nat -A SNAT1 -j SNAT --to-source ipfree1

iptables -t nat -N SNAT2

iptables -t nat -A SNAT2 -j LOG --log-prefix 'snat-to-ipfree2: ' --log-level info

iptables -t nat -A SNAT2 -j SNAT --to-source ipfree2

# restore the fwmark on packets that belong to an existing connection

iptables -t mangle -A PREROUTING -i eth2 -p tcp \

         -m state --state ESTABLISHED,RELATED -j RESTOREMARK

# if the mark is zero it means the packet does not belong to an existing connection

iptables -t mangle -A PREROUTING -p tcp -m state --state NEW \

         -m statistic --mode nth --every 2 --packet 0 -j CONNMARK1

iptables -t mangle -A PREROUTING -p tcp -m state --state NEW \

         -m statistic --mode nth --every 2 --packet 1 -j CONNMARK2

iptables -t nat -A POSTROUTING -o eth0 -j SNAT1

iptables -t nat -A POSTROUTING -o eth1 -j SNAT2

if ! cat /etc/iproute2/rt_tables | grep -q '^251'

then

        echo '251     rt_link1' >> /etc/iproute2/rt_tables

fi

if ! cat /etc/iproute2/rt_tables | grep -q '^252'

then

        echo '252     rt_link2' >> /etc/iproute2/rt_tables

fi

ip route flush table rt_link1 2>/dev/null

ip route add table rt_link1 default dev eth0

ip route flush table rt_link2 2>/dev/null

ip route add table rt_link2 default dev eth1

ip rule del from all fwmark 0x1 lookup rt_link1 2>/dev/null

ip rule del from all fwmark 0x2 lookup rt_link2 2>/dev/null

ip rule del from all fwmark 0x2 2>/dev/null

ip rule del from all fwmark 0x1 2>/dev/null

ip rule add fwmark 1 table rt_link1

ip rule add fwmark 2 table rt_link2

ip route flush cache

```

Pour résumer (reboot routeur entre chaques tests) :

dhclient eth0 et lance le script        = routeur OK (navigation et tout le bastringue), clients KO  (pas de navigation mais ping/traceroute/dns ok)

dhclient eth1 et lance le script = routeur OK (""), clients KO  ("")

dhclient eth0 eth1 et lance le script = routeur OK (""), clients KO  ("")

script lancé (avec bien sur 2 messages RTNETLINK answers: Network is down) et dhclient eth0 = routeur OK et clients OK

 idem si je lance eth1 ou les 2 en même temps ...

 Any idea ?Last edited by dapsaille on Sat Oct 30, 2010 10:40 am; edited 2 times in total

----------

## dapsaille

résolu = pfsense

----------

## truc

Bon, c'est pas vraiment "résolu", mais plutôt contourné! Bref, du coup je me permets deux trois commentaires:

Tu fais, semble t'il, un RESTOREMARK avant de faire CONNMARK1 ou 2, du coup tu ne 'restore's rien du tout

 pourquoi tu te restreins à tcp? J'ignore si ce qui suit en est la cause, mais sache que l'état (state) d'un paquet (ESTABLISHED,NEW ou RELATED) n'est pas du tout lié au handshake tcp, au sens iptables/netfilter la notion de connexion établie par exemple, existe également pour UDP qui pourtant est un protocole non-connecté!

Et enfin, tes liens free, ce sont des liens PPPoE? ou un truc du genre? j'demande car les routes par défaut que tu ajoutes dans tes tables rt-link1 et 2 ne sont pas très jolies dans le cas contraire! il faut au moins un NEXT HOP (ip r a default via a.b.c.d t rt-link1) il me semble!

Lorsque tu ajoutes des règles iproutes, il faut absoluement que tu ajoutes une priorité, sinon, à un moment donné, tu vas te prendre la tête car ça ne fonctionne pas comme tu le crois, simplement parce-que tes règles ne sont pas dans l'ordre que tu croyais/voulais (attention la priorité/préférence est supposée être unique, malheureusement ip accepte quand même deux (ou plus)priorités égales pour des règles différentes (bouh!)

Maintenant que j'y pense, si tu ne te restreins pas à tcp pour faire le 'load-balancing', tu peux avoir des résultats assez funky, notamment pour un traceroute!  :Wink:  (donc, ne prends pas mal mes remarques hein! Elles peuvent toujours servir à d'autres, toussa toussa...)

----------

## dapsaille

Houlaaa loin de moi l'idée de prendre mal de l'aide, bien au contraire   :Very Happy: 

 J'ai juste préféré pour le moment poser un pfsense "plug and play" et brainless car peu de temps à accorder à cet outil pour le moment.

Rapport au script en lui-même c'est un copier coller sans comprendre les 3 quarts de ce qu'il y a dedans je l'avoue.

 Les liens free ne sont pas pppoe mais de type bridge dhcp ou routeur dhcp donc il est en effet probable que les tables ne soient pas adaptées.

 Je met sous le coude toutes tes remarques et les transposerai probablement sur un autre serveur de test une fois un peu  plus de temps de dispo   :Wink: 

----------

## JujuBickoille

Salut,

J'ai tenté de faire un multiwan de la façon que tu essaie... et franchement, j'ai trouvé le résultat moyen ( notament, des decos sur certains jeux du frangin....

Je te conseil le patch de Julian Anastasov que tu trouvera ici : http://www.ssi.bg/~ja/

Question iptables, tu n'a plus rien à faire ( enfin, dans mon cas j'ai de la QoS )... et c'est parti !

Chez moi ca tourne avec son patch depuis une 15aine de jour, pour le moment ça marche bien. Je compte d'ici quelques temps faire un petit tuto avec amour de mon bousin.

----------

## JujuBickoille

Salut,

J'ai tenté de faire un multiwan de la façon que tu essaie... et franchement, j'ai trouvé le résultat moyen ( notament, des decos sur certains jeux du frangin....

Je te conseil le patch de Julian Anastasov que tu trouvera ici : http://www.ssi.bg/~ja/

Question iptables, tu n'a plus rien à faire ( enfin, dans mon cas j'ai de la QoS )... et c'est parti !

Chez moi ca tourne avec son patch depuis une 15aine de jour, pour le moment ça marche bien. Je compte d'ici quelques temps faire un petit tuto avec amour de mon bousin.

----------

