[Mémo] Démarrer des instances OpenVPN avec systemd

0

Remarque préliminaire : cet article traite du démarrage d’instances d’OpenVPN sur un système Linux, ici une Debian Stretch, avec systemd. Il ne traite pas de la manière dont on configure une instance OpenVPN (paramètres et clés).

Avec SysV, un démon maître était lancé et chaque instance à démarrer automatiquement se faisait par configuration dans le fichier « /etc/default/openvpn » (du moins sur les Debian-like).

systemd est conçu pour gérer nativement ces problématiques de multi-instances, alors autant en profiter.

Contexte

Supposons que votre ordinateur portable nécessite d’être raccordé à trois infrastructures distantes via VPN, dont une de manière permanente. Imaginez que vous êtes un prestataire qui prend le contrôle à distance chez ses clients, tout en gardant en permanence un lien vers son serveur NAS à la maison,

On a donc 3 configurations différentes que nous appellerons « maison », « client-a » et « client-b ». Ces trois configurations et tous les fichiers nécessaires (notamment les clés) se placent dans leurs dossiers respectifs. Ce qui donne :

$ ls /etc/openvpn
client   client-a   client-b   maison   server

Cela dit, on remarque la présence de deux dossiers supplémentaires appelés « client » et « server ». Ils sont liés au fonctionnement prédéfini par les gabarits d’unités systemd pour OpenVPN 2.4.

Mise en œuvre

Pour chaque dossier créé, on trouve un certain nombre d’éléments, dont le fichier de configuration. Voici un exemple :

$ ls /etc/openvpn/maison
maison.conf   shared.key

Remarque : on pourrait tout bourrer comme des sagoins dans le dossier « client », mais je ne trouve pas ça très propre et très maintenable si les tunnels se multiplient.

Cependant, c’est bien le dossier « client » qui va faire foi dans un premier temps, vu la manière dont le gabarit est construit. Un simple lien symbolique suffit :

# ln -s /etc/openvpn/maison/maison.conf /etc/openvpn/client/maison.conf

Le gabarit n’est pas amorçable directement, il faut nommer explicitement une instance. Ici le fichier s’appelle « maison.conf ». Inscrire l’instance « maison » (qui ira bien chercher « maison.conf » dans le dossier « client ») est enfantin :

# systemctl enable openvpn-client@maison
Created symlink /etc/systemd/system/multi-user.target.wants/openvpn-client@maison.service → /lib/systemd/system/openvpn-server@.service.

Désormais, le VPN vers la maison se lance automatiquement au démarrage du système !

Et pour lancer les autres instances, pas besoin de les inscrire, systemd se débrouille à partir du nom indiqué pour retrouver ses petits.

# systemctl start openvpn-client@client-a

Remarques

Le paquet OpenVPN exploite donc désormais les services systemd, et non plus les scripts de type UNIX System V. Pour bien décortiquer l’affaire, il faut donc comprendre le fonctionnement des « unités » systemd. La petite bête réside dans ce paragraphe (en langue de Shakespeare) :

Optionally, units may be instantiated from a template file at runtime. This allows creation of multiple units from a single configuration file. If systemd looks for a unit configuration file, it will first search for the literal unit name in the file system. If that yields no success and the unit name contains an « @ » character, systemd will look for a unit template that shares the same name but with the instance string (i.e. the part between the « @ » character and the suffix) removed. Example: if a service getty@tty3.service is requested and no file by that name is found, systemd will look for getty@.service and instantiate a service from that configuration file if it is found.

Soit en gros : il détecte la présence d’un arobase, donc il suppose une instanciation. Il extrait le nom de l’instance entre le ‘@’ et le ‘.’, et lance le gabarit (reconnaissable au ‘@.service’) avec en paramètre le nom de l’instance.

Le paquet lui-même installe ces fichiers :

# ls -l /lib/systemd/system/openvpn*
-rw-r--r-- 1 root root 707 juil. 18 22:15 /lib/systemd/system/openvpn-client@.service
-rw-r--r-- 1 root root 780 juil. 18 22:15 /lib/systemd/system/openvpn-server@.service
-rw-r--r-- 1 root root 320 juil. 18 22:15 /lib/systemd/system/openvpn.service
-rw-r--r-- 1 root root 894 juil. 18 22:15 /lib/systemd/system/openvpn@.service

Dans le fichier « openvpn-client@.service », on trouve ces directives (parmi d’autres) :

WorkingDirectory=/etc/openvpn/client
[...]
ExecStart=/usr/sbin/openvpn --suppress-timestamps --nobind --config %i.conf

