Bonjour à tous,
Je souhaite mettre en place un partage de connexion internet par le biais de deux FAI ou plus,
afin d'assurer une disponibilité maximal d'internet.
Est-il possible d'utiliser IPTABLE pour cela ?
Est-il possible de faire de la QOS en même temps, car j'envisage d'utiliser la VOIP ?
Est-il possible de limiter la bande passante en fonction des protocoles HTTP, FTP, SSH, IAX, SIP etc... ?
Avez-vous un exemple de script ? :-D
Je sais pas si ça peut t'intéresser, mais j'ai mis en place une solution de partage de deux accès Internet pour un réseau d'entreprise.
Le partage que j'ai fait est statique et est basé sur les adresses IP des postes clients (impaires via accès 1 et paires via accès 2).
En cas de perte d'un des liens, on bascule tout le traffic sur le lien restant.
Ca repose sur deux tables de routage, chacune ayant un next hop par défaut correspondant à un des liens, et sur la table mangle d'iptables pour le marquage des paquets en fonction des IPs.
Bien sûr, le marquage peut se faire selon n'importe quel critère acceptable par les règle iptables.
Si ça te convient, je peux te filer des bouts du script que j'ai écrit pour ça.
Je te préviens d'avance, c'est un peu artisanal, mais je suis ouvert à toute proposition d'amélioration.
Comme demandé par MP, voici ce que j'ai mis en place dans ma boîte.
Pour commencer, une petite description de la topologie réseau.
En fait tout repose sur une passerelle qui réalise le partage des connexions internet pour le réseau privé grâce au NAT.
Il te faut, pour simplifier, trois interfaces réseau avec trois plan d'adressage.
Pour l'exemple, eth0 est reliée au réseau privé (192.168.0.0),
eth1 est reliée au premier routeur sur le sous-réseau 192.168.1.0
et eth2 est reliée au deuxième routeur sur le sous-réseau 192.168.2.0.
Pour info, on peut bien sûr se contenter d'une seule interface avec un seul sous-réseau pour les deux routeurs, voire même d'une seule interface en tout, mais autant commencer par faire simple. 😉

Une fois la configuration matérielle mise en place, passons à la configuration logicielle.
J'utilise deux scripts : le premier pour configurer iptables et les tables de routage statiques. Il prend un paramètre qui spécifie si on utilise le premier routeur, le deuxième, les deux, ou aucun.
Le deuxième script est lancé automatiquement au démarrage et il sert à monitorer les deux liens. En cas de changement d'état, il lance le script de configuration avec le paramètre qui convient.

- script config-gateway :
#!/bin/sh

PRIVATE_NETWORK=192.168.0.0/24 # Private network
PRIVATE_NETWORK_ODD_IPS=192.168.0.1/255.255.255.1 # Odd IPs to be routed via Internet access #1
PRIVATE_NETWORK_EVEN_IPS=192.168.0.2/255.255.255.1 # Even IPs to be routed via Internet access #2
PRIVATE_IP=192.168.0.254 # IP associated to the private interface
PRIVATE_INTERFACE=eth0 # Interface connected to the private network

PUBLIC_NETWORK_1=192.168.1.0/24 # Public network associated to the Internet link #1
PUBLIC_IP_1=192.168.1.254 # IP associated to the public interface #1
PUBLIC_INTERFACE_1=eth1 # Interface connected to the public network #1
PUBLIC_ROUTER_1=192.168.1.253 # IP of the router connected to Internet link #1
MARK_1=4 # Mark associated to packets to forward them to router 1

PUBLIC_NETWORK_2=192.168.2.0/24 # Public network associated to the Internet link #2
PUBLIC_IP_2=192.168.2.254 # IP associated to the public interface #2
PUBLIC_INTERFACE_2=eth2 # Interface connected to the public network #2
PUBLIC_ROUTER_2=192.168.2.253 # IP of the router connected to Internet link #2
MARK_2=5 # Mark associated to packets to forward them to router 2

MODE=$1 # The mode to use (--load-balance | --router-1 | --router-2 | --off)
LOG_FILE=[i]/path/to/log[/i]

# Check the mode provided is correct
case "$MODE" in
--load-balance)
    echo
    echo "Setting the gateway to split traffic over the 2 routers :"
    echo "`date +%x` `date +%T` : Configure gateway to balance traffic" >> $LOG_FILE
    ;;
--router-1)
    echo
    echo "Setting the gateway to route all traffic to router #1 :"
    echo "`date +%x` `date +%T` : Configure gateway to route traffic to router #1" >> $LOG_FILE
    ;;
--router-2)
    echo
    echo "Setting the gateway to route all traffic to router #2 :"
    echo "`date +%x` `date +%T` : Configure gateway to route traffic to router #2" >> $LOG_FILE
    ;;
--off)
    echo 0 > /proc/sys/net/ipv4/ip_forward

    # Flush all firewall rules
    iptables -t filter -F
    iptables -t nat -F
    iptables -t mangle -F

    # Set default policies to DROP all packets
    iptables -t filter -P INPUT DROP
    iptables -t filter -P OUTPUT DROP
    iptables -t filter -P FORWARD DROP

    # Accept ICMP traffic
    iptables -t filter -A INPUT -p icmp -j ACCEPT # Accept ICMP input (e.g. PING requests)
    iptables -t filter -A OUTPUT -p icmp -j ACCEPT # Accept ICMP output (e.g. PING replies)

    # Accept VNC connections from the inner network
    iptables -t filter -A INPUT -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -d $PRIVATE_IP -p tcp --dport 5900 -j ACCEPT # Accept VNC packets from the inner network
    iptables -t filter -A OUTPUT -s $PRIVATE_IP -d $PRIVATE_NETWORK -o $PRIVATE_INTERFACE -p tcp --sport 5900 -j ACCEPT # Accept VNC packets to the inner network

    echo "Gateway disabled"
    echo "`date +%x` `date +%T` : Gateway disabled" >> $LOG_FILE
    exit 0
    ;;
*)
    echo "Usage: $0 {--load-balance|--router-1|--router-2|--off}"
    exit 1
esac



###################################################################################################
###                    Setting the firewall rules                ###
###################################################################################################

echo
echo "        *** Setting up iptables rules ***"
echo

# Allow to forward packets to another interface
echo 1 > /proc/sys/net/ipv4/ip_forward

# Restart the service to make sure it is started
service iptables restart

# Flush all firewall rules
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F

# Set default policies to DROP all packets
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP


# Source NAT packets from the private network to public IPs of the firewall
iptables -t nat -A POSTROUTING -s $PRIVATE_NETWORK -o $PUBLIC_INTERFACE_1 -j SNAT --to-source $PUBLIC_IP_1
iptables -t nat -A POSTROUTING -s $PRIVATE_NETWORK -o $PUBLIC_INTERFACE_2 -j SNAT --to-source $PUBLIC_IP_2


# Mark packets so as to route them according to the mode given as parameter
case "$MODE" in
--load-balance)
    # Route the packets to the 2 routers depending on their source IP address
    iptables -t mangle -A PREROUTING -s $PRIVATE_NETWORK_ODD_IPS -i $PRIVATE_INTERFACE -j MARK --set-mark $MARK_1
    iptables -t mangle -A PREROUTING -s $PRIVATE_NETWORK_EVEN_IPS -i $PRIVATE_INTERFACE -j MARK --set-mark $MARK_2
    ;;
--router-1)
    # Route all packets to the router #1 (e.g. in case of router #2 failure)
    iptables -t mangle -A PREROUTING -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -j MARK --set-mark $MARK_1
    ;;
--router-2)
    # Route all packets to the router #2 (e.g. in case of router #1 failure)
    iptables -t mangle -A PREROUTING -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -j MARK --set-mark $MARK_2
    ;;
esac









###################################################################################################
###                   Setting up the routing rules                    ###
###################################################################################################

echo
echo "        *** Setting up routing rules ***"
echo

# Flush tables that will be used later
ip rule del fwmark $MARK_1
ip rule del fwmark $MARK_2
ip route flush table $MARK_1
ip route flush table $MARK_2

# Populate the 2 tables with the main routes
ip route show table main | grep -Ev ^default | while read ROUTE ; do
    ip route add table $MARK_1 $ROUTE
    ip route add table $MARK_2 $ROUTE
done

# Add the default route for each table
ip route add table $MARK_1 default via $PUBLIC_ROUTER_1
ip route add table $MARK_2 default via $PUBLIC_ROUTER_2

# Associate the firewall marks to the tables
ip rule add fwmark $MARK_1 table $MARK_1
ip rule add fwmark $MARK_2 table $MARK_2


