(modifié le 11 décembre 2020 à 0:38)

Pandora est un service que j'adore, et j'avais envie de l'utiliser sur mon Chromecast. Mais il faut pour cela s'affranchir de quelques bêtes blocages.

chromecast-pandora

Voyons comment faire avec un routeur équipé du firmware libre Tomato et un smartphone android.

Pourquoi j'utilise Pandora

Vous saisissez un artiste et Pandora vous lance une sorte de radio des artistes similaires. L'algo est très bon, j'ai pu découvrir de nombreux artistes. Il est bien meilleur que ce que l'on trouve sur Deezer avec son "flow".

Pandora n'est malheureusement pas accessible en france. Pour l'utiliser il est nécessaire de passer par un service de SmartDNS comme Unblock-us.

Configuration DNS Tomato

Commençons par envoyer les requêtes DNS vers le smartDNS au niveau du routeur sous Tomatp. J'ai déjà expliqué la manipulation dans ce billet, partie "Configurer un smartDNS sur Tomato".

Pour faire court :

  1. Menu Advanced > DHCP / DNS
  2. Saisir les informations suivantes en face de dnsmasq sous la forme :
    server=/.unblock-us.com/208.122.23.23
    server=/.pandora.com/208.122.23.23
  3. Faire Save pour mémoriser les paramètres

Maintenant toutes les requêtes DNS pour pandora.com seront proxifiées grâce à Unblock-US. Vérifiez que le site pandora.com fonctionne depuis votre navigateur web. Si ce n'est pas le cas essayez en navigateur privé pour éviter le cache de résolution DNS, et vérifiez que votre DNS local pointe vers votre routeur Tomato et non pas un DNS tiers (Google, FAI...).

N'oubliez pas de fixer l'ordre des DNS avec la commande dnsmasq strict-order.

Télécharger l'APK de Pandora

Tout comme le site l'application n'est pas accessible depuis la france. J'ai essayé en VPN mais cela ne fonctionnait pas, je soupçonne que Android bypass le VPN pour trouver la géolocalisation du smartphone.

Nous allons utiliser le site Aptoide. Cherchez Pandora Radio et flashez le QRcode qui pointe vers un APK (Aptoide) qui installera dans la foulée l'application Pandora Radio. Pas d'inquiétude, ça n'installera pas de saloperie avec.

A ce stage l'appliation Pandora doit fonctionner, vérifiez. Si ce n'est pas le cas vérifiez que vous êtes en WiFi sur votre routeur tomato et non pas en 3G/4G.

note : si vous êtes sur iOS, je ne peux rien faire pour vous

Bloquer l'accès aux DNS pour le Chromecast

Le Chromecast est un périphérique de Google très verrouillé. A tel point que les serveurs DNS publics de Google y sont hardcodés : 8.8.8.8 et 8.8.4.4.

A ce stade si vous lancez l'application Pandora depuis votre smartphone en WiFi, et que vous activez le cast avec l'icône dédiée, vous verrez le lancement sur votre TV puis après quelques secondes le Chromecast retourne sur l'écran d'accueil. Il n'y a aucun message mais l'explication est simple : Pandora détecte que votre Chromecast est situé en france et n'autorise pas l'accès.

Nous devons donc forcer le Chromecast à utiliser le routeur Tomato comme serveur DNS. Pour cela il existe 3 méthodes :

  1. Activer le DNS Spoofing
  2. Avec l'Access Restriction
  3. En blocage manuel avec IPtables

Je vais détailler les 3 méthodes, à vous de choisir celle qui vous plaît.

M1 - DNS Spoofing

Avec cette méthode le routeur Tomato intercepte toutes les requêtes DNS sortantes pour répondre lui-même. C'est très efficace mais consomme un peu de ressources.

Inconvénient : Le routeur interceptera les requêtes DNS de toutes vos machines et pas uniquement du Chromecast. Personnellement je préfère pouvoir faire des résolutions à l'extérieur pour des besoins persos (propagation IN A par exemple...).

Aller dans Menu Advanced > DHCP/DNS et cocher "Intercept DNS port (UDP 53)" puis Save.

La prise en compte est immédiate mais le Chromecast utiliser un cache. Éteindre complètement le chromecast (couper l'alimentation USB) puis le remettre en route. Vous devriez maintenant pouvoir caster Pandora sur votre TV !

M2 - Access Restriction

Cette méthode bloque l'accès aux DNS uniquement pour votre Chromecast. La configuration se fait via l'interface graphique.

D'abord, relevez l'adresse mac de votre Chromecast dans l'application Android Google Home :

  • cliquez en haut à droite pour voir votre Chromecast
  • cliquez sur les "..." verticaux > paramètres
  • scrollez tout en bas vous verrez l'adresse mac

Puis dans le routeur Tomato dans : Menu Access Restriction > Add :

tomato-rules

  • Enabled : cocher
  • Description : blocage dns chromecast
  • Schedule : cocher All Day + Everyday
  • Type : Normal Access Restriction
  • Applies to : The Following et inscrire l'adresse mac xx:xx:xx:xx:xx:xx
  • Blocked Resources : ne pas cocher
  • Port/Application > Rules : Any Protocol, Any Port, IPP2P (disabled), Layer 7 (disabled), Dst IP : 8.8.8.8, OK
  • Répéter la règle avec 8.8.4.4
  • Mémoriser avec Save en bas.

La prise en compte est immédiate mais le Chromecast utiliser un cache. Éteindre complètement le chromecast (couper l'alimentation USB) puis le remettre en route. Vous devriez maintenant pouvoir caster Pandora sur votre TV !

M3 - Blocage manuel avec iptables

Cette solution est similaire à la précédente et plaira aux barbus qui aiment le terminal. Nous interdisons l'accès aux deux IP des serveurs DNS de Google.

Pour filtrer selon l'adresse mac du Chromecast :

iptables -I FORWARD -m mac --mac-source 11:22:33:44:55:66 --destination 8.8.8.8 -j DROP
iptables -I FORWARD -m mac --mac-source 11:22:33:44:55:66 --destination 8.8.4.4 -j DROP

Remplacez 11:22:33:44:55:66 par l'adresse mac de votre Chromecast.

Si vous avez appliqué une adresse ip en dhcp statique (Basic > Static DHCP) vous pouvez filtrer par l'IP du Chromecast au lieu de l'adresse mac :

iptables -I FORWARD -s 192.168.0.34 --destination 8.8.8.8 -j DROP
iptables -I FORWARD -s 192.168.0.34 --destination 8.8.4.4 -j DROP

Remplacer 192.168.0.34 par l'adresse IP du Chromecast.

Il faut maintenant rendre ces règles persistantes dans le menu Administration > Scripts > Firewall et enfin Save.

Redémarrez ensuite le routeur, ou bien saisir les lignes en SSH puis service firewall restart.

Bonus : supprimer une règle

Listez les règles :

iptables -L FORWARD --line-numbers -n

Puis supprimez la règle n°17 :

iptables -D FORWARD 17

Et enfin service firewall restart.

Note : j'avais utilisé REJECT au lieu de DROP au départ mais ça ne fonctionnait pas

La prise en compte est immédiate mais le Chromecast utiliser un cache. Éteindre complètement le chromecast (couper l'alimentation USB) puis le remettre en route. Vous devriez maintenant pouvoir caster Pandora sur votre TV !

Conclusion

Ce billet est un poil technique mais n'a rien de complexe. Ce sujet me semblait varié pour vous parler de Tomato, d'iptables, de dnsmasq... et je suis sûr qu'il pourra vous servir dans d'autres projets 🙂

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter