Ziirish's Home :: Blog

Ziirish's Pub

 
 

De nouveau un article en français car ce dernier concerne principalement les abonnés Free.

Les abonnés Free peuvent depuis un certain temps bénéficier de l'option «multiposte» qui permet de visualiser le flux de la télévision sur leur ordinateur avec vlc par exemple.

Le problème, c'est que mon réseau n'est pas forcément "simple". En effet, je dispose d'un serveur qui fait office de routeur/passerelle entre la freebox et mes différents postes clients.

Le protocole utilisé pour les flux vidéos est le protocole RTSP qui n'est pas particulièrement fan du NAT.

Grosso modo, le protocole prévoit que le client RTSP effectue une connexion au serveur en y indiquant un certain nombre d'éléments, dont une plage de ports sur laquelle ce dernier se mettra en écoute pour recevoir le flux vidéo. Suite à ces échanges, c'est le serveur qui va initier la connexion sur la plage de port indiquée directement sur le client. On comprend donc relativement vite que le NAT tel qu'on le connait ne fonctionnera pas puisque la réponse fait partie d'une session totalement distincte de la requête ! Il existe bien quelques astuces pour contourner ce problème. Par exemple on peut forcer côté client la plage de ports à renvoyer afin de configurer une règle de NAT spécifique. Mais cette solution n'est pas du tout flexible, et surtout, il faut maintenir les règles pour autoriser ultérieurement de nouveaux clients, voire changer de client, etc.

C'est alors que j'ai découvert un module kernel non officiel qui s'occupe de créer dynamiquement les règles de NAT associées lors d'un échange RTSP. Le code se trouve ici .

Il existe un paquet debian à partir de la version Jessie . Malheureusement, mon routeur est pour le moment en Wheezy.

J'ai malgré tout essayé de construire le package pour debian Wheezy, et ô magie, cela semble fonctionner !

Voici donc ci-dessous les étapes à suivre pour générer votre propre paquet nat-rtsp-dkms :

$ mkdir /opt/build
$ cd /opt/build
$ wget http://ftp.de.debian.org/debian/pool/main/n/nat-rtsp/nat-rtsp_0.7+1.g2ea3cb6.orig.tar.xz
$ tar xvJf nat-rtsp_0.7+1.g2ea3cb6.orig.tar.xz
$ cd nat-rtsp-0.7+1.g2ea3cb6
$ wget -O- wget http://ftp.de.debian.org/debian/pool/main/n/nat-rtsp/nat-rtsp_0.7+1.g2ea3cb6-1.debian.tar.xz | tar xvJf -
$ aptitude install build-essential fakeroot devscripts dkms
$ fakeroot debian/rules binary

À la fin de cette dernière commande, vous devriez avoir quelque chose comme :

dh binary --with dkms
   dh_testdir
   dh_auto_configure
   dh_testroot
   dh_prep
   dh_installdirs
   debian/rules override_dh_install
make[1]: Entering directory `/opt/build/nat-rtsp-0.7+1.g2ea3cb6'
dh_install Makefile *.c *.h usr/src/nat-rtsp-0.7+1.g2ea3cb6/
make[1]: Leaving directory `/opt/build/nat-rtsp-0.7+1.g2ea3cb6'
   dh_installdocs
   dh_installchangelogs
   dh_installexamples
   dh_installman
   dh_installcatalogs
   dh_installcron
   dh_installdebconf
   dh_installemacsen
   dh_installifupdown
   dh_installinfo
   dh_pysupport
dh_pysupport: This program is deprecated, you should use dh_python2 instead. Migration guide: http://deb.li/dhs2p
   debian/rules override_dh_dkms
make[1]: Entering directory `/opt/build/nat-rtsp-0.7+1.g2ea3cb6'
dh_dkms -V 0.7+1.g2ea3cb6
make[1]: Leaving directory `/opt/build/nat-rtsp-0.7+1.g2ea3cb6'
   dh_installinit
   dh_installmenu
   dh_installmime
   dh_installmodules
   dh_installlogcheck
   dh_installlogrotate
   dh_installpam
   dh_installppp
   dh_installudev
   dh_installwm
   dh_installxfonts
   dh_installgsettings
   dh_bugfiles
   dh_ucf
   dh_lintian
   dh_gconf
   dh_icons
   dh_perl
   dh_usrlocal
   dh_link
   dh_compress
   dh_fixperms
   dh_installdeb
   dh_gencontrol
dpkg-gencontrol: warning: File::FcntlLock not available; using flock which is not NFS-safe
   dh_md5sums
   dh_builddeb
dpkg-deb: building package `nat-rtsp-dkms' in `../nat-rtsp-dkms_0.7+1.g2ea3cb6-1_all.deb'.

Ne vous reste plus qu'à installer le paquet avec la commande dpkg -i ../nat-rtsp-dkms_0.7+1.g2ea3cb6-1_all.deb. Ensuite, un petit coup de modprobe nf_nat_rtsp et la magie devrait opérer !

Mais pourquoi ?

Pourquoi se prendre la tête avec ça me direz-vous... Et bien premièrement, parce que. Deuxièmement, cela permet par exemple de regarder la télévision sur un autre écran en simultané. Par exemple une dans le salon et une dans la chambre sans devoir payer l'option pour disposer d'un second boîtier Freebox HD.

Dans mon cas par exemple, j'ai configuré mon raspberry Pi pour recevoir le flux vidéo. Pour cela il faut installer l'extension IPTV Simple Client . Malheureusement, cette dernière ne semble pas disponible sur Raspberry. Je l'ai donc compilé directement sur le raspberry et comme je suis un mec sympa, vous pouvez la télécharger ici. Le sha256 est : e63b33856088ffa3a14220d886597efe9b5603bb41183bd68ab0cafa0efd461f.

Enjoy