Remarque :

Configurer un cluster actif/passif haute disponibilité pfSense avec Corosync/Pacemaker sur Oracle Cloud Infrastructure

Remarque : pfSense n'est pas officiellement pris en charge sur Oracle Cloud Infrastructure par Netgate ou Oracle. Contactez l'équipe de support pfSense avant d'essayer ce tutoriel.

Introduction

Oracle Cloud Infrastructure (OCI) est un ensemble de services cloud complémentaires qui vous permettent de créer et d'exécuter un large éventail d'applications et de services dans un environnement hébergé hautement disponible. Oracle Cloud Infrastructure (OCI) offre des fonctionnalités de calcul (comme les instances matérielles physiques) et une capacité de stockage hautes performances sur un réseau virtuel superposé flexible et accessible de manière sécurisée à partir de votre réseau on-premise.

pfSense est un pare-feu et un routeur open source et gratuit disposant d'une gestion unifiée des menaces, d'un équilibrage de charge, de plusieurs réseaux WAN, etc.

Objectif

Configurez l'appliance virtuelle pfSense dans une configuration active/passive haute disponibilité à l'aide de Corosync/Pacemaker dans OCI.

Prérequis

Points à noter

Tâche 1 : installation de deux appliances virtuelles pfSense sur Oracle Cloud

Dans ce tutoriel, nous allons utiliser deux appliances virtuelles pfSense pour la haute disponibilité. Vous pouvez configurer plusieurs noeuds en fonction de vos besoins. Suivez les étapes de ce tutoriel Installation et configuration de pfSense sur Oracle Cloud Infrastructure.

Remarque :

Installer les packages obligatoires

  1. Les référentiels FreeBSD sont désactivés par défaut. Pour activer les référentiels FreeBSD, procédez comme suit :

    1. Définissez FreeBSD : { enabled: yes } in /usr/local/etc/pkg/repos/FreeBSD.conf
    2. Définissez FreeBSD : { enabled: yes } in /usr/local/share/pfSense/pkg/repos/pfSense-repo.conf
  2. Après avoir activé le référentiel FreeBSD, mettez à jour le gestionnaire de packages.

    Node1@ pkg update
    Node2@ pkg update
    

    Remarque : cette opération met à jour le gestionnaire de packages et les métadonnées de référentiel.

  3. Installez les quatre packages suivants requis pour configurer le cluster haute disponibilité.

    1. Pacemaker (homonymie)
    2. Corosync
    3. Crmsh (homonymie)
    4. OCI CLI

    Exécutez les commandes suivantes pour l'installation

    Node1@ pkg install pacemaker2 corosync2 crmsh devel/oci-cli
    Node2@ pkg install pacemaker2 corosync2 crmsh devel/oci-cli
    

    Suivez les invites pour terminer l'installation.

Tâche 3 : configurer Pacemaker/Corosync sur les instances

Configurer Corosync

  1. Créez un fichier de configuration Corosync en exécutant la commande suivante dans les deux instances.

    Node1@ touch /usr/local/etc/corosync/corosync.conf
    Node2@ touch /usr/local/etc/corosync/corosync.conf
    
  2. Collez la configuration suivante dans le script sur les deux noeuds.

    Remarque : veillez à remplacer vos adresses IP dans la liste des noeuds.

    # Please read the corosync.conf.5 manual page
    totem {
       version: 2
       crypto_cipher: none
       crypto_hash: none
       transport: udpu
    }
    logging {
       fileline: off
       to_logfile: yes
       to_syslog: yes
       logfile: /var/log/cluster/corosync.log
       debug: on
       timestamp: on
    logger_subsys {
       subsys: QUORUM
       debug: on
       }
    }
    nodelist {
       node {
           ring0_addr: 192.0.2.2 # make sure to replace with your IP
           nodeid: 1
           }
       node {
           ring0_addr: 192.0.2.5 # make sure to replace with your IP
           nodeid: 2
           }
       }
    quorum {
       # Enable and configure quorum subsystem (default: of
       # see also corosync.conf.5 and votequorum.5
       provider: corosync_votequorum    
    }
    

