Vidéos UPnP AV / DLNA sur sa Freebox HD avec un routeur externe ?

Avertissement
Dernière modification de cet article le 2013-04-30, le contenu pourrait être dépassé/obsolète.

J’ai toujours utilisé un routeur dédié (un Linksys WRT54G) entre ma Freebox et les ordinateurs de mon domicile (pour plus de fonctionnalités que celles proposées par cette dernière)

Mais lorsque l’opérateur Free à rendu possible l’UPnP AV (aussi connu sous le nom de DLNA) afin d’accéder à des films, séries TV, photos, musiques, etc. sur sa télévision depuis la Freebox v5/HD alors qu’elles sont stockées sur son ordinateur par exemple, j’ai été mis de côté car le fonctionnement même de la communication entre les deux boitiers rendait impossible l’accès à mon serveur de contenus (Mediatomb, PS3 Media Server, XBMC, etc.).

Heureusement, il existe des solutions…

Mon routeur tourne sous le firmware DD-WRT, ce qui permet plus de réglages que la version d’origine de Linksys, certaines des solutions que vous pourrez trouver sur le net tirent parti des possibilités d’ouvertures de port, de l’IGMP ou encore de xxx. Voici quelques exemples d’articles/fils de discussion intéressants :

Notes : Ma Freebox ADSL, pour des besoins tout autres que ceux concernant l’accès DLNA, est configurée en mode routeur, j’ai donc un premier réseau privé (192.168.42.0/24) au niveau des ports Ethernet de ma Freebox, réseau auquel mon routeur Linksys appartient donc, puis un second réseau privé “après” le Linksys. Comme Free permet, via l’interface web d’administration de sa Freebox de définir une adresse IP DMZ, une telle configuration est triviale et sans impact sur l’accès à Internet.

J’ai choisi une tout autre solution: je voulais, naïvement, que la Freebox HD soit dans le même réseau que mon serveur et pour ça je suis passé par les Ns.

En effet, en analysant les trames circulant entre les deux boitiers Freebox à l’aide du logiciel d’analyse de paquets/trames réseau Wireshark et d’un switch avec fonction de port mirroring (vous pouvez aussi utilisez un HUB, ou encore plus simple : regarder ce qu’il se trouve déjà à ce sujet sur le net) on se rend compte que la Freebox ADSL utilise l’adresse IP 192.168.27.14 et que la Freebox HD l’adresse 192.168.27.1, le tout sur le VLAN d’ID 100.

Je m’était dit qu’en plaçant mon serveur dans ce VLAN, avec une adresse IP proche (disons 192.168.27.8) la Freebox HD pourrait le voir et communiquer avec lui : mais ça n’a pas fonctionné, la page “Magneto” restait désespérément vide de périphériques réseau.

Finalement, j’ai fait ce que Free voulait : j’ai mis mon serveur dans le réseau privé “fourni” par la Freebox ADSL… Enfin pas exactement, je n’y ai mis qu’une (petite) “patte” à l’aide de VLAN et de parefeu.

J’ai créé un VLAN (eg. d’ID 42) dans lequel j’ai mis deux ports. J’ai utilisé un switch déjà présent dans mon installation réseau, mais c’est faisable avec un routeur ASUS, Belkin, Linksys, Netgear, sous DD-WRT, OpenWrt, Tomato, … : Les deux ports de ce VLAN sont celui où est branché mon serveur et un port libre que je vais relier à l’un des port de ma Freebox, on obtient alors le montage suivant :

/2013/04/videos-upnp-av-dlna-sur-sa-freebox-hd-avec-un-routeur-externe/images/UPnP-AV-sur-Freebox-HD-avec-VLAN.png

Ensuite, je configure mon serveur pour qu’il utilise ce VLAN sur une interface dédiée et uniquement pour le serveur UPnP AV (Mediatomb dans mon cas).

Données de départ pour compréhension :

  • Le serveur est sur le port 3
  • Le port libre que je vais pouvoir utiliser est le port 4
  • La Freebox ADSL a pour adresse IP 192.168.42.254/24

C’est partit…

  1. Créer un nouveau VLAN de VID 42 par exemple et y placer les ports 3 et 4

  2. Configurer le port 4 pour qu’il n’appartienne qu’au seul VLAN 42 (question de sécurité) et que les trames Ethernet soient untaggé en sortie de port

  3. Relier le port 4 du switch sur un port du switch de la Freebox ADSL (peu importe lequel, sauf le jaune, normalement réservé à la Freebox HD)

  4. Installer, si besoin, le support des VLANs sur son serveur (aptitude install vlan sur une Debian), le module kernel “8021q” est requis

  5. Créer l’interface dédiée et la configurer sur une adresse IP libre du réseau de la Freebox ADSL (eg. 192.168.42.1/24) :

    1
    2
    3
    
    vconfig add eth0 42
    ifconfig eth0.42 192.168.42.1 netmask 255.255.255.0 broadcast 192.168.42.255
    ifconfig eth0.42 up
    
  6. Configurer son serveur pour qu’il utilise cette interface : Pour Mediatomb, il faut l’utiliser exclusivement (cf. note plus bas) ce qui se fait, sous Debian, en modifiant le fichier /etc/default/mediatomb afin d’avoir : INTERFACE="eth0.42"

  7. Sécurisation avec iptables : On accepte les communications provenant de la Freebox vers le serveur (sur son interface dédiée) pour Mediatomb (TCP 49152) :

    1
    
    iptables --table filter --append INPUT --in-interface eth0.42 --source 192.168.42.254 --destination 192.168.42.1    --protocol tcp --dport 49152 --jump ACCEPT
    

    On accepte les communications provenant du serveur pour Mediatomb (TCP 49152) :

    1
    2
    
    iptables --table filter --append INPUT --in-interface eth0.42 --source 192.168.42.1   --destination 239.255.255.250 --protocol udp --dport 1900  --jump ACCEPT
    iptables --table filter --append INPUT --in-interface eth0.42 --source 192.168.42.254 --destination 239.255.255.250 --protocol udp --dport 1900  --jump ACCEPT
    

    On refuse tout le reste provenant du réseau Freebox :

    1
    
    iptables --table filter --append INPUT --in-interface eth0.42 --source 192.168.42.0/24 --jump REJECT
    
  8. Redémarrer le serveur DLNA et allumer la Freebox pour le voir apparaître dans la section “Périphériques réseau” du Magneto

  9. Profiter d’un bon film ou d’une bonne série sans avoir à, préalablement copier le fichier sur le disque dur (cf. mon script pour monter le disque dur de la Freebox directement sur son serveur)

Malheureusement, il y a quelques inconvénients à cette méthode :

  • “Consomme” un port Ethernet sur son routeur/switch
  • Configuration parefeu/iptables spécifique
  • Si Mediatomb, serveur inaccessible au réseau privé principal (celui de son routeur) car, en version 0.12.0 en tout cas, ne sait pas écouter plusieurs interfaces/IP