Nota:

Configure un cluster activo/pasivo de alta disponibilidad pfSense con Corosync/Pacemaker en Oracle Cloud Infrastructure

Nota: Netgate u Oracle no soportan oficialmente pfSense en Oracle Cloud Infrastructure. Póngase en contacto con el equipo de soporte de pfSense antes de probar este tutorial.

Introducción

Oracle Cloud Infrastructure (OCI) es un juego de servicios en la nube complementarios que permiten crear y ejecutar una amplia gama de aplicaciones y servicios en un entorno alojado de alta disponibilidad. Oracle Cloud Infrastructure (OCI) ofrece funciones informáticas de alto rendimiento (como instancias de hardware físico) y capacidad de almacenamiento en una red virtual de superposición flexible accesible de forma segura desde su red local.

pfSense es un firewall y enrutador de código abierto y gratuito que también incluye gestión de amenazas unificada, equilibrio de carga y varias WAN, entre otros.

Objetivo

Configure el dispositivo virtual pfSense en una configuración activa/pasiva de alta disponibilidad con la ayuda de Corosync/Pacemaker en OCI.

Requisitos

Puntos a nota

Tarea 1: Instalación de dos dispositivos virtuales pfSense en Oracle Cloud

En este tutorial, utilizaremos dos dispositivos virtuales pfSense para alta disponibilidad. Puede configurar varios nodos en función de sus necesidades. Siga los pasos de este tutorial Instalación y configuración de pfSense en Oracle Cloud Infrastructure.

Nota:

Instalar los paquetes necesarios

  1. Los repositorios FreeBSD están desactivados por defecto. Para activar los repositorios FreeBSD, siga estos pasos:

    1. Defina FreeBSD: { enabled: yes } in /usr/local/etc/pkg/repos/FreeBSD.conf
    2. Defina FreeBSD: { enabled: yes } in /usr/local/share/pfSense/pkg/repos/pfSense-repo.conf
  2. Después de activar los repositorios FreeBSD, actualice el gestor de paquetes.

    Node1@ pkg update
    Node2@ pkg update
    

    Nota: Esta acción actualizará el gestor de paquetes y los metadatos del repositorio.

  3. Instale los siguientes cuatro paquetes necesarios para configurar el cluster de alta disponibilidad.

    1. Marcapasos
    2. Corosíncrono
    3. Crmsh
    4. CLI de OCI

    Ejecute los siguientes comandos para la instalación:

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

    Siga las instrucciones para completar la instalación.

Tarea 3: Configuración de Pacemaker/Corosync en las instancias

Configurar Corosync

  1. Cree un nuevo archivo de configuración de Corosync ejecutando el siguiente comando en ambas instancias.

    Node1@ touch /usr/local/etc/corosync/corosync.conf
    Node2@ touch /usr/local/etc/corosync/corosync.conf
    
  2. Pegue la siguiente configuración en el script de ambos nodos.

    Nota: Asegúrese de sustituir las direcciones IP en la lista de nodos.

    # 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    
    }
    

Configuración de Corosync

Si intenta iniciar Corosync ahora, fallará con el mensaje de error "No space left on device".

Activar disco RAM en ambos nodos

Corosync y Pacemaker se basan en el directorio /var para su tiempo de ejecución y, si realizó una instalación por defecto, el espacio disponible para /var es muy limitado. Debe configurar y utilizar la memoria (RAM) para los directorios /var y /tmp. También nos ayudará a aumentar el rendimiento.

  1. En la consola pfSense, navegue hasta Sistema, haga clic en Avanzado y, a continuación, haga clic en Varios.

    Menú de Ramdisk

  2. Desplácese hacia abajo hasta Ram Disk Settings y seleccione la casilla de control Use Ram Disks (Usar discos Ram).

  3. Introduzca el tamaño del disco RAM que desea asignar a los directorios /tmp y /var.

  4. Guarde la configuración. Se le pedirá que reinicie por primera vez que active el disco RAM. Posteriormente, podrá aumentar o disminuir el tamaño del disco RAM sobre la marcha.

    Configuración de Ramdisk

    Nota: Puesto que estamos utilizando discos Ram, en caso de un cierre del sistema, se perderán todos los archivos de /tmp y /var. Debemos configurar un script de inicio (archivo rc.d) que cree los directorios que Corosync y Pacemaker necesitan para funcionar correctamente.

  5. Abra el archivo /usr/local/etc/rc.d/corosync y agregue las siguientes líneas al código después de la línea 17 en ambos nodos.

    mkdir -p /var/lib/corosync
    mkdir -p /var/run/qb
    chmod 777 /var/run/qb
    
  6. Después de haber realizado los cambios, el Jle tendrá un aspecto similar a este:

    #!/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"
    

    Configuración de Corosync

