Comment fusionner plusieurs connexions Internet en une seule?


23

Mon PC dispose d'un total de 4 cartes réseau, 2 cartes réseau Gigabit Ethernet filaires et également 2 cartes réseau sans fil. (Un Broadcom avec des pilotes propriétaires et Ralink avec un logiciel open source, qui fonctionne beaucoup mieux que Broadcom.)

Mon téléphone portable peut partager sa connexion sans fil avec mon PC, mais j'ai également une connexion Internet filaire. J'ai donc plusieurs connexions Internet pour accéder à Internet. Comment puis-je fusionner 2 connexions ou plus ensemble et les équilibrer pour profiter d'une expérience Internet unifiée qui est la somme de toutes les connexions Internet qui y sont connectées.

Par exemple, si j'ai un modem avec une connexion Internet de 1024kB / s et un autre qui offre 512kB / s et un petit qui offre 128kB / s, après équilibrage de charge et fusion de toutes les connexions (Bonding ou Teaming), je pourrais télécharger à une vitesse de 1664kB / s en utilisant les 3 connexions Internet comme une par exemple.

Cette question m'a toujours intrigué.


5
Semble plutôt au-delà de la portée de Ask Ubuntu :) C'est un truc de réseau assez complexe. OMI, cela en vaut rarement la peine, au moment où vous prenez en compte les paquets perdus en raison d'une liaison en panne (même temporairement), la réorganisation des paquets en raison de certaines liaisons plus lentes que d'autres, et de telles choses. Je ne connais pas de solution de "boîte noire" qui ferait cela, pourrait être un projet intéressant.
Césium

9
Eh bien, la question est de savoir si cela peut être fait dans Ubuntu et si oui, comment.
Luis Alvarado

J'ai créé une réponse dans les 2 connexions Internet sur un seul poste PC . Lier des documents à délimiter dans Ubuntu.
Lucio

@ Lucio Je pourrais marquer la question comme doublon ou vous pouvez déplacer votre réponse ici et je peux la marquer comme acceptée. Vous devrez également être prêt pour la sortie de la version 13.04 car elle inclura dans Network Manager les options de liaison (uniquement les esclaves de connexion câblés pour le moment).
Luis Alvarado

Réponses:


11

Je fais quelque chose comme ça au travail en utilisant Ubuntu 11.04. Nous exécutons l'outil de configuration de pare-feu Shorewall, qui en plus d'être excellent dans son travail, fournit des outils de routage ISP multiples et rudimentaires qui pourraient répondre à vos besoins. Vous pouvez trouver quelques documents à ce sujet ici: http://www.shorewall.net/MultiISP.html

Ce que cela signifie, c'est que vous ne pouvez pas utiliser plusieurs FAI pour une seule connexion ... les choses ne sont pas aussi simples. Le mieux que vous puissiez faire est d'essayer de diriger uniformément les nouvelles connexions entre les différents fournisseurs.

C'est un problème complexe. Vous finirez probablement par vous battre la tête contre le mur (je l'ai certainement fait) avant d'avoir fini de déboguer chaque problème. Ainsi, comme d'autres affiches l'ont suggéré, il serait peut-être sage d'examiner attentivement la force de votre désir.


Joli lien. Très beau tutoriel.
Luis Alvarado


8

