Home (autres pages) Léa Linux TrustOn Me OpenVPN French Linux Doc Project

Les Services FreeBox v5

La nouvelle génération de Freebox, v5, offre de nouveaux services, notamment réseaux. En plus de faire magnétoscope numérque, lecture différée, Wifi, elle offre les services réseaux suivants :

  • FreePlayer
  • Multiposte
  • Serveur FTP
  • Magnétoscope Numérique
  • Lecture Différée
  • [LIST]
  • Cette page va décrire les différentes règles à mettre en oeuvre sur notre passerelle Linux pour autoriser les deux services réseaux suivants :
  • [LIST]
  • FreePlayer
  • Multiposte

J'utilise VLC Crazy qui permet de fixer les ports UDP utilisés pour la diffusion audio/vidéo, ainsi que Home Player qui est lourd mais plein d'options sympas. Il y a une option qui permet de fixer les ports UDP.

Les règles que je propose plus bas sont faites à partir d'un pare-feu configuré en DROP sur toutes les chaînes. En gros, ce sont les règles strictement nécessaires pour autoriser les services Free avec un pare-feu qui bloquerait tout. J'essaie d'expliquer pourquoi et comment j'effectue l'ouverture des flux.

A la fin de cette page, je propose des règles simplifiées, dans la mesure où notre pare-feu partage la connexion Internet

Rappel sur les translations d'adresses

PREROUTING, POSTROUTING

  • Chaîne PREROUTING — Les paquets arrivant de l'extérieur passent dans cette chaîne avant d'être routés. Elle permet de modifier la destination de la connexion pour, par exemple, rediriger une connexion de l'Internet vers un serveur local.
  • Chaîne POSTROUTING — Les paquets passent dans cette chaîne après la décision de routage, juste avant que le paquet soit expédié. Elle permet la modification de la source de la connexion. On peut ainsi camoufler la véritable origine d'une connexion. C'est ce que l'on utilise pour le partage de connexion Internet.


SNAT

On utilise le "Source NAT" (SNAT) lorsqu'on veut modifier l'adresse source d'une trame. Cela se fait dans la chaîne "POSTROUTING", cela signifie que la trame traverse l'ensemble du pare-feu et, juste avant de sortir, on change l'adresse IP source dans la trame.

C'est ce que l'on utilise pour partager la connexion Internet.


DNAT

On utilise le "Destination NAT" (DNAT) lorsqu'on veut modifier l'adresse destination d'une trame avant qu'elle ne soit routée, donc dans la chaîne PREROUTING.

C'est ce que l'on utilise lorsqu'on veut rediriger un flux vers une machine. Par exemple, si l'on héberge un serveur Web sur une machine qui a pour adresse 192.168.0.1, il faut rediriger les flux qui arrivent sur la passerelle, dont les trames ont pour destination 82.46.10.20 port 80, vers l'adresse 19.168.0.1.


FreePlayer

Le but de ce service est d'envoyer des flux audio et/ou vidéo depuis un ordinateur vers la freebox-HD.

Notre architecture est la suivante :

En fait, la navigation démarre par un flux de type HTTP et permet de parcourir le disque dur de notre ordinateur. Ensuite, on sélectionne une vidéo, compressée avec un codec vidéo XviD et un codec audio MP3 par exemple. Une requête RTSP permet de négocier les prochains flux UDP pour l'audio et/ou la vidéo. Lorsque VLC démarre la lecture du fichier AVI, il transcode le format pour obtenir une vidéo au format MPEG2 avec une piste audio au format MPGA. Ensuite ce nouveau flux est envoyé à la Freebox-HD. Eh oui, la Freebox-HD ne sait pas lire de DivX et c'est notre ordinateur qui réalise la transformation dans un format qu'elle sait interpréter et afficher.

Rappel sur les formats audio :

  • MP3 : le format de compression MP3 signifie "MPEG 1, Layer 3". Il s'agit d'un format de compression audio très répandu développé par Fraunhofer et Thomson. Ce format a un peu plus d'une dizaine d'année.
  • MPGA : il s'agit en fait du format de compression AAC (Mpeg2 Advanced Audio Coding). Il est de meilleur qualité que le format MP3.

