Home Assistant & Wake on Lan

L'heure est aux économies d'énergies et il parait qu'il faut éteindre "la" Wi-Fi ! Ce n'est peut être pas ce qui consomme le plus et notre domotique fait certainement mieux.... Par contre nombre d'entre nous ont des PC énergivores qui mériteraient de passer en veille. Sauf que dans la pratique on laisse souvent ce PC allumé en se disant que l'on pourra en avoir besoin depuis l'extérieur... Ce que j'ai longtemps fait !

Un PC moderne avec un SSD sait sortir de veille en quelques secondes. Alors pourquoi ne pas ressortit une vieille fonctionnalité très peu utilisée, le Wake on Lan.

Sous Linux, Windows, voire même les mobiles il existe des application GUI ou CLI. Il faut tout de même savoir que Wake on Lan n'a pas été conçu à l'époque pour fonctionner à distance, et même s'il existe des possibilités ça reste compliqué. Alors pourquoi ne pas simplement utiliser Home Assistant qui lui sera toujours disponible, voire même simplement ajouter ça à un ESP existant, sous ESP Home par exemple..

La première chose pour vos tests sera de vérifier en local que le Wake on Lan fonctionne (il y a pas mal d'utilitaires et d'explications sur ce site).

Avec Home Assistant

On commence par ajouter l'intégration au fichier de configuration et on redémarre :

wake_on_lan:

Ensuite on peur créer un switch: , mais aujourd'hui on préfèrera un button: dans Lovelace qui actionnera le service correspondant :

  - action_name: 'Sleep/UnSleep'
    double_tap_action:
      action: call-service
      service: button.press
      target:
        entity_id: button.lia_monitors_off
      action: call-service
      confirmation:
        text: Etes vous sur ?
    tap_action:
      action: call-service
      service: wake_on_lan.send_magic_packet
      data:
        mac: 00-0C-29-FB-77-97
    icon: mdi:microsoft-windows
    name: 'Windows 10 PC'
    type: button

Vous remarquerez que j'ai configuré ça sur le tap_action:, le double_tap_action: étant lui configuré pour la commande de mise en veille via Home Assistant Agent.

Avec ESP Home

J'ai un client full cloud qui dispose d'une douzaine de PC, mais pas de serveur et encore moins de Home Assistant. La première solution était de laisser un PC allumé et y installer de quoi faire du Wake on Lan en remote. Il y a également des possibilités via TeamViewer et hélas pas de base dans l'UDM Pro d'Ubiquiti. On verra ce l'on utilisera mais j'ai également pensé faire ça via un simple ESP qui lui pourrait resté allumé...

Dans ESP Home on va éditer la config et simplement ajouter (attention, ici les séparateurs ne sont pas des "-" mais ":") :

web_server:    

button:
- platform: wake_on_lan
  name: "VM Annia"
  target_mac_address: 00:0C:29:FB:77:97

A partir de là il est possible de presser notre button: qui remonte dans Home Assistant, sur la page web de l'Esp, mais également via la commande curl (la doc est ici) :

curl -X POST http://192.168.210.153/button/vm_annia/press

Et comme on ne va pas demander à l'utilisateur final de faire un "curl" on va lui emballer tout ça dans une page web accessible que l'on sécurisera afin que lui seul puisse y accéder, en partant de cette base :

<HTML>
<center>

	<form name="myform" action="http://192.168.210.153/button/vm_annia/press" method="post">
  	<button>PC Annia ON</button>
	</form>

</center>
</HTML>

Variante avec un WebHook

L'ESP remonte sur Home Assistant via ESPHome. De fait on peu presser un bouton pour réveiller le PC distant, voire même intégrer ce bouton sur un autre Home Assistant en remote. Mais il est également possible de créer un WebHook et de déclencher avec un raccourcis depuis le PC de l'utilisateur distant :

- alias: Réveil PC Carole (WebHook)
  description: ""
  trigger:
    - platform: webhook
      webhook_id: "secret-id"
  condition: []
  action:
    - service: button.press
      data: {}
      target:
        entity_id: button.reveil_pc_carole
  mode: single

Et le raccourcis à créer sur le PC de l'utilisateur qui doit réveiller son PC de bureau...

curl -X POST https://ha-online.suptel.org/api/webhook/<secret-id>

Infos

  • Attention, Microsoft a introduit un concept de veille moderne qui souvent demandera à être désactivé. Des infos ici et .
  • Il n'est pas possible de réveiller un PC connecté en Wi-Fi ou en Ethernet via USB.
  • A noter que la Freebox dispose d'une option permettant de laisser passer du Wake on Lan. Ce n'est pas le cas pour tous les routeurs et il faut parfois ruser avec le port 9.

Sources

 

Windows et le yoyo des écrans....

Sous Windows lorsqu'on utilise plusieurs écrans se pose un problème majeur : si un des écrans passe en veille, déconnecté ou non alimenté, toutes les fenêtres ouvertes passent sur l'écran qui reste disponible. Dans l'absolu c'est logique sur un laptop sur lequel on connecte occasionnellement un écran externe, par contre sur un PC fixe que l'on utilise en permanence avec trois écrans il est extrêmement désagréable de devoir réorganiser ses fenêtres tous les matins... (sujet déjà évoqué ici).

La faute à qui, à quoi ?

Le problème se situe au niveau de la gestion de l'EDID (ici pour les détails).  Il s'agit d'une implémentation dans les écrans qui va transmettre à Windows pas mal d'informations, dont :

  • La résolution d’écran,
  • La profondeur de couleur prise en charge,
  • La résolution et fréquence d’images prises en charge,
  • Le rapport hauteur / largeur
  • Le format audio pris en charge, par exemple, par exemple sur un téléviseur ne prend en charge que les formats 2.0 ou 5.1,

Selon l’année de production du téléviseur ou du moniteur, la version prise en charge d’EDID peut être 1.0, 1.4, 2.0, 3.0 ou plus. Ces informations ne sont bien sur pas modifiables par l'utilisateur mais en dur dans l'écran. A noter également que certains moniteurs permettent de désactiver une partie des informations transmises via le port HDMI ou DP. On peut alors faire un réglage manuel et Windows ne verra pas l'écran disparaitre. Ca résout le problème.

Mais hélas ce n'est pas le cas de mes écrans Samsung.

Il faut savoir que sous Windows il n'y a absolument aucune solutions native ou via un utilitaire pour désactiver l'auto détection des écrans. Ca existait jadis sous Windows 7, sous la forme d'une clé de registre, mais depuis que Windows est devenu avant tout un outil de collecte de données c'est terminé, le marketing a probablement décidé d'éliminer tout ce qui pourrait générer du support... Et pourtant la demande est bien présente !

Contournement

J'ai exploré le net dans tous les sens et les seules solutions disponibles sont matérielles. Il s'agit de dongle HDMI qui se branchent sur le port HDMI ou DP (ou via un adaptateur USB-S) entre le PC et les écrans. Il s'agit d'un émulateur EDID qui va faire croire à Windows (ça doit être identique sous MacOS) que l'écran est présent alors même qu'il est en veille, off ou débranché.

Fonctionnement

La première fois qu'on insère le dongle entre le PC et l'écran (ça ne se connecte pas sur l'écran mais sur le PC) il va détecter les informations transmise par l'EDID. Ensuite on débranche brièvement le câble de l'écran, la diode du dongle clignote ce qui indique qu'il enregistre la configuration EDID de l'écran. A partir de là on pourra éteindre ou déconnecter l'écran, Windows considèrera toujours qu'il est présent.

Attention : Ces informations étant propre à chaque écran, il faudra faire un reset du dongle si on change d'écran.

On trouve sur le marché plusieurs modèles à partir de 14 €, tous ne fonctionnent pas bien et certains sont limités en résolution. J'avais d'abord commandé ce modèle de chez Fueran qui dans mon cas ne fonctionne pas. C'est avec ces deux modèles Sonero (Manuel) et Digitus (fiche tech.) que j'ai eu les meilleurs résultats en 4K jusqu'à 60 Hz en ce qui me concerne, HDR non supporté). Il existe également ce modèle développé à cet effet et qui donne de bons résultats (je vais en avoir deux à revendre, ainsi qu'un modèle DP)

Sur Amazon il existe d'autres modèles et je veux bien un retour si vous testez autre chose. N'oubliez pas que chez eux le retour est gratuit, alors n'hésitez pas à tester. D'ailleurs celui-ci serait à tester car il permet un réglage manuel de la résolution...

Complications

Si dans la majorité des cas ça se passe bien, j'ai dans ma configuration j'ai un écran Samsung M7 en 43" (par ailleurs très bien pour 450 €) qui se dit intelligent et qui a eu dans mes tests parfois des comportements bizarres :

  • L'écrans n'était reconnu qu'en FHD et non 4K : la seule solution passe par une réinitialisation en config usine.
  • Ecran noir mauvaise disposition d'écrans après une déconnection ou mise en veille !

Dans ce dernier cas le fait de la basculer entre 30 et 60 Hz dans les paramètres le réactive. Mais si ça se reproduit c'est fastidieux de chaque fois aller dans les paramètres (pour peu que les dits paramètres n'aillent pas s'ouvrir sur l'écrans qui est noir...). Heureusement il existe des commandes en CLI qui vont permettre de créer un raccourcis, voire de les lancer à distance (dans mon cas via Home Assistant Agent).

Forcer la résolution et la fréquence de rafraichissement

J'ai utilisé alternativement en 30 ou 60 Hz l'outil NirCMD de chez NirSoft :