Configuration Corosync

Si vous essayez de démarrer Corosync maintenant, l'opération échoue avec le message d'erreur "No space left on device".

Activer le disque RAM sur les deux noeuds

Corosync et Pacemaker s'appuient sur le répertoire /var pour leur exécution. Si vous avez effectué une installation par défaut, l'espace disponible pour /var est très limité. Vous devez configurer et utiliser la mémoire (RAM) pour les répertoires /var et /tmp, ce qui nous aidera également à améliorer les performances.

  1. Dans la console pfSense, accédez à Système, cliquez sur Avancé, puis sur Divers.

    Menu Ramdisk

  2. Faites défiler la page jusqu'à Ram Disk Settings et cochez la case Use Ram Disks.

  3. Entrez la taille de disque RAM à allouer aux répertoires /tmp et /var.

  4. Enregistrez la configuration. Vous serez invité à redémarrer lors de la première activation du disque RAM. Plus tard, vous pourrez augmenter ou diminuer la taille du disque RAM lors de vos déplacements.

    Configuration de disque RAM

    Remarque : étant donné que nous utilisons des disques Ram, en cas d'arrêt du système, tous les fichiers dans /tmp et /var seront perdus. Nous devons configurer un script de démarrage (fichier rc.d) qui créera les répertoires dont Corosync et Pacemaker ont besoin pour fonctionner correctement.

  5. Ouvrez le fichier /usr/local/etc/rc.d/corosync et ajoutez les lignes suivantes au code après la ligne 17 sur les deux noeuds.

    mkdir -p /var/lib/corosync
    mkdir -p /var/run/qb
    chmod 777 /var/run/qb
    
  6. Après avoir effectué les modifications, le Jle ressemblera à ceci :

    #!/bin/sh
         # PROVIDE: corosync
         # REQUIRE: LOGIN FILESYSTEMS
         # KEYWORD: shutdown
         . /etc/rc.subr
         name="corosync"
         rcvar="corosync_enable"
         start_precmd="corosync_precmd"
         corosync_precmd()
         {
             if [ `${SYSCTL_N} kern.ipc.maxsockbuf` -lt 18874368 ]; then
                 err 3 "sysctl:kern.ipc.maxsockbuf must be at least 18874
             fi
             mkdir -p /var/lib/corosync
             mkdir -p /var/run/qb
             chmod 777 /var/run/qb
          }
         load_rc_config $name
         : ${corosync_enable:=YES}
         command="/usr/local/sbin/corosync"
         run_rc_command "$1"
    

    Paramètres Corosync

Démarrer le service Corosync et Pacemaker sur tous les noeuds

Nous pouvons désormais ajouter corosync_enable=YES et pacemaker_enable=YES au fichier /etc/rc.conf. Exécutez la commande suivante sur tous les noeuds.

Node1@ sysrc corosync_enable=YES
Node2@ sysrc corosync_enable=YES
Node1@ sysrc pacemaker_enable=YES
Node2@ sysrc pacemaker_enable=YES
Node1@ service corosync start
Node2@ service corosync start
Node1@ service pacemaker start
Node2@ service pacemaker start

Remarque :

Vérification du statut du cluster

  1. Maintenant que Pacemaker et Corosync sont en cours d'exécution sur tous les noeuds, vérifions le statut du cluster. Exécutez la commande suivante pour vérifier le statut :

    Node1@ crm status
    

    Statut corosynchrone

  2. Désactivez Stonith pour l'instant car nous ne couvrons pas Stonith dans ce tutoriel.

    Node1@ crm configure property stonith-enabled=false
    Node2@ crm configure property stonith-enabled=false
    

    Menu Ramdisk

    Comme vous pouvez le voir sur l'image, le statut indique que 2 noeuds sont configurés et en ligne.

    Remarque :

    • Si vous ne voyez pas que les deux noeuds sont configurés et en ligne comme indiqué dans l'image, cela signifie qu'une seule instance est configurée et est en ligne. Cela signifie que les nœuds ne sont pas en mesure de communiquer entre eux.
    • Pour résoudre ce problème, consultez les listes de sécurité pfSense et Oracle Cloud pour autoriser le trafic UDP et ICMP.