Iniciar el servicio Corosync y Pacemaker en todos los nodos

Ahora podemos agregar corosync_enable=YES y pacemaker_enable=YES al archivo /etc/rc.conf. ejecute el siguiente comando en todos los nodos.

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

Nota:

Compruebe el estado del cluster

  1. Ahora que hay Pacemaker y Corosync en ejecución en todos los nodos, verifiquemos el estado del cluster. Ejecute el siguiente comando para verificar el estado:

    Node1@ crm status
    

    Estado corosíncrono

  2. Desactive Stonith por ahora, ya que no estamos cubriendo Stonith en este tutorial.

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

    Menú de Ramdisk

    Como puede ver en la imagen, el estado le indica que hay 2 nodos configurados y en línea.

    Nota:

    • Si no ve que ambos nodos están configurados y en línea como se muestra en la imagen, esto indica que sólo una instancia está configurada y en línea. Esto significa que los nodos no pueden comunicarse entre sí.
    • Para resolverlo, consulte pfSense y las listas de seguridad de Oracle Cloud para permitir el tráfico UDP e ICMP.

Tarea 4. Configuración de la CLI de Oracle Cloud Infrastructure

Necesitamos la CLI de OCI para mover y asociar la IP flotante virtual entre los nodos en el nivel de infraestructura. Ya hemos instalado la CLI de OCI anteriormente con otros paquetes. Ahora configuraremos la configuración. Queremos utilizar principales de instancia para autorizar nuestros comandos de la CLI. Puede obtener más información sobre los principales de instancia y la cli de OCI

Siga este blog y configure los principales de instancia de Oracle Cloud Infrastructure.

Configurar IP flotante virtual

En este tutorial, utilizaremos 192.0.2.3/29 como IP flotante virtual. No se puede configurar un latido IPaddr2 en pfSense que esté basado en FreeBSD. Si lo probamos de todos modos, devolverá un error "IP is not available", la IP del paquete es solo linux. En su lugar, configuraremos un latido de calor IPaddr.

  1. Abra /usr/local/lib/ocf/resource.d/heartbeat/IPaddr en el editor de archivos.

  2. Agregue algunas líneas de código que iniciarán la CLI de OCI para mover la IP de una vNIC a otra. Agregue las siguientes líneas de código después de la línea 584 en el método add_interface() del script.

  3. Asigne los valores node1vnic, node2vnic, vnicip y hostname en el script. Puede encontrar los OCID de vNIC en el menú Consola de Oracle Cloud, Recursos informáticos, Asociado 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
    
    

    Configuración de latido

  4. Para el nodo 1: en la consola de Oracle Cloud, vaya a Recursos informáticos, haga clic en pfSense-primary y, a continuación, haga clic en VNIC asociadas. Seleccione la vNIC principal y agregue una IP privada secundaria (igual que floating_IP en el script anterior).

    Vnic agregar nueva IP

  5. Para ambos nodos: en la consola pfSense, vaya a firewall y, a continuación, haga clic en IP virtuales y agregue un alias de IP (igual que floating_IP en el script anterior).

    pfSense IP virtual