C:\Tools\nircmd setdisplay monitor:DISPLAY1 3840 2160 32 30
ou
C:\Tools\nircmd setdisplay monitor:DISPLAY1 3840 2160 32 60

Changer l'échèle (DPI)

J'ai trouvé l'utilitaire SetDPI (1 étant le numéro d'écran, qui ne correspond bizarrement pas aux numéros édictés par Windows, et ensuite la valeur DPI) :

C:\Tools\setdpi 1 150

Définir l'écran principal

Avec MultiMonitorTool de chez NirSoft pour définir l'écran principal :

C:\Tools\multimonitortool /SetPrimary \\.\DISPLAY1

Et pour terminer je viens de trouver Display Changer et Display Changer II qui permettent de résumer tout ça en une seule ligne.

En // je suis en train de tester Persistent Windows qui enregistre les positions et dans l'absolu permet de créer des snapshots de positions...

EDIT 15/10/22

Petit retour d'expérience actualisé.

Les dongle dont j'ai parlé plus haut (Sonero et Digitus) fonctionnent parfaitement. On peut mettre en veille ou éteindre les écrans, les fenêtres ne bougent plus. C'est parfait. Et quand on redémarre le PC il suffit de relancer Persistant Windows pour qu'il ouvre les programmes et positionne les fenêtres à leur place. What else !

Sources

 

 

 
 

 

 

Home Assistant & Cloudflare Zero Trust

Une fois de plus on va parler de VPN. J'avais ici évoqué Zerotier (gratuit pour 25 nodes) que j'utilise toujours notamment pour interconnecter plusieurs sites entre eux en remplacement d'IPSEC. Ca fonctionne très bien et ça se fait oublier. Entre temps on a découvert Wireguard qui est très performant et peut être utilisé en natif (faut faire le taff) ou via des intégrations comme Tailsacle (entre autres) dont la version gratuite sera suffisante pour bien des usages.

Aujourd'hui on va parler de Cloudflare Zero Trust. Au départ je voulais juste tester sous Home Assistant car cela permet de publier son Home Assistant sans ouvrir de ports sur le routeur, de la même façon que l'on peut le faire si l'on dispose d'un abonnement Nabu Casa. J'ai cet abonnement, mais je ne veux pas l'imposer aux utilisateurs que j'aide.

Si Zero Trust est basé sur Wireguard il n'a rien d'open source. Certains n'aimeront pas quelque chose qui passe par Cloudflare qui comme beaucoup d'acteurs du marché pratique la collecte de donnée. C'est le business de l'époque, d'autres font pire mais ce n'est pas le débat ici, alors épargnez moi vos digressions sur ce sujet, ce n'est pas l'objet. Si vous choisissez cette solution c'est en connaissance de cause. Il existe des alternatives, moins simples à mettre en œuvre.

Zero Trust est un VPN orienté client qui permet notamment deux approches :

  • Publier et sécuriser, sans ouvrir de ports, un (ou plusieurs) site hébergés en premise (premise = chez vous, dans votre entreprise) et le rendre accessible publiquement avec des restrictions qui assureront sa sécurité (MFA) et surtout des restrictions géographiques qui sont quasi impossibles avec les autres solutions, notamment à cause de Let'Encrypt.
  • Rendre accessible des réseaux privés (VPN) en passant par le client Warp de Cloudflare) et ainsi accéder à toutes les machines du réseau (RDP, SMB, SSH, etc...).

Ce qui fait la force de cette solution ce sont les policies qui permettent une très grande granularité. Cloudflare Zero Trust est gratuit jusqu'à 50 utilisateurs. Et dans l'absolu pour sécuriser Home Assistant on a même pas besoin du moindre utilisateur.

Home Assistant

Un Add-on est disponible ici et sa mise œuvre est 'une simplicité enfantine mais il y a une petite subtilité. En effet il y a deux façons pour gérer un tunnel :

  • En local et en CLI
  • Depuis le dashboard de Zero Trust

On part du principe que vous avez un compte Cloudflare et qu'un de vos domaines y est géré. Vous avez également activé Zero Trust. A faire avant toute chose.

Dans les deux cas on ajoute ou modifie le fichier de configuration de Home Assistant ainci :

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 172.30.33.0/24

Option 1, gestion en local

On installe l'add-on sur Home Assistant, on choisit un host pour Home Assistant, ha.domaine.com par exemple et on lance l'add-on. Il suffit simplement ensuite d'aller copier dans le log l'url de validation et de la copier dans votre navigateur.

Et ça fonctionne, installation du certificat intermédiaire comprise. On pourra ensuite sécuriser et jouer avec les options, la doc de l'add-on est ici et cette  de Zero Trust . Si vous ne pensez pas utiliser Zero Trust pour autre chose c'est la solution la plus simple.

Option 2, gestion en remote

Vu que je compte utiliser Zero Trust à d'autres fin, c'est l'option que j'ai choisit.

  • Dans la console (Access/Tunnels) je crée un nouveau tunnel que ne configure pas.
  • Je copie le token que je viens reporter dans l'add-on et je lance l'add-on
  • Je vais dans le log et je copie l'url de validation que je colle dans le navigateur afin de finaliser l'installation et valider le certificat. 
  • Dans la gestion du tunnel je vais créer un Public Hots Name qui va correspondre à mon serveur et sera exposé avec le nom de domaine choisit :

Votre Home Assistant est maintenant accessible, ici https://test-ha.canaletto.fr (sans le port).

Aller plus loin...

En premier lieu je vous conseille de définir une policie dans Access/Applications afin que votre serveur ne soit accessible que depuis votre pays et surtout pas depuis des états plein de black hat's ...

Ensuite il faut savoir que vous avez installé sur votre serveur une passerelle VPN qui va vous permettre d'accéder à tout votre réseau local en passant par le client Warp. Pour cela il faut dans la configuration du tunnel déclarer un Private Network.

Ensuite dans les SettingsGeneral on va définir le nom de (Team) :

Dans Settings/Network on va changer le mode des tunnels. De base, dès lors que le client Warp est activé, Zero Trust va faire passer tout ce qui ne ressemble pas à une adresse privée dans ses tuyaux, c-a-d tout votre trafic, probablement à des fins de collecte de donnée... On va donc remplacer le mode Exclude par le mode Include et y déclarer uniquement notre réseau privé. Ainsi seul le trafic tunnelisé transitera par Cloudflare, et comme il est dans un tunnel ce sera théoriquement incognito. Je dis théoriquement car dans cette solution ce n'est pas vous mais Cloudflare qui a les clés... Mais nous sommes dans le cadre d'un service de classe entreprise et les CGU garantissent la confidentialité des données...

Dernier point, déclarer une méthode d'authentification. De base une authentification par code PIN est proposée, vous déclarez un domaine ou une adresse mail et vous revenez un code PIN à 6 chiffres qu'il suffit de rentrer... En option il est possible de configurer un SSO en utilisant une authentification que l'on exploite déjà (Azure AD, Centrify, Facebook, GitHub, Google Workspace, Google, LinkedIn, Okta, OneLogin, Saml, OpenID Connect, etc...). Plus complet, mais ça peut répondre à certains besoins en entreprise.

A partir de la on installe le client et on se connecte avec le nom que l'on a défini plus haut. On teste un RDP, SMB ou SSH sur une IP du réseau privé, et ça marche. Ca veut dire qu'à ce stade tout est ouvert dès lors que l'on a connecté le client, pourquoi pas dans le cadre d'une utilisation personnelle, mais je ne saurait trop vous conseiller de tout interdire et de n'autoriser que ce qui est utile (Gateway/Policies/Network).

Cet outil étant avant tout destiné à une utilisation en entreprise les possibilités sont immenses. Pour autant l'administration n'est pas très compliquée, avec quelques connaissance de base dans la gestion des réseaux.

Echanger

J'ai créé un sujet sur HACF, plus pratique qu'ici pour échanger.

 

VMWare ESXi 7 sur Intel Nuc 9

Afin de faciliter mes bricolages j'ai chez moi un gros (il est imposant) serveur HPE ML350p avec deux CPU Xeon et 128 GO de mémoire. Un peu surdimensionné, mais ça fait très bien le job pour mon home lab, d’autant plus qu’on me l’a donné il y a quelques années. Sauf que ça chauffe le garage et ça consomme beaucoup trop (200 watts sans charge). Autant dire que quand nos gouvernants nous appellent à débrancher le WI-FI ça me fait doucement rigoler dans ma barbe, mais je suis moins hilaire quand je reçoit la facture. Comme quoi l'écologie et la sobriété énergétique passe bien souvent par le porte monnaie. J'envisage des panneaux solaires, mais dans tous les cas, je cherchait une alternative moins énergivore.

J’ai vu pas mal de choses, les HPE MicroServer sont limités à 32 Go de mémoire, il y a des choses chez SuperMicro mais au niveau conso on doit pas être loin d'un HPE DL360gen8 qui sera moins cher en reconditionné.

Et puis je me suis dit qu'il restait l'option NUC. Ca fait un peu jouet quand on l'habitude de vrais serveurs et je trouvais ça un un peu léger coté ram et stockage, moi qui suis un vieil habitué du RAID (pas la maréchaussée, hein). Et puis sur les NUC il y a souvent qu'une seule interface LAN, sauf à passer sur des modèles extrêmes par le cout. Et puis je suis tombé sur le Nuc 9 qui est intéressant car on peut y coller 3 SSD M2, 64 GO de RAM, il dispose de deux ports Ethernet et même deux slots PCI. Ce n'est pas la dernière génération et on le trouve en version i7 à 500 € ce qui est un tarif très acceptable. Tarif auquel il faudra ajouter la RAM et les SSD. (Il y existe en i5 un peu moins cher, et même en i9 ou Xeon, mais bien plus couteux.