Tâche 4 : configuration de l'interface de ligne de commande Oracle Cloud Infrastructure

Nous avons besoin de l'interface de ligne de commande OCI pour déplacer et associer l'adresse IP flottante virtuelle entre les noeuds au niveau de l'infrastructure. Nous avons déjà installé l'interface de ligne de commande OCI précédemment avec d'autres packages. Désormais, nous allons configurer la configuration. Nous voulons utiliser des principaux d'instance pour autoriser nos commandes d'interface de ligne de commande. Vous pouvez en savoir plus sur les ID instance et les classes OCI.

Suivez ce blog et configurez les principaux d'instance Oracle Cloud Infrastructure.

Configurer l'adresse IP flottante virtuelle

Dans ce tutoriel, nous allons utiliser 192.0.2.3/29 comme IP flottante virtuelle. Nous ne pouvons pas configurer un signal d'activité IPaddr2 dans pfSense qui est basé sur FreeBSD. Si nous l'avons essayé de toute façon, il générera une erreur "IP is not available", le package IP est linux uniquement. Nous allons configurer un signal d'activité IPaddr à la place.

  1. Ouvrez /usr/local/lib/ocf/resource.d/heartbeat/IPaddr dans l'éditeur de fichiers.

  2. Ajoutez quelques lignes de code qui lanceront l'interface de ligne de commande OCI pour déplacer l'adresse IP d'une vNIC vers une autre. Ajoutez les lignes de code suivantes après la ligne 584 dans la méthode add_interface() du script.

  3. Affectez les valeurs node1vnic, node2vnic, vnicip et hostname dans le script. Vous pouvez trouver les OCID de votre carte vNIC dans le menu Console Oracle Cloud, Compute et Attaché vNICs.

    else
    ##### OCI vNIC variables
        server="`hostname -s`"
        node1vnic="<node1vnic>"
        node2vnic="<node2vnic>"
        vnicip="<floating_IP>"
        export LC_ALL=C.UTF-8
        export LANG=C.UTF-8
        touch /tmp/ip_switch_error.log
    ##### OCI/IPaddr Integration
        if [ $server = "<host_name>" ]; then
            /usr/local/bin/oci network vnic assign-private-ip --auth instance_principal --unassign-if-already-assigned --vnic-id $node1vnic  --ip-address $vnicip >/tmp/ip_switch_error.log 2>&1
        else
            /usr/local/bin/oci network vnic assign-private-ip --auth instance_principal --unassign-if-already-assigned --vnic-id $node2vnic  --ip-address $vnicip >/tmp/ip_switch_error.log 2>&1
        fi
    
    

    Configuration de signal d'activité

  4. Pour le noeud 1 : dans la console Oracle Cloud, accédez à Compute, puis cliquez sur pfSense-primary et sur VNIC attachées. Sélectionner la carte vNIC principale et ajouter une adresse IP privée secondaire (identique à floating_IP dans le script ci-dessus)

    VNIC - Ajouter une adresse IP

  5. Pour les deux noeuds : dans la console pfSense, accédez à firewall, puis cliquez sur Virtual IPs et ajoutez un alias IP (comme floating_IP dans le script ci-dessus).

    Adresse IP virtuelle pfSense

Configurer le signal d'activité

  1. Dans le shell pfSense, exécutez la commande suivante sur le noeud 1.

    crm configure primitive IP ocf:heartbeat:IPaddr params ip=192.0.2.3  cidr_netmask="29" nic=”vtnet0” op monitor interval="5s"
    
  2. Dans ce tutoriel, 192.0.2.3 est l'adresse IP flottante. Veillez à remplacer les valeurs ip, netmask et nic par vos valeurs. Cela devrait créer une ressource IP dans Pacemaker.

    état du stimulateur cardiaque

