Depuis mon dernier déménagement, je suis dans un immeuble équipé par la fibre Orange. Je me dis naïvement que ça ne peut pas être pire que l'ADSL d'autres fournisseurs plus respectueux de leurs abonnés.

Première désillusion, pour toute offre fibre souscrite, il faut qu'un technicien Orange se déplace chez vous, même si tout est déjà installé dans les parties communes et qu'il y a une arrivée fibre dans l'appartement. Après trois semaines d'attente et une demi journée de travail perdue pour recevoir les techniciens qui ne font que brancher le convertisseur fibre/rj45 et la box, je suis enfin connecté sur Internet.

Premiers tests, ça a l'air de marcher, les sites de test de débit affichent bien 100/10. Ensuite je teste un download sur ftp.fr.freebsd.org et là c'est bien plus lent, le technicien me rétorque que c'est le serveur auquel je me connecte qui ne suis pas le débit et sans réfléchir je le crois.

Je me suis ensuite empressé de me débarrasser de la Livebox pour la remplacer par mon routeur, une alix 2D3 qui tourne sur FreeBSD. C'est juste une connexion PPPoE sur le VLAN 835 que j'ai faite avec mpd, pour en savoir plus vous pouvez voir ou encore ici (linux).

Après un mois d'utilisation, youtube reste atrocement lent et je ne sens pas le facteur 5 par rapport à l'ADSL. Sur le FTP d'oléane (réseau orange), j'ai bien 100 méga réel, mais vers OVH par exemple c'est plus du 20 méga. Et peu importe le port utilisé, en fait Orange bride le débit PAR connexion tcp/udp (dans les deux sens).

# Download vers ovh sur une connexion
lftp -c 'pget -n 1 http://proof.ovh.net/files/1Gio.dat -o /dev/null'
files/1Gio.dat at 7430050 (0%) 880.4K/s eta:20m [Receiving data]

# La même chose mais sur 10 connexions
lftp -c 'pget -n 10 http://proof.ovh.net/files/1Gio.dat -o /dev/null'
/files/1Gio.dat, got 47842794 of 1073741824 (4%) 4.65M/s eta:4m

Pour bypasser la limitation par connexion l'idée est de faire un tunnel vers mon dédié ovh (kimsufi 2G) et de router tout le trafic à l'intérieur. J'ai commencé par tester l'agrégation de liens tcp/udp avec plusieurs solutions (mes tests étaient entre deux FreeBSD ou entre un mix FreeBSD/Linux)

  • OpenVPN sur des tap agrégés (lagg(4)): très peu performant.
  • MPD en multilink PPPoTCP/PPPoUDP (merci à olivier pour son aide): ça fonctionne très bien sur 2 liens, mais au delà ça devient très peu performant visiblement à cause d'un bug dans MPD.
  • MLVPN, performant mais consomme trop de CPU et débit instable (à suivre).

Finalement la solution la plus simple n'est pas avec tcp/udp, mais avec n'importe quel protocole de niveau 3 puisque la notion de connexion n'a plus de sens :). Dans les solutions les plus simples on a donc ipsec et encore plus simple: un tunnel gre, c'est la solution que j'ai mise en place. J'ai en moyenne 50Méga réel, ce qui doit être les limites du liens Orange/Ovh, visiblement le lien Orange/Online (free) est meilleur.

Le setup est ultra simple, pour faire un tunnel gre entre 1.2.3.4 et 5.6.7.8 en utilisant les IP privées 192.168.254.1/24 et 192.168.254.2/24

# FreeBSD
ifconfig gre0 create
ifconfig gre0 tunnel 1.2.3.4 5.6.7.8
ifconfig gre0 inet 192.168.254.1 192.168.254.2 netmask 255.255.255.0

# Linux
ip tunnel add grehome mode gre remote 1.2.3.4 local 5.6.7.8 ttl 255
ip a add 192.168.254.1/24 dev grehome
ip link set grehome up

On répète l'opération de l'autre coté du tunnel en inversant les adresses et voilà le tunnel configuré. Il ne faut pas oublier la config firewall

# pf
pass in on gre0

# iptables
-A INPUT -i eth0 -p gre -j ACCEPT

Ensuite j'ai simplement routé certaines machines de mon réseau local (192.168.31.0/24) dans le tunnel:

# Il faut une route de retour au bout du tunnel (Coté OVH avec linux)
ip route add 192.168.31.0/24 via 192.168.254.2 dev grehome
# On forward et on nat
iptables -t nat -A POSTROUTING -s 192.168.31.0/24 -o eth0 -j SNAT --to-source 1.2.3.4
iptables -t filter -A FORWARD -s 192.168.31.0/24 -j ACCEPT
# N'oubliez pas le net.ipv4.ip_forward=1 :)

# Coté maison sur la box FreeBSD, on route 192.168.31.3 dans le tunnel gre
pass in quick on bridge0 route-to (gre0 192.168.254.1) inet from 192.168.31.3

Pour fixer le problème de mtu/mss que j'ai eu (voir ici ou ), j'ai simplement fixé la mtu à 1468 sur les interfaces gre et modifié la mss coté OVH à 1420 et je n'ai plus de problèmes, pour tester le problème et sa résolution essayez le site de rue89 par exemple :).

# mtu FreeBSD
ifconfig gre0 mtu 1468
# mtu Linux
ip link set grehome mtu 1468

# mss Linux
iptables -t filter -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1420

Le problème suivant c'est l'IP dynamique obligatoire (à 17€ l'IP fixe je considère que c'est obligatoire). Mon serveur chez ovh gère ma zone dns (philpep.org), donc chez moi sur ma box FreeBSD j'ai un programme qui lance nsupdate pour mettre à jour mon IP (avec un TTL de 5 minutes). Ensuite j'ai un démon coté ovh qui requête régulièrement le serveur DNS et qui remet en place le tunnel gre quand ça change.

Voilà, c'est quand même désobligeant d'avoir à faire ça (même si c'est marrant du point de vue technique), Orange est vraiment un FAI à éviter, mais quand c'est le seul qui propose la fibre chez vous cette technique permet d'avoir un semblant de vrai 100Méga.

comments powered by Disqus