Jump to content

Fusionner les interfaces réseau sous Linux ?


Recommended Posts

Salut. =)

Tout d'abord, bon, je sais pas si je poste dans la bonne section, si il faut plutôt poster dans Réseaux ou plutôt dans Linux... enfin bon, si ce sujet n'a pas sa place ici, je m'en excuse par avance et qu'un modo le déplace :)

OK, donc :

Voilà, imaginons que j'habite en plein centre ville, j'ai un ordinateur portable avec plusieures interfaces de connexion réseau. Mettons, j'ai une freebox connectée sur eth0, un hotspot du macdo d'en face connecté sur wlan0, la box du voisin (qui est d'accord, hein?) ;) qui est connectée sur ma clef USB WiFi sur wlan1 et puis je suis pété de thunes alors j'ai une clef 3G+ de chez orange sur ppp0 connectée au réseau.

Ma question est la suivante (simple curiosité) : est-il possible de fusionner toutes ces connexions pour en faire une seule, qui va s'appeler, mettons, remote0 ? L'intérêt en serait le d'accélérer les téléchargements (un peu sur le même principe que Download Accelerator Plus).

Le principe : par exemple, je souhaite télécharger la dernière Ubuntu x64 version DVD, qui pèse dans les 3-4 Go. Le temps de trouver le site officiel de Ubuntu, à chaque fois que Firefox charge une page, remote0 envoie à chacune des autres interfaces composantes des requêtes différentes pour les différents éléments des pages (images, animations flash, feuilles CSS...). Il se passe que c'est dans notre cas 4 adresses IP appartenant à la même machine qui vont récupérer les différents éléments d'une seule et même page en même temps, ce qui multiplie en théorie par 4 sa vitesse de chargement. Puis, j'ai trouvé le lien direct vers l'image iso, alors le clique dessus, et alors remote0 voit un fichier de 4 Go à recevoir. C'est là que les 4 interfaces envoient 4 requêtes depuis 4 adresses IP pour recevoir chacune une part différente du fichier de 4 Go (pourquoi pas par morceaux de quelques Mo) et chacune des interfaces les télécharge à sa vitesse maximale (qui peut être atteinte en mettant encore des connexions supplémentaires sur chaque interface, au cas où le serveur limite la vitesse par connexion).

Donc, selon moi, ça pourrait fonctionner.

Je vois même à quoi pourrait ressembler un éventuel fichier de config d'un tel outil :

# Définition de la nouvelle interface, à partir des interfaces éxistantes, par ordre de priorité de connexion de celles-ci (de préférence mettre en premier les connexions avec la plus petite latence)
remote0 = eth0 wlan0 wlan1 ppp0
# Seuil de partage d'une requête à recevoir, pour le pas utiliser les 4 interfaces pour une requête de quelques Ko.
remote0.RequestShareTreshold = 4096
# ici, on a défini le seuil à 4 Mo, c'est-à-dire que si le fichier à recevoir mesure moins de 4 Mo, alors remote0 ne va utiliser que eth0 pour le recevoir.
# Définition d'une interface par défaut pour l'envoi de gros fichiers (par FTP par exemple). Option facultative car si non définie, c'est eth0 qui sera utilisée pour ça, car eth0 est définie en premier dans la première option.
remote0.DefaultUploadInterface = wlan1
# Puis on définit le nombre de connexions maxi pour chacune des interfaces composantes
remote0.MaxConnectionsPerInterface = 16
# Ce qui fait 4*16=64 connexions différentes pour recevoir les requêtes, et 16 pour envoyer (car l'envoi n'est applicable qu'à une seule interface, en l'occurence eth0)

Voilà, j'espère avoir été assez clair et pas trop long.

Vous en pensez quoi, vous ? Est-ce que c'est utopique/illogique/cohérent/réalisable/éxistant/autre ?

Link to comment
Share on other sites

je ne suis pas certain que ce soit possible avec des interface "si" différentes (enfin, dans la pratique, j'ai jamais essayé de lier un ethernet à un wpa_supplicant ou une clé 3G).

mais je n'ai rien entendu qui laisse imaginer le contraire non plus.

sur le principe, ça existe (le mot clef google : load-balancing)

sur la pratique, ta réponse est peut-être dans le bonding.

et en bonus, un article qui te concerne un peu plus...

Link to comment
Share on other sites

Si c'est deux port branchés au même réseau oui c'est possible avec le bonding.

Ce que tu cherche à faire est par contre totalement impossible au niveau TCP/IP car ça remet totalement en cause ces protocoles !

Toutefois il est peut être possible sur la couche applicative

Si on à plusieurs connexions actives on lancer simultanément des téléchargements partiels sur chacune des connexions.

Théoriquement ça peut être fait mais je ne crois pas qu'il existe de logiciels pour ça.

Sinon attention la plupart des logiciels de téléchargements sont très mauvais et contient souvent des adwares et spywares (je ne connais pas celui que tu cite)

Aussi généralement un nombre excessifs de connexions au serveur ce qui pourrait s'appeler "attaque DoS".

Si tu essayais de faire ça sur du 56k et ta clé 3G je comprendrais, mais là tu à l'ADSL en ville : c'est déjà excellant ! Je ne vois pas pourquoi tu irais t'embêter avec ces bidouillages.

Link to comment
Share on other sites

Ce que tu cherche à faire est par contre totalement impossible au niveau TCP/IP car ça remet totalement en cause ces protocoles !
<br>Là, je suis curieux.<br>Tu peux développer ?<br>
<br>Toutefois il est peut être possible sur la couche applicative

Si on à plusieurs connexions actives on lancer simultanément des téléchargements partiels sur chacune des connexions.

Théoriquement ça peut être fait mais je ne crois pas qu'il existe de logiciels pour ça.

<br>ça implique quand même d'ignorer de default_router pour aller taper une addresse vraissemblablement spécifié par l'utilisateur, en imaginant qu'on puisse lui faire confiance.

en effet, théoriquement envisageable, mais ça m'a l'air bien dégueulasse...<br>

Si tu essayais de faire ça sur du 56k et ta clé 3G je comprendrais, mais là tu à l'ADSL en ville : c'est déjà excellant ! Je ne vois pas pourquoi tu irais t'embêter avec ces bidouillages.
<br>mouai...

il n'en est pas moin que, même en ADSL, les débits ascendants sont honteux.<br>d'ailleurs, habitant à 1.5Km du DSLAM, je rajouterai que les débits déscendants ne valent pas mieux...<br>le jour où chacun pourra faire le choix d'héberger son serveur à domicile - ça parrait con - ne serait-ce que pour streamer du contenu *personnel* sur ton téléphone/laptop/tablette/au bureau, accéder sans restrictions à toutes ses données de n'importe quel terminal<br>ce jour là, on pourra parler "d'internet"...<br><br>edit: l'édition marche pas... à virer la mise en page... rajouter des br ....<br>je repasserai faire le ménage quand ça aura fini de casser les cou***es<br>

Link to comment
Share on other sites

C'est possible ... enfin oui oui et non.

Je crois me souvenir qu'a une lointaine époque à mon ancien boulot, on avait fait ça avec un proxy ( squid sous linux ), et avec 2 interface de sortie sur le bouzin...

cela ne fonctionnait que pour les pages web .....

Pour simplifier, il faisait une sorte de hash de l'adresse internet, et si c'était pair il passait par l'interface A, et si c'était impair, il passait par l'interface B.

non... c'est pas ça.

en fait dans le navigateur, on utiliser un fichier "proxy.pac" qui faisait ça, qui répartissait la charge vers les 2 serveurs proxy, et si un des 2 serveurs tombait, alors toutes les requêtes allai sur l'autre...

faut qu je retrouve un exemple...

edit :

http://en.wikipedia.org/wiki/Proxy_auto-config

Advanced functionality

More advanced PAC files can reduce load on proxies, do load balancing, fail over, or even black/white listing before the request hit the proxies. One can return multiple proxies:

return "PROXY proxy1.example.com:8080; PROXY proxy2.example.com:8080";

quelques exemples

http://wiki.squid-cache.org/SquidFaq/ConfiguringBrowsers

http://technet.microsoft.com/en-us/library/dd361918.aspx

Link to comment
Share on other sites

Là, je suis curieux. Tu peux développer ?

Lorsque tu as deux connexions (on parle de connexion fournie par le FAI pas de réseau au niveaux de l'opérateur) tu as deux IP différantes.

Une connexion TCP ne peut pas être à cheval sur 2 IP.

Je crois me souvenir qu'a une lointaine époque à mon ancien boulot, on avait fait ça avec un proxy ( squid sous linux ), et avec 2 interface de sortie sur le bouzin...

cela ne fonctionnait que pour les pages web .....

Bien sur que ça fonctionne mais uniquement au niveau applicatif (proxy HTTP c'est applicatif pas TCP/IP).

Seul détail certains sites n'aiment pas que l'on change d'IP sans arrêt donc il vaut mieux garder les correspondance entre PC_client et Nom_du_site quelques temps.

Link to comment
Share on other sites

Le bonding est généralement utilisé pour faire de deux interfaces réseaux une seule.

Mais c'est deux interfaces qui sont sur le même réseau et dont les paquets ont les mêmes paramètres de routage.

Du coup, Linux utilise deux cartes pour gérer les paquets, mais au niveau des connexions, ça pose pas de problèmes.

Ce que tu peux peut-être faire avec deux connexions différentes, c'est du fail-over.

Genre si ta connexion Internet ne marche plus, tu passes par le Wi-Fi du voisin.

Link to comment
Share on other sites

Là, je suis curieux. Tu peux développer ?

Lorsque tu as deux connexions (on parle de connexion fournie par le FAI pas de réseau au niveaux de l'opérateur) tu as deux IP différantes.

Une connexion TCP ne peut pas être à cheval sur 2 IP.

ok, imparable.

mais donc, comment fonctionne le sonicwall de ma boite (c'est un exemple, et je ne désespère pas de me monter un équivalent sous BSD), qui fait de l'aggrégation sur deux connexions internet (orange+sfr) ?

dois-je comprendre que la seule aggrégation faite se passe au niveau du routeur (pf/iptables/...) -> quand une session TCP est ouverte, elle est associé à une unique interface ?!

c'est de la distribution, pas de l'aggrégation !

encore un délire de commerciaux ?

Link to comment
Share on other sites

comment fonctionne le sonicwall de ma boite ?

Une connexion sur l'un, une autre connexion sur l'autre ...

Voire une IP interne sur l'une des connexion et une autre IP interne sur l'autre et ça change de temps en temps pour répartir.

Autre solution : tout passe par un serveur à l'extérieur qui à une grosse bande passante (genre 100 Mbps) a partir de là les deux connexions peuvent être utilisés pour contacter ce serveur relai qui lui peut établir une connexion très rapide sur une seule IP.

Link to comment
Share on other sites

  • 2 months later...
  • 2 weeks later...
Là, je suis curieux. Tu peux développer ?

Lorsque tu as deux connexions (on parle de connexion fournie par le FAI pas de réseau au niveaux de l'opérateur) tu as deux IP différantes.

Une connexion TCP ne peut pas être à cheval sur 2 IP.

ok, imparable.

mais donc, comment fonctionne le sonicwall de ma boite (c'est un exemple, et je ne désespère pas de me monter un équivalent sous BSD), qui fait de l'aggrégation sur deux connexions internet (orange+sfr) ?

dois-je comprendre que la seule aggrégation faite se passe au niveau du routeur (pf/iptables/...) -> quand une session TCP est ouverte, elle est associé à une unique interface ?!

c'est de la distribution, pas de l'aggrégation !

encore un délire de commerciaux ?

En fait, quand tu fais du load-balancing, tu as le choix:

- soit tu configures ta passerelle pour dire "tu choisis la meilleure interface disponible pour le client, et tu conserves cette interface pour lui pour X temps lorsqu'il se connecte à l'adresse Y" => un client A passera toujours par eth0 lorsqu'il visitera pcinpact tant que X n'est pas dépassé

- soit tu configures ta passerelle pour dire "tu choisis la meilleure interface disponible pour chaque requête" => si A change de page sur PCI, il peut changer d'adresse également.

Dans le second cas, ça améliore également les temps de chargement des pages (car les images, css, js, etc sont chargés en parallèle) au prix d'une légère perte de performances sur le routeur (il doit calculer la charge à chaque requête au lieu de le faire par session).

Par contre, une fois que tu inities un téléchargement, il passe toujours par la même interface car TCP fonctionne en mode "connecté".

Bref, je suppose que ton entreprise est dans le cas 2 :-)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...