Si vous exécutez crm status maintenant, deux noeuds sont en ligne et une ressource disponible pointe vers pfSense-primary. Vous pouvez également exécuter ipconfig vtnet0 pour vérifier si l'adresse IP virtuelle est désormais associée à l'interface sur le noeud principal.

Basculement de test

Etat en cours

Test de basculement avant

  1. Exécutez la commande suivante pour forcer un basculement :

    crm resource move IP pfSense-secondary.example.com  
    
  2. Exécutez la commande crm status et vous verrez que la ressource IP flottante est maintenant déplacée vers pfSense-secondary.

  3. Vérifiez la disponibilité des cartes vNIC de la console Oracle Cloud pour vos noeuds. Vous pouvez constater que l'adresse IP flottante a été déplacée vers le deuxième noeud.

    Test de basculement après

    Remarque : si vous essayez de vous arrêter maintenant, la ressource passera à l'état Arrêté car elle ne sera pas en mesure de déterminer quel noeud considérer comme maître, car pfSense a besoin d'au moins 50 % de votes pour affecter un maître. Puisque nous n'avons que 2 nœuds et l'un d'entre eux est en panne, Pacemaker ne pourra pas en définir un comme maître.

  4. Exécutez la commande suivante pour ignorer la stratégie des 50 % de votes :

    crm configure property no-quorum-policy=ignore
    
  5. Maintenant, testez un arrêt et vous pouvez voir le déplacement Floating IP.

Tâche 5 : configurer XLMRPC et pfsync

Nous voulons que nos nœuds aient un état synchronisé si nous voulons avoir un cluster véritablement hautement disponible, le simple fait de déplacer l'IP ne va pas le faire. Nous devons configurer un autre ensemble de vNIC sur chacune de nos instances pour la synchronisation.

Configurer l'interface de synchronisation

  1. Pour les deux noeuds : accédez à Compute, sélectionnez l'instance, ouvrez VNIC attachées, puis cliquez sur créer une VNIC.

    Créer une carte vNIC secondaire

  2. Une fois la carte vNIC créée et attachée, accédez à la console pfSense, cliquez sur interfaces, puis sur Assignments et ajoutez l'interface nouvellement détectée.

    pfSense Interface

  3. Cliquez sur l'interface nouvellement affectée et configurez-la.

  4. Affectez l'adresse IPv4 statique et le masque de sous-réseau créés à l'étape précédente dans la console OCI.

    pfSense Interface de synchronisation

  5. Cliquez sur Enregistrer et appliquez les modifications.

Configurer la haute disponibilité sur le noeud principal

  1. Accédez à la console pfSense, cliquez sur Système, puis sur Synchronisation haute disponibilité.
  2. Activez la synchronisation d'état pfsync.
  3. Choisissez l'interface de synchronisation.
  4. Ajoutez l'adresse IP du noeud secondaire.
  5. Configuration de synchronisation XMLRPC : ajoutez l'adresse IP du noeud secondaire.
  6. Définissez le nom d'utilisateur et le mot de passe et vérifiez ce que vous voulez synchroniser. Configuration de synchronisation HA pfSense
  7. Cliquez sur Enregistrer et appliquer.

Configurer la haute disponibilité sur le noeud secondaire

  1. Accédez à la console pfSense, cliquez sur Système, puis sur Synchronisation haute disponibilité.
  2. Activez la synchronisation d'état pfsync.
  3. Choisissez l'interface de synchronisation.
  4. Ajoutez l'adresse IP du noeud principal.
  5. Cliquez sur Enregistrer et appliquer.

Les états du pare-feu sont synchronisés entre les deux noeuds et vous pouvez essayer d'ajouter une règle de pare-feu sur l'instance principale. Le même message apparaîtra également sur le noeud secondaire. Nous pouvons maintenant essayer de tester le basculement avec un arrêt du système.

Remarques

Auteur - Mayank Kakani (architecte OCI Cloud)

Ressources de formation supplémentaires

Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à d'autres contenus de formation gratuite sur le canal Oracle Learning YouTube. En outre, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour consulter la documentation du produit, visitez le site Oracle Help Center.