Aller au contenu
Freebox Ultra : Créer et configurer un serveur DNS depuis une machine virtuelle via FreeboxOS (Épisode 01)
  1. Posts/

Freebox Ultra : Créer et configurer un serveur DNS depuis une machine virtuelle via FreeboxOS (Épisode 01)

Fabien ALLAMANCHE
Auteur
Fabien ALLAMANCHE
Géomaticien @ Vienne Condrieu Agglomération
Sommaire
FreeboxOS & serveur DNS via Dnsmasq - Cet article fait partie d'une série.
Partie 1: Cet article

La possibilité de créer et de gérer des machines virtuelles (VM) directement depuis l’interface d’administration Freebox OS est l’une des fonctionnalités avancées les plus intéressantes pour les utilisateurs de Freebox Delta et Ultra. Cette option permet de transformer votre Freebox en véritable mini-serveur capable d’héberger un système d’exploitation distinct pour des usages variés.

Ici, ce sera pour la création d’un serveur de noms (serveur DNS) via l’outil DnsMasq.

L’objectif de cette article est de trouver une alternative à Pihole via DnsMasq, et éventuellement voir si on peut configurer DnsMasq afin qu’il joue aussi le rôle de bloqueur de publicité en filtrant les noms de domaine indésirables.

Vous retrouverez dans cette partie l’ensemble de la configuration de FreeboxOS pour l’installation d’une machine virtuelle.

Pour profiter pleinement de cette fonctionnalité, il est nécessaire d’installer un disque NVME sur votre Freebox Ultra.

FreeboxOS
#

Connexion à l’interface d’administration de la Freebox
#

Première étape : se connecter à l’interface d’administration de la Freebox, FreeboxOS.

Ouvrez votre navigateur Web préféré et rendez-vous sur :

img/01-freeboxos.png

Entrez vos identifiants (le mot de passe est défini lors de la première connexion ou via l’application Freebox).

Vous accéderez alors à l’interface d’administration nommée Freebox OS :

img/02-freeboxos.png

Création et paramétrage de la VM
#

Sur l’interface d’administration (FreeboxOS), en bas à droite, vous trouverez l’icône VMs :

img/03-freeboxos-vms-icon.png

Cette icône permet d’accèder à l’interface de gestions des VMs de votre Freebox :

img/04-freeboxos-vms-interface.png

Vous constaterez que j’ai déjà une VM sous Debian et celle-ci fait tourner Pihole. En effet, pour le moment, c’est cette VM qui a le rôle de serveur de noms sur mon infra réseau local.

L’objectif de cette article est de trouver une alternative à Pihole via DnsMasq, et éventuellement voir si on peut configurer DnsMasq afin qu’il joue aussi le rôle de bloqueur de publicité en filtrant les noms de domaine indésirables.

Création de la machine virtuelle
#

Dans l’interface de gestion des VMs, il est possible de créer sa VM avec des systèmes d’exploitation pré-installé parmi une liste :

img/05-freeboxos-vms-list.png

Mais on peut également créer sa VM grâce :

  • À une image ISO pour une installation classique en créant un disque virtuel (de la même façon que VirtualBox),
  • À une image de disque virtuel existante.

C’est cette troisième méthode que nous allons explorer car j’ai envie de monter mon serveur de noms sur un Rocky Linux 9, ce dernier n’étant pas disponible parmi la liste des distributions pré-installées.

Nous allons donc provisionner cette VM avec Cloud-init. Toutes ces étapes sont réalisées via FreeboxOS.

  1. Télécharger l’image de disque virtuel RockyLinux via l’interface de téléchargement FreeboxOS :
  2. Une fois téléchargé, copier le fichier Rocky-9-GenericCloud-Base.latest.aarch64.qcow2 dans le répertoire de votre choix sur votre Freebox. De mon côté, j’ai créé un répertoire /freebox/VMs/Dnsmasq.
    img/06-freeboxos-folder.png
  3. Ajout d’une VM :
    img/07-freeboxos-create-vm-add.png
  4. Sélection du disque virtuel :
    img/08-freeboxos-create-vm-select-disk.png
  5. Confirmation du disque virtuel :
    img/09-freeboxos-create-vm-confirm-disk.png
  6. Résumé de l’ajout :
    img/10-freeboxos-create-vm-summary.png

