From c069f694d94f08fae8b542bd6124ea4b507b71f8 Mon Sep 17 00:00:00 2001 From: kleph Date: Fri, 5 Jul 2013 01:36:06 +0200 Subject: [PATCH 01/10] developement branch. modify URL --- pelicanconf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pelicanconf.py b/pelicanconf.py index 0fcacb3..1f8cdaf 100644 --- a/pelicanconf.py +++ b/pelicanconf.py @@ -19,7 +19,7 @@ DEFAULT_LANG = u'fr' CATEGORY_FEED_ATOM = None TRANSLATION_FEED_ATOM = None FEED_ALL_ATOM = 'Blog' -SITEURL = 'http://blog.kleph.info' +SITEURL = 'http://blog.wired.lan' # Blogroll LINKS = (('Pelican', 'http://getpelican.com/'), From cc09f882d94d5149d0d4eabccf21122b2902f8eb Mon Sep 17 00:00:00 2001 From: kleph Date: Tue, 9 Jul 2013 22:24:09 +0200 Subject: [PATCH 02/10] Initial import of draft source routing article --- content/parade_peering_free.mdown | 68 +++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 content/parade_peering_free.mdown diff --git a/content/parade_peering_free.mdown b/content/parade_peering_free.mdown new file mode 100644 index 0000000..4074d08 --- /dev/null +++ b/content/parade_peering_free.mdown @@ -0,0 +1,68 @@ +Title: Rediriger une partie du trafic pour faire face aux problèmes de peering Free <--> Google (et autres) +Author: kleph +Email: kleph@kleph.info +Category: Blog +Date: 2013/07/09 +Tags: Linux, Free, Internet +Lang: fr + +Ce soir je voulais écouter une des conférence TED en préparant à manger, et comme il y a une extention pour faire ça avec XBMC, ça ne devait pas être difficile. J'avais juste oublié un détail, ma connexon est fournie par Free, donc on peut oublier le streaming hors de France (et a prioiri surtout ce qui passe par le lien avec Google). Un nouvel usage pour lequel la fibre ne sert à rien non plus. + +J'avais déjà eu ce genre de problème auparavant, avec youtube évidement, ainsi que les live twitch. donc j'ai résolu le problème d'une manière pas forcément propre, mais qui a le mérite de fonctionner, sans faire passer toute la connexion à travers un VPN. + +# Idée +Router seulement certains flux (streaming ou autre) à travers un VPN ayant de meilleurs liens. + +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) + +# 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. (TODO: lien vers la doc d'iptables là dessus) + + iptables -t mangle -A OUTPUT -p udp --dport 1935 -j MARK --set-mark 0x10 + +Une fois ces paquets marqué, ils vont être reconnus au moent du routage pour ne pas sortir par le même endroit que d'habitude. + +# Les tables de routage du nouyau 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étai ici, le [LARTC|http://lartc.org#] le fait déjà. TODO: mettre le lien vers une traduction + +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 sonit pas transmise 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. 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 +et voici donc cce que ça donne + + #!/bin/sh + # route some ports/applications through the VPN + + VPN_GATEWAY + + # mark the packets + # RTMP + iptables -t mangle -A OUTPUT -p udp --dport 1935 -j MARK --set-mark 0x1 + iptables -t mangle -A OUTPUT -p tcp --dport 1935 -j MARK --set-mark 0x1 + + # add route to redirect these packets + ip route add default via ${VPN_GATEWAY} table vpn + + ip rule add fwmark 1 pref 10 lookup vpn + + From 008dc7019b69b8688acfe4687672d7a53914902a Mon Sep 17 00:00:00 2001 From: kleph Date: Tue, 9 Jul 2013 23:29:46 +0200 Subject: [PATCH 03/10] add gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f038ec7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.pyc +output/* From 2883d037e98915cfd465b7b6a90b4aa7cfc9730b Mon Sep 17 00:00:00 2001 From: kleph Date: Tue, 9 Jul 2013 23:30:27 +0200 Subject: [PATCH 04/10] add an address in the gateway variable --- content/parade_peering_free.mdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/parade_peering_free.mdown b/content/parade_peering_free.mdown index 4074d08..8ed5dfb 100644 --- a/content/parade_peering_free.mdown +++ b/content/parade_peering_free.mdown @@ -53,7 +53,7 @@ et voici donc cce que ça donne #!/bin/sh # route some ports/applications through the VPN - VPN_GATEWAY + VPN_GATEWAY=192.168.1.1 # mark the packets # RTMP From 3bedb4a4cddf4f3853a6caaea7e0937021a2919c Mon Sep 17 00:00:00 2001 From: kleph Date: Wed, 10 Jul 2013 00:08:15 +0200 Subject: [PATCH 05/10] Spellcheck --- content/jouet_fr.mdown | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/content/jouet_fr.mdown b/content/jouet_fr.mdown index 2147d5c..a5864c4 100644 --- a/content/jouet_fr.mdown +++ b/content/jouet_fr.mdown @@ -8,8 +8,8 @@ Slug: Home router with sama5d35 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 ! ) -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. +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 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 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 : 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 Les paramètres d'U-boot 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 @@ -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) From 351929956cdc53524f3879a5721ebf567fee96fa Mon Sep 17 00:00:00 2001 From: kleph Date: Wed, 10 Jul 2013 00:20:33 +0200 Subject: [PATCH 06/10] Spellchecked --- content/parade_peering_free.mdown | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/content/parade_peering_free.mdown b/content/parade_peering_free.mdown index 8ed5dfb..323fd35 100644 --- a/content/parade_peering_free.mdown +++ b/content/parade_peering_free.mdown @@ -6,7 +6,7 @@ Date: 2013/07/09 Tags: Linux, Free, Internet Lang: fr -Ce soir je voulais écouter une des conférence TED en préparant à manger, et comme il y a une extention pour faire ça avec XBMC, ça ne devait pas être difficile. J'avais juste oublié un détail, ma connexon est fournie par Free, donc on peut oublier le streaming hors de France (et a prioiri surtout ce qui passe par le lien avec Google). Un nouvel usage pour lequel la fibre ne sert à rien non plus. +Ce soir je voulais écouter une des conférence 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 on peut oublier le streaming hors de France (et a priori surtout ce qui passe par le lien avec Google). Un nouvel usage pour lequel la fibre ne sert à rien non plus. J'avais déjà eu ce genre de problème auparavant, avec youtube évidement, ainsi que les live twitch. donc j'ai résolu le problème d'une manière pas forcément propre, mais qui a le mérite de fonctionner, sans faire passer toute la connexion à travers un VPN. @@ -21,10 +21,10 @@ On va tout d'abord isoler et marquer les paquets que l'on souhaite rediriger. Je iptables -t mangle -A OUTPUT -p udp --dport 1935 -j MARK --set-mark 0x10 -Une fois ces paquets marqué, ils vont être reconnus au moent du routage pour ne pas sortir par le même endroit que d'habitude. +Une fois ces paquets marqué, ils vont être reconnus au moment du routage pour ne pas sortir par le même endroit que d'habitude. -# Les tables de routage du nouyau 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étai ici, le [LARTC|http://lartc.org#] le fait déjà. TODO: mettre le lien vers une traduction +# 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|http://lartc.org#] le fait déjà. TODO: mettre le lien vers une traduction 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. @@ -65,4 +65,7 @@ et voici donc cce que ça donne ip rule add fwmark 1 pref 10 lookup vpn - + From cd29ce945fb3e2e74c292b4eb0a2cf63779510ca Mon Sep 17 00:00:00 2001 From: kleph Date: Wed, 10 Jul 2013 01:19:37 +0200 Subject: [PATCH 07/10] Added links and start to rewrite --- content/parade_peering_free.mdown | 37 +++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/content/parade_peering_free.mdown b/content/parade_peering_free.mdown index 323fd35..02a39e9 100644 --- a/content/parade_peering_free.mdown +++ b/content/parade_peering_free.mdown @@ -1,4 +1,4 @@ -Title: Rediriger une partie du trafic pour faire face aux problèmes de peering Free <--> Google (et autres) +Title: Rediriger une partie du trafic vers une autre route Author: kleph Email: kleph@kleph.info Category: Blog @@ -6,27 +6,32 @@ Date: 2013/07/09 Tags: Linux, Free, Internet Lang: fr -Ce soir je voulais écouter une des conférence 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 on peut oublier le streaming hors de France (et a priori surtout ce qui passe par le lien avec Google). Un nouvel usage pour lequel la fibre ne sert à rien non plus. - -J'avais déjà eu ce genre de problème auparavant, avec youtube évidement, ainsi que les live twitch. donc j'ai résolu le problème d'une manière pas forcément propre, mais qui a le mérite de fonctionner, sans faire passer toute la connexion à travers un VPN. +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 -Router seulement certains flux (streaming ou autre) à travers un VPN ayant de meilleurs liens. +J'avais déjà eu ce genre de problème auparavant, avec youtube évidement, ainsi que les lives twitch. +Pour youtube, un simple proxy suffit. Mais pour les flux RTMP, j'ai joué un peu avec les possibilité de routage de Linux. J'ai redirigé d'abord une partie, puis finalement tout le trafic sur le port 1194 à travers un VPN 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) -# 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. (TODO: lien vers la doc d'iptables là dessus) +Il faut aussi un noyau supportant le routage avance + TODO: config kernel - iptables -t mangle -A OUTPUT -p udp --dport 1935 -j MARK --set-mark 0x10 +## 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]. -Une fois ces paquets marqué, ils vont être reconnus au moment du routage pour ne pas sortir par le même endroit que d'habitude. + 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ésau 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|http://lartc.org#] le fait déjà. TODO: mettre le lien vers une traduction +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. +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 @@ -34,9 +39,10 @@ J'ai donc rajouté une ligne à ce fichier : 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... @@ -65,6 +71,13 @@ et voici donc cce que ça donne ip rule add fwmark 1 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" +