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 :'(
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.
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é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).
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.
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...
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)