Vous pouvez le faire en utilisant le package ifenslavequi attache et détache les interfaces réseau esclaves à un périphérique de liaison.

  1. Installer:

    sudo apt-get install ifenslave
    
  2. Charger le module du noyau de liaison

    sudo modprobe bondingle
    
  3. Configurez vos interfaces:

    sudo vi /etc/network/interfaces
    

    Exemple de configuration, pour combiner eth0 et eth1 en tant qu'esclaves de votre interface de liaison:

    #eth0 is manually configured, and slave to the "bond0" bonded NIC
    auto eth0
    iface eth0 inet manual
    bond-master bond0
    
    #eth1 ditto, thus creating a 2-link bond.
    auto eth1
    iface eth1 inet manual
    bond-master bond0
    
    # bond0 is the bonded NIC and can be used like any other normal NIC.
    # bond0 is configured using static network information.
    auto bond0
    iface bond0 inet static
    address 192.168.1.10
    gateway 192.168.1.1
    netmask 255.255.255.0
    # bond0 uses standard IEEE 802.3ad LACP bonding protocol 
    bond-mode 802.3ad
    bond-miimon 100
    bond-lacp-rate 1
    bond-slaves none
    
  4. Redémarrez le réseau:

    sudo restart networking
    
  5. Apporter une interface bornée haut / bas:

    ifup bond0
    ifdown bond0
    

    Il existe plusieurs modes de liaison comme exemple que nous utilisons:

    bond-mode active-backup
    

    Description du mode de liaison de sauvegarde active :

    Politique de sauvegarde active: un seul esclave de la liaison est actif. Un esclave différent devient actif si, et seulement si, l'esclave actif tombe en panne. L'adresse MAC de la liaison est visible de l'extérieur sur un seul port (adaptateur réseau) pour éviter de confondre le commutateur. Ce mode offre une tolérance aux pannes. L'option principale affecte le comportement de ce mode.

    Source et plus d'informations sur le wiki d'aide de la communauté Ubuntu .

La liaison signifie la combinaison de plusieurs interfaces réseau (NIC) sur une seule liaison, fournissant soit une haute disponibilité, un équilibrage de charge, un débit maximal ou une combinaison de ces éléments. La source


+1 car c'est l'une des raisons de ma question. Attendra toujours un moyen de créer une connexion maître de réseau virtuel qui est la somme de toutes les connexions esclaves (réelles). Quelque chose comme la liaison qui vient dans la dernière version du noyau.
Luis Alvarado

2
-1 - la liaison fonctionne dans les LAN car elle fonctionne sur la couche 2. La question concerne l'équilibrage de charge de deux WAN indépendants.
gertvdijk

@gertvdijk Je ne suis pas d'accord. Vérifiez ma réponse de mise à jour pour savoir que la liaison permet également l'équilibrage de charge.
pl1nk

1
@ pl1nk Il s'agit de l'équilibrage de charge de couche 2 pour deux cartes réseau dans le même réseau L2. Ce n'est pas la même chose que l'équilibrage de charge multi-FAI!
gertvdijk

3
@ pl1nk Mon dernier commentaire. La question concerne clairement plusieurs connexions à large bande indépendantes. Bien qu'ils puissent être un FAI, cela ne change pas le handicap pour gérer cela au niveau 2.
gertvdijk

6

C'est une question un peu ancienne, mais si vous voulez toujours savoir ..

Il y a 2 scénarios typiques, ce que gertvdijk et pl1nk argumentaient dans l'une des réponses:

Vous avez un ordinateur avec 2 adresses IP publiques (2 FAI différents) et vous vous connectez à un autre hôte (par exemple, un serveur dans un centre de données avec un gros tuyau qui est plus grand que la bande passante agrégée des deux connexions FAI de votre ordinateur). Vous établissez donc une connexion de liaison avec l'hôte via vos 2 connexions, puis l'hôte (serveur) sert votre trafic via sa propre connexion Internet. Dans ce scénario, vous pouvez obtenir près de 100% de la bande passante combinée dans les deux directions pour une seule connexion.

Il s'agit d'un cas particulier d'agrégation de liaisons / regroupements / lingues où plusieurs interfaces de couche 2 (même réseau) sont réunies. Cela pourrait être réalisé en établissant des connexions VPN de couche 2 (tap) sur chaque interface ISP de l'ordinateur à l'hôte et en les liant ensemble (mode round-robin) pour avoir une interface unique. Le facteur limitant dans ce scénario est la différence des retards (ping) sur chaque connexion ISP à l'hôte. Plus ils sont similaires et stables, mieux c'est. Nous l'utilisons dans l'une de nos installations, cela fonctionne bien. Si vous souhaitez connaître les détails de la mise en œuvre, faites-le moi savoir.