Et voilà grosso modo comment systemd s’y retrouve pour lancer des instances différentes à partir d’un même fichier. Même principe pour le gabarit « openvpn-server ».

Et les deux derniers ? Ce sont les versions pour OpenVPN 2.3, que je recommande d’abandonner si vous le pouvez. Ces instances cherchent leur configuration dans le dossier « /etc/openvpn » et sont lancées de manière significativement différentes. Si vous n’êtes pas un expert OpenVPN, ou ne recherchant pas explicitement ces détails de lancement, vous pouvez les abandonner sans regret. Sachez qu’un OpenVPN 2.4 peut parfaitement discuter avec un OpenVPN 2.3 moyennant de les laisser s’entendre sur les algorithmes et certains paramètres nouvellement introduits : c’est testé et approuvé !

systemd, faut en manger ! C’est bon ! (Mais des fois ça croque un peu sous la dent…)

[Debian] Basculer la mise en réseau de System V à systemd

1

Depuis Debian Jessie (8.X), systemd se fait de plus en plus présent dans la distribution, et permet d’effectuer une migration en douceur au fil des versions. Parmi celles à noter, je voudrais vous faire découvrir la partie mise en réseau élémentaire.

L’objectif est de remplacer la gestion classique avec l’ensemble ifupdown et le client DHCP de l’ISC. On pourra même supprimer les paquets à la fin de la migration. Pour corser les choses, je vais appliquer ce cas d’usage à un VPS 2016 chez OVH, dont la gestion manuelle révèle quelques surprises.

Testez vos configurations dans une machine virtuelle ! Ça vous évitera des surprises en production. Et lisez cet article en entier avant de vous lancer : systemd est super, mais aussi super chiant parfois…

Configurer systemd

La configuration des éléments réseau de systemd se fait dans le dossier /etc/systemd/network. Pour ce qui nous concerne, on va créer un fichier avec en préfixe un nombre quelconque, par exemple « 30 » puis un nom représentatif pour vous, je prendrai « wired » pour mes liens filaires, et l’extension « .network ». Dans cet exemple, ca me donne donc « 30-wired.network ».

(suite…)

[Terminaux Windows CE] Cleanboot sur Motorola MC70

0

Préambule

Pour interagir avec notre IBM i, nous utilisons majoritairement des sessions de type 5250 (les fameux écrans verts). Des grilles écrans issues de différents programmes s’affichent sur ses sessions et nous permettent d’interagir efficacement et directement avec la machine. Si habituellement nous accédons à la machine grâce à une console IBM, ou l’IBM i Access (qui émule un terminal 5250) sur nos PC, nous avons prévu l’utilisation de terminaux mobiles, notamment pour mouvementer les stock.

A l’heure où j’écris ces lignes, nous avons une ébauche de master pour nos trackers et je travaille sur ce sujet pour permettre une utilisation fluide.

Sur les terminaux équipés de Windows CE, il peut s’avérer utile de procéder parfois à une mise à blanc du système afin de lui restaurer son état d’origine. Cette opération peut être effectuée de plusieurs manières (bouton reset accessible avec une pointe, combinaison de touches, etc.) notamment par l’installation de fichiers spécifiques.

Nous allons voir dans ce billet comment procéder à cette mise à blanc sur nos terminaux, les Motorola Symbol MC7094, mais ceci est valable pour une large variété de terminaux. Cette mise à blanc s’appelle le cleanboot. Il ne s’agit de pas grand chose de plus que la traduction de la documentation fournie. (suite…)

[Windows] Dépendances de mises à jour sur Windows 7 SP1

0

Cet article est en fait un mémo pour rapidement mettre à jour les composants fondamentaux d’un Windows 7 SP1.

Exigences initiales

Mon problème est de bénéficier de la dernière version de PowerShell (5.1 au moment où je rédige cet article, 6.0 en cours de finalisation par Microsoft), de la dernière version du framework .NET (4.7.1), et de la dernière version d’Internet Explorer (11). De plus, ces logiciels doivent s’installer sans connexion à Internet.

Mise à jour d’Internet Explorer

Dans un premier temps, on s’occupera d’Internet Explorer. Windows 7 est livré par défaut avec Internet Explorer 8, lequel est obsolète depuis un bon moment, tant par l’arrivée de nouvelles versions et de fonctionnalités, que par l’arrêt progressif du support par Microsoft. Officiellement, l’éditeur ne le supporte plus depuis le 12 janvier 2016 (mais des correctifs sortent encore aujourd’hui…) Bref, il est grandement temps de le mettre à jour. (suite…)

