Rectificatif : comme la seconde règle ne match que si la première n'a pas
marché, pour alterner entre 3 adresses, il faut progressivement réduire le
--every, ainsi :

iptables -t nat -A POSTROUTING -s 10.0.3.78/32 ! -d 10.0.3.0/24 -p tcp -m
tcp --dport 80 -m statistic --mode nth --every 3 --packet 0 -j SNAT
--to-source 1.2.3.4

iptables -t nat -A POSTROUTING -s 10.0.3.78/32 ! -d 10.0.3.0/24 -p tcp -m
tcp --dport 80 -m statistic --mode nth --every 2 --packet 0 -j SNAT
--to-source 1.2.3.5

iptables -t nat -A POSTROUTING -s 10.0.3.78/32 ! -d 10.0.3.0/24 -p tcp -m
tcp --dport 80 -j SNAT --to-source 1.2.3.6


Jean-François Gigand - Geonef
Paris, France - http://geonef.fr/

Le 25 août 2016 à 14:39, Jean-François Gigand <j...@geonef.fr> a écrit :

> Parfait !
> Effectivement c'est le boulot de SNAT de réécrire l'ip source, comme c'est
> expliqué en détail dans http://www.inetdoc.net/guides/
> iptables-tutorial/snattarget.html (merci David)
>
> Ceci a l'air de fonctionner (10.0.3.78 est ici l'IP du container d'où
> provient la requête, 1.2.3.* sont les IP des interfaces publiques) :
>
> iptables -t nat -A POSTROUTING -s 10.0.3.78/32 ! -d 10.0.3.0/24 -p tcp -m
> tcp --dport 80 -m statistic --mode nth --every 2 --packet 0 -j SNAT
> --to-source 1.2.3.4
>
> iptables -t nat -A POSTROUTING -s 10.0.3.78/32 ! -d 10.0.3.0/24 -p tcp -m
> tcp --dport 80 -m statistic --mode nth --every 2 --packet 1 -j SNAT
> --to-source 1.2.3.5
>
>
> Wallace : il n'y a pas de session http. En l'occurence, l'objectif est
> d'augmenter la fréquence de requêtes sur certaines API tout en respectant
> le quota en question.
>
> MrJK : comme je disais plus haut, il ne s'agit pas de *load balancing*,
> mais de l'inverse, "origin balancing" si ça peut se dire. Les requêtes sont
> émises par un programme donné mais doivent sortir tantôt "par l'interface
> A", tantôt par la B (façon de parler, il s'agit d'interfaces virtuelles et
> de NAT).
>
>
> Du coup, iptables fera l'affaire pour mon besoin, mais si on devait gérer
> l'IP constante par session http / cookie, ou autre aspect http-aware, alors
> l'approche par squid  (tcp_outgoing_address) est la bonne...
>
>
>
> Jean-François Gigand - Geonef
> Paris, France - http://geonef.fr/
>
> Le 25 août 2016 à 10:21, Christophe Dezé <christophed...@wanadoo.fr> a
> écrit :
>
>>
>> un truc du genre :
>> iptables -t nat -A POSTROUTING  -m statistic --mode nth --every 3 -j SNAT
>> --to 1.2.3.4
>> iptables -t nat -A POSTROUTING  -m statistic --mode nth --every 2 -j SNAT
>> --to 1.2.3.5
>> iptables -t nat -A POSTROUTING  -m statistic --mode nth --every 1 -j SNAT
>> --to 1.2.3.5
>>
>>
>> Le 24/08/2016 à 22:15, Jean-François Gigand a écrit :
>>
>> Bonsoir,
>>
>> Justement c'est le contraire du classique load-balancing de service...
>>
>> Merci David, j'ai regardé et le mode "nth" avec --every et --packet
>> devraient coller au besoin.
>>
>> Je dois alors utiliser -j MASQUERADE (comme la route par défaut,
>> d'ailleurs, puisque les requêtes proviennent d'un container LXC) mais je
>> dois spécifier l'IP pour le nat sur chacune de ces règles, ce que je ne
>> sais pas (encore) faire (d'habitude c'est la table de routage qui s'en
>> occupe).
>>
>>
>> Jean-François Gigand - Geonef
>> Paris, France - http://geonef.fr/
>>
>> Le 24 août 2016 à 22:03, Christophe Dezé <christophed...@wanadoo.fr> a
>> écrit :
>>
>>> bonjour,
>>>
>>> as tu regardé du coté de docker qui peut faire du round-robin en entrée
>>> sur plusieurs docker/squid en sortie ?
>>>
>>> Le 24/08/2016 à 19:09, Jean-François Gigand a écrit :
>>>
>>> Bonjour,
>>>
>>> J'ai besoin de mettre en place un proxy HTTP qui bind les requêtes
>>> sortantes à une IP source parmi une liste en round-robin.
>>>
>>> Par exemple, ayant configuré interfaces(5) avec des ip "failover" comme
>>> ceci :
>>>
>>> iface eth0:ip1 inet static
>>>       address 1.2.3.4/32
>>> iface eth0:ip2 inet static
>>>       address 1.2.3.5/32
>>> iface eth0:ip3 inet static
>>>       address 1.2.3.6/32
>>>
>>> le proxy choisira de binder sa première connexion sortante à 1.2.3.4
>>> puis 1.2.3.5, 1.2.3.6 puis à nouveau 1.2.3.4, etc.
>>>
>>> Idéalement, le proxy choisit l'IP dans l'ordre par domaine, ce qui dans
>>> l'exemple donnerait [domaine de destination -> IP source] :
>>>
>>> domaine1.com -> 1.2.3.4
>>> domaine2.com -> 1.2.3.4
>>> domaine1.com -> 1.2.3.5
>>> domaine1.com -> 1.2.3.6
>>> domaine2.com -> 1.2.3.5
>>>
>>> Le proxy doit aussi pouvoir binder en IPv6 (si la destination est
>>> accessible en IPv6, même si le client du proxy est IPv4).
>>>
>>> Je n'ai pas l'impression que Squid ou HAproxy puissent répondre à ce
>>> besoin, mais j'aimerais en être sûr
>>>
>>> Est-ce quelqu'un connaît une solution ou une approche à suggérer ?
>>> Ou bien vaut-il mieux écrire un code spécifique ?
>>> (qui devra gérer les requêtes simultanées... en NodeJS par exemple)
>>>
>>> Merci !
>>>
>>> Jean-François Gigand - Geonef
>>> Paris, France - http://geonef.fr/
>>>
>>>
>>>
>>> _______________________________________________
>>> Liste de diffusion du FRsAGhttp://www.frsag.org/
>>>
>>> _______________________________________________ Liste de diffusion du
>>> FRsAG http://www.frsag.org/
>>
>> _______________________________________________
>> Liste de diffusion du FRsAGhttp://www.frsag.org/
>>
>>
>
_______________________________________________
Liste de diffusion du FRsAG
http://www.frsag.org/

Répondre à