# Flush the cache
ip route flush cache
- script internet-link-monitor :
#!/bin/sh

# The time to wait between two ping sessions
SLEEP_TIME=2

# The addresses to ping to make sure the links are available
ADDRESS_ROUTER_1=192.168.1.253
ADDRESS_ROUTER_2=192.168.2.253

# The script to launch if one link fails or comes back to life
SCRIPT_FILE=[i]/path/to/config-gateway[/i]

# Options to provide to the config-gateway script
BOTH_ROUTERS_OPTION=--load-balance
ROUTER_1_OPTION=--router-1
ROUTER_2_OPTION=--router-2
NO_ROUTER_OPTION=--off

# Status of the Internet links
STATUS_LINK_1=unknown
STATUS_LINK_2=unknown

while true; do
    # New status right after ping
    NEW_STATUS_LINK_1=up
    NEW_STATUS_LINK_2=up

    ping -c 5 $ADDRESS_ROUTER_1 > /dev/null
    if [ $? != 0 ]; then
        NEW_STATUS_LINK_1=down
    fi

    ping -c 5 $ADDRESS_ROUTER_2 > /dev/null
    if [ $? != 0 ]; then
        NEW_STATUS_LINK_2=down
    fi

    if [ $NEW_STATUS_LINK_1 != $STATUS_LINK_1 ] || [ $NEW_STATUS_LINK_2 != $STATUS_LINK_2 ]; then
        # At least one status has changed
        if [ $NEW_STATUS_LINK_1 = $NEW_STATUS_LINK_2 ]; then
            if [ $NEW_STATUS_LINK_1 = up ]; then
                # Both routers are up
                $SCRIPT_FILE $BOTH_ROUTERS_OPTION
            else
                # Both routers are down
                $SCRIPT_FILE $NO_ROUTER_OPTION
            fi

        elif [ $NEW_STATUS_LINK_1 = up ]; then
            # Router #1 is up and router #2 is down
            $SCRIPT_FILE $ROUTER_1_OPTION

        elif [ $NEW_STATUS_LINK_2 = up ]; then
            # Router #1 is down and router #2 is up
            $SCRIPT_FILE $ROUTER_2_OPTION
        fi

        STATUS_LINK_1=$NEW_STATUS_LINK_1
        STATUS_LINK_2=$NEW_STATUS_LINK_2
    fi

    sleep $SLEEP_TIME
done
Je te laisse prendre connaissance de ces deux scripts.
Si tu as besoin de plus d'explications, n'hésite pas.
Tout ce que tu as à faire, c'est de rajouter toutes les règles d'iptables que tu utilises dans le script config-gateway pour qu'elles soient rechargées à chaque fois et de lancer la commande suivante pour que le script internet-link-monitor soit lancé au démarrage de la passerelle :
echo "/path/to/internet-link-monitor &" >> /etc/rc.d/rc.local
Bon courage et n'hésitez pas à me faire part de vos commentaires.
Un grand merci,

J'étudie ces scripts, je test et je vous tiens au courant. :-D
Je souhaite mettre en place un partage de connexion internet par le biais de deux FAI ou plus,
afin d'assurer une disponibilité maximal d'internet.
Est-il possible d'utiliser IPTABLE pour cela ?
Tout est possible. C'est du logiciel libre. Sauf que ca n'est pas le role d'iptables de faire du routage (meme si netfilter peut l'alterer). Vois le manuel de la commande `ip', le LARTC howto, et eventuellement le script http://livna.org/~anvil/multi-routes.html. C'est un vieux script que j'utilisais il y a quelques annees. On pourrait faire plus intelligent et mieux integre dans les scripts reseau de fedora, aujourd'hui.
Ca ne fonctionne pas 🙁
Ma config

Routeur 1 :
IP 192.168.1.253

Routeur 2 :
IP 192.168.2.253

Eth0
IP 192.168.0.254
Mask 255.255.255.0
Passerelle : Null

Eth1
IP 192.168.1.254
Mask 255.255.255.0
Passerelle : 192.168.1.253

Eth2
IP 192.168.2.254
Mask 255.255.255.0
Passerelle : 192.168.2.253

Config du poste client (test)
IP 192.168.0.10
Mask 255.255.255.0
Passerelle 192.168.0.254
DNS 192.168.0.254

Apres avoir lancé le script, impossible de faire un test de ping « ping: sendmsg: Operation not permitted »
Impossible de faire un ping vers le 192.168.0.254 (eth0)
Impossible sur le 192.168.1.253, 192.168.1.254 etc... j'ai le même message
J'ai mal fait un truc !?! :-?
Suis pas très fortich, j'avais oublié les droits sur les fichiers
Alors en load-ballance j'ai dans le log
15.06.2007 12 :56 :10 : Configure gateway to balance traffic
15.06.2007 12 :56 :41 Gateway disabled
15.06.2007 12 :56 :51 : Configure gateway to balance traffic
15.06.2007 12 :56 :22 Gateway disabled
15.06.2007 12 :56 :32 : Configure gateway to balance traffic
Le test de ping vu du client donne une réponse un moment puis recoupe une réponse un moment puis recoupe encore et encore impossible d'avoir accès au net
Le test de ping sur le serveur donne sur le routeur 1 et 2 une réponse puis de nouveau « ping: sendmsg: Operation not permitted » encore et encore une réponse puis de nouveau « ping: sendmsg: Operation not permitted » encore et encore .

En mode routeur -2
15.06.2007 12 :44 :35 : Configure gateway to route traffic to router #2
15.06.2007 12 :45 :06 : Gateway disabled
Et toujours pas accès au net
Remarque le ping fonctionne quand le script est sur off et aussi quand j'ai Gateway disabled
j'ai rajouté:
# Accept ICMP traffic
iptables -t filter -A INPUT -p icmp -j ACCEPT # Accept ICMP input (e.g. PING requests)
iptables -t filter -A OUTPUT -p icmp -j ACCEPT # Accept ICMP output (e.g. PING replies)
dans " Setting the firewall rules "

et la plus de problme de « ping: sendmsg: Operation not permitted »

néanmois je n'ai toujours pas le net sur le client bien que le ping fonctionne un probleme au niveau du NAT ?!
Euh, dans le script que je t'ai fourni, le firewall n'est configuré que pour le partage des deux accès.
Ensuite, bien sûr, il faut que tu y rajoutes toutes les règles nécessaires pour laisser passer le traffic que tu veux.
Si tu veux, je peux te mettre un script avec quelques règles de bases (du style accès http et ftp de l'intérieur vers l'Internet).
Néanmoins, il serait bon que tu t'y connaisses un peu sur le fonctionnement de Netfilter et son paramétrage avec Iptables.

Pour le problème du ping, j'ai supprimé un peu trop de règles de mon propre script. :-D
Désolé de t'avoir créé un problème.
Ben c'est abusé mais je veux bien,
je ne suis pas en pro avec iptables, j'essaye tant bien que mal à me dépétrer avec de la doc que je trouve ici et là sur net.
Merci d'avance!
Dans ce cas, je ne saurais que trop te conseiller de faire un petit tour sur le site de Christian Caleca.
Je ne me suis jamais penché sur son tuto Iptables, mais il traite de plusieurs autres sujets et je trouve que ses tutos sont plutôt bien faits et abordables.

Pour ta configuration de base (HTTP + FTP), tu peux ajouter les lignes suivantes au script config-gateway :
# Load modules to handle FTP connections
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp


# Accept loopback traffic
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# Accept ICMP traffic
iptables -t filter -A INPUT -p icmp -j ACCEPT # Accept ICMP input (e.g. PING requests)
iptables -t filter -A OUTPUT -p icmp -j ACCEPT # Accept ICMP output (e.g. PING replies)
iptables -t filter -A FORWARD -p icmp -j ACCEPT # Accept to forward ICMP traffic in both ways


# Forward all traffic that has been initiated by/is related to a previous connection
# This way, we will only have to allow new connections from inner network for required protocols
iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


###################################################
###     Dealing with "standard" connections     ###
###    (i.e. connections between a client and    ###
###       a remote server on the Internet)    ###
###################################################

# Forward HTTP/HTTPS packets from connections established from private network
iptables -t filter -A FORWARD -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -p tcp --dport http -j ACCEPT # HTTP
iptables -t filter -A FORWARD -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -p tcp --dport https -j ACCEPT # HTTPS


# Forward FTP packets from connections established from private network
iptables -t filter -A FORWARD -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -p tcp --dport ftp -j ACCEPT
iptables -t filter -A FORWARD -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -p tcp --dport ftp-data -j ACCEPT
Si je n'oublie rien, ça devrait être bon. :roll:
Merci,
mais ca marche toujours pas, je fais déjà un partage simple d'une connexion apres je passe à deux connexions.
Quel est le problème au juste ?

Edit : Un conseil : pour commencer laisses tomber le script internet-link-monitor.
Ca risque de faire des trucs sans que tu t'en rendes compte et tu comprendrais pas d'où viennent certains problèmes.
Tout ce que t'as à faire, c'est paramétrer le script config-gateway selon tes besoins et le lancer avec l'option que tu veux pour faire tes tests.
Si tu veux que j'y jette un oeil pour vérifier, postes-le.
je suis parti sur cette base:
#!/bin/sh

PRIVATE_NETWORK=192.168.0.0/24 # Private network
PRIVATE_NETWORK_ODD_IPS=192.168.0.1/255.255.255.1 # Odd IPs to be routed via Internet access #1
PRIVATE_NETWORK_EVEN_IPS=192.168.0.2/255.255.255.1 # Even IPs to be routed via Internet access #2
PRIVATE_IP=192.168.0.254 # IP associated to the private interface
PRIVATE_INTERFACE=eth0 # Interface connected to the private network

PUBLIC_NETWORK_1=192.168.1.0/24 # Public network associated to the Internet link #1
PUBLIC_IP_1=192.168.1.254 # IP associated to the public interface #1
PUBLIC_INTERFACE_1=eth1 # Interface connected to the public network #1
PUBLIC_ROUTER_1=192.168.1.253 # IP of the router connected to Internet link #1
MARK_1=4 # Mark associated to packets to forward them to router 1

PUBLIC_NETWORK_2=192.168.2.0/24 # Public network associated to the Internet link #2
PUBLIC_IP_2=192.168.2.254 # IP associated to the public interface #2
PUBLIC_INTERFACE_2=eth2 # Interface connected to the public network #2
PUBLIC_ROUTER_2=192.168.2.253 # IP of the router connected to Internet link #2
MARK_2=5 # Mark associated to packets to forward them to router 2

MODE=$1 # The mode to use (--load-balance | --router-1 | --router-2 | --off)
LOG_FILE=/root/log

# Check the mode provided is correct
case "$MODE" in
--load-balance)
    echo
    echo "Setting the gateway to split traffic over the 2 routers :"
    echo "`date +%x` `date +%T` : Configure gateway to balance traffic" >> $LOG_FILE
    ;;
--router-1)
    echo
    echo "Setting the gateway to route all traffic to router #1 :"
    echo "`date +%x` `date +%T` : Configure gateway to route traffic to router #1" >> $LOG_FILE
    ;;
--router-2)
    echo
    echo "Setting the gateway to route all traffic to router #2 :"
    echo "`date +%x` `date +%T` : Configure gateway to route traffic to router #2" >> $LOG_FILE
    ;;
--off)
    echo 0 > /proc/sys/net/ipv4/ip_forward

    # Flush all firewall rules
    iptables -t filter -F
    iptables -t nat -F
    iptables -t mangle -F

    # Set default policies to DROP all packets
    iptables -t filter -P INPUT DROP
    iptables -t filter -P OUTPUT DROP
    iptables -t filter -P FORWARD DROP

    # Accept ICMP traffic
    iptables -t filter -A INPUT -p icmp -j ACCEPT # Accept ICMP input (e.g. PING requests)
    iptables -t filter -A OUTPUT -p icmp -j ACCEPT # Accept ICMP output (e.g. PING replies)

    # Accept VNC connections from the inner network
    iptables -t filter -A INPUT -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -d $PRIVATE_IP -p tcp --dport 5900 -j ACCEPT # Accept VNC packets from the inner network
    iptables -t filter -A OUTPUT -s $PRIVATE_IP -d $PRIVATE_NETWORK -o $PRIVATE_INTERFACE -p tcp --sport 5900 -j ACCEPT # Accept VNC packets to the inner network

    echo "Gateway disabled"
    echo "`date +%x` `date +%T` : Gateway disabled" >> $LOG_FILE
    exit 0
    ;;
*)
    echo "Usage: $0 {--load-balance|--router-1|--router-2|--off}"
    exit 1
esac



###################################################################################################
###                    Setting the firewall rules                ###
###################################################################################################

echo
echo "        *** Setting up iptables rules ***"
echo

# Allow to forward packets to another interface
echo 1 > /proc/sys/net/ipv4/ip_forward

# Restart the service to make sure it is started
service iptables restart

# Flush all firewall rules
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F

# Set default policies to DROP all packets
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP


# Source NAT packets from the private network to public IPs of the firewall
iptables -t nat -A POSTROUTING -s $PRIVATE_NETWORK -o $PUBLIC_INTERFACE_1 -j SNAT --to-source $PUBLIC_IP_1
iptables -t nat -A POSTROUTING -s $PRIVATE_NETWORK -o $PUBLIC_INTERFACE_2 -j SNAT --to-source $PUBLIC_IP_2

# Load modules to handle FTP connections
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp


# Accept loopback traffic
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# Accept ICMP traffic
iptables -t filter -A INPUT -p icmp -j ACCEPT # Accept ICMP input (e.g. PING requests)
iptables -t filter -A OUTPUT -p icmp -j ACCEPT # Accept ICMP output (e.g. PING replies)
iptables -t filter -A FORWARD -p icmp -j ACCEPT # Accept to forward ICMP traffic in both ways


# Forward all traffic that has been initiated by/is related to a previous connection
# This way, we will only have to allow new connections from inner network for required protocols
iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


###################################################
###     Dealing with "standard" connections     ###
###    (i.e. connections between a client and    ###
###       a remote server on the Internet)    ###
###################################################

# Forward HTTP/HTTPS packets from connections established from private network
iptables -t filter -A FORWARD -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -p tcp --dport http -j ACCEPT # HTTP
iptables -t filter -A FORWARD -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -p tcp --dport https -j ACCEPT # HTTPS


# Forward FTP packets from connections established from private network
iptables -t filter -A FORWARD -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -p tcp --dport ftp -j ACCEPT
iptables -t filter -A FORWARD -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -p tcp --dport ftp-data -j ACCEPT

# Mark packets so as to route them according to the mode given as parameter
case "$MODE" in
--load-balance)
    # Route the packets to the 2 routers depending on their source IP address
    iptables -t mangle -A PREROUTING -s $PRIVATE_NETWORK_ODD_IPS -i $PRIVATE_INTERFACE -j MARK --set-mark $MARK_1
    iptables -t mangle -A PREROUTING -s $PRIVATE_NETWORK_EVEN_IPS -i $PRIVATE_INTERFACE -j MARK --set-mark $MARK_2
    ;;
--router-1)
    # Route all packets to the router #1 (e.g. in case of router #2 failure)
    iptables -t mangle -A PREROUTING -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -j MARK --set-mark $MARK_1
    ;;
--router-2)
    # Route all packets to the router #2 (e.g. in case of router #1 failure)
    iptables -t mangle -A PREROUTING -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -j MARK --set-mark $MARK_2
    ;;
esac









###################################################################################################
###                   Setting up the routing rules                    ###
###################################################################################################

echo
echo "        *** Setting up routing rules ***"
echo

# Flush tables that will be used later
ip rule del fwmark $MARK_1
ip rule del fwmark $MARK_2
ip route flush table $MARK_1
ip route flush table $MARK_2

# Populate the 2 tables with the main routes
ip route show table main | grep -Ev ^default | while read ROUTE ; do
    ip route add table $MARK_1 $ROUTE
    ip route add table $MARK_2 $ROUTE
done

# Add the default route for each table
ip route add table $MARK_1 default via $PUBLIC_ROUTER_1
ip route add table $MARK_2 default via $PUBLIC_ROUTER_2

# Associate the firewall marks to the tables
ip rule add fwmark $MARK_1 table $MARK_1
ip rule add fwmark $MARK_2 table $MARK_2


# Flush the cache
ip route flush cache
Rappel de mes config

Routeur 1 :
IP 192.168.1.253

Routeur 2 :
IP 192.168.2.253

Eth0
IP 192.168.0.254
Mask 255.255.255.0
Passerelle : Null

Eth1
IP 192.168.1.254
Mask 255.255.255.0
Passerelle : 192.168.1.253

Eth2
IP 192.168.2.254
Mask 255.255.255.0
Passerelle : 192.168.2.253

Config du poste client (test)
IP 192.168.0.10
Mask 255.255.255.0
Passerelle 192.168.0.254
DNS 192.168.0.254

le ping vers google du poste client ne repond pas idem avec son adresse ip ping 209.85.135.103 ou ping www.google.fr, j'ai aussi remplacé l'adresse DNS du poste client directement par l'adresse ip d'orange et le probleme reste le même
je pense que le partage de connexion ne ce fait pas, pourquoi je ne sais pas.
j'ai fait un script basique comme :
#!/bin/sh

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A POSTROUTING -t nat -o eth1 -j SNAT --to 192.168.1.254
ou
#!/bin/sh

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A POSTROUTING -t nat -o eth1 -j MASQUERADE
et toujours pas de partage ?!

P.S :
J'ai trouvé un routeur dual WAN mais son prix n'est pas tres symphatique et c'est pour cela je souhaite le faire sur linux
http://www.xincom.com/images/flash/XiNCOM-demo.swf

il existe clackconnect qui fait du multi wan mais je n'ai pas spécialement envie d'une multitude d'ordinateur et de distribution dans mon petit cher moi
Pour commencer, il te faut ajouter ceci pour que le DNS fonctionne :
iptables -t filter -A FORWARD -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -d $PUBLIC_ROUTER_1 -o $PUBLIC_INTERFACE_1 -p udp --dport domain -j ACCEPT # Accept DNS requests from the gateway to public router 1
iptables -t filter -A FORWARD -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -d $PUBLIC_ROUTER_2 -o $PUBLIC_INTERFACE_2 -p udp --dport domain -j ACCEPT # Accept DNS requests from the gateway to public router 2

case "$MODE" in
--load-balance)
    # Destination NAT the DNS packets to the 2 routers depending on their source IP address
    iptables -t nat -A PREROUTING -s $PRIVATE_NETWORK_ODD_IPS -i $PRIVATE_INTERFACE -d $PRIVATE_IP -p udp --dport domain -j DNAT --to-destination $PUBLIC_ROUTER_1
    iptables -t nat -A PREROUTING -s $PRIVATE_NETWORK_EVEN_IPS -i $PRIVATE_INTERFACE -d $PRIVATE_IP -p udp --dport domain -j DNAT --to-destination $PUBLIC_ROUTER_2
    ;;
--router-1)
    # Destination NAT the DNS packets to the router #1 (i.e. in case of router 2 failure)
    iptables -t nat -A PREROUTING -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -d $PRIVATE_IP -p udp --dport domain -j DNAT --to-destination $PUBLIC_ROUTER_1
    ;;
--router-2)
    # Destination NAT the DNS packets to the router #2 (i.e. in case of router 1 failure)
    iptables -t nat -A PREROUTING -s $PRIVATE_NETWORK -i $PRIVATE_INTERFACE -d $PRIVATE_IP -p udp --dport domain -j DNAT --to-destination $PUBLIC_ROUTER_2
    ;;
esac
Je l'avais oublié parce que je ne l'utilise plus vu que j'ai installé des serveurs DNS sur mon réseau.

Ensuite, pourrais-tu exécuter les trois commandes suivantes sur ta passerelle et me retourner leur résultat ?
ip route table show main
ip route table show 4
ip route table show 5
De même, sur le client, pourrais-tu faire un nslookup et taper 'server' puis 'google.fr' et me renvoyer le résultat, puis faire un 'tracert google.fr' si le DNS marche ou sur l'adresse IP.
ip route table show main
retourne:
Command "table" is unknow, try "ip route help"

idem pour:
ip route table show 4
et
ip route table show 5
nslookup et taper 'server' puis 'google.fr'
retourne:
Microsoft Windows XP [version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\Paguira>nslookup
*** Impossible de trouver le nom de serveur pour l'adresse 192.168.0.254 : Non-e
xistent domain
*** Les serveurs par défaut ne sont pas disponibles
Serveur par dÚfaut :  UnKnown
Address:  192.168.0.254

> server www.google.fr
Serveur par dÚfaut :  www.l.google.com
Addresses:  209.85.129.147, 209.85.129.99, 209.85.129.104
Aliases:  www.google.fr, www.google.com

>
Excuses, je me suis planté dans les commandes :-D
C'est 'ip route show table xxx'.
(C'est ça de vouloir aller vite et de pas se relire 😉)

Pour les requêtes nslookup, il s'agit de deux requêtes différentes.
D'abord tu tapes 'server' pour voir quel serveur est utilisé pour la résolution, puis ensuite tu tapes 'google.fr' pour résoudre l'adresse.
Tu peux aussi taper directement 'nslookup google.fr' et mettre le résultat.

Et t'as pas essayé 'tracert google.fr' ?