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/ set mark for outgoing connections (one for each gateway)
- iptables -A POSTROUTING -t mangle -m realm --realm box1 -j CONNMARK --set-xmark 0x01/0x0f
- iptables -A POSTROUTING -t mangle -m realm --realm box2 -j CONNMARK --set-xmark 0x02/0x0f
- iptables -A POSTROUTING -t mangle -m realm --realm lan -j CONNMARK --set-xmark 0x03/0x0f
- # 2/ set mark for incoming connections (if we are forwarding them to the LAN)
- iptables -A PREROUTING -t mangle -m conntrack --ctstate NEW -i eth1 -j CONNMARK --set-xmark 0x01/0x0f
- iptables -A PREROUTING -t mangle -m conntrack --ctstate NEW -i eth2 -j CONNMARK --set-xmark 0x02/0x0f
- iptables -A PREROUTING -t mangle -m conntrack --ctstate NEW -i eth0 -j CONNMARK --set-xmark 0x03/0x0f
- # 3/ restore mark (just one is enough to restore all marks)
- 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