Un des intérêts du Nuc 9 est qu'il supporte nativement VMWare ESXi v7u3 et que l'on peut faire du RAID 1 matériel qui sera vu par ESXi. Et surtout coté consommation j'ai relevé de 15 à 50 watts (selon la charge), on est très loin des 200/350 watts du HPE ML 350p !

La liste des courses

J'ai profité des PrimeDays pour faire quelques économies :

Installation

La machine est compacte mais tous les composants s'installent facilement. J'ai installé deux SSD M2 sur la carte principale et on peut éventuellement en ajouter un de plus sous les slots PCI. Et comme je ne vais pas y coller une super carte graphique ces slots pourraient héberger une carte SSD ou réseau 10 GB. Encore que l'on dispose également de deux slots Thunderbolt en USB-C...

Avant de commencer on va désactiver le "secure boot" dans le bios, éventuellement le mettre à jour, et activer le boot USB. Pour le reste on laisse tout par défaut mais on notera pas mal de possibilités, notamment au niveau réseau ou il est possible de rattacher directement du iSCSI au niveau du bios. A tester avec un SAN ou un NAS.

Ensuite la partie est classique. On télécharge ESXi chez VMWare et on crée une clé USB sur laquelle on va booter. Contrairement aux anciennes génération de NUC celui ci est compatible de base, donc aucun besoin d'y injecter des drivers. En quelques minutes et un peu de configuration très basique (IP, etc.) notre serveur est prêt et n'y a plus qu'à s'y connecter. Pour le reste vous connaissez et la migration peut commencer.

Personnellement avant de migrer je préfère installer une nouvelle VM et laisser tourner la chose quelques jours à blanc, ce qui m'a également permis de débrancher un peu moi même.

Migration

Il y a plusieurs façons de migrer des VM d'un hyperviseur à un autre. En datacenter un héberge généralement pas les VM sur des disques locaux mais sur des SAN/NAS en iSCSI ou NFS. Et dans ce cas on ne bouge pas les fichiers des VM, on ne fait que les réimporter d'un hyperviseur à un autre. Tout ça peut aussi se faire avec vCenter, mais vu l'usine je vous déconseille en homelab.

Ici pour passer les VM sur mon nouveau serveur j'aurai pu simplement y déplacer les fichiers manuellement. Mais on peut faire ça plus facilement avec Veeam Quick Migration. Veeam est une solution d'entreprise loin d'être donnée, mais la version gratuite fera parfaitement le travail et vous aidera dans pas mal de taches.

Ajustements

Réseaux

Sur mon ancien ESXi j'avais plusieurs cartes réseau et donc plusieurs réseaux logiques. Avant la migration il faudra les recréer à l'identique, si par exemple on avait appelé le réseau WAN VM Network WAN il faudra que le nouveau ait exactement le même nom sans quoi il faudra éditer la configuration de la VM, supprimer la carte et la recréer. J'en parle d'expérience car je me suis fait avoir.

Version HW

Ceux qui pratiquent ESXi savent que chaque VM à son numéro de version de matériel virtuel et que de cette version dépend la possibilité d'ajuster le bon O/S afin de ne pas avoir de message d'erreur vous disant que le bon O/S n'est pas configuré. Dans la pratique je n'ai jamais vu d'erreurs liée à ça et mon vieil ESXi 5.0 (jamais mis à jour, oui je sais ce n'est pas une bonne pratique) faisait tourner des VM Windows 2019 déclarées en Windows 2008R2 depuis des lustres. Il y a surement un peu de marketing dans cette affaire... Mais on peut ajuster :

  • On crée un snapshot
  • On mets à jour les VMWare Tools (dans l'ordre car si vous mettez à niveau le matériel VM avant d'installer la dernière version de VMware Tools, les paramètres réseau peuvent être réinitialisés dans la machine virtuelle invitée Windows).
  • Et ensuite clic droit sur la VM et mise à niveau et édition de la configuration pour ajuster l'O/S.

Les détails sont ici. On peut revenir en arrière si on devait transporter la VM sur une ancienne version d'ESXi, mais c'est plus compliqué et non supporté officiellement.

Migration Veeam

La migration des VM est très facile avec Veeam mais si on le fait tourner dans une VM à migrer on va forcément avoir une erreur quand elle va se migrer elle même. Pas de panique, sur la cible on restaure le snapshot et on renomme avant de la faire redémarrer.

Il n'y a plus qu'à ajuster le plan de sauvegarde. Les anciennes VM apparaissent en VM_Migrated, on les supprime et on ajoute celles qui correspondent au nouvel hyperviseur.

Conclusion

Ca me fait bizarre d'abandonner mon vieux gros HPE ! Pour autant je n'ai pas l'impression de perdre en puissance. Certes je serais plus limité en mémoire, mais je n'ai pas le sentiment de manque de CPU et surtout il y a une très grande différence entre les disques mécaniques, qui étaient pourtant es SAS 1.5 K et mes nouveaux SSD M2 très véloces. Et ça change vraiment tout ! Pour l'instant il n'a même pas rejoint le garage ou il fait très chaud, il est sur mon bureau et pas un bruit avec pourtant pas moins de 20 VM actives....

Et pour le fun je vais vous en narrer une bien bonne...

Quand on crée un serveur ESXi on installe une partition de boot que l'on installait jadis sur une carte SD prévue à cet effet sur les vrais serveurs. Solution maintenant abandonnée au profit d'une petite partition dédiée, 120 GO par défaut mais que l'on peut réduire lors de l'installation. Bref, sur mon ancien HPE je ne devais pas avoir de carte SD sous la main et sans faire gaffe je lui avait laissé 800 GO de partition système, ce qui sur 4 disques de 600 GO en RAID 5 me laissait peu de place pour les VM.... Flemme de refaire tout ça je m'étais contenté il y a plus de 10 ans de rajouter deux disques de 2 TO en RAID 1....

Me voici donc avec un serveur HPE ML350p Gen 8 (2 x Xeon12 CPUs x Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz), de la RAM et plein de disques à céder.

EDIT'S

10/08/2022 : J'ai fait un autre test pour mon fils en ajoutant à cette machine une carte graphique 3060 TI de chez Asus afin d'en faire une machine de jeu pour lui qui est fan de Flight Simulator, jeu connu pour sa grande exigence tant en CPU qu'en GPU. Le résultat est parfait !

Sources

 

HEVC mon amour...

Comme chacun le sait les vidéos de vacances ça fini par prendre une place folle. Mais nous aimons tous conserver tous ce souvenirs pour les partager avec nos enfants et nos amis. Jadis sauvegardées sous la forme de fichiers .AVI, format lancé par Microsoft mais pas très optimisé et obsolète pour de la HD. Aujourd'hui c'est plus souvent le format AVC (H.264) qui est utilisé et que l'on retrouve généralement dans des fichiers .MKV, une sorte de container qui intègre l'audio, la vidéo et les sous-titres dans un seul fichier. Et ce container peut également contenir des vidéos différemment encodées, comme le HEVC (H.265) qui nous intéresse tout particulièrement. Pourquoi cet engouement, simplement parce que l'on va pouvoir facilement diviser par trois la taille des fichiers sans perte de qualité visible et tout en conservant les pistes audio et les sous titres contenus dans le fichier d'origine. Vous l'aurez compris, ceci devient particulièrement intéressant si vous filmez en 4K... (ici par exemple pour en savoir plus).

Comment s'y prendre ?

En matière de vidéo on encode un fichier brut pour réduire sa taille et le rendre transportable et lisible, ensuite on le décode, généralement sur un lecteur, qu'il soit sur un ordinateur, un lecteur de salon (Box, Android TV, Apple TV), un téléviseur moderne qui intègre ces fonctions ou encore un smartphone. Il faut donc s'assurer que le format HEVC soit disponible sur ces appareils, c'est généralement le cas et dans le cas contraire il faudra passer par un serveur, comme Plex ou Emby par exemple, qui assureront le transcodage à la volée pour adapter le flux au lecteur, mais également l'adapter au débit disponible. Bref, la 4K avec un modem 56K ça ne passera pas, et ne ressortez pas votre lecteur de DivX des années 90, ça ne fonctionnera pas non plus.

Si on assemble Décoder et Encoder on obtient Transcoder et c'est ce que nous allons faire pour convertir nos vidéo AVC en vidéos HEVC. Pour y parvenir on trouve comme toujours des logiciels commerciaux, sans intérêt et que je vous conseille vivement d'éviter, et de l'Open Source ou juste Free.

Je ne vais pas faire un tour complet de l'offre mais juste vous parler de mon expérience et de mon parcours. La majorité des solutions sont basées sur FFmpeg ou Handbrake.

  • Emby propose une option en un deux clics. C'est pratique, mais il n'y a pas de réglages fins et on perd les sous titres (il y a toutefois possibilité de les extraire à la volée sur un fichier externe). C'est long si on a pas de décodage matériel sur le serveur comme toutes les solutions logicielles.
  • FFmpeg Batch Converter est une solution intéressante, elle permet de remplacer directement les fichiers convertis, mais son maniement est assez complexe si l'on sort des préréglages. Je ne l'ai pas trouvé très performant en mode matériel.
  • Unmanic semble très bien, tout comme Tdar qui est solution distribuée que j'ai trouvé bluffante sur le papier, mais je n'ai pas de carte graphique là ou je pourrais monter ces dockers. Je n'ai donc pour l'instant pas testé.
  • HandBrake s'est par contre rapidement imposé. Son interface est relativement claire et intuitive et les performances sont au rendez-vous, notamment avec une carte graphique Intel Iris Xe que l'on trouve dans les laptop récents (2 minutes pour convertir un fichier de 4 Go). Et je suppose que l'on peut faire bien mieux avec une bonne carte graphique du genre Nvidia Quadro ou RTX. Je vais donc continuer avec HandBrake.