Navigation de la FreePlayer

Tout d'abord, il faut que la freebox-hd puisse naviguer sur notre ordinateur. La Freebox-HD, par défaut, envoie les requêtes sur l'adresse publique de l'accès Internet, 82.46.10.20 sur le schéma, sur le port 8080. Donc il faut changer l'adresse destination pour rediriger vers notre ordinateur, ce qui se fait dans la chaîne PREROUTING

Ensuite, il faut autoriser les transferts (FORWARDING) entre les deux interfaces de notre passerelle pour ces flux.

Puis l'on s'occupe des trames retour... Notre ordinateur répond à destination de l'adresse de la freebox-HD. Il faut donc autoriser les transferts (FORWARDING) vers l'interface publique et réaliser une translation d'adresse pour changer l'adresse source (eh oui, si la freebox-HD répond à une trame dont l'adresse source est 192.168.0.1, notre pare-feu prendra cela pour du spoofing et rejettera). Changement d'adresse source, c'est dans la chaîne POSTROUTING.

# Tout d'abord on autorise la NAVIGATION depuis la freebox-HD vers notre ordinateur
iptables -A FORWARD -p tcp -d 212.27.38.253 -s 192.168.0.1 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.0.1 -s 212.27.38.253 -j ACCEPT

# ensuite, on s'occupe des translations d'adresses
# première translation : on translate l'adresse de notre ordinateur dans les trames aller
iptables -A POSTROUTING -t nat -p tcp -s 192.168.0.1 -d 212.27.38.253 \
          --sport 8080 -j SNAT --to-source 82.46.10.20
# seconde translation : on translate l'adresse dans les trames retour pour
# qu'elles soient envoyées à notre ordinateur
iptables -A PREROUTING -t nat -p tcp -s 212.27.38.253 -d 82.46.10.20 \
          --dport 8800 -j DNAT --to-destination 192.168.0.1

Maintenant, en lançant FreePlayer sur notre ordinateur puis en appuyant sur la touche "Free" de la télécommande et en sélectionnant "FreePlayer", on doit voir apparaître la boîte de navigation.


Diffusion du flux audio/video

Une fois la vidéo sélectionnée sur notre téléviseur, la freebox-HD envoie une requête à notre freeplayer. VLC charge la vidéo, commence à transcoder et envoie le résultat à notre Freebox-HD. Le flux est envoyé à la passerelle, sur le port 1234, qui doit le retransmettre à la Freebox (FORWARDING).

# on autorise la DIFFUSION des flux audio et vidéo !
iptables -A FORWARD -p udp -s 192.168.0.1 -d 212.27.38.253 -j ACCEPT
iptables -A POSTROUTING -t nat -p udp -s 192.168.0.1 -d 212.27.38.253 \
          --dport 1234 -j SNAT --to-source 82.46.10.20

Et voilà ! Normalement, en appuyant sur la touche "FREE", l'univers apparaît et en sélectionnant "FreePlayer", l'interface de navigation s'affiche. La navigation permet d'ouvrir un fichier vidéo qui devrait être affiché sur la télé.


Le Multiposte

Le multiposte, à la différence du service FreePlayer, permet de recevoir la TNT sur l'ordinateur. Les échanges utilisent le protocole RSTP (Real Time Streaming Protocol). Dans la plupart des cas, l'ordinateur va émettre des requêtes TCP vers le serveur vidéo qui répondra par un flux audio/vidéo en UDP.

RTSP (Real Time Streaming Protocol)

Ce protocole est développé par l'IETF et publié sous la RFC 2326. Ce protocole est utilisé pour permettre à un client de contrôler à distance la diffusion en streaming d'un média, proposant des fonctionnalités similaires à un magnétoscope comme "play" et "pause".

Schématiquement, Free implémente ce protocole comme suit :


Mise en oeuvre des règles

On observe trois types de flux :

  • Navigation : ce flux permet d'afficher une liste de média disponible, de naviguer et sélectionner un média. En fait, le serveur proposant cette navigation est un serveur Web.
  • Négociation : ce flux utilise le protocole RSTP. En gros, le client et le serveur négocie les ports des flux audio et vidéos. Le serveur reçoit la requête RTSP sur le port 554.
  • Diffusion : le serveur envoie les flux audio et vidéo au client par des flux UDP sur les ports précédemment négociés. Dans notre cas, nous utiliserons VLC Crazy qui permet de fixer les ports UDP utilisés (31336 et 31337 par défaut)

Dans notre architecture, nous avons une passerelle Linux en plein milieu qu'il va falloir configurer pour profiter de ce service.

Notre ordinateur, qui possède une adresse privée, va envoyer une requête de type HTTP vers le serveur vidéo de notre freebox, qui a pour adresse 212.27.38.253. Notre partage de connexion va translater l'adresse privée vers l'adresse publique de notre passerelle, 82.46.10.20. La trame va arriver jusqu'à la freebox-HD qui va répondre vers notre freebox. Il doit donc y avoir une adresse translatée retour.

C'est le même schéma de connexion que le FreePlayer, sauf que les flux sont inversés.

Nous voulons pouvoir naviguer dans la liste des chaînes de la TNT. Il faut que l'ordinateur puisse se connecter sur la Freebox-HD sur le port 80.

Une fois la chaîne sélectionnée, nous voulons que le streaming audio/vidéo initié par la Freebox-HD soit redirigé vers notre ordinateur

# Tout d'abord on autorise la NAVIGATION
iptables -A FORWARD -p tcp -d 212.27.38.253 -s 192.168.0.1 -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.0.1 -s 212.27.38.253 -j ACCEPT

# ensuite, on s'occupe des translations d'adresses
# première translation : on translate l'adresse de notre ordinateur dans les trames aller
iptables -A POSTROUTING -t nat -p tcp -s 192.168.0.1 -d 212.27.38.253 \
          --dport 80 -j SNAT --to-source 82.46.10.20
    
# seconde translation : on translate l'adresse dans les trames retour pour
# qu'elles soient envoyées à notre ordinateur
iptables -A PREROUTING -t nat -p tcp -s 212.27.38.253 -d 82.46.10.20 \
          --sport 80 -j DNAT --to-destination 192.168.0.1

# ensuite on permet la NEGOCIATION RTSP
# comme on a déjà permis le forwarding entre les deux adresses, il ne reste plus qu'à réaliser
# les translations d'adresses.
iptables -A POSTROUTING -t nat -p tcp -s 192.168.0.1 -d 212.27.38.253 \
          --dport 554 -j SNAT --to-source 82.46.10.20
iptables -A PREROUTING -t nat -p tcp -s 212.27.38.253 -d 82.46.10.20 \
          --sport 554 -j DNAT --to-destination 192.168.0.1


# et enfin on autorise la DIFFUSION des flux audio et vidéo !
# tout d'abord, on autorise le forwarding des flux UDP
iptables -A FORWARD -p udp -d 212.27.38.253 -s 192.168.0.1 -j ACCEPT
iptables -A FORWARD -p udp -d 192.168.0.1 -s 212.27.38.253 -j ACCEPT


# il ne reste plus qu'à réaliser les translations d'adresses.
iptables -A POSTROUTING -t nat -p udp -s 192.168.0.1 -d 212.27.38.253 \
          --sport 31337 -j SNAT --to-source 82.46.10.20
iptables -A PREROUTING -t nat -p udp -s 212.27.38.253 -d 82.46.10.20 \
          --dport 31336 -j DNAT --to-destination 192.168.0.1


Simplification des règles

En partant du principe que notre pare-feu est déjà configuré en partage de connexion Internet... Nous n'avons pas besoin de déclarer de POSTROUTING. Nous autorisons simplement le FORWARDING et nous faisons de PREROUTING pour rediriger les flux de la Freebox-HD vers notre ordinateur

#On autorise tout depuis/vers la Freebox-HD
iptables -A FORWARD -d 212.27.38.253 -s 192.168.0.1 -j ACCEPT
iptables -A FORWARD -s 212.27.38.253 -d 192.168.0.1 -j ACCEPT

iptables -t nat -A PREROUTING \
     -s 212.27.38.253 -d 82.46.10.20 -j DNAT --to-destination 192.168.0.1
Me contacter | ©2004-2005 Raum