Un autre scénario serait alors sans hôte intermédiaire, c'est-à-dire une connexion directe de vos interfaces FAI à divers serveurs Web à travers le monde. Dans ce cas, le mieux que vous puissiez obtenir est de répartir uniformément les connexions sortantes entre les interfaces - c'est-à-dire qu'une session TCP passe entièrement par un FAI, une deuxième session par un autre et ainsi de suite. Il en est ainsi car lorsque vous établissez une connexion TCP, elle a des adresses IP d'origine et de destination pour chaque paquet et lorsqu'un serveur reçoit un paquet d'une autre IP pour laquelle aucune négociation TCP n'a été effectuée, il considère le paquet comme erroné et le supprime. Comme chaque connexion ISP a sa propre IP publique, pour la même session TCP, vous ne pouvez pas envoyer un paquet via une connexion d'une IP et une autre via une autre connexion avec une autre IP.

Vous n'atteindrez pas une utilisation de bande passante globale aussi élevée pour un seul ordinateur que dans le premier scénario, mais pour un petit bureau, cela pourrait être une bonne solution. Ce que vous pouvez faire pour l'étendre un peu est d'implémenter des solutions personnalisées pour des protocoles spécifiques. Par exemple, vous pouvez avoir une sorte de proxy sur la passerelle (qui pourrait être le même ordinateur) pour les téléchargements http et demander différentes parties d'un fichier énorme établissant différentes sessions TCP via différentes interfaces ISP. Dans ce cas, le taux de téléchargement résultant serait proche de 100% de la bande passante combinée. C'est comme décharger sur la passerelle ce que font ReGet, GetRight et des téléchargeurs similaires. Google «HTTP 206 Partial Content». Je ne connais aucune solution open source prête à l'emploi pour ce scénario, mais il existe des appliances matérielles qui font exactement cela: google '


Hou la la! La première partie de votre réponse est exactement ce que je recherche. J'ai un serveur dans le cloud avec Ubuntu et une connexion très rapide. Et la seule connexion Internet que je peux avoir ici est de 300 kbps avec une 3G limitée. Pouvez-vous donner plus d'informations sur la façon de réaliser la première partie de votre réponse, afin que je puisse acheter de nombreux dongles 3G et des plans pour améliorer la vitesse de ma connexion?
Huafu

2
echo "bonding" >> /etc/modules echo -e "alias bond* bonding\noptions bonding max_bonds=10 mode=2 xmit_hash_policy=layer3+4 arp_interval=100 arp_ip_target=10.0.0.1" > /etc/modprobe.d/bonding.conf
Anatoli

