18/05/2012

Philpep's blog >> Let's gre !

Par : Philippe Pepiot
Tags:
FreeBSD
Gre
Orange
Ovh
Linux

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 partie 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 branché sur Internet. Bon les techniciens étaient très sympathiques et ils m'ont collé un câble RJ45 entre l'arrivée fibre et mon switch. 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 sent 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)

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 :)

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.


18/05/2012

Mon chti blog >> Welcome ml150

Par : bsdsx
Tags:
poudriere
pkgng
ml150
J'ai l'honneur de vous présenter mon nouveau dédié, un joli HP ML150 G3 de récupération. Il ne tient pas la comparaison avec les machines actuelles mais comparé à ce bon vieux Kimsufi première génération, c'est le jour et la nuit. Petit aperçu:
dsx@ml150>sysctl hw.model hw.ncpu hw.physmem kern.disks
hw.model: Intel(R) Xeon(R) CPU            5110  @ 1.60GHz
hw.ncpu: 4
hw.physmem: 2125123584
kern.disks: da1 da0 ada1 ada0
dsx@ml150>zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
zroot   696G  1.84G   694G     0%  1.00x  ONLINE  -
zscsi   278G  2.55G   275G     0%  1.00x  ONLINE  -

FreeBSD 9.0, ZfsOnRoot, poudriere et pkgng sont de la partie. J'en profite pour remercier bapt pour tout son travail qui rend FreeBSD si beau, si poilu, si soyeux.

Des petits nouveaux ont fait leur appartition:

Installation

J'ai suivi cet excellent article en simplifiant le découpage (étape 6). Parfois on en vient à se demander à quoi peut bien servir un installeur :)

Configuration

Comme d'habitude, je vais user (et abuser) des jails. Une ipv4, un block ipv6/64, une jail par service (ns, smtp, proxy, www), un /etc/pf.conf pour contrôler le tout.

poudriere et pkgng

Après quelques semaines d'utilisation, plus question de me passer de ce duo de choc ! L'un construit les 'packages', l'autre les installe. Le tout est clairement expliqué ici. Pour ma part, je n'ai pas installé l'arbre des ports, j'ai récupéré le tgz de poudriere:

poudriere étant composé de scripts shell, un simple make install fait l'affaire. Je ne vais pas détailler le contenu de /usr/local/etc/poudriere.conf ni celui de /root/etc/poudriere_ports.conf (qui contient uniquement la liste des packages à générer).

Une fois l'arbre des ports (poudriere ports -c) et la jail (poudriere jails -c -j 90amd64 -v 9.0-RELEASE -a amd64) créés, on peut commencer la construction de nos packages. Le premier sera bien évidemment pkgng :) Il suffit de ne préciser aucune option dans /usr/local/etc/poudriere.d/90amd64-make.conf, d'avoir un /root/etc/poudriere_ports.conf comportant une seule entrée:
# cat /root/etc/poudriere_ports.conf
ports-mgmt/pkgng
# poudriere ports -u
# poudriere bulk -f /root/etc/poudriere_ports.conf -j 90amd64
# pkg_add /poudriere_data/packages/90amd64-default/Latest/pkng.tbz
Notre hôte est désormais pkgngisé. Garder une copie de /poudriere_data/packages/90amd64-default/Latest/pkng.tbz peut être utile (pour installer pkgng sur une autre machine ou dans une jail par exemple). On peut enfin préciser que tous nos packages seront au format pkng:
# echo 'WITH_PKGNG' >> /usr/local/etc/poudriere.d/90amd64-make.conf 
L'hôte doit se mettre à jour à partir de /poudriere_data/packages/90amd64-default:
# echo 'packagesite: file:///poudriere_data/packages/90amd64-default' >> /usr/local/etc/pkg.conf
Il est temps de passer aux choses sérieures:
# cat /root/etc/poudriere_ports.conf
ports-mgmt/pkg
ports-mgmt/poudriere
security/sudo
sysutils/tmux
editors/vim-lite
net/rsync
dns/nsd
dns/dnsmasq
devel/libevent2
devel/fossil
www/nginx
mail/dovecot2
mail/dovecot2-pigeonhole
# poudriere ports -u
# poudriere bulk -f /root/etc/poudriere_ports.conf -j 90amd64
# pkg update
# pkg upgrade
Pour mettre à disposition tous ces beaux packages, il nous faut un serveur http léger, performant, à la syntaxe claire (oui je prosel et alors ?)
# cat /home/dsx/etc/poudriere.mohawk
mime_type {
  bz2   application/x-bzip2
  gz    application/x-gzip
  gzip  application/x-gzip
  tar   application/x-tar
  tgz   application/x-compressed
  xz    application/x-compressed
  zip   application/x-compressed
}
vhost default { 
  listen on lo1
  rootdir /poudriere_data/packages/90amd64-default
}

Jails

Je n'étais pas très content de mk_template et mk_jail. Bienvenue à zail (jail but zfs, à prononcer avec un cheveu sur la langue ou un poil dans la main), un script sans prétention mais qui fait le travail:

Si la création d'un template prend quelques secondes (le détar des 57Mo de base.txz), celle d'une jail est quasi instantanée (2s max):
# ./zail template -f zail.conf
[ snip création template mode debug ]
# ./zail template -f zail.conf -D
[ snip création du template ]
# ./zail jail -f zail.conf -n www
[ snip création jail 'ww' basée sur le template zail.conf mode debug ]
# ./zail jail -f zail.conf -n www -D
[ snip création de la jail ]

Bien sûr, toutes ces jails sont pkgngisées :)

Blog

L'idée m'est venue alors que je codais zail. Du statique, pas (encore) de commentaires, minimaliste. Les plus curieux jetteront un oeil à l'archive. Le principe est assez simple:

Les billets commencent tous par:
###### YYYYMMDDhhmm tag1 tag2 ... tagn
# Titre du billet

Mohawk

Grande nouveauté: la dépendance à libevent2. Ce choix a été motivé par le fait d'être un peu plus portable et de simplifier le code de gestion des évènements (qui n'était pas un modèle du genre dans mohawk 1). Un autre logiciel partage cette dépendance: tmux. Cette nouvelle version amène son lot d'amélioration: listen par vhost, clone de vhost etc. Je ne détaille pas plus, je dois mettre à jour le site web.

Conclusion

J'espère que cette nouvelle machine me rendra autant de bons et loyaux services que ce vénérable kimsufi. Je souhaite 'bon vent, belle mer'.

Update: merci bapt pour toutes les remarques :) J'espère avoir tout fixé.

Update 2: bapt vient de simplifier le téléchargement de poudriere: poudriere current


13/05/2012

GCU-Squad! >> [GCUitter] Bim!

Par : pinpin
Tags:
Irc
OpenBSD
pf

Si toi aussi tu veux construire ton château fort avec tes paquets, voici un plan du pont-levis.

http://home.nuug.no/~peter/pf/bsdcan2012/ proposé par twisla


11/05/2012

Mon chti blog >> Au revoir kimsufi

Par : bsdsx
Tags:
kimsufi

D'ici 7 jours, je quitterai mon valeureux kimsufi. Que soient ici remerciés son disque dur, son processeur Celeron et son giga de ram qui, pendant plus de 3 ans, ne m'ont jamais trahi. Petite pensée particulière à la jail devel sans qui mohawk n'aurait pas vu le jour.

La semaine à suivre ne sera pas un modèle de haute disponibilité, d'avance toutes mes excuses. L'aventure continue avec ml150, orke, zail et un nouveau mohawk gonflé à bloc.