Auto-hébergement : agrégation (bonding) de 2 lignes ADSL avec OpenVPN (1/2)

Ou comment doubler efficacement sa capacité de nuisance d’upload/download afin de conquérir le monde (youpi !).

On t’as reconnu Fantomas ! Ha non, mince, celle là je l’ai déjà faite…

Bon, déjà, je vous le dis tout de suite : l’image ci-dessous n’est pas un fake, même si l’upload peut vous sembler totalement « délirant » au premier abord (voir les explications plus bas).

bonding-adsl-openvpn

Ce test a été réalisé (si vous en voulez d’autres, bande de sceptiques que vous êtes, y’a pas de souci) avec deux lignes ADSL free.fr (mais sans aucune Freebox, na !) agrégées ensemble avec le module « bonding » du noyau Linux, le tout piloté par OpenVPN et quelques règles iptables/iproute2 pas piquées des hannetons.

Le trafic sortant était ensuite routé vers un petit VPS (à pas cher) puis vers un autre VPN (AirVPN, un service génial, plus tard un billet sur ce sujet), ce qui nous a donné cette adresse IP de sortie en… tadaaa… Hollande ! (La sent tu, tralalalalèèèère…)*

*L’ensemble de la rédaction ainsi que toute l’équipe de modération se désolidarise totalement de cette blague lamentable et présentent ses plus plates excuses à tous les VPN amis implantés dans des pays qui sentent gravement le fromage et qui se seraient sentis (sic !) agressés par ce jeu de mot des plus foireux. (Et, s’il vous plait, déconnez pas dans les commentaires, j’ai vraiment pas envie d’avoir le soldat Ryan Valls sur le dos.)

Bref, pour faire simple, l’agrégation de liens ADSL avec OpenVPN, ça marche (et si vous aimez le fromage qui pue pas que des pieds, faites donc un saut en Hollande, ou pas, c’est vous qui voyez).

Mais, comme toujours et avant de se lancer dans l’aventure, il y a quelques petits détails importants à prendre en compte et c’est ce que nous allons voir dans la suite de ce billet.

Un des premiers points importants concernant le bonding avec OpenVPN, bien au delà du débit (et là, « chérie », tu le sens mon gros upload…), c’est que votre FAI (que vous détestez car c’est un collabo, le genre à « vendre du beurre aux allemands » ) ne saura plus tout ce que vous branlez avec vos deux lignes ADSL : normal, une bonne partie du trafic (ou même tout le trafic si vous êtes complètement parano) ne transitera plus en clair.

Donc, gardez bien à l’esprit que vous aurez l’air, à vous tout seul, d’un « Usual suspects » en puissance et pour cause : que du trafic chiffré distribué sur deux lignes ADSL, c’est pas madame Michu au fin fond du Cantal (l’autre pays du fromage…) qui va s’amuser à ça.

Et si, en plus, vous vous amusez à envoyer des mails graveleux avec Thunderbird et PGP, alors là c’est le pompon…

Hé, Ho ! J’suis pas Crésus, ça coûte un bras deux lignes ADSL !

(Totalement) faux.

Si vous vous démerdez un peu, deux lignes ADSL, pour un particulier et en dégroupage total, ça ne coûte pas plus de 40 € TTC / mois (qui veut voir mes anciennes factures ?).

Le plus cher, dans l’histoire, ce sont les frais d’installation de France Télécom pour tirer/ouvrir/activer une seconde ligne (55 €) et, éventuellement, l’achat d’un « vrai » modem/routeur supplémentaire si, comme bibi, vous ne pouvez pas saquer (restons poli) les affreuses « machinbox » (toutes plus moisies les unes que les autres) fournies par les opérateurs.

Mmmmh… Ami auto-hébergé, tu sembles dubitatif, je peux le voir au fond de ton kernel (que tu mets à jour, hein !?).

Bon, ok, soyons précis : la TV via ADSL qui pixelise (ou non), je m’en contrefous comme de l’achat de mon dernier pull (pas plus de 15 € sinon c’est de l’arnaque : un enfant chinois ou indien surexploité sans vergogne 16 heures par jour ne vaut pas plus).

