Merge ../blog-lan

This commit is contained in:
kleph 2013-07-16 10:38:24 +02:00
commit 5e0a720e79
3 changed files with 97 additions and 6 deletions

View file

@ -8,8 +8,8 @@ Slug: Home router with sama5d35
Lang: fr Lang: fr
Un article dans lequel je vais essayer de décricre/documenter comment j'ai installé une debian à côté de l'OS de démo sur la carte sama5d35 gagnée au Fosdem 2013 (merci encore ! ) Un article dans lequel je vais essayer de décrire/documenter comment j'ai installé une debian à côté de l'OS de démo sur la carte sama5d35 gagnée au Fosdem 2013 (merci encore ! )
L'idée était de ne plas écraser le système de démo et d'essayer d'utiliser le système le plus "normal" possible. C'est à dire le moins de patch noyau et une debian ARM officielle. L'idée était de ne pas écraser le système de démo et d'essayer d'utiliser le système le plus "normal" possible. C'est à dire le moins de patch noyau et une debian ARM officielle.
## firmware ## firmware
Je n'ai pas flashé le bootloader ni la NAND pour l'instant. Je n'ai pas flashé le bootloader ni la NAND pour l'instant.
@ -28,14 +28,14 @@ Pour la configuration, j'ai utilisé le cable µUSB<-> USB pour connecter la car
Ensuite, j'ai utilisé screen pour me connecter à la console série : Ensuite, j'ai utilisé screen pour me connecter à la console série :
screen /dev/ttyACM0 screen /dev/ttyACM0
NOTE: On peut intérompre le démarrage d'U-Boot en frappant une touche avant qu'il ne commence à analyser les différents périphériques pour démarrer. NOTE: On peut interrompre le démarrage d'U-Boot en frappant une touche avant qu'il ne commence à analyser les différents périphériques pour démarrer.
## Chargeur d'amorçage ## Chargeur d'amorçage
Les paramètres d'U-boot Les paramètres d'U-boot
On peut configurer les paramètres qu'U-Boot utilisera depuis la ligne de commande. On peut configurer les paramètres qu'U-Boot utilisera depuis la ligne de commande.
Voice des paramètres pour démarrer le noyau original fourni avec la carte et un système sur la carte SD Voici des paramètres pour démarrer le noyau original fourni avec la carte et un système sur la carte SD
setenv bootargs console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) rw rootfs=ext3 root=/dev/mmcblk0p2 rootdelay=2 setenv bootargs console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) rw rootfs=ext3 root=/dev/mmcblk0p2 rootdelay=2
@ -70,5 +70,6 @@ J'ai du mal à utiliser toute ma connexion avec la carte, parce que le trafic r
[taille réelle](http://blog.kleph.info/images/atmel_et_raspi.jpg) [taille réelle](http://blog.kleph.info/images/atmel_et_raspi.jpg)
<!--- <!---
vim: bg=light #vim: bg=light
vim: spelllang=fr
---> --->

View file

@ -0,0 +1,90 @@
Title: Rediriger une partie du trafic vers une autre route
Author: kleph
Email: kleph@kleph.info
Category: Blog
Date: 2013/07/09
Tags: Linux, Free, Internet
Lang: fr
Ce soir je voulais suivre une des conférences TED en préparant à manger, et comme il y a une extension pour faire ça avec XBMC, ça ne devait pas être difficile. J'avais juste oublié un détail, ma connexion est fournie par Free, donc le streaming hors de France (et a priori surtout ce qui passe par le lien avec Google) fonctionne très mal. Dommage pour la fibre :'(
# Idée
J'avais déjà eu ce genre de problème auparavant, avec youtube évidement, ainsi que les lives [twitch](http://www.twitch.tv).
Pour youtube, un simple proxy suffit, ainsi que pour les vidéos de twitch. Mais pour les flux RTMP, j'ai joué un peu avec les possibilités de routage de Linux. J'ai redirigé d'abord une partie, puis finalement tout le trafic à destination du port 1935 à travers un VPN pour sortir depuis une machine ayant de meileurs peerings.
# En pratique
## Prérequis
La mise en place du VPN n'est pas décrite ici, ce n'est pas l'objet.
N'importe quel type de VPN routable devrait faire l'affaire. (j'utilise openvpn)
Il faut aussi un noyau supportant le routage avancé.
TODO: config kernel
## Marquage des paquets
On va tout d'abord isoler et marquer les paquets que l'on souhaite rediriger. Je l'ai fait avec iptables qui a une cible spécialement prévu à cet effet, [MARK][1].
iptables -t mangle -A OUTPUT -p udp --dport 1935 -j MARK --set-mark 0x9
Une fois ces paquets marqués, avec la marque /0x9/, ils vont être interceptés au moment du routage pour ne pas sortir par le même endroit que d'habitude.
NOTE: Ici, j'utilise la chaîne **OUTPUT**, parce que la connexion est initialisée depuis la machine. Pour appliquer la marque aux paquets provenant d'une connexion routée par cette machine, il faut utiliser la chaîne **PREROUTING** (Voir plus bas).
# Les tables de routage du noyau linux
En plus de la table de routage principale que l'on obtient avec la commande "ip route", le noyau linux comporte d'autres tables. Je ne les décrirai pas en détail ici, le [LARTC][2] le fait déjà.
Sachez juste qu'il est possible de rajouter des tables, en plus de la table "main", et que le fichier `/etc/iproute2/rt_tables` permet de nommer ces tables pour rendre plus explicite les n°. Vous verez d'ailleurs que ce fichier contient déjà des alias vers les tables par défaut.
J'ai donc rajouté une ligne à ce fichier :
2 vpn
Et ensuite, je vais affecter une passerelle par défaut à cette table différente de celle de la table principale :
ip route add default via 192.168.1.1 table vpn
Il reste ensuite à définir la règle pour associer les paquets marqués par iptables à cette table de routage :
ip rule add fwmark 1 pref 10 lookup vpn
# Conclusion
Donc en résumé, les paquets seront reconnus par iptables, fonction de critères classiques tels que l'adresse et/ou le port de destination, mais sachez que tous les critères d'iptables peuvent être utilisés pour celà, adresse/port source, ipset, nom d'utilisateur, etc...
NOTE: Les marques sont locales à la machine et ne sont pas transmises sur le réseau.
## Sur la passerelle VPN
Cette passerelle me sert aussi de point d'accès wifi, avec la passerelle par défaut normale.
J'ai donc ajouté le même script en modifiant l'IP de destination pour forcer ce type de trafic à passer par le VPN, une adresse en 10.0.0.1 chez moi. Dans la chaine PREROUTING cette fois car le traffic d'origine n'est pas local (cf TODO: lien vers le cheminement dans les tables d'iptables)
# Le script
Voici le script que j'utilise pour faire tout ça. Finalement il est plutôt simple.
:::bash
#!/bin/sh
# route some ports/applications through the VPN
VPN_GATEWAY=192.168.1.1
# mark the packets
# RTMP
iptables -t mangle -A OUTPUT -p udp --dport 1935 -j MARK --set-mark 0x9
iptables -t mangle -A OUTPUT -p tcp --dport 1935 -j MARK --set-mark 0x9
# add route to redirect these packets
ip route add default via ${VPN_GATEWAY} table vpn
# add rule to detect marked packets and to send that trafic to the new routing table
ip rule add fwmark 9 pref 10 lookup vpn
# Liens
Les quelques liens cités dans cet article.
[1]: http://www.inetdoc.net/guides/iptables-tutorial/marktarget.html "MARK target"
[2]: http://lartc.org/howto/lartc.rpdb.multiple-links.html "LARTC"
[3]: http://www.inetdoc.net/guides/lartc/lartc.rpdb.multiple-links.html) "LARTC fr"
<!---
#vim: bg=light
vim: spelllang=fr
--->

View file

@ -19,7 +19,7 @@ DEFAULT_LANG = u'fr'
CATEGORY_FEED_ATOM = None CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None TRANSLATION_FEED_ATOM = None
FEED_ALL_ATOM = 'Blog' FEED_ALL_ATOM = 'Blog'
SITEURL = 'http://blog.kleph.info' SITEURL = 'http://blog.wired.lan'
# Blogroll # Blogroll
LINKS = (('Pelican', 'http://getpelican.com/'), LINKS = (('Pelican', 'http://getpelican.com/'),