Pré-configuration via Cloud-init
#

Avant de lancer la machine, il est nécessaire de configurer le provisionnement cloud-init de celle-ci.

img/11-freeboxos-create-vm-cloud-init-conf.png

Qu’est-ce que Cloud-init ?
#

Cloud-Init était au départ un projet propre à Ubuntu. Il permettait à l’époque de configurer certains paramètres par défaut comme la langue, le nom d’hôte, les clés SSH, les points de montage, etc. Il s’agit désormais d’un véritable standard de l’industrie du cloud.

Comment ça fonctionne ?
#

Pour utiliser cloud-init, il faut au préalable créer un fichier de configuration cloud-config, dans la plupart des cas écrit en YAML. Ce fichier contient les directives qui seront exécutées lors du premier démarrage de l’instance. Il s’agit de créer un fichier de configuration (user-data) indiquant des paramètres à prendre en compte au premier démarrage.

Mon fichier cloud-config.yaml
#

# cloud-config.yaml
system_info:
  default_user:
    name: allfab    
    gecos: Fabien
    groups: wheel
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    shell: /bin/bash
    lock_passwd: true
    ssh_authorized_keys:
      - ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAFFxFS0K8uHnGFJErT2mRRbDDnOsccZEgzskxFUnokmqrXPhNxd0EJkpKSk0JJljSlugGfzfuwVw/6iYkwYRgfOTACnEon5wkDuGGetRLkB4V3zmcho0uMcnxZh0FQxrFkV13JEzJJQT4ovKRT/OoGmo6w1VJyTfE8H/kK1Zq6f/0ZASA== allfab@cloudinit-rockylinux
chpasswd:
  list: |
     root:Pa22worD
     allfab:Pa22word
  expire: False
disable_root: True
ssh_pwauth: False

Références :

Voici les principaux paramètres de ce fichier de configuration :

  • Ajout des utilisateurs et de la clé SSH :
    default_user:
      name: allfab    
      gecos: Fabien
      groups: wheel
      sudo: ["ALL=(ALL) NOPASSWD:ALL"]
      shell: /bin/bash
      lock_passwd: true
      ssh_authorized_keys:
        - ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAFFxFS0K8uHnGFJErT2mRRbDDnOsccZEgzskxFUnokmqrXPhNxd0EJkpKSk0JJljSlugGfzfuwVw/6iYkwYRgfOTACnEon5wkDuGGetRLkB4V3zmcho0uMcnxZh0FQxrFkV13JEzJJQT4ovKRT/OoGmo6w1VJyTfE8H/kK1Zq6f/0ZASA== allfab@cloudinit-rockylinux
    
    • Directive ssh_authorized_keys:

      Cette directive permet de définir une liste de clés SSH publiques qui sont autorisées à se connecter à la machine virtuelle.

      Génération d’une clé SSH :

      [allfab@dnsmasq ~]$  ssh-keygen -t ecdsa -b 521 -f /home/allfab/.ssh/cloudinit-rockylinux -C "allfab@cloudinit-rockylinux"
      Generating public/private ecdsa key pair.
      Enter passphrase (empty for no passphrase):
      Enter same passphrase again:
      Your identification has been saved in /home/allfab/.ssh/cloudinit-rockylinux
      Your public key has been saved in /home/allfab/.ssh/cloudinit-rockylinux.pub
      The key fingerprint is:
      SHA256:dvnarbkYYx/ELaycJXPqZjKpU7UCiLZNI7QL3LJZOaA allfab@cloudinit-rockylinux
      The key's randomart image is:
      +---[ECDSA 521]---+
      |                 |
      | ..              |
      |o.oo..           |
      |Eo==+ .   .+ .   |
      | o=*.. .S.=.B .  |
      | oo .  .oo.@ .   |
      |       . oO o    |
      |      . +ooB +   |
      |      .o =+ *o.  |
      +----[SHA256]-----+
      

      La clé SSH vient d’être générée. Notez bien la passphrase, ici Pa22word, qui va nous servir pour nous authentifer sur le serveur. On va retrouver la clé privé cloudinit-rockylinux ainsi que la clé publique cloudinit-rockylinux.pub. C’est le contenu de cette dernière que l’on insère dans notre fichier cloud-config.yaml.

      [allfab@dnsmasq ~]$ cat /home/allfab/.ssh/cloudinit-rockylinux.pub
      ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAFFxFS0K8uHnGFJErT2mRRbDDnOsccZEgzskxFUnokmqrXPhNxd0EJkpKSk0JJljSlugGfzfuwVw/6iYkwYRgfOTACnEon5wkDuGGetRLkB4V3zmcho0uMcnxZh0FQxrFkV13JEzJJQT4ovKRT/OoGmo6w1VJyTfE8H/kK1Zq6f/0ZASA== allfab@cloudinit-rockylinux
      

      Notez que c’est un exemple pour cet article. Vous êtes fortement invité à créer votre clé SSH et à changer sa passphrase pour une plus robuste.