Bref, le tiers-monde se meurt mais souriez en attendant, bande de privilégiés que vous êtes, scrutez tranquillement les offres ADSL « nues » en promo : ce que vous voulez, c’est du « Vrai Nain Ternet™ » et pas l’ensemble de la merde télévisuelle déversée chaque jour sur le PAF.

Je vous le redis encore une fois : avec les « promos » permanentes, deux lignes ADSL (avec IP fixe ou non) chez de gros opérateurs, ça ne vaut pas plus de 40 € / mois.

Toujours pour info, FDN (mais si, vous savez, les trois « guignols » dans un garage qui n’ont strictement aucune légitimité dans le secteur…) estime que la bande passante d’un abonné ADSL coûte 3 € / mois.

Certes, les FAI ont d’autres coûts lié à l’infrastructure, au renouvellement des routeurs hors de prix, au personnel, aux boutiques, à la hotline. Encore que, sur ce dernier point, j’ai un léger doute.

Mais, surtout, ce sont les investissements massifs (et éhontés) dans des saloperies de boitiers certifiés « DPI Inside » qui, à mon avis, plombent leurs bilans (sans parler des dividendes illégitimes mais ça, c’est encore une autre histoire, éhontée elle aussi).

Tout ça pour dire que, je sais pas pour vous, mais perso je m’en contrefous car leurs technos liberticides pour faire du profilage marketing à tout-va, ils peuvent se la… Bref… En tous cas, bien profond (et, si possible, avec du gravier, du goudron et des plumes).

M’ouais, super… Et mon upload dans tout ça, il va vraiment doubler ?

Oui Martine, tu va pouvoir envoyer deux fois plus vite tes photos de chatons sur Facebook…

Dans la série « j’ai testé pour vous » en conditions réelles  : upload 190% et download entre 150% et 185% (ça dépend du mode de bonding choisi, on voit ça plus bas).

Soyons précis (bis) : j’ai la chance d’avoir à disposition deux lignes ADSL situées à moins de 350 mètres du répartiteur téléphonique. Autant vous dire qu’il s’agit de conditions plus qu’idéales (vous pouvez me traiter de nanti et lancer des cailloux, j’assume totalement).

Pour ceux que ça intéresse, deux petites vidéos sympatiques :

