La Lanterne Rouge

Warning: Geek Inside

Commandez l'UPnP avec miniupnpc

- Posted in Sans catégorie by

Je suis en train de monter une machine de récupération (Rabban pour ne pas la nommer) qui sera bientôt installée loin du reste de mon cheptel, mais à laquelle je vais devoir accéder à distance plus ou moins régulièrement notamment pour de la maintenance.

J'ai donc installé une bonne Debian Wheezy 7.5 avec SSH, Webmin et Lighttpd+PHP (car l'utilité première sera pour une application PHP). Ce serveur sera derrière une box dont je n'ai pas le contrôle direct, mais qui a par contre - comme c'est le cas par défaut - le service UPnP activé.

Une fois tous les services en place et testés en local, j'ai réfléchi au moyen de les rendre accessibles quand ils seront sur le LAN distant. Pour la problématique de l'adresse/nom de domaine, il existe de nombreux services de DNS dynamiques. Il suffit de faire son choix puis d'installer l'utilitaire de mise à jour automatique associé. Pour le problème de NAT/PAT par contre c'est une autre histoire. Et étant donné que cette box - comme les autres - ne possède pas d'API de contrôle, et que mon API maison est faite pour une Neufbox 4, j'ai pensé que le moyen le plus simple était d'utiliser UPnP.

Commandez l'UPnP avec miniupnpc

J'ai trouvé pour cela MiniUPnP, un petit utilitaire disponible sous Linux, qui plus est dans les dépôts Debian, et dont l'utilisation est archi-simple.

Pour l'installer :

# apt-get install miniupnpc

Puis pour l'utiliser on peut :

  • soit renseigner très précisément les ports externes à ouvrir et la machine de destination (qui peuvent être différents de ceux du serveur),
  • soit utiliser une syntaxe simplifiée permettant d'ouvrir plusieurs ports à la fois en les faisant correspondre obligatoirement avec les ports du serveur.

Exemple pour le premier cas, ouvrir le port TCP 8080 externe vers le port 80 de la machine à l'adresse 192.168.1.200 :

$ upnpc -a 192.168.1.200 80 8080 tcp

Simple non ?

Et il n'y a rien à configurer de plus. La demande est faite automatiquement à la passerelle configurée, soit manuellement, soit par DHCP.

Pour ajouter plusieurs règles de NAT/PAT en une seule fois :

$ upnpc -r 80 tcp 443 tcp 22 tcp

Ici on redirige les ports TCP 80 (HTTP), 443 (HTTPs) et 22 (SSH) vers la machine depuis laquelle la commande a été exécutée.

Enfin, pour être sûr que les ports restent ouverts même après une coupure électrique (attention au Restore on A/C Power Loss) ou un reboot de la box, on peut évidemment ajouter un job CRON qui exécutera cette commande régulièrement.

Tellement simple mais tellement pratique !