On peut maintenant copier-coller cette configuration dans le champ cloud-ini user-data dans l’interface de pré-configuration !

Si vous avez fait une erreur de configuration dans le fichier et/ou si vous souhaitez changer des choses, il a fallu que je recommence l’opération de l’ajout de la VM à chaque fois en veillant à supprimer le fichier Rocky-9-GenericCloud-Base.latest.aarch64.qcow2 du répertoire /freebox/VMs/Dnsmasq.

Pensez bien à vous créer une copie de sauvegarde de votre fichier Rocky-9-GenericCloud-Base.latest.aarch64.qcow2 avant de lancer la VM. Auquel cas, il faudra re-télécharger le fichier pour repartir sur une machine saine. (Comprendre un fichier de disque virtuel Rocky-9-GenericCloud-Base.latest.aarch64.qcow2 non modifié par cloud-init.)

cloud-config.yaml générique de secours
#

Il s’avère que la plateforme de virtualisation de FreeboxOS est assez capricieuse. Si jamais le fichier cloud-config.yaml que je propose ne fonctionne pas.

Typiquement, vous n’arrivez pas à vous connecter via le couple d’identifiants utilisateur/mot de passe

Utilisez ce fichier de configuration sommaire. Cette configuration à l’air de fonctionner du premier coup :

#cloud-config
system_info:
  default_user:
    name: allfab
password: Pa22word
chpasswd: { expire: False }
ssh_pwauth: True

Boot de la VM
#

Démarrage de la VM et initialisation de la configuration cloud-init via le bouton Allumer 🚀 :

img/12-freeboxos-boot-vm.png

Pensez à cliquer sur le bouton Console afin de voir ce qu’il se passe sur la machine :

img/13-freeboxos-boot-vm.gif

Test d’identification sur la machine
#

Maintenant que la machine est installée, testons si la configuration est passée et si on a bien accès à celle-ci :

img/14-freeboxos-login-vm.gif

Configurer un bail DHCP
#

Je ne me suis pas trop attardé sur la configuration réseau de notre VM. C’est la Freebox et la plateforme de virtualisation qui se charge de lui attribuée une adresse IP.

On va la rendre statique en lui attribuant un bail DHCP afin que cette dernière ne change pas d’adresse IP au cours d’un rédémarrage intempestif ou autres opérations de maintenance.

On va lui adresser l’adresse IP 192.168.0.53 :

img/15-freeboxos-dhcp-lease-vm.gif

Post-installation de la VM
#

Mot de passe root
#

Si le fichier de configuration proposé à fonctionné, il n’est pas nécessaire d’exécuter cette étape.

Sinon, il faut configurer le mot de passe de l’utilisateur root :

img/16-freeboxos-change-root-passwd.png

Mise à jour système & installation de paquets
#

[allfab@dnsmasq ~]$ sudo dnf update -y
[allfab@dnsmasq ~]$ sudo dnf install -y vim-enhanced bind-utils curl wget git
FreeboxOS & serveur DNS via Dnsmasq - Cet article fait partie d'une série.
Partie 1: Cet article

Articles connexes