1
Et asservissez toutes les ifaces du robinet à ce lien: echo "+tapX " >> /sys/class/net/bond0/bonding/slaves Vérifiez son état avec: cat /proc/net/bonding/bond0 À ce stade, tout le trafic Internet doit circuler via bond0 vers le serveur dans le centre de données. Là, vous devez définir le routage: echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p /etc/sysctl.conf iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE (eth0 est censé être l'iFace Internet)
Anatoli

1
Cette configuration de liaison (mode = 2 xmit_hash_policy = layer3 + 4) fera passer chaque nouvelle connexion via un iface VPN sous-jacent différent en fonction du hachage (calculé à partir des adresses IP et des ports impliqués dans la connexion) numéro de mod iface. Plus d'informations: kernel.org/doc/Documentation/networking/bonding.txt . En fait, cela ressemble plus à la deuxième solution de ma réponse, c'est parce que vous avez besoin de connexions sous-jacentes très similaires (très faible gigue et même bande passante) pour que la liaison à tour de rôle fonctionne correctement (sinon vous obtenez beaucoup de réorganisation des paquets) et vous dites que vos connexions sont 3G.
Anatoli

1
@Huafu, pour avoir la première solution, il vous suffit de changer les options de liaison au lieu de mode=2 xmit_hash_policy=layer3+4y spécifier mode=0(voir le lien @ kernel.org), mais vérifiez d'abord à quel point les liens via 3G sont similaires. Si leurs temps de ping diffèrent de plus de 2-3 ms ou si la gigue est supérieure à 1 ms, vous aurez beaucoup de réorganisation de paquets, ce qui réduira efficacement la vitesse de la liaison agrégée. Vous devrez vérifier les statistiques agrégées des liens avec netstat -s(recherchez les retransmissions) et iperf -s/ iperf -c <server_ip> -d. Vérifiez d'abord les performances de chaque lien, puis nous pouvons continuer avec une solution
Anatoli

0

j'ai fait face à un problème similaire .. et j'étais très intéressé par l'approche de la solution selon le premier scénario de mr. GTH et Anatoli, je vous demande très de disposer les configs et scripts de base, si possible, pour tester la configuration décrite dans le premier scénario.

maintenant j'ai configuré les connexions vpn via différents fournisseurs ISP, en utilisant des interfaces tun / tap combinées (ce n'est pas une liaison, ce qui est expliqué dans la réponse # 8) avec cet utilitaire:

Net-ISP-Balance par Lincoln D. Stein

Équilibrez la charge de votre connexion Internet sur deux ou plusieurs FAI pour une bande passante et une fiabilité améliorées

Accueil du projet: https://lstein.github.io/Net-ISP-Balance/

Ce package vous permet d'équilibrer la charge d'une connexion Internet domestique ou de petite entreprise entre deux FAI ou plus. Vous pouvez l'utiliser avec un seul hôte connecté à deux FAI ou sur un routeur / pare-feu pour équilibrer la charge de votre réseau local entier. Le trafic réseau est équilibré entre les deux connexions ISP pour augmenter la capacité de téléchargement et de téléchargement, et si un ISP échoue, les autres ISP prendront automatiquement le relais.

La bande passante est distribuée au niveau de chaque connexion. Cela signifie que vous ne verrez pas la bande passante agrégée sur un téléchargement particulier ou une référence de vitesse, mais vous verrez les avantages lorsque plusieurs transferts de données se produisent simultanément, par exemple, lorsque plusieurs personnes de votre foyer diffusent des films en continu. De plus, les protocoles de transfert de fichiers à connexions multiples tels que BitTorrent verront les avantages de l'équilibrage de charge.

il s'agit d'un utilitaire basé sur Perl pour la gestion du routage et des iptables sous Linux parfait pour nos besoins, en fait, crée d'abord une table de routage pour tous les fournisseurs, puis répartit uniformément tout le trafic LAN entre les fournisseurs, pour comprendre le fonctionnement de l'utilitaire, suggère d'envisager un petit exemple (configuration de test) pour 3 FAI + 1 LAN

 #cat /etc/network/balance.conf
 ##service    device   role     ping-ip           
 CABLE3       enp0s3   isp      10.0.2.2
 CABLE8       enp0s8   isp      10.0.3.2
 CABLE9       enp0s9   isp      10.0.4.2
 LAN          enp0s10  lan                        

 #cat /etc/network/interfaces
auto enp0s3
allow-hotplug enp0s3
iface enp0s3 inet dhcp

auto enp0s8
allow-hotplug enp0s8
iface enp0s8 inet dhcp

auto enp0s9
allow-hotplug enp0s9
iface enp0s9 inet dhcp

auto enp0s10
allow-hotplug enp0s10
iface enp0s10 inet static
    address 192.168.1.1/24

#Now work Net-ISP-Balance utility:

## Including rules from /etc/network/balance/pre-run/pre-run-script.pl ##
## Finished /etc/network/balance/pre-run/pre-run-script.pl ##
echo 0 > /proc/sys/net/ipv4/ip_forward
ip route flush all
ip rule flush
ip rule add from all lookup main pref 32766
ip rule add from all lookup default pref 32767
ip route flush table  2
ip route flush table  1
ip route flush table  3
ip route add  10.0.2.0/24 dev enp0s3 src 10.0.2.15
ip route add  10.0.3.0/24 dev enp0s8 src 10.0.3.15
ip route add  10.0.4.0/24 dev enp0s9 src 10.0.4.15
ip route add  0.0.0.0/0 dev enp0s10 src 
ip route add default scope global nexthop via 10.0.4.2 dev enp0s9 weight 1 nexthop via 10.0.3.2 dev enp0s8 weight 1 nexthop via 10.0.2.2 dev enp0s3 weight 1
ip route add table 2 default dev enp0s3 via 10.0.2.2
ip route add table 2 10.0.2.0/24 dev enp0s3 src 10.0.2.15
ip route add table 2 10.0.3.0/24 dev enp0s8 src 10.0.3.15
ip route add table 2 10.0.4.0/24 dev enp0s9 src 10.0.4.15
ip route add table 2 0.0.0.0/0 dev enp0s10 src 
ip rule add from 10.0.2.15 table 2
ip rule add fwmark 2 table 2
ip route add table 1 default dev enp0s8 via 10.0.3.2
ip route add table 1 10.0.2.0/24 dev enp0s3 src 10.0.2.15
ip route add table 1 10.0.3.0/24 dev enp0s8 src 10.0.3.15
ip route add table 1 10.0.4.0/24 dev enp0s9 src 10.0.4.15
ip route add table 1 0.0.0.0/0 dev enp0s10 src 
ip rule add from 10.0.3.15 table 1
ip rule add fwmark 1 table 1
ip route add table 3 default dev enp0s9 via 10.0.4.2
ip route add table 3 10.0.2.0/24 dev enp0s3 src 10.0.2.15
ip route add table 3 10.0.3.0/24 dev enp0s8 src 10.0.3.15
ip route add table 3 10.0.4.0/24 dev enp0s9 src 10.0.4.15
ip route add table 3 0.0.0.0/0 dev enp0s10 src 
ip rule add from 10.0.4.15 table 3
ip rule add fwmark 3 table 3
## Including rules from /etc/network/balance/routes/01.local_routes ##
# enter any routing commands you might want to go in
# for example:
# ip route add 192.168.100.1 dev eth0 src 198.162.1.14

## Finished /etc/network/balance/routes/01.local_routes ##
## Including rules from /etc/network/balance/routes/02.local_routes.pl ##
## Finished /etc/network/balance/routes/02.local_routes.pl ##
iptables -F
iptables -t nat    -F
iptables -t mangle -F
iptables -X
iptables -P INPUT    DROP
iptables -P OUTPUT   DROP
iptables -P FORWARD  DROP

iptables -N DROPGEN
iptables -A DROPGEN -j LOG -m limit --limit 1/minute --log-level 4 --log-prefix "GENERAL: "
iptables -A DROPGEN -j DROP

iptables -N DROPINVAL
iptables -A DROPINVAL -j LOG -m limit --limit 1/minute --log-level 4 --log-prefix "INVALID: "
iptables -A DROPINVAL -j DROP

iptables -N DROPPERM
iptables -A DROPPERM -j LOG -m limit --limit 1/minute --log-level 4 --log-prefix "ACCESS-DENIED: "
iptables -A DROPPERM -j DROP

iptables -N DROPSPOOF
iptables -A DROPSPOOF -j LOG -m limit --limit 1/minute --log-level 4 --log-prefix "DROP-SPOOF: "
iptables -A DROPSPOOF -j DROP

iptables -N DROPFLOOD
iptables -A DROPFLOOD -m limit --limit 1/minute  -j LOG --log-level 4 --log-prefix "DROP-FLOOD: "
iptables -A DROPFLOOD -j DROP

iptables -N DEBUG
iptables -A DEBUG  -j LOG --log-level 3 --log-prefix "DEBUG: "
iptables -t mangle -N MARK-CABLE3
iptables -t mangle -A MARK-CABLE3 -j MARK     --set-mark 2
iptables -t mangle -A MARK-CABLE3 -j CONNMARK --save-mark
iptables -t mangle -N MARK-CABLE8
iptables -t mangle -A MARK-CABLE8 -j MARK     --set-mark 1
iptables -t mangle -A MARK-CABLE8 -j CONNMARK --save-mark
iptables -t mangle -N MARK-CABLE9
iptables -t mangle -A MARK-CABLE9 -j MARK     --set-mark 3
iptables -t mangle -A MARK-CABLE9 -j CONNMARK --save-mark
iptables -t mangle -A PREROUTING -i enp0s10 -m conntrack --ctstate NEW -m statistic --mode random --probability 1 -j MARK-CABLE9
iptables -t mangle -A PREROUTING -i enp0s10 -m conntrack --ctstate NEW -m statistic --mode random --probability 0.5 -j MARK-CABLE8
iptables -t mangle -A PREROUTING -i enp0s10 -m conntrack --ctstate NEW -m statistic --mode random --probability 0.333333333333333 -j MARK-CABLE3
iptables -t mangle -A PREROUTING -i enp0s10 -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -i enp0s3 -m conntrack --ctstate NEW -j MARK-CABLE3
iptables -t mangle -A PREROUTING -i enp0s3 -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -i enp0s8 -m conntrack --ctstate NEW -j MARK-CABLE8
iptables -t mangle -A PREROUTING -i enp0s8 -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -i enp0s9 -m conntrack --ctstate NEW -j MARK-CABLE9
iptables -t mangle -A PREROUTING -i enp0s9 -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -d 127.0.0.0/8 -j DROPPERM
iptables -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT   -p tcp --tcp-flags SYN,ACK ACK -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK ACK -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROPFLOOD
iptables -A INPUT   -i enp0s10 -s 0.0.0.0/0 -j ACCEPT
iptables -A OUTPUT  -o enp0s10 -d 0.0.0.0/0  -j ACCEPT
iptables -A OUTPUT  -o enp0s10 -d 255.255.255.255/32  -j ACCEPT
iptables -A OUTPUT  -p udp -s 0.0.0.0/0 -j ACCEPT
iptables -A FORWARD  -i enp0s10 -o enp0s3 -s 0.0.0.0/0 ! -d 0.0.0.0/0 -j ACCEPT
iptables -A OUTPUT   -o enp0s3                 ! -d 0.0.0.0/0 -j ACCEPT
iptables -A FORWARD  -i enp0s10 -o enp0s8 -s 0.0.0.0/0 ! -d 0.0.0.0/0 -j ACCEPT
iptables -A OUTPUT   -o enp0s8                 ! -d 0.0.0.0/0 -j ACCEPT
iptables -A FORWARD  -i enp0s10 -o enp0s9 -s 0.0.0.0/0 ! -d 0.0.0.0/0 -j ACCEPT
iptables -A OUTPUT   -o enp0s9                 ! -d 0.0.0.0/0 -j ACCEPT
iptables -A OUTPUT  -j DROPSPOOF
iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
iptables -t nat -A POSTROUTING -o enp0s8 -j MASQUERADE
iptables -t nat -A POSTROUTING -o enp0s9 -j MASQUERADE
## Including rules from /etc/network/balance/firewall/01.accept ##
## This file contains iptables statements that add additional firewall rules

# allow incoming domain packets -- needed for DNS resolution
iptables -A INPUT   -p udp --source-port domain -j ACCEPT
# allow incoming NTP packets -- needed for net time protocol
iptables -A INPUT   -p udp --source-port ntp -j ACCEPT
## Finished /etc/network/balance/firewall/01.accept ##
## Including rules from /etc/network/balance/firewall/01.accept.pl ##
iptables -A INPUT -p tcp -s 0.0.0.0/0 --syn --dport ssh -j ACCEPT
## Finished /etc/network/balance/firewall/01.accept.pl ##
## Including rules from /etc/network/balance/firewall/02.forward.pl ##
iptables -A FORWARD -p udp --source-port domain -d 0.0.0.0/0 -j ACCEPT
iptables -A FORWARD -p udp --source-port ntp    -d 0.0.0.0/0 -j ACCEPT
## Finished /etc/network/balance/firewall/02.forward.pl ##
echo 1 > /proc/sys/net/ipv4/ip_forward
## Including rules from /etc/network/balance/post-run/post-run-script.pl ##
## Finished /etc/network/balance/post-run/post-run-script.pl ##

Veuillez envisager de supprimer cette réponse et d'ajouter un commentaire demandant davantage d'explications à la réponse correspondante. Ce n'est pas une réponse. Merci.
Raffa
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.