[Asterisk] Protéger un sous-menu de serveur vocal par un mot de passe

4

Bonjour à tous,

Depuis plusieurs mois années (la vache, le temps passe super vite), nous utilisons un serveur de téléphonie basé sur Asterisk. Il s’agissait à l’origine de XiVO, qui depuis a forké pour devenir Wazo. Ce dernier est toujours géré par sa super équipe de développeurs habituelle basée au Québec. XiVO existe toujours mais ne correspond pas à nos attentes sur différents plans, mais ce n’est pas le sujet.

Au départ nous n’avions qu’un seul numéro provenant d’une ligne SIP Free, qu’il suffit d’activer depuis son espace abonné Freebox. Pour joindre différents postes, nous avons très vite été obligés de mettre en place un IVR, ou SVI. Plus clairement, il s’agit de ce qu’on appelle un Serveur Vocal Interactif, Interactive Voice Response.

L’objectif est d’expliquer à Asterisk, le moteur de téléphonie, ce qu’il va devoir faire dans tel ou tel cas. Pour cela, on lui expliquera tout cela avec une syntaxe bien spécifique. Je mets un peu les briques dans le désordre. Je ne vais pas expliquer spécialement les principes de base mais plutôt vous montrer comment j’ai réalisé ce que je souhaitais obtenir afin que vous puissiez vous en inspirer, voire améliorer ce que j’ai fait (qui contient probablement des erreurs dues à mon manque de pratique dans le domaine).

Pour l’occasion, je vous partage mon serveur vocal, un peu modifié pour le rendre plus digeste et surtout retirer les lignes inutiles. La logique de ce serveur vocal est simple, nous souhaitons que les appelants puissent nous contacter mais aussi, qu’en cas de besoin, nous puissions accéder à des fonctions avancées qui doivent nous être réservées, il faut donc les protéger, et quoi de mieux qu’un code à taper sur le téléphone. (suite…)

[Mémo] Chiffrer un disque dur externe sous Linux

1

Afin de ne plus chercher partout « comment je m’y étais pris la dernière fois » pour fabriquer mon disque dur externe chiffré, je me suis fait un petit mémo. L’objectif est donc d’utiliser LUKS, et quelques lignes de commande.

J’avais un disque dur SATA de 500 Go, récupéré dans une de mes anciennes machines, que je voulais transformer en disque de sauvegarde. J’ai donc utilisé un dock USB, puis branché sur une machine Linux.

Toutes les commandes se font en root ou bien préfixées par sudo. Moi je suis plutôt root sur mes machines, surtout quand j’enchaîne les commandes à privilèges (quitte à faire un sudo /bin/bash…) Mais c’est un vieux troll poilu une autre histoire…

Première étape : le repartitionnement

Fdisk est votre ami.

Fdisk vous affiche les partitions d’un disque donné :

# fdisk -l /dev/sdb

Mais fdisk est avant-tout interactif. Voici ce que ça donne :

# fdisk /dev/sdb

Avec o (lettre o minuscule) : je crée une table des partitions vide, donc je vide en une fois toutes les partitions existantes.

Avec n : je crée une partition. En laissant les valeurs par défaut, la partition occupera l’espace maximal disponible. (suite…)

[Astuce] Charger un MacBook sans chargeur MagSafe

0

Attention : Le présent article détaille une bidouille à caractère expérimental, pouvant porter atteinte au bon fonctionnement de votre ordinateur. Agissez à vos risques et périls.

Voici un bref article qui traite de l’alimentation d’un MacBook (Pro, Air, ou « MacBook » tout court) sans recourir au chargeur Apple fourni dans la boite de votre Mac.

Cela est utile à des fins de diagnostics (pour pouvoir analyser la consommation en courant), à des fins de bidouilles (quand on ne dispose pas du chargeur complet mais qu’on a une alimentation ajustable sous la main) et pour recharger un Mac sur une installation électrique basse tension.

Se procurer un cable MagSafe

Le connecteur MagSafe n’étant pas standardisé, la seule manière de s’en procurer un est d’acheter un cable de remplacement pour réparer un chargeur MagSafe, ou de le récupérer sur un chargeur cassé (en espérant que le cable et le connecteur soient intacts). On en trouve pour une dizaine d’euros sur Amazon : MagSafe 1 – MagSafe 2

Si on souhaite à la fois utiliser du MagSafe 1 et MagSafe 2, on pourra très bien se tourner vers un cable MagSafe 1, et utiliser l’adaptateur MagSafe 2. Cela évite de posséder deux cables. (suite…)

[Astuce] Économie de bande passante lors des mises à jour de téléphones Cisco IP Phone

0

Bonjour à tous,

Aujourd’hui un tout petit article pour une toute petite astuce.

Lorsque je déploie des téléphones Cisco IP Phone, dans mon cas des 7975, il arrive que le serveur ne soit pas sur le même site que les postes. L’approvisionnement des téléphones se faisant par FTP, le temps de chargement des fichiers composant le firmware peut être assez long. Si en plus je dois déployer plusieurs téléphones en simultané, je me retrouve vite obligé de patienter de longues minutes inutilement.

Pour contrer ce problème, il suffit de temporiser le déploiement de chaque téléphone. Seulement, si pour chaque poste la mise à jour se fait plus vite, au global on perd encore plus de temps.

Cisco y a pensé et a doté les téléphones d’une fonctionnalité très intéressante. On peut activer le partage de firmware.

Concrètement, on va pouvoir déployer tous les postes simultanément. Les téléphones vont communiquer entre eux et un seul va télécharger les firmwares pendant que les autres attendent. Une fois les firmwares téléchargés ils vont être transmis aux autres postes via le réseau local.

Pour activer cette fonctionnalité, il suffit simplement d’ajouter une balise XML dans vos fichiers ou vos templates de configuration, dans la zone vendorConfig :

<peerFirmwareSharing>1</peerFirmwareSharing>

Et le tour est joué !

[Test] Gablys : le porte-clé (dé)connecté

0

L’été dernier, j’ai participé avec des amis au black badge challenge de la Nuit du Hack (notre compte rendu d’ailleurs  disponible ici). La dernière étape de ce challenge était de faire de la rétro-ingénierie d’un firmware de porte-clef Gablys.

Quelques semaines plus tard, on m’a donné une carte cadeau dans une boutique qui vendait des « objets connectés » et « accessoires tendances ». Déçu du manque de choix singuler dans le catalogue de la boutique, je me suis rabattu sur deux porte-clefs Gablys, soldés à 10€ chacun. J’avais prévu à l’origine de les décortiquer et changer leur firmware (tout cela a été documenté), mais par manque d’idée pour un projet utilisant du Bluetooth 4.0 j’ai laissé tomber.

Encore quelques semaines plus tard, je me suis dit que peut-être je devrais laisser une chance au Gablys tel quel. La promesse de pouvoir retrouver ses objets à partir de son smartphone m’intrigue.

Le Gablys au porte-clef

Le Gablys est un petit galet qu’on peut accrocher à son porte-clef grâce à son trou. Il est un peu plus volumineux qu’un badge Vigik, d’un encombrement à peu près raisonnable (on peut avoir un Gablys dans ses poches sans avoir l’air suspicieux). Son boitier est en plastique et se raye facilement (cela dit ce n’est pas un problème pour moi). Le boitier est légèrement souple, ce qui permet d’actionner un bouton en le pressant. (suite…)

[Découverte] Monter des images DMG sous Linux avec darling-dmg

0

Si vous êtes un ancien utilisateur de Macintosh, il y a de fortes chances que vous ayez quelques images au format DMG qui traînent quelque part, sur un vieux disque dur ou sur des CD.

Jusqu’ici, la seule méthode pour monter une image disque DMG consistait à convertir l’image DMG en ISO (avec dmg2iso), puis monter la partition HFS+ de l’image ISO (avec le module noyau hfsplus). C’est un processus fastidieux et qui nécessite les privilèges root, mais qui a le mérite d’exister ; si vous êtes curieux, je vous invite à lire cette question sur Ask Ubuntu.

J’ai découvert récemment l’utilitaire darling-dmg qui permet de monter des images DMG très simplement sous Linux. darling-dmg se présente sous la forme d’un pilote FUSE (Filesystem in UserSpacE, système de fichier en espace utilisateur) : plutôt que de créer un module noyau pour implémenter le système de fichier, un pilote FUSE est un programme qui est exécuté par l’utilisateur. Cela ouvre la porte à des systèmes de fichiers farfelus, comme par exemple GmailFS qui permettait d’utiliser sa boîte Gmail comme un espace de stockage, mais cela permet aussi de limiter les kernel panics quand le pilote plante, ce qui arrive parfois avec le module hfsplus…

darling-dmg est un sous-projet du projet Darling. Ce projet à pour vocation de permettre aux linuxiens de faire tourner des applications compilées pour Mac OS X, un peu à la manière de Wine. (suite…)

Go to Top