Mais, car il y a un mais, HandBracke ne sait pas de base exclure des fichiers, ni parcourir une arborescence récursive ou encore simplement remplacer les fichiers d'origine par les fichiers fois convertis. Afin de contourner ces restrictions il existe HandBrake CLI que l'on peut scripter. J'ai trouvé quelques scripts qui me donnaient pas vraiment envie, puis je suis tombé sur HBBatchBeast qui est un GUI pour HandBrake CLI et FFmpeg/FFprobe (Windows, macOS et Linux (+Docker image). De prime abord ça ne donne vraiment pas envie, c'est très moche et son auteur n'est assurément pas un fin designer. Mais j'ai toutefois installé et ça fait le job plutôt bien.

Je vais donc m'en servir en me basant sur les presets que j'ai adaptés à mon usage. En gros je conserve tous paramètres de la vidéo d'origine, ses pistes audio avec l'encodage d'origine et également les sous-titres.

Sous HandBrake je vais affiner ces réglages en partant sur le préréglage matériel H.265 QSV 1080p, je n'ai pas touché aux réglages proposés pour la vidéo, au niveau de l'audio je choisit d'ajouter toutes les langues proposées et le mode Auto Passthru au niveau codec et je fais de même pour les sous titres. Pour faire simple je choisit de conserver tous les caractéristiques du fichier d'origine. En vrai j'ai un peu galéré et trouvé un peu d'aide ici.

A partir de là on fait quelques tests avec HandBrake et on teste la lecture sur plusieurs appareils afin de voir si le résultat est à la hauteur, et notamment sur des appareils exigeants, un téléviseur 4K de grande taille ou un projecteur...

Et quand on est content du résultat on exporte le préréglage dans un fichier .json (vous trouverez, je ne vais pas vous tenir la main).

{
  "PresetList": [
    {
      "AlignAVStart": false,
      "AudioCopyMask": [
        "copy:aac",
        "copy:ac3",
        "copy:dtshd",
        "copy:dts",
        "copy:truehd",
        "copy:eac3"
      ],
      "AudioEncoderFallback": "none",
      "AudioLanguageList": [
        "any"
      ],
      "AudioList": [
        {
          "AudioBitrate": 160,
          "AudioCompressionLevel": 0,
          "AudioEncoder": "copy",
          "AudioMixdown": "stereo",
          "AudioNormalizeMixLevel": false,
          "AudioSamplerate": "auto",
          "AudioTrackQualityEnable": false,
          "AudioTrackQuality": -1,
          "AudioTrackGainSlider": 0,
          "AudioTrackDRCSlider": 0
        }
      ],
      "AudioSecondaryEncoderMode": true,
      "AudioTrackSelectionBehavior": "all",
      "ChapterMarkers": true,
      "ChildrenArray": [],
      "Default": true,
      "FileFormat": "av_mkv",
      "Folder": false,
      "FolderOpen": false,
      "Mp4HttpOptimize": false,
      "Mp4iPodCompatible": false,
      "PictureAutoCrop": false,
      "PictureBottomCrop": 0,
      "PictureLeftCrop": 0,
      "PictureRightCrop": 0,
      "PictureTopCrop": 0,
      "PictureDARWidth": 0,
      "PictureDeblockPreset": "off",
      "PictureDeblockTune": "medium",
      "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8",
      "PictureDeinterlaceFilter": "off",
      "PictureCombDetectPreset": "off",
      "PictureCombDetectCustom": "",
      "PictureDenoiseCustom": "",
      "PictureDenoiseFilter": "off",
      "PictureDenoisePreset": "medium",
      "PictureDenoiseTune": "none",
      "PictureSharpenCustom": "",
      "PictureSharpenFilter": "off",
      "PictureSharpenPreset": "medium",
      "PictureSharpenTune": "none",
      "PictureDetelecine": "off",
      "PictureDetelecineCustom": "",
      "PictureColorspacePreset": "off",
      "PictureColorspaceCustom": "",
      "PictureChromaSmoothPreset": "off",
      "PictureChromaSmoothTune": "none",
      "PictureChromaSmoothCustom": "",
      "PictureItuPAR": false,
      "PictureKeepRatio": true,
      "PictureLooseCrop": false,
      "PicturePAR": "auto",
      "PicturePARWidth": 0,
      "PicturePARHeight": 0,
      "PictureWidth": 1920,
      "PictureHeight": 1080,
      "PictureUseMaximumSize": true,
      "PictureAllowUpscaling": false,
      "PictureForceHeight": 0,
      "PictureForceWidth": 0,
      "PicturePadMode": "none",
      "PicturePadTop": 0,
      "PicturePadBottom": 0,
      "PicturePadLeft": 0,
      "PicturePadRight": 0,
      "PresetName": "Convert to HEVC 3",
      "Type": 1,
      "SubtitleAddCC": false,
      "SubtitleAddForeignAudioSearch": false,
      "SubtitleAddForeignAudioSubtitle": false,
      "SubtitleBurnBehavior": "none",
      "SubtitleBurnBDSub": false,
      "SubtitleBurnDVDSub": false,
      "SubtitleLanguageList": [
        "any"
      ],
      "SubtitleTrackSelectionBehavior": "all",
      "VideoAvgBitrate": 0,
      "VideoColorMatrixCode": 0,
      "VideoEncoder": "qsv_h265",
      "VideoFramerateMode": "vfr",
      "VideoGrayScale": false,
      "VideoScaler": "swscale",
      "VideoPreset": "speed",
      "VideoTune": "",
      "VideoProfile": "auto",
      "VideoLevel": "auto",
      "VideoOptionExtra": "",
      "VideoQualityType": 2,
      "VideoQualitySlider": 22,
      "VideoQSVDecode": true,
      "VideoQSVAsyncDepth": 0,
      "VideoTwoPass": false,
      "VideoTurboTwoPass": false,
      "x264UseAdvancedOptions": false,
      "PresetDisabled": false,
      "MetadataPassthrough": true
    }
  ],
  "VersionMajor": 47,
  "VersionMicro": 0,
  "VersionMinor": 0
}

A ce stade on passe sur HBBatchBeast. Oui je sais, c'est moche et déroutant, mais promis ça ne fait pas mal. Voici les réglages à renseigner à minima :

  • Source folders : la racine de l'arborescence de fichiers à convertir. Tout en haut et facilement adaptable.
  • Destination folders : la destination des conversion. On verra plus loin qu'ils peuvent êtres déplacés pour remplacer les fichiers source.
  • Choisir si on travaille avec HandBrake ou FFmpeg. On coche le premier.

Ensuite on peut choisir de travailler avec les préréglages standard de HandBarke ou de renseigner sous cette forme notre réglage personnalisé précédemment exporté :

--preset-import-file "C:\Users\Lionel.Canaletto\Documents\HBBatchBeast\HEVC3.json" -Z "Convert to HEVC 3"

On continue avec :

  • Le container : .MKV en ce qui nous concerne
  • On coche "advanced"
  • On peut ensuite exclure certains types de fichiers de part leur nom (.jpg, etc...), leur taille ou d'autres options...
  • On choisit ensuite si on veut remplacer les fichiers d'origine.

Vous verrez qu'il existe une multitude d'options qui vont permettre d'optimiser le processus, notamment l'utilisation d'un temporaire répertoire local si on travaille sur des disques distants.

Encore une fois c'est moche, mais ce qui compte c'est que ça fonctionne très bien, rapide (9.45" pour 8 fichiers de 1 Mo sur un disque distant via Internet en SMB3), et que c'est adapté à mon besoin. Et merci à ceux qui m'ont aidé ou donné des pistes.

Sources

 

Bibliothèque Sonos

L'écosystème Sonos a bien évolué au fil des années, avec du positif comme du négatif ( 1 | 2 ), mais tout en intégrant une multitude de services musicaux, Sonos a toujours délaissé, le nombre de fichiers musicaux locaux explorables. En l'état cette limite est toujours fixée à 65.000 fichiers alors même que l'évolution Sonos 2 permettrait certainement de s'en affranchir.

J'ai longtemps utilisé Subsonic (ou ses forks) qui permet de contourner cette limite. Mais d'une part Subsonic est payant, et surtout n'est plus maintenu.

Aujourd'hui il existe un nouveau fork open source, Navidrome, qui est compatible avec les clients Subsonic, mais hélas ne propose pas de compatibilité Sonos. Fort heureusement un autre développeur de génie a eu la bonne idée de mettre à disposition une interface, Bonob, via les API Sonos, qui va permettre de faire le lien entre Sonos et les fors de Subsonic, en l'occurrence ici Navidrome.

Si ces programmes sont installables sous Linux, Windows ou MacOS, je vais choisir la facilité en passant par Docker. Pour y parvenir je commence par installer une petite VM Ubuntu Serveur avec Docker installé, et comme mes fichiers musicaux sont sur mon Nas je vais le lier en créant un volume NFS.

On commence par installer les paquets NFS :

administrator@vm:~# sudo apt install nfs-common

Ensuite on crée le répertoire idoine et on le lie au Nas :

administrator@vm:~# sudo mkdir -pv /nas/Music
administrator@vm:~# sudo mount 192.168.0.241:/volume1/Music /nas/music

Et pour terminer cette partie on fige le montage NFS en éditant le fichier /etc/fstab et en y ajoutant une ligne :

administrator@vm:~# sudo nano /etc/fstab
192.168.0.22:/volume1/Music /nas/music nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

Navidrome

On commence par créer un répertoire de travail ou sera installé le cache :

administrator@vm:~# sudo mkdir -pv /navidrome/data/

On installe le docker Navidrome avec la commande suivante : (voir les version Docker Compose à fin).

sudo docker run -d \
  --name navidrome \
  --restart=unless-stopped \
  --user $(id -u):$(id -g) \
  -v /nas/music:/music \
  -v /data/navidrome:/data \
  -p 4533:4533 \
  -e ND_LOGLEVEL=info \
  deluan/navidrome:latest

Il est possible de ne pas indiquer le user à des fin de test et debug, mais je ne le conseille pas de fonctionner en root. On retrouve ici nos deux répertoires, /data/navidrome pour le cache et /nas/music pour les fichiers musicaux qui pointe sur le NAS. Il y a pas mal d'autres options plus ou moins intéressantes que l'on pourra ajouter ici ou dans un fichier de configuration.

Il ne reste plus qu'à se connecter sur http://ip_serveur:4533 ... Il est bien sur possible de passer en SSL avec un reverse proxy (un petit Docker de plus...), mais également de créer des comptes secondaire pour d'autres utilisateurs qui pourront également télécharger fichiers ou albums.

Bonob

C'est ici que ça devient intéressant pour Sonos. Et ça se passe également sous Docker avec à minima :

sudo docker run -d \
  --name bonob \
  --restart=unless-stopped \
  -e BNB_PORT=4534 \
  -e BNB_URL=http://192.168.0.33:4534 \
  -e BNB_SONOS_SERVICE_NAME=Canaletto \
  -e BNB_SONOS_SEED_HOST=192.168.0.57 \
  -e BNB_SONOS_AUTO_REGISTER=true \
  -e BNB_SONOS_DEVICE_DISCOVERY=true \
  -e BNB_SUBSONIC_URL=http://172.17.0.2:4533 \
  -p 4534:4534 \
  simojenki/bonob

Il y a quelques options qui méritent explication :

  • BNB_URL= l'url du service Bonob afin de le faire savoir à Sonos
  • BNB_SONOS_SERVICE_NAME= Le nom du service qui apparaitra dans Sonos

  • BNB_SONOS_SEED_HOST= L'IP (fixe) d'un équipement Sonos permanent

  • BNB_SUBSONIC_URL= L'url interne à docker de Navidrome

Pour le reste je vous renvoi au GitHub afin d'adapter votre configuration.

A ce stade il suffit d'aller dans l'interface Sonos et d'ajouter le service que l'on viens de créer

Et de s'authentifier avec le compte précédemment créé dans Navidrome et de profiter de votre bibliothèque (MP3, FLAC, etc). Navidrome va indexer la bibliothèque et servir de cache. Je trouve les temps de recherche excellents au regard des 192 217 fichiers de ma bibliothèque répartis dans 15 753 répertoires. Il est possible dans Navidrome de créer des listes de lecture et des favoris que l'on retrouvera sous Sonos, par contre il n'est pas possible d'explorer l'arborescence des fichiers comme le permet Sonos dans son service de base.

Selon l'échantillonnage et le transcodage souhaité il faudra peut être modifier la configuration de Navi drome pour s'y adapter.

EDIT 26/08/2023

Suite à une mise à jour j'ai refait en Docker Compose :

version: "3"
services:
  navidrome:
    container_name: c-navidrome
    image: deluan/navidrome:latest
    # user: 1000:1000 # should be owner of volumes
    ports:
      - "4533:4533"
    restart: unless-stopped
    environment:
      # Optional: put your config options customization here. Examples:
      ND_SCANSCHEDULE: 1h
      ND_LOGLEVEL: info  
      ND_SESSIONTIMEOUT: 24h
      ND_BASEURL: ""
    volumes:
      - "/data/navidrome:/data"
      - "/nas/music:/music:ro"
  bonob:
    container_name: c-bonob
    image: simojenki/bonob:latest
    user: 1000:1000 # should be owner of volumes
    ports:
      - "4534:4534"
    restart: unless-stopped
    environment:
      BNB_PORT: 4534
      # ip address of your machine running bonob
      BNB_URL: http://192.168.10.33:4534  
      BNB_SECRET: password
      BNB_SONOS_AUTO_REGISTER: "true"
      BNB_SONOS_DEVICE_DISCOVERY: "true"
      BNB_SONOS_SERVICE_ID: 246
      BNB_SONOS_SERVICE_NAME: "Canaletto Music"
      # ip address of one of your sonos devices
      BNB_SONOS_SEED_HOST: 192.168.10.115
      BNB_SUBSONIC_URL: http://192.168.10.33:4533

EDIT 27/08/2023

On peut également choisi d'installer tout ça dans un VPS. Ca se complique un peu mais rien d'insurmontable. Par contre il faudra ensuite configurer les service à la main sur Sonos. La configuration comporte quelques différences, notamment au niveau de la reconnaissance automatique des équipements Sonos et de l'url externe. A noter que je fais pointer Bonob vers l'url Docker interne de Navidrome.

version: "3"
services:
  navidrome:
    container_name: c-navidrome
    image: deluan/navidrome:latest
    ports:
      - "4533:4533"
    restart: unless-stopped
    environment:
      ND_SCANSCHEDULE: 1h
      ND_LOGLEVEL: info  
      ND_SESSIONTIMEOUT: 24h
      ND_BASEURL: ""
      ND_SPOTIFY_ID: "c9d4gsdfghsfdgdfsfhsdfghdsfghsh1"
      ND_SPOTIFY_SECRET: "611sdfhgdfshshsghsfgh075f"
      ND_DEFAULTLANGUAGE: "fr"
    volumes:
      - "/data/navidrome:/data"
      - "/nfs/music:/music:ro"
  bonob:
    container_name: c-bonob
    image: simojenki/bonob:latest
    user: 1000:1000 # should be owner of volumes
    ports:
      - "4534:4534"
    restart: unless-stopped
    environment:
      BNB_PORT: 4534
      BNB_URL: https://bonob.domain.tls
      BNB_SECRET: wrtl
      BNB_SONOS_AUTO_REGISTER: "false"
      BNB_SONOS_DEVICE_DISCOVERY: "false"
      BNB_SONOS_SERVICE_ID: 246
      BNB_SONOS_SERVICE_NAME: "Online Music"
      BNB_SUBSONIC_URL: http://172.19.0.3:4533
      BNB_ICON_FOREGROUND_COLOR: "#1db954"
      BNB_ICON_BACKGROUND_COLOR: "#121212"
      TZ: "Europe/Paris"

Je sécurise le tout avec HAProxy sous pfsense (SSL). On teste les deux URL :

  • https://music.domain.tld : Ici on a l'interface de Navidrome et la première chose à faire est de créer un compte d'administration et de vérifier que tout fonctionne.
  • https://bonob.domain.tld : Ici on obtient l'interface de Bonob ou on va trouver les information pour configurer notre système Sonos.

Conseil : au niveau du firewall/reverse proxy vous pouvez appliquer rune restriction par IP afin de ne pas laisser tt ça ouvert aux quatre vents...

Une fois ceci configuré et fonctionnel, on passe à sonos en commençant par repérer l'adresse IP d'un des équipements et on lance :

http://192.168.210.115:1400/customsd.htm

Et là on tombe sur une archaïque interface ou l'on va saisir les informations recueillies sur la page https://bonob.domain.tld :

Il suffit ensuite s'ajoute le service dans l'interface Sonos (je l'ai fait sous Windows, mais c'est surement possible depuis un mobile) et de se connecter avec l'identifiant Navidrome pour voir apparaitre la bibliothèque Navidrome sous Sonos :

Vous trouvez ça trop compliqué, je comprends. Vous pouvez toujours vous abonner à un service de musique en ligne, c'est ce que je fais avec Spotify et Quobuz, mais je voulais également profiter de quelques morceaux introuvables que j'ai convertit moi même ! Une autre possibilité est de passer par un serveur Plex, mais l'interface est bien plus lente et je trouve pratique Navidrome pour construire des playlist...

EDIT 27/08/2023

J'ai essayé de faire passer Bonob via Cloudflared dans un container Docker. Tout se passe bien, sauf qu'il qu'au final il est impossible de lire sur Sonos. A suivre.

Freebox / Unifi UDM, DHCP & IPV6

De base l'UDM / UDM Pro en mode bridge sur une Freebox fonctionne en IPV4. Ca fait le job, mais parfois on peut avoir besoin d'un adressage en IPV6. J'ai lu pas mal de choses sur ce sujet, plus ou moins précises, notamment sur ce fil et sur ce site, j'ai eu quelques difficultés de mise en œuvre et je vais essayer de faire une synthèse simple.

EDIT 15/03/2024 : Lors de mon passage de la Freebox Delta à Ultra je me suis aperçu que l'on peut maintenant sur l'UDM utiliser SLAAC sur la config coté UDM. Cela simplifie grandement l'utilisation de l'IPv6 sur le LAN et évite tout ce qui suit, dès lors que l'on a pas besoin de fixer les IP (fonctionne très bien pour le player POP et OQEE).

Pour faire simple (Unifi Network 8.1.113)

La configuration IPv6 sur INTERNET/FREE :

La configuration IPv6 sur le LAN :

EDIT 02/04/2024 : Problème dans un réseau ActiveDirectory ou le routage site to site n'est pas effectif en IPv6 et ou les serveurs AD ne répondent pas en IPv6. Sur les clients le DNS IPv6 prends le dessus, et donc on n'a plus la résolution AD. Il est possible de forcer les clients à utiliser un DNS spécifique pour le domaine AD. Mais ce que la doc MS ne dit pas, c'est qu'il faut ajouter un point avant le nom de domaine pour que cela fonctionne :

Add-DnsClientNrptRule -Namespace ".domain.tld" -NameServers "192.168.x.x"

Ainsi la résolution du domaine AD passera par le DNS local et tout le reste par le DNS défini sur l'UDM. On doit pouvoir faire ça avec les policy du serveur AD.

La version plus complexe avec plusieurs réseaux en délégation

La première chose à faire est de récupérer l'IPV6 du port WAN actif de l'UDM en s'y connectant en SSH avec la commande ip addr | grep "global dynamic" -B2 -A3 :

# ip addr | grep "global dynamic" -B2 -A3
3: eth9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb state UP group default qlen 10000
    link/ether 74:ac:b9:14:2d:e2 brd ff:ff:ff:ff:ff:ff
    inet 86.66.125.69/24 scope global dynamic eth9
       valid_lft 602510sec preferred_lft 602510sec
    inet6 fe80::76ec:b9xx:fe15:2df2/64 scope link
       valid_lft forever preferred_lft forever

L'IPV6 de notre port WAN est donc : fe80::76ec:b9xx:fe15:2df2/64

On va ensuite sur la page de configuration de la Freebox, dans mon cas une Delta S connectée à l'UDM avec un câble SFP+ dans l'espoir (vain) d'obtenir les 8 Gbit/s promis en 10G EPON. Donc sur http://mafreebox.freebox.fr (Paramètres de la Freebox / Configuration IPV6) et on reporte cette adresse dans le second Next Hop (et pas le premier hein !) afin de déléguer un préfixe. Et on note le préfixe associé.

On configure le port WAN de l'UDM en client DHCPv6 avec une taille de délégation de 64 :

Maintenant on va aller configurer le LAN de l'UDM. On reporte le préfixe précédemment noté au niveau IPV6 Gateway/Subnet et si on souhaite activer le serveur DHCP on défini une IP de départ et une IP de fin. Je ne l'ai pas fait car je souhaitait utiliser le DHCP de mon contrôleur de domaine Windows (pourquoi faire simple... mais idée abandonnée.). Pensez à cocher l'option RA.

A partir de là en SSH sur l'UDM on doit pouvoir pinguer en IPV6 :

# ping6 www.ibm.com
PING www.ibm.com (2a02:26f0:2b00:383::1e89): 56 data bytes
64 bytes from 2a02:26f0:2b00:383::1e89: seq=0 ttl=52 time=11.222 ms
64 bytes from 2a02:26f0:2b00:383::1e89: seq=1 ttl=52 time=11.307 ms
64 bytes from 2a02:26f0:2b00:383::1e89: seq=2 ttl=52 time=11.511 ms

Si on a pas configuré le serveur DHCP, on peut également rapidement configurer un client Windows en statique :

PS C:\Users\Lionel.SUPTEL> ping www.google.com -6
Pinging www.google.com [2a00:1450:4007:819::2004] with 32 bytes of data:
Reply from 2a00:1450:4007:819::2004: time=11ms
Reply from 2a00:1450:4007:819::2004: time=11ms
Reply from 2a00:1450:4007:819::2004: time=11ms
Reply from 2a00:1450:4007:819::2004: time=12ms

DHCP et résilience

Il me reste à configurer le serveur DHCP v6 sous Windows Serveur. Enfin, là se pose une vrai question sur les avantages et inconvénients. Actuellement j'ai un serveur Windows (VM dans un ESXi) dans une infrastructure Active Directory répartie sur plusieurs sites. Donc ça se justifie, et c'est même obligatoire au niveau du DNS.

Par contre, imaginons que demain je ne soit plus là ou dans l'incapacité de maintenir tout ça (infra IP et IoT). Il faut que l'accès internet soit résilient et puisse se passer du host ESXi . Mon idée est donc de basculer le DHCP sur l'UDM, de faire pointer les deux premiers DNS vers des serveurs AD et les deux suivants vers des DNS publics.

Mais pour cela il faut que le DHCP de l'UDM fasse aussi bien que celui de Windows. Et là ce n'est pas gagné. La lacune principale est qu'il n'y a rient pour facilement lister les baux. Sérieux ! Un jour surement dans une nouvelle interface encore plus design. A faire du beau ils en oublient souvent le fonctionnel chez Ubiquiti.

Par contre sur le DHCP WIndows j'utilise l'option 121 (Classless Static Route Option, RFC3442) qui se configure très facilement sur Windows. Sur l'UDM c'est un peu plus compliqué (mais pas plus que sur OpenSense ou Mikrotik). Heureusement il y a ici un calculateur qui va nous permettre de créer la chaine hexa que l'on va va pouvoir entrer dans les options personnalisées dans un champ texte des paramètres DHCP de l'UDM. Pourquoi faire simple !

Bien sur il est impossible d'importer les réservations DHCP de Windows vers l'UDM. Il va donc falloir se les faire à la main en cliquant sur chaque objet. Dans cette interface on peut également figer l'AP utilisé.

Il est intéressant de noter la possibilité d'affecter une IP réservée en dehors de la plage déclarée dans le DHCP. Et ça c'est intéressant. Dans un premier temps je crée un DHCP sur l'UDM avec uniquement une IP disponible et je laisse le DHCP Windows actif qui continuera à affecter les baux. Je fige les IP sur l'UDM et quand c'est terminé je peux arrêter le DHCP Windows et élargir la plage sur l'UDM, et accessoirement faire marche arrière au besoin.

Par contre coté IPv6 il n'est pas possible à ce jour de figer les IP. Ca viendra, peut-être...

Sources

 

 

Synology et secours à chaud

J'utilise plusieurs gros NAS Synology dont certains dans un data center. De fait pas facilement accessibles, même si chez Scaleway il existe un support de proximité ou l'on peut demander à deux heures du matin au technicien d'astreinte d'aller redémarrer une machine, débrancher un câble ou sortir un disque...

En pleine nuit je me suis retrouvé avec un RS2414RP+ injoignable. Moment d'angoisse assuré. Je demande donc au technicien de le redémarrer. Et s'il a bien démarré, c'est avec un disque en panne. C'est probablement ce redémarrage sauvage qui a provoqué cette panne sur un disque qui devait déjà être fatigué. Quant à savoir pourquoi ce NAS qui tourne depuis des années s'est planté, mystère, les logs étant peu loquaces

Sur ce NAS il y a 12 disques en RAID SHR répartis dans deux groupes de stockage. Chaque groupe utilise 5 disques (4 + 1 en parité) et sur l'ensemble je dispose de 2 disques de secours à chaud (hotspare).

Je pensais naïvement qu'en cas de panne, un des disques configurés en secours à chaud allait prendre automatiquement le relais comme cela se fait sur certains serveurs. Mais il n'en était rien. J'ai alors pensé que ce relais se ferait quand la longue vérification des volumes serait terminée, mais niet.

Le stress montant j'ai alors commencé à fouiller le net sans pour autant trouver l'information idoine. En fait la seule information trouvée étant l'explication d'un utilisateur à qui le support Synology aurait répondu que pour qu'un disque de secours prenne le relais, il faut retirer physiquement le disque du NAS. Peu pratique à distance, même si j'ai pensé un temps demander au technicien d'astreinte de le faire pour moi.

En parcourant les menus j'ai remarqué que l'on pouvait désactiver un disque et au fond d'un forum un utilisateur explique que c'est la procédure pour retirer un disque proprement. Je me suis donc dit que si le disque était désactivé logiquement, le disque de secours devrait prendre le relais. J'ai donc tenté, et c'est visiblement ce qu'il convient de faire car un de mes disques de secours a alors été affecté automatiquement à mon groupe de stockage et la reconstruction est en cours.

Synology a très certainement de bonnes raisons de faire ainsi, mais je trouve leur documentation un peu légère sur ce point et quelques lignes d'explications plus claires m'auraient permises de gagner un peu de temps et de moins stresser. Avoir le choix entre cette façon d efaire et un mode automatique serait bien sur souhaitable ! J'espère donc que ces quelques lignes en aideront certains.

 

Yealink, Teams Phone

Cet article va surprendre ceux qui me connaissent car je n'ai jamais été un fan de Teams. Et pour deux raisons, d'une part Microsoft a profité de la pandémie pour lancer un produit à l'arrache, et si maintenant Teams est utilisable, ça n'a pas toujours été le cas. D'autre part Microsoft en offrant Teams sans surcout dans le cadre d'une offre groupée Microsoft 365, anéantit toute forme de concurrence possible. Ce n'est pas sain pour le marché et il serait temps que les autorités de régulation se penchent sur le cas Microsoft. Ce coup de gueule étant posé, il n'en reste pas moins que Teams est devenu une évidence quasi incontournable, au point qu'aujourd'hui il n'est pas rare d'entendre l'expression "On se fait un Teams" comme jadis "On se fait un Skype", ou "On se fait un Facetime" pour les paumés de Cupertino...

C'est quoi Teams ?

Je serait réducteur en disant que ce n'est jamais que la version moderne (et moins fun) de MSN Messenger (voire des BBS ou ICQ pour les plus anciens). Donc du tchat et de la visio en groupe ou en one to one agrémenté de plusieurs fonctionnalités autour des fichiers plus ou moins utiles et utilisées. Dans la pratique Teams c'est surtout des réunions de groupe en visio, et ça fonctionne maintenant très bien. C'est ici qu'ont échoué les technologies du pharamineux rachat de Skype. Quant à la concurrence qui rame face à ce rouleau compresseur, c'est Slack, Zoom ou encore Meet chez Google.

Si Teams s'utilise naturellement sur un ordinateur personnel ou un smartphone, ce qui va m'intéresser ici c'est de l'utiliser sur un poste d'entreprise. De base Teams sait faire de la téléphonie entre utilisateurs Teams et Microsoft vend a prix d'or des options qui permettent de communiquer avec le réseau public. Ces options ne sont pas viables en terme de tarif quand on sait que l'équivalent en SIP coutera moins de 5 € / mois, par exemple chez OVH. Et c'est ici qu'intervient les postes Yealink qui savent fonctionner en mode hybride et ainsi supporter un compte Teams et plusieurs lignes SIP. Et un poste d'entreprise permet également d'accéder à toutes ces technologies pour ceux qui sont habitués à tenir un combiné en main, qui a dit que les habitudes ont la vie dure ?

Grand écran

Ce poste dispose d'un écran confortable et les deux modes évoluent dans deux vases clos sans aucune interaction, si ce n'est de passer de l'un à l'autre. On aurait pu imaginer que le SIP profite des contacts qui remontent dans Teams, mais non, le SIP ne semble être présent que pour assurer ne transition en douceur vers la téléphonie Teams.

La partie Team est très simple à configurer, il suffit de saisir une URL sur son PC pour que la configuration se fasse automatiquement. Ensuite on dispose de toutes les fonctionnalités habituelles, mais en dehors de la téléphonie on se rabattra sur le PC car si partager un écran est possible sur ce téléphone, ça teste petit. Quant à la visio il faudra un modèle plus haut de gamme intégrant une caméra. Il y a bien un port USB, mais il ne servira qu'à connecter un micro / casque de la marque, pas une webcam...

Pauvreté des fonctionnalités SIP

La partie SIP est assez pauvre en fonctionnalités si ce n'est de gérer 16 lignes qui fonctionnent très bien avec par exemple des comptes OVH ou Keyyo. Et d'ailleurs l'écran SIP avec son look à la Windows XP semble issu du siècle dernier et contraste avec l'écran Teams.

Ici pas de bouton d'accès direct, pas d'interactions possibles via des URL comme cela est possible chez Fanvil ou il est possible d'activer / programmer le DND via une une URL, d'ailleurs ici je n'ai même pas trouvé la fonction DND... Et la seule solution que j'ai trouvée pour que ce poste ne sonne pas la nuit est de programmer via Home Assistant le down du port POE sur le switch... Il n'y a pas non plus la possibilité de personnaliser la sonnerie, et donc encore mois d'avoir des sonneries différentes en fonction des correspondants (dispo sur le moindre mobile Android), pas plus que d'avoir une sonnerie différentes en Teams ou SIP. Ce téléphone tourne sous Android, mais cet Android est inaccessible, ne comptez donc pas en profiter et on se contrefout donc qu'il tourne sous Android ou un OS propriétaire...

Conclusion

Ce poste, qui existe également en version Zoom ainsi que dans d'autres versions plus ou moins évoluées, pourra convenir dans certaines situation, notamment pour des managers à l'ancienne... C'est cher (250 €) mais tout en restant dans la gamme de prix des postes d'entreprise (allez donc voir la gamme de prix chez Cisco...).

Cela nous démontre également comment la téléphonie est en train d'évoluer, avant il y avait Alcatel et France Télécom, puis Cisco s'es imposé dans les grands groupes, exit Alcatel ou Matra, et demain ce sont les GAFAM's qui prendrons le pas sur les opérateurs, exit Orange...

 

Redirection de port sous Linux : 2/2

Dans la partie précédente, en bon béotien, j'ai exploré pas mal de techniques de redirection de port, mais j'aurais du commencer par l'exploitation de ce qui est depuis un certain temps de base sans Linux, à savoir IPTables.

Pour cette manipulation on va utiliser un routeur Ubiquiti ER-X avec la dernière version de EdgeOS (2.0.9-hotfix.2). Et sur ce routeur on va commencer par y installer Wireguard (pour changer un peu, mais Zerotier ou les VPN disponibles de base auraient pu faire l'affaire).

On va se rendre compte que la philosophie de WireGuard est bien différente de Zerotier (ou même de TailScale). Ici il faut tout borner, c'est la version barbus et les ACL ne se gèrent pas sur une console d'admin, il faudra pour ça utiliser le firewall du point d'entrée, ce qui à mon gout est bien moins souple et rend impossible certaines restrictions plus granulaires au niveau de l'utilisateur client...

Je ne suis pas expert, mais contrairement à Zerotier ou le client génère un ID propre à la machine, sous WireGuard un simple copié collé suffit à exporter et utiliser la configuration ailleurs... On peut certes utiliser une clé supplémentaire (PresharedKey), mais ça ne changera rien. Un mot de passe qui se transmet vocalement aurait été préférable. Cela ne sera pas trop gênant dans une configuration fermée (la mienne, un serveur verrouillé vers un routeur qui sera tout autant), par contre dans le cadre de l'utilisation pour un utilisateur lambda itinérant et souvent inconscient cela pose question, tout comme le non support apparent d'une clé physique...

WireGuard coté serveur :

On se connecter en SSH et on installer la dernière version que l'on va trouver ici avec les commandes suivantes :

curl -OL https://github.com/WireGuard/wireguard-vyatta-ubnt/releases/download/1.0.20210606-1/e50-v2-v1.0.20210606-v1.0.20210424.deb
sudo dpkg -i e50-v2-v1.0.20210606-v1.0.20210424.deb

Attention à bien remplacer par la dernière version et faire attention car il existe des versions spécifiques à chaque modèle de routeur et pour chaque version de EdgeOS (v1 et v2).

Si on manque de place (df) on fait un show system image et on efface celle qui ne sert à rien après une mise à jour avec un delete system image. Et oui il y a du vécu.

Quand WireGuard est installé on va générer nos clés :

sudo wg genkey | tee /dev/tty | wg pubkey

Ce qui va nous donner deux clés, la première est la clé privée, la seconde la clé publique.

0GbmWkPkYB9y2s5aIaAxUrAPoSnsDFnuhHjRnujEsm8=
KsVzrtWPGWDbuCLPUyTsTL6pQOfiS+96VOXsMnPo+SI=

On sauvegarde ces clés au chaud et on passe à la configuration de l'interface CLI propre à EdgeOS (configure, commit, save et exit)

configure

On y associe un subnet privé, un port UDP et la clé privée :

set interfaces wireguard wg0 address 192.168.33.1/24 # Ici on choisit l'IP de notre serveur WireGuard
set interfaces wireguard wg0 listen-port 51833       # Ici le port UDP qu'il conviendra de redirigier si on est pas en Bridge ou DMZ...
set interfaces wireguard wg0 route-allowed-ips true  # Pour sortir de ce subnet....
set interfaces wireguard wg0 private-key 0GbmWkPkYB9y2s5aIaAxUrAPoSnsDFnuhHjRnujEsm8=

On va ensuite déclarer les pairs (peers) autorisés en associant notre interface à leur clé publique et une IP autorisée. 

set interfaces wireguard wg0 peer N4cuA0WPkMt+3hfidlemsI/VGcupv96NtrkwA/esf2E= allowed-ips 192.168.33.2/32
set interfaces wireguard wg0 peer u2w/+ZNI2RwbYTdft9yggPGnff8QexY9UjjvdvVf0gM= allowed-ips 192.168.33.3/32

On ajoute une règle sur le firewall (Il est également possible aussi de faire ça depuis l'interface du routeur)

set firewall name WAN_LOCAL rule 20 action accept
set firewall name WAN_LOCAL rule 20 protocol udp
set firewall name WAN_LOCAL rule 20 description 'WireGuard'
set firewall name WAN_LOCAL rule 20 destination port 51833

Et on termine par :

commit
save
exit

Il est bien sur possible de faire ça en plusieurs fois, mais dans ce cas là il ne faudra pas oublier de rentrer dans le CLI propre à EdgeOS (configure, commit, save et exit).

Si je fais un scan des ports coté WAN, je ne dois rien voir le seul port ouvert étant le 51833 en UDP.

WireGuard coté client

Le client peut être sous n'importe quel OS, dans mon cas ce sera Windows et on va faire la configuration manuellement (il y a moyen de préparer des fichiers de configuration à importer pour un déploiement conséquent). Plus haut on a ajouté la clé publique fournie par le client dans les pairs autorisés. Cette clé est propre à chaque tunnel défini coté client. Idem pour la clé privée du client que l'on reporte ci dessous, elle est crée lors de l'ajout d'un tunnel sur le client. Ensuite on renseigne le pair du client, c-a-d le serveur que l'on a créé plus haut, sa clé publique, les IP autorisées pour ce tunnel ainsi que l'IP ou le TLD du serveur.

[Interface]
PrivateKey = IIczTA5sdrdcg4+VQNnudslgnveoR5ZDD3ZyL0ZXonU=
ListenPort = 15092
Address = 192.168.33.2/32

[Peer]
PublicKey = KsVzrtWPGWDbuCLPUyTsTL6pQOfiS+96VOXsMnPo+SI=
AllowedIPs = 192.168.33.0/24
Endpoint = 69.69.69.69:51833
PersistentKeepalive = 25

Ensuite on active le tunnel et normalement à ce stade on doit pouvoir faire un ping sur l'IP LAN du routeur distant (notre serveur WireGuard) ainsi que les IP de son subnet pour peu que les routes inverses soient configurées.

Si sous Linux l'activation / désactivation d'un tunnel en CLI coule de source, il m'a fallut un peu chercher pour Windows. Mon but étant de permettre à une application de supervision d'éventuellement réactiver un tunnel cas de défaillance.

Donc pour activer un tunnel,  CMD en mode admin... (-h pour en savoir plus..) :

C:\>"C:\Program Files\WireGuard\wireguard.exe" /installtunnelservice "C:\Program Files\WireGuard\Data\Configurations\Nom du Tunnel.conf.dpapi"

Et pour le désactiver :

C:\>"C:\Program Files\WireGuard\wireguard.exe" /uninstalltunnelservice "Nom du Tunnel"

Pour information et pour les afficionados, on peut très bien installer un serveur WireGuard sous Windows, les explications sont ici, ce n'est pas officiellement supporté et ça a l'air bien plus compliqué.

Sauf que dans le cas qui me préoccupe je ne peux justement pas disposer des routes inverses pour une question de sécurité chez mon client. La seule IP autorisée sera l'IP LAN du routeur. Il faut donc que les services que je doit joindre me reconnaissent avec cette IP. Et c'ets ici qu'interviennent les IPTables.

IPTables

Pour utiliser les IPTables il n'y a rien à installer car cela fait partie de l'O/S. Ca tombe bien car sur ce routeur la place est limitée. Par contre il faut que l'IP Forwarding soit activé, on peut vérifier avec sysctl net.ipv4.ip_forward qui va nous répondre net.ipv4.ip_forward = 0 ou 1 si c'est activé.

Ensuite, toujours en SSH : 

sudo iptables -F
sudo iptables -F -t nat
sudo echo 1 >| /proc/sys/net/ipv4/ip_forward  # En cas de besoin....
sudo iptables -t nat -A  PREROUTING -p tcp -d  192.168.33.1 --dport 2525 -j DNAT --to 192.168.169.22:25
sudo iptables -t nat -A  PREROUTING -p tcp -d  192.168.33.1 --dport 8080 -j DNAT --to 192.168.150.20:80
sudo iptables -t nat  -A POSTROUTING -j MASQUERADE

Depuis le client on va faire pointer nos requetés sur la première IP de WireGuard à laquelle j'ai associé un serveur web sur 192.168.150.20 et un serveur SMTP sur 192.168.169.22. A noter que si le port de destination est bien sur le port sur lequel répond le service, le port source peut lui être identique ou défini différemment (surtout qu'en 80 on a l'interface du routeur...).

Maintenant, depuis mon client, le serveur web de destination répondra sur http://192.168.33.1:8080 et si je fais un telnet 192.168.33.1 25 j'obtiendrait la mire de mon serveur SMTP. Et ces deux derniers ne verront en IP source que l'IP LAN de mon routeur, donc une IP autorisée.

Mais on ne peut pas tout à fait aller dîner... En effet ces IPTables vont disparaitre  au premier redémarrage !

Persistance

Mon premier réflexe était d'utiliser le paquet iptables-persistent. Sauf que j'ai remarqué, que pour une raison que je n'explique pas, mais qui a certainement sa logique, il est impossible d'ajouter une règle au firewall (tout au moins depuis l'interface du routeur) dès lors que ce paquet est activé. Je vais donc créer un script qui se lancera au démarrage du routeur et que je pourrais désactiver au besoin... (si un barbu passe par la merci de me dire sil y a mieux à faire).

Sous EdgeOS on a un emplacement spécifique pour les scripts devant s'exécuter après le démarrage du routeur et de ses services : /config/scripts/post-config.d

sudo vi /config/scripts/post-config.d/myfwd

Et dans ce fichier on va insérer nos commande  :

#!/bin/bash
iptables -F
iptables -F -t nat
iptables -t nat -A PREROUTING -p tcp -d  192.168.33.1 --dport 2525 -j DNAT --to 192.168.169.22:25
iptables -t nat -A PREROUTING -p tcp -d  192.168.33.1 --dport 8080 -j DNAT --to 192.168.150.20:80
iptables -t nat -A POSTROUTING -j MASQUERADE

Ensuite on va rendre ce script exécutable :

chmod +x /config/scripts/post-config.d/myfwd

Mais, car il y a toujours un mais. Il se peut que la résolution DNS ne se fasse pas au lancement. Donc si vous devez obtenir l’adresse IP à partir d’un nom de domaine, vous devez utiliser dig que vous obtiendrez avec :

sudo apt-get install dnsutils

Ensuite il faudra modifier légèrement le script...

sudo IP_ADDR=$(dig +short smtp.mondomaine.com| awk 'NR==1') 
sudo iptables -t nat -A  PREROUTING -p tcp -d  192.168.33.1 --dport 2525 -j DNAT --to $IP_ADDR::25

Firewall

Attention : dès lors que l'on ajoute ces IPTables il ne sera plus possible de modifier les règles du firewall depuis l'interface, et comme l'interface qui ne fait que lancer des lignes de CLI, idem en CLI. Afin de pouvoir créer ou modifier des règles il faudra temporairement désactiver ce script et redémarrer. En ce qui me concerne je l'ai fait sauvagement en renommant le répertoire qui le contient :

cd /config/scripts
sudo mv post-config.d post-config.d.off

Pour le reste on laisse par défaut, mais on va tout de même éviter de laisser des ports ouverts. On commence par désactiver le service Ubiquiti Device Discovery qui expose en UDP/TCP le port 10001 :

configure
set service ubnt-discover-server disable
commit ; save 

On pourrait désactiver l'interface GUI et le SSH depuis le WAN. Pour ça il est possible de forcer sur l'IP LAN :

set service gui listen-address 192.168.0.1
set service ssh listen-address 192.168.0.1

Mais en fait ça ne m'intéresse pas car je veux que ce soit accessible également via WireGuad, et comme après avoir installé IPTables on ne peu plus utiliser le firewall intégré on va continuer à se servir d'IPTables pour blinder le port WAN, ici eth4 :

# On commence par tout fermer sur le port WAN
sudo iptables -A INPUT -i eth4 -j DROP
# On accepte le port UDP de Wireguard (à noter qu'il est possible de le restreindre à une IP ou un subnet avec -s)
sudo iptables -I INPUT -i eth4 -p udp --dport 51833 -j ACCEPT
# On une IP spécifique sur les ports 22/80/443
sudo iptables -I INPUT -i eth4 -p tcp -m tcp -s 82.65.19.160 --dports 22,80,443 -j ACCEPT

On ajoute au fichier de configuration cité plus haut et on fait un scan (avec ça par exemple) sur l'IP WAN afin de constater la fermeture effective. Il ne reste que l'ICMP et WireGuard en UDP. Si on souhaite encore renforcer la sécurité on peut aussi restreindre l'ICMP et le port UDP de Wireguard avec des IP sources... Le même scan depuis un client WireGuard continuera à présenter les mêmes ports que l'interface LAN.

Dans le fichier ci dessous j'ai donc mes règles DNAT, ensuite je ferme tout sur sur port WAN (eth4) et j'autorise depuis mon IP publique WG en UDP sur le port 51833, en TCP 22, 80, 443 et enfin l'ICMP pour pouvoir monitorer.

#!/bin/bash
iptables -F
iptables -F -t nat
iptables -t nat -A PREROUTING -p tcp -d  192.168.33.1 --dport 2525 -j DNAT --to 192.168.69.24:25
iptables -t nat -A PREROUTING -p tcp -d  192.168.33.1 --dport 1430 -j DNAT --to 192.168.69.24:143
iptables -t nat -A PREROUTING -p tcp -d  192.168.33.1 --dport 8080 -j DNAT --to 192.168.69.16:8000
iptables -t nat -A POSTROUTING -j MASQUERADE   

iptables -A INPUT -i eth4 -j DROP

iptables -I INPUT -i eth4 -p udp -s MyPublicIP --dport 51833 -j ACCEPT

iptables -I INPUT -i eth4 -p tcp -m multiport -s MyPublicIP --dports 22,80,443 -j ACCEPT

iptables -I INPUT -i eth4 -p icmp -s MyPublicIP -j ACCEPT

Et vu que je ne suis pas un grand fan de VI, le plus simple est de préparer le fichier en local, de l'uploader dans le répertoire utilisateur avec un SFTP graphique, et ensuite de le déplacer dans le répertoire idoine :

sudo mv myfwd /config/scripts/post-config.d/

Et de le rendre exécutable :

chmod +x /config/scripts/post-config.d/myfwd

Et pour vérifier les règles :

sudo iptables -L --line-numbers

Pour en savoir plus sur ces règles c'est ici, et vous allez trouver une petite bible dédiée aux EdgeRouter, et notamment pour tout ce qui concerne leur sécurité.

Voilà !

EDIT 25/09/2021: La bonne nouvelle c'es que Free a ajouté WireGuard dans ses Freebox et que ça fait tout le travail... Quand on a une Freebox bien sûr !

EDIT 04/11/2021: Ajustement du script pour EdgeOS.

EDIT 05/10/2022 : Ajustement IPTables pour le Firewall

Sources