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