Un tech d’Orange, alias France Télécom, a eu la gentillesse de me faire visiter le central téléphonique : y’a des fils et des câbles partout, c’est un merdier sans non alors pas étonnant que, lors des manipulations, il y a ait parfois quelques petits « effets de bord ». Du genre des coupures chez les voisins, un écrasement de ligne par erreur (slamming) voire pire, un blackout total dans quartier entier (si, si, ça arrive… #3615_MyLife).

En tout cas, même dans un bled paumé, on peut avoir deux lignes ADSL au taquet et qui « poutrent » au max, que ce soit en upload ou en download.

La première ligne ADSL était chez OVH (en dégroupage partiel) tandis que la seconde ligne ADSL était chez SFR (en dégroupage total).

Mais, entre temps, Free a fait une opération sur vente-privee.com qui ne pouvait pas se refuser : 2 € TTC / mois pour de l’ADSL pendant un an (quand je vous disais que deux lignes ADSL ne coûtent pas cher…).

Honnêtement, et après une très longue réflexion d’au moins 3 secondes (au bas mot), banco ! J’ai dégagé OVH et SFR (même pas peur).

Petite aparté pour les plus sceptiques : rassurez-vous, les deux liens étant chiffrés avec OpenVPN, il n’y a strictement aucun souci avec Youtube : les vidéos en 1080p (ou plus), ça bombarde sévère, pas de lag, rien, nada.

Revenons à nos moutons : n’allez surtout pas croire que le dégroupage partiel, ou total, influe sur votre bande passante.

Donc, si vous avez une première ligne ADSL totalement moisie, en commander une seconde sera du même acabit, c’est à dire qu’elle sera toute aussi pourrie que la première.

L’inverse est également vrai (heureusement) : si la première ligne ADSL est bonne, la seconde le sera aussi (sauf intervention du dieu « Jupiter » qui en aurait décidé autrement ou du FAI véreux qui briderait certains types de trafic).

La bonne nouvelle, c’est qu’il est tout à fait possible d’agréger deux lignes ADSL « pas terribles » afin d’avoir un meilleur débit, que ce soit en download (un peu, voire beaucoup) ou en upload (multiplié par 2, ça c’est sûr).

La mauvaise nouvelle (sinon c’est pas drôle), c’est que pour faire efficacement du bonding avec OpenVPN, il faut disposer d’un serveur dédié ou d’un VPS externe avec au minimum 100 Mbit/s de bande passante.

Gloups… Bah oui, encore une dépense.

Mais, comme vous êtes une bandes de potes auto-hébergés, assoiffés de vidéos de chatons-même-qu’ils-sont-trop-mignons, rien ne vous empêche de louer à plusieurs un petit serveur dédié et donc de réduire drastiquement les coûts.

Par exemple et depuis peu, OVH propose à nouveau les Kimsufi avec des IP failover : du coup, un simple Atom N2800 avec deux adresses IP (celle du serveur + une IP failover) fera largement l’affaire pour acheminer à bon port le streaming live de vos exploits sexuels*.

*Astuce du jour : rassurez votre copine en lui expliquant que la vidéo de son minou-même-qu’il-est-trop-mignon sera chiffrée sur toute la ligne (vous ferez ainsi des heureux à l’autre bout du VPN…).

EDIT : Ha non, désolé, on me fait signe qu’OVH a encore changé sa politique (LOL…) : plus d’IPFO sur le « petits » serveurs.

Regardez les Green Fish ou les promos chez Ikoula : c’est un poil plus cher mais au moins l’hébergeur est sérieux et les perfs seront au rendez-vous. Sinon vous avez Online qui propose de petites Dedibox SC gen2 (avec un KVM !) mais attention, ce sont des processeurs Nano.

Bon, si on causait un peu technique : les différents modes d’agrégation

Nan, j’déconne, on n’y est pas encore.

Pour ceux qui se demande encore comment ça marche, voici une image honteusement pompée sur le site de Simon Mott :

vpn-bonding-diagram

  • Local LAN : vos différents postes (PC, Mac, Linux, Android, autre) ainsi que le frigo, le lave-linge, le micro-ondes, etc
  • Local Server : votre Nobox chérie avec votre blog, les mails, le porn et les photos de votre copine (notez le pléonasme…)
  • ADSL Connection : vos deux « machinbox » ADSL fournies par le(s) FAI(s) ou, mieux, vos propres modems/routeurs
  • Internet : le repaire de pédo-nazis protégés par le firewall d’OpenOffice et je ne vous parle même pas du pire tou pire
  • VPN Tunnel (x 2) : les deux liens chiffrés gérés par OpenVPN et agrégés avec le module « bonding » de Linux
  • Fat Pipe : la « grosse » connexion en 100 ou 1000 Megabit/s rattaché à votre VPS ou serveur dédié
  • Data Center Server : le VPS ou le serveur dédié que vous louez entre amis (afin de préparer une attaque terroriste)

L’idéal est de disposer de deux cartes réseau sur sa Nobox (pour faire de la QOS efficacement) mais ce n’est pas obligatoire : suffit de coller les deux modems ADSL derrière le même switch, ça marche pareil.

Concernant les différents modes de bonding, je vous la fais (vraiment, j’ai épluché la doc) courte car parmi toutes les différentes possibilités, seules deux nous intéressent vraiment :

  • balance-rr

This mode is the only mode that will permit a single TCP/IP connection to stripe traffic across multiple interfaces.

Le mode « balance-rr » permet de distribuer en mode round-robin les différents paquets vers les deux interfaces.

C’est avec ce mode qu’il devient possible de doubler efficacement son upload car les paquets sortants seront distribués de manière équitable vers les deux interfaces créées avec OpenVPN et donc vers les deux modem ADSL.

  • balance-xor

This mode will limit traffic such that packets destined for specific peers will always be sent over the same interface.

Le mode « balance-xor » quant à lui, s’occupe de toujours envoyer les paquets d’une même connexion vers la même interface.

Forcément, ce mode ne permet pas de doubler le débit car chaque connexion étant attribuée à une seule et même interface, le débit sera alors limitée à celui l’interface utilisée.

Donc là, normalement, vous vous dites « banco », on va utiliser le mode balance-rr à la fois pour pour l’upload et le download.

(Grave) erreur…

Parce que ouais, j’ai omis de le préciser mais il tout à fait possible d’utiliser des modes d’agrégation différents : un pour l’upload, un autre pour le download. (Essayez donc de faire ça avec du MLPPP sans l’accord express de votre FAI, z’allez m’en dire des nouvelles…)

Petite digression concernant le bonding…

Au sujet de MLPPP, un article clair et concis sur le sujet : Bandwidth Aggregation, Bonding and Teaming. Et si vous aimez les vidéos, en voici une avec quatre modems ADSL : MLPPP (Multilink PPP).

Il y a deux points géniaux avec ce protocole :

  1. Correctement configuré, le failover est automatique
  2. Nan, désolé, je blaguais, je vois pas d’autre point « génial » (#Gros_Troll_Inside)

A l’inverse, c’est pas « génial » sur deux points :

  1. Le FAI doit l’autoriser et il sont (très) rares a le proposer (OVH => #EPIC_FAIL)
  2. Sauf erreur, les flux ne sont pas chiffrés donc on est totalement « à poil » (genre telnet…)

Mais, attendez, pas si vite, il existe une troisième voie : MLVPN alias MultiLink Virtual Public Network.

C’est français, sous licence BSD, la documentation est bien faite mais, même problème, les tunnels ne sont pas chiffrés.

Fin de la petite digression concernant le bonding…

Donc, revenons à nos différents mode de bonding : balance-rr vs balance-xor.

L’upload en mode « balance-rr », OK, pas de souci, ça marche carrément pas mal. Par contre, pour le download c’est un poil plus compliqué.

Et là, il faut que je vous avoue un truc (si, si…), les points qui vont suivre dépassent (très largement) mes « compétences » donc l’aide un admin réseau « poilu » (et barbu) serait plus que bienvenue.

En gros, ça veut dire que si les paquets arrivent en désordre lors d’un download, la pile TCP/IP de Linux doit attendre que tous les paquets soient présents (logique…) pour délivrer le trafic vers le client (ce qui peut impliquer plusieurs demandes de retransmission)

Il y a plusieurs paramètres avec lesquels ont peut « jouer » dans le /proc (ex : ipfrag_max_dist, tcp_reordering) mais, à mon avis, sans une connaissance approfondie de la pile TCP/IP, mieux vaut s’abstenir de « rigoler » avec.

  • Les packets ACK ou le retour des paquets de 40 octets (IP) qui font « suer » (restons poli)

Pour qu’un gros serveur en gigabit vous « bombarde » avec ses données, il faut que le flux en upload des paquets ACK (ceux qui disent, OK, bien reçu, envoie la suite) soit stable et fiable. Sinon, ça va mal se mettre.

Et là, si jamais vous souffrez de latence temporaire, ces paquets dépasseront le délai autorisé (500 ms de mémoire) et la source ralentira son débit. (Une vidéo très intéressante : Wireshark Tutorial of TCP Nagle and Delayed Ack interaction)

Encore une fois, s’il y a un barbu (tâché de pizzas de préférence) est présent dans la salle, qu’il n’hésite pas à se montrer (Je mords pas, promis !)

Punaise… Elle vient cette conclusion oui ou merde ?

Tout ça pour dire qu’après plusieurs mois de tests (au doigt mouillé) et une utilisation en condition réelle, je recommande ceci :

  • Pour l’upload : balance-rr, à moins que vos deux lignes ADSL aient des latences complètement différentes (ce qui est rare)
  • Pour le download : balance-xor, dans la pratique ça marche (carrément) bien à condition d’avoir des connexion simultanées

La nuit dernière je téléchargeais une démo d’un jeu (Spec Ops The Line) sur Steam à 4 Mo/seconde. Oui, môssieur, et non il n’y a pas d’erreur, cela fait presque 40 mbit/s. (Si vous voulez « ergoter » concernant les débits IP, ATM ou la charge utile, je suis preneur ! ^^)

Même punition pour Youteub (oui, ce domaine existe…) : plusieurs connexions sont ouvertes vers la même vidéo et donc il y a une chance sur 2 pour que le mode balance-xor distribuent ces connexions sur les deux interfaces (souvent, pas toujours. Mais quand c’est le cas, regarder une vidéo HD 4K en 60 fps, c’est du billard).

Pour le P2P, c’est moins bon, jamais réussi à dépasser ~3 Mo/s (même pour downloader une distribution Debian, snif…). Je pense que c’est lié à l’overhead généré par les paquets ACK : une fois envoyés dans le VPN, la taille réellement transmise est plus importante donc cela sature l’upload plus facilement (quand j’aurais le temps je regarderais).

Allez, on résume :

  1. OpenVPN chiffre toutes vos données entre votre nobox et un serveur distant (votre FAI ne peut donc plus vous « dépecer » comme un vulgaire lapin)
  2. La capacité d’upload est doublée presque à coup sûr, même avec des lignes ADSL totalement « moisies » (la latence c’est autre chose)
  3. Le download est doublé une fois sur deux (pire cas de figure) sinon bingo, le débit est multiplié par 2 (très souvent)
  4. Si vous couplez le tout avec un VPN (AirVPN par exemple. Note : je n’ai pas d’action chez eux donc inutile de réclamer un code promo, je ne mange pas de ce pain là, c’est juste que le service offert en vaut le prix), vous échapperez un peu au profiling généralisé (mais en fait non, pauvre fous… Ce sera l’objet d’un prochain billet.)

J’en oubliais le principal : avec deux lignes ADSL, vous pourrez vous initier aux joies du load balancing (un grand merci à Victor pour m’avoir botté le cul conseillé HAProxy et « faisez » gaffe : le Victor, il est super pointu !).

Si, si… D’ailleurs si vous lisez ce billet, sachez que vous avez atterri soit sur ma première ligne ADSL, soit sur la seconde, ou sinon, c’est le cache de Varnish qui vous affiche cette page (ouaip, encore un billet dans le tube, parce que Varnish, correctement configuré, ça déchire ta « môman »…)

Enfoiré ! Pas un seul fichier de conf, tu me prends pour un cave ?

Non, pas du tout, l’ensemble des fichiers de conf seront présent dans le prochain billet (promis, juré).

Parce que ouais, publier du code en vrac c’est vraiment moche donc je voulais distinguer la logique de la mise en oeuvre.

Mais bon, soyez sympa, laissez moi quelques jours pour m’en occuper.

Et pour ceux qui se poseraient encore la question « Mais comment peut-on obtenir un upload de 6 Mbit/s avec simplement deux lignes ADSL ? »

Facile : OpenVPN peut compresser les données avant de les envoyer via les VPNs donc si les fichiers s’y prêtent (HTML, CSS, JS, etc), il est possible d’envoyer plus de données et donc dépasser les limites physiques des lignes ADSL.

A+

PS 1 : ch’tit bonus en attendant la suite et pour « défriser » votre navigateur : Panopticlick.

PS 2  : OpenVPN c’est bon, mangez-en !

Il y a 76 commentaires de malades mentaux, le blog ne va pas tenir la charge

Oui Jean-Pierre, je souhaite publier un commentaire assassin sur ce blog minable

(Votre adresse email ne sera jamais publiée, divulguée, revendue, broyée, atomisée, etc.)