Configurar latido

  1. En el shell pfSense, ejecute el siguiente comando en el nodo 1.

    crm configure primitive IP ocf:heartbeat:IPaddr params ip=192.0.2.3  cidr_netmask="29" nic=”vtnet0” op monitor interval="5s"
    
  2. En este tutorial, 192.0.2.3 es la IP flotante. Asegúrese de sustituir los valores de IP, máscara de red y nic por los valores. Debe crear un recurso de IP en el marcador.

    estado de marcapasos

Si ejecuta crm status ahora, verá dos nodos en línea y un recurso disponible que apunta a pfSense-primary. También puede ejecutar ipconfig vtnet0 para comprobar si la IP virtual está ahora asociada a la interfaz en el nodo principal.

Probar Failover

Estado Actual

Prueba de failover antes de

  1. Ejecute el siguiente comando para forzar un switchover:

    crm resource move IP pfSense-secondary.example.com  
    
  2. Ejecute el comando crm status y verá que el recurso de IP flotante ahora se mueve a pfSense-secondary.

  3. Compruebe los avachments de vNIC de la consola de Oracle Cloud de sus nodos; verá que la IP flotante ahora se ha movido al segundo nodo.

    Prueba de failover después de

    Nota: Si intenta cerrar ahora, el recurso pasará al estado parado, ya que no podrá averiguar qué nodo debe considerarse maestro, ya que pfSense necesita al menos un 50% de votos para asignar un maestro. Puesto que solo tenemos 2 nodos y uno de ellos está caído, Pacemaker no podrá establecer uno como maestro.

  4. Ejecute el siguiente comando para ignorar la política de votos del 50%:

    crm configure property no-quorum-policy=ignore
    
  5. Ahora pruebe un cierre y podrá ver el movimiento de IP flotante.

Tarea 5. Configuración de XLMRPC y pfsync

Queremos que nuestros nodos tengan un estado sincronizado si queremos tener un cluster realmente de alta disponibilidad; solo mover las IP no lo hará. Necesitamos configurar otro juego de vNIC en cada una de nuestras instancias para la sincronización.

Configurar interfaz de sincronización

  1. Para Ambos nodos: vaya a Compute, seleccione la instancia, abra VNIC asociadas y, a continuación, haga clic en crear vnic.

    Crear VNIC secundaria

  2. Una vez creada y conectada la vNIC, vaya a la consola pfSense, haga clic en interfaces y, a continuación, haga clic en Asignaciones y agregue la interfaz recientemente detectada.

    Interfaz pfSense

  3. Haga clic en la interfaz recién asignada y configure su configuración.

  4. Asigne la dirección IPv4 estática y la máscara de subred que hemos creado en el paso anterior en la consola de OCI.

    pfSense Interfaz de sincronización

  5. Haga clic en Guardar y aplique los cambios.

Configurar la alta disponibilidad en el nodo primario

  1. Vaya a la consola pfSense, haga clic en Sistema y, a continuación, haga clic en Sincronización de alta disponibilidad.
  2. Active la sincronización de estado de pfsync.
  3. Seleccione la interfaz de sincronización.
  4. Agregue la IP del nodo secundario.
  5. Configuración de sincronización de XMLRPC: agregue la IP del nodo secundario.
  6. Defina el nombre de usuario y la contraseña, y compruebe lo que desea sincronizar. pfSense Configuración de sincronización de alta disponibilidad
  7. Haga clic en Guardar y aplicar.

Configurar la alta disponibilidad en el nodo secundario

  1. Vaya a la consola pfSense, haga clic en Sistema y, a continuación, haga clic en Sincronización de alta disponibilidad.
  2. Active la sincronización de estado de pfsync.
  3. Seleccione la interfaz de sincronización.
  4. Agregue la IP del nodo primario.
  5. Haga clic en Guardar y aplicar.

Los estados de firewall se sincronizan entre ambos nodos y puede intentar agregar una regla de firewall en la instancia principal; verá que también aparece lo mismo en el nodo secundario. Ahora podemos probar el failover de nuevo con el cierre del sistema.

Agradecimientos

Autor - Mayank Kakani (Arquitecto de nube de OCI)

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre el producto, visite Oracle Help Center.