[mpath-tools et iptables] partage de charge sur deux box adsl

partage de charge sur deux box adsl [mpath-tools et iptables] - Réseaux - Réseaux grand public / SoHo

Marsh Posté le 20-09-2012 à 15:47:30    

Bonjour,
 
Je me permet de vous demander un peu d'aide, je suis en train de configurer un partage de charge à l'aide de l'utilitaire mpath-tools sur une debian, mai je rame un peu.
Voici un schéma de mon installation :
 

                                   192.168.254.1/24          
          ---- ip fixe1 ----|box1|-------                              
        /                                 \ 192.168.254.52/24                      
INTERNET                                   Passerelle Debian---192.168.1.100/24------------ PC de test 192.168.1.42/24 (passerelle 192.168.1.100)
        \                                 / 10.1.0.10/24                                \
          ---- ip fixe2 ----|box2|-------                                           192.168.1.1 - Passerelle vers autres LANS en 192.168.0.0/16
                                         10.1.0.1/24


Voici en substance mon architecture réseau. Pour la configuration de mpath-tools j'ai défini les fichiers gateways pour chacune des interfaces eth0 (192.168.1.100), eth1 (192.168.254.1) et eth2 (10.1.0.10), avec pour gateway respectivement les passerelles indiquées sur le schéma.
 
Pour les rules de mpath, j'ai défini les règles suivantes :

default {
 # by default we load balance the traffic between 2 gateways
 via "box1" "box2";
 # use the "default" table as defined in /etc/iproute2/rt_tables
 table "default";
}
fwmark "0x01/0x0f" {
 via "box1";
}
 
fwmark "0x02/0x0f" {
 via "box2";
}
 
fwmark "0x03/0x0f" {
 via "lan";
}
destination "192.168.2.0/24" {
 via "lan";
}


Pour finir, j'ai ajouté les règles suivantes dans iptables :

Code :
  1. # 1/ set mark for outgoing connections (one for each gateway)
  2. iptables -A POSTROUTING -t mangle -m realm --realm box1 -j CONNMARK --set-xmark 0x01/0x0f
  3. iptables -A POSTROUTING -t mangle -m realm --realm box2 -j CONNMARK --set-xmark 0x02/0x0f
  4. iptables -A POSTROUTING -t mangle -m realm --realm lan -j CONNMARK --set-xmark 0x03/0x0f
  5. # 2/ set mark for incoming connections (if we are forwarding them to the LAN)
  6. iptables -A PREROUTING -t mangle -m conntrack --ctstate NEW -i eth1 -j CONNMARK --set-xmark 0x01/0x0f
  7. iptables -A PREROUTING -t mangle -m conntrack --ctstate NEW -i eth2 -j CONNMARK --set-xmark 0x02/0x0f
  8. iptables -A PREROUTING -t mangle -m conntrack --ctstate NEW -i eth0 -j CONNMARK --set-xmark 0x03/0x0f
  9. # 3/ restore mark (just one is enough to restore all marks)
  10. iptables -I PREROUTING -t mangle -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark --nfmask 0x0f --ctmask 0x0f


Tout est bien pris en compte par le système :

root@mpath:~# iptables -t mangle -nvL
Chain PREROUTING (policy ACCEPT 53 packets, 4859 bytes)
 pkts bytes target     prot opt in     out     source               destination
  359 29068 CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0           ctstate RELATED,ESTABLISHED CONNMARK restore mask 0xf
    6   192 CONNMARK   all  --  eth1   *       0.0.0.0/0            0.0.0.0/0           ctstate NEW CONNMARK xset 0x1/0xf
    5   364 CONNMARK   all  --  eth2   *       0.0.0.0/0            0.0.0.0/0           ctstate NEW CONNMARK xset 0x2/0xf
   27  2799 CONNMARK   all  --  eth0   *       0.0.0.0/0            0.0.0.0/0           ctstate NEW CONNMARK xset 0x3/0xf
 
Chain INPUT (policy ACCEPT 50 packets, 4739 bytes)
 pkts bytes target     prot opt in     out     source               destination
 
Chain FORWARD (policy ACCEPT 3 packets, 120 bytes)
 pkts bytes target     prot opt in     out     source               destination
 
Chain OUTPUT (policy ACCEPT 24 packets, 3280 bytes)
 pkts bytes target     prot opt in     out     source               destination
 
Chain POSTROUTING (policy ACCEPT 27 packets, 3400 bytes)
 pkts bytes target     prot opt in     out     source               destination
   78  6552 CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0           realm 0x1 CONNMARK xset 0x1/0xf
   74  6216 CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0           realm 0x2 CONNMARK xset 0x2/0xf
    0     0 CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0           realm 0x3 CONNMARK xset 0x3/0xf
root@mpath:~# mpath show gateways
name      nexthop                     state       probe                   %loss
--------- --------------------------- ----------- ----------------------- -----
lan       192.168.1.1 (eth0)          active      ok (78 ms)               0.00
box1      192.168.254.1 (eth1)        active      ok (42 ms)               7.14
box2      10.1.0.1 (eth2)             active      ok (150 ms)              3.57
root@mpath:~# mpath show rules
id  type    matches                                     via                  DE
--- ------- ------------------------------------------- -------------------- --
  0 default                                             [box1,box2]
  1 fwmark  0x01/0x0f                                   [box1]
  2 fwmark  0x02/0x0f                                   [box2]
  3 fwmark  0x03/0x0f                                   [lan]
  4 dest    192.168.2.0/24                              [lan]


Voilà j'en ai terminé avec la configuration, maintenant je passe à mon problème, depuis mon pc de test lorsque je fais un traceroute vers google.fr, voici ce qu'il se passe :
Il faut savoir que le 192.168.1.1 a pour route par défaut un FW qui natte les flux vers la box2

tracert www.google.fr
1     1ms     1ms     1ms     192.168.1.100     => ok
2     1ms     1ms     1ms     192.168.1.1       => ???
3     2ms     2ms     2ms     10.1.0.1          => route par défaut du 192.168.1.1 (box2)


mais depuis le serveur de partage de charge, je sors bien via la box1 :

root@mpath:~# traceroute 194.2.0.20
traceroute to 194.2.0.20 (194.2.0.20), 30 hops max, 60 byte packets
 1  192.168.254.1 (192.168.254.1)  1.949 ms  2.929 ms  4.027 ms
 2  80.X.X.X (80.X.X.X)  35.061 ms  35.835 ms  37.541 ms


avec l'utilitaire mping sur le serveur :

root@mpath:~# mping 194.2.0.20
MPING ns-cache0.oleane.net (194.2.0.20) 56 bytes of data using 3 paths.
[box1  ] 56 bytes from 194.2.0.20: icmp_seq=1 ttl=56 time=41.4 ms
[box2  ] 56 bytes from 194.2.0.20: icmp_seq=1 ttl=56 time=82.4 ms
[lan   ] 56 bytes from 194.2.0.20: icmp_seq=1 ttl=55 time=140 ms


Pour terminer, voici ma question à 100 balles :
Comment se fait-il que lorsque j'essaie de sortir vers internet depuis mon pc de test, je n'emprunte pas mon partage de charge (renvoie les paquets vers le gateway du lan)? Que manque-t-il dans ma configuration d'iptables? Je galère depuis quelques jours sur ce problème, je suis preneur de toutes vos idées!
 
Merci d'avance pour votre aide

Reply

Marsh Posté le 20-09-2